ATT&CK学习笔记
- Published on
目录
前言知识
- 威胁情报:一般为网络流量中或者操作系统上观察到的能高度表明计算机被入侵的痕迹,例如某病毒的Hash值、服务器的IP地址等等。简单来说,威胁情报就像是当计算机被入侵时所表现出来的某种特征,我们将这些威胁情报搜集起来整理成库,当计算机再次表现出库中的某些特征的时候我们就可确定计算机已经被入侵了,这样我们可以制定更好的安全策略来规避以上问题。
- 威胁情报能够帮助我们指定更好的安全策略,而且威胁情报信息量的多少也能影响最终防护效果,但威胁情报并不能表达攻击者如何与受害系统交互,且只能表示是否受害而无法体现其过程。 因此,为了解决上述问题,ATT&CK模型也就油然而生了。
- 标准化语言和结构: 在网络安全领域,缺乏一种标准化的语言和结构来描述攻击者的战 术和技术。ATT&CK框架提供了这样一种结构,使安全专业人员能够更清晰、更一致地描述和 理解攻击行为。
- 深入理解攻击手法: ATT&CK框架的详细技术部分使安全团队能够更深入地了解攻击者的行为模式。通过了解攻击者可能采取的各种技术和方法,组织可以更好地识别攻击并加强其防御措施。
- 增强防御策略: ATT&CK框架帮助组织更好地了解攻击者的思维方式和行动方式,从而能够制定更有效的防御策略。通过对战术和技术的理解,组织可以更有针对性地改进其安全措施,以防范各种威胁。
- 信息共享和合作: ATT&CK框架提供了一个通用的语言,使不同组织之间可以更容易地共享关于攻击行为和防御措施的信息。这种信息共享和合作有助于整个安全社区更好地应对不断变化的威胁环境。
定义
ATT&CK(Adversarial Tactics, Techniques, and Common Knowledge),是一个由MITRE公司开发的开源框架,用于描述和分类黑客攻击的战术、技术和常见知识。该框架包含了各种攻击者可能使用的技术和方法,包括渗透测试、间谍活动、勒索软件和其他恶意软件攻击等。ATT&CK框架将这些攻击方法按照攻击者的行为分为不同的阶段,包括初始访问、执行、持久化、凭证访问、发现、横向移动、收集、指令与控制与漏洞利用等。通过使用ATT&CK框架,安全专业人员可以更好地了解黑客攻击的行为模式,并采取相应的防御措施,以保护企业和组织的网络和系统安全。
目前ATT&CK模型由三部分组成:
- PRE-ATT&CK:攻击前的准备,例如优先级定义、目标选择、信息收集、发现脆弱点、攻击性利用开发平台,建立和维护基础设施、人员的开发、建立能力和分段能力等。
- Enterprise:攻击时的部分已知技术手段,例如访问初始化、执行、常驻、提权、防御规避、访问凭证、发现、横向移动、收集、数据获取、命令和控制等。
- Mobile:移动端的部分已知技术手段、移动框架和Enterprise类似,只是适用的平台不同。
战术详解
一、 侦察
攻击者在入侵某一企业之前,会先收集一些有用的信息,用来规划以后的行动。侦察包括攻击者主动或被动收集一些用于锁定攻击目标的信息。此类信息可能包括受害组织、基础设施或员工的详细信息。攻击者也可以在攻击生命周期的其他阶段利用这些信息来协助进行攻击,例如使用收集的信息来计划和执行初始访问,确定入侵后的行动范围和目标优先级,或者推动进一步的侦察工作。
1. 主动扫描
IP扫描
介绍:攻击者可能会扫描受害者的 IP 地址块,以收集可用于锁定目标的信息。公共 IP 地址可以按块或按顺序地址范围分配给各组织。反间谍者可以通过扫描 IP 块来收集受害者网络信息,如哪些 IP 地址正在使用,以及分配给这些地址的主机的详细信息。扫描范围从简单的 ping
(ICMP 请求和响应)到可能通过服务器横幅或其他网络工件揭示主机软件/版本的更细致扫描。这些扫描信息可能揭示其他形式的侦察(例如:搜索开放网站/域名或搜索开放技术数据库)、建立运行资源(例如:开发能力或获取能力)和/或初始访问(例如:外部远程服务)的机会。
预防措施:由于这种技术是基于企业防御和控制范围之外的行为,因此无法通过预防性控制措施轻松缓解。
检测:监控网络数据,查找不常见的数据流。
论文:Identifying dynamic IP address blocks serendipitously through background scanning traffic
漏洞扫描
介绍:敌方可能会扫描受害者,查找可在锁定目标时使用的漏洞。漏洞扫描通常检查目标主机/应用程序的配置(例如:软件和版本)是否可能与敌方可能寻求使用的特定漏洞利用目标一致。这些扫描还可能包括更广泛的尝试,以收集受害者主机信息,用于识别更常见的已知可利用漏洞。漏洞扫描通常会通过服务器标语、监听端口或其他网络工件收集运行软件和版本号。这些扫描信息可能会揭示其他形式的侦察(例如:搜索开放网站/域名或搜索开放技术数据库)、建立运行资源(例如:开发能力或获取能力)和/或初始访问(例如:利用面向公众的应用程序)的机会。
预防措施:由于这种技术是基于企业防御和控制范围之外的行为,因此无法通过预防性控制措施轻松缓解。
检测:监控和分析与不遵循预期协议标准和流量的协议相关的流量模式和数据包检查(例如,不属于既定流量的无关数据包、无偿或异常流量模式、异常语法或结构)。考虑与进程监控和命令行相关联,以检测与流量模式相关的异常进程执行和命令行参数(例如,监控使用通常不启动相关协议连接的文件的异常情况)。监控网络数据,查找不常见的数据流。正常情况下没有网络通信或从未见过的利用网络的进程是可疑的。
论文:Vulnerabilities Mapping based on OWASP-SANS: a Survey for Static Application Security Testing (SAST)
字表扫描
介绍:攻击者可使用暴力破解和爬行技术反复探测基础设施。虽然这种技术采用的方法与暴力破解类似,但其目标是识别内容和基础设施,而不是发现有效凭证。这些扫描中使用的字表可能包含通用、常用的名称和文件扩展名,也可能包含特定软件的专用术语。对手还可以使用从其他侦察技术(例如:收集受害者组织信息或搜索受害者拥有的网站)收集到的数据创建自定义的、针对特定目标的字词列表。例如,敌方可能会使用 Dirb
、DirBuster
和 GoBuster
等网络内容发现工具以及通用或自定义字表来枚举网站的页面和目录。这可以帮助他们发现可能成为进一步行动目标的旧的、有漏洞的页面或隐藏的管理门户(例如:利用面向公众的应用程序或暴力破解)。一旦发现存储对象,对手可能会利用云存储数据访问有价值的信息,这些信息可被外泄或用于提升权限和横向移动。
预防措施:删除或禁止访问任何未明确要求对外提供的系统、资源和基础设施;由于这种技术是基于企业防御和控制范围之外的行为,因此无法通过预防性控制措施轻松缓解。
检测:监控可能表明存在扫描的可疑网络流量,如来自单一来源的大量流量(特别是当已知来源与敌方/僵尸网络有关时)。
2.收集受害者宿主信息
硬件
介绍:敌人可能会收集有关受害者的主机硬件的信息,这些信息可以在瞄准过程中使用。关于硬件基础设施的信息可以包括各种细节,例如特定主机上的类型和版本,以及可能指示添加防御保护的附加组件的存在(例如:卡/生物识别读取器、专用加密硬件等)。敌人可以通过各种方式收集这些信息,例如通过主动扫描(例如:主机名、服务器横幅、用户代理字符串)或网络钓鱼获取信息进行直接收集。敌人也可能危害网站,然后包括旨在从访问者那里收集主机信息的恶意内容。有关硬件基础设施的信息也可能通过在线或其他可访问的数据集(例如:招聘信息、网络地图、评估报告、简历或购买发票)暴露给对手。收集这些信息可能会揭示其他形式的侦察(例如:搜索开放网站/域或搜索开放技术数据库)、建立作战资源(例如:开发能力或获得能力)和/或初始访问(例如:破坏硬件供应链或硬件增加)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:互联网扫描仪可以用于寻找与恶意内容相关联的模式,该恶意内容被设计为从访问者收集主机硬件信息。这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现。检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
软件
介绍:敌人可能会收集有关受害者主机软件的信息,这些信息可以在瞄准过程中使用。有关已安装软件的信息可能包括各种详细信息,如特定主机上的类型和版本,以及可能表明添加了防御保护的其他组件的存在(例如:防病毒、SIEM等)。敌人可以通过各种方式收集这些信息,例如通过主动扫描(例如:监听端口、服务器横幅、用户代理字符串)或网络钓鱼获取信息进行直接收集。敌人也可能危害网站,然后包括旨在从访问者那里收集主机信息的恶意内容。有关已安装软件的信息也可能通过在线或其他可访问的数据集(例如:招聘信息、网络地图、评估报告、简历或购买发票)暴露给对手。收集这些信息可能会揭示其他形式的侦察(例如:搜索开放网站/域或搜索开放技术数据库)、建立作战资源(例如:开发能力或获得能力)和/或初始访问(例如:供应链妥协或外部远程服务)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:互联网扫描仪可以用于寻找与恶意内容相关联的模式,该恶意内容被设计为从访问者收集主机软件信息。这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现。检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
固件
介绍:敌人可以收集关于受害者的主机固件的信息,这些信息可以在瞄准过程中使用。关于主机固件的信息可以包括各种细节,例如特定主机上的类型和版本,这些细节可以用于推断关于环境中的主机的更多信息(例如:配置、用途、使用年限/补丁级别等)。敌人可以通过各种方式收集这些信息,例如通过网络钓鱼获取信息的直接启发。有关主机固件的信息只能通过在线或其他可访问的数据集(例如:招聘信息、网络地图、评估报告、简历或购买发票)暴露给对手。收集这些信息可能会揭示其他形式的侦察(例如:搜索开放网站/域或搜索开放技术数据库)、建立作战资源(例如:开发能力或获得能力)和/或初始访问(例如:供应链泄露或利用面向公众的应用程序)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
客户端配置
介绍:敌人可以收集关于受害者的客户端配置的信息,这些信息可以在瞄准过程中使用。关于客户端配置的信息可以包括各种细节和设置,包括操作系统/版本、虚拟化、体系结构(例如:32或64位)、语言和/或时区。敌人可以通过各种方式收集这些信息,例如通过主动扫描(例如:监听端口、服务器横幅、用户代理字符串)或网络钓鱼获取信息进行直接收集。敌人也可能危害网站,然后包括旨在从访问者那里收集主机信息的恶意内容。关于客户端配置的信息也可能通过在线或其他可访问的数据集(例如:招聘信息、网络地图、评估报告、简历或购买发票)暴露给对手。收集这些信息可能会揭示其他形式的侦察(例如:搜索开放网站/域或搜索开放技术数据库)、建立作战资源(例如:开发能力或获得能力)和/或初始访问(例如:供应链妥协或外部远程服务)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:互联网扫描仪可以用于寻找与恶意内容相关联的模式,该恶意内容被设计为从访问者收集客户端配置信息。这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现。检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
3.收集受害者身份信息
资格证书
介绍:敌人可能会收集可在瞄准过程中使用的凭证。对手收集的账户凭证可能是与目标受害者组织直接相关的凭证,或者试图利用用户在个人和商业账户中使用相同密码的趋势。敌人可以通过各种方式从潜在受害者那里收集凭据,例如通过网络钓鱼获取信息的直接启发。对手也可能危害网站,然后添加旨在从访问者那里收集网站验证cookie的恶意内容。凭据信息也可能通过泄露到在线或其他可访问的数据集(例如:搜索引擎、漏洞转储、代码存储库等)而暴露给对手。敌人也可能从暗网或其他黑市购买凭证。最后,在使用基于带外通信的多因素认证(MFA)的情况下,对手可能会损害服务提供商以获得对MFA代码和一次性密码(OTP)的访问。收集这些信息可能会发现其他形式的侦察(例如:搜索开放网站/域或网络钓鱼信息)、建立运营资源(例如:泄露账户)和/或初始访问(例如:外部远程服务或有效账户)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
电子邮件地址
介绍:敌人可能会收集电子邮件地址,以便在锁定目标时使用。即使存在内部实例,组织也可能拥有面向公众的电子邮件基础结构和员工地址。敌人可以很容易地收集电子邮件地址,因为它们可以通过在线或其他可访问的数据集(例如:社交媒体或搜索受害者所有的网站)随时获取和暴露。电子邮件地址也可以通过更主动的方式(即主动扫描)枚举,例如探测和分析来自身份验证服务的响应,这些响应可能揭示系统中的有效用户名。例如,对手可以通过查询各种公开可用的API端点(如autodiscover
和GetCredentialType
)来枚举Office 365环境中的电子邮件地址。收集这些信息可能会发现其他形式的侦察机会(例如:搜索开放网站/域或网络钓鱼获取信息)、建立运营资源(例如:电子邮件帐户)和/或初始访问(例如:通过外部远程服务进行网络钓鱼或暴力攻击)。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:监控可能指示探测电子邮件地址和/或用户名的可疑网络流量,例如源自单个来源的大量/迭代的身份验证请求(尤其是在已知来源与对手/僵尸网络相关联的情况下)。分析web元数据还可能揭示可归因于潜在恶意活动的工件,例如referer或用户代理字符串HTTP/S字段。
员工姓名
介绍:敌人可能会收集员工姓名,以便在锁定目标时使用。员工姓名可用于获取电子邮件地址,并帮助指导其他侦察工作和/或制作更可信的诱饵。敌人可以很容易地收集员工的姓名,因为他们可以通过在线或其他可访问的数据集(例如:社交媒体或搜索受害者所有的网站)随时获得并暴露出来。收集这些信息可能会发现其他形式的侦察(例如:搜索开放网站/域或网络钓鱼信息)、建立运营资源(例如:泄露账户)和/或初始访问(例如:网络钓鱼或有效账户)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
4.收集受害者网络信息
域属性
介绍:敌人可以收集有关受害者的网络域的信息,这些信息可以在瞄准过程中使用。关于域名及其财产的信息可能包括各种细节,包括受害者拥有的域名以及管理数据(例如:姓名、注册商等)和更直接的可操作信息,如联系人(电子邮件地址和电话号码)、企业地址和名称服务器。敌人可以通过各种方式收集这些信息,例如通过主动扫描或网络钓鱼进行直接收集。有关受害者域及其财产的信息也可能通过在线或其他可访问的数据集(例如:WHOIS)暴露给对手。在使用第三方云提供商的情况下,这些信息也可能通过公共可用的API端点公开,如Office 365环境中的GetUserRealm
和autodiscover
。收集这些信息可能会发现其他形式的侦察机会(例如:搜索开放的技术数据库、搜索开放的网站/域或网络钓鱼获取信息)、建立运营资源(例如:获取基础设施或破坏基础设施)和/或初始访问(例如:网络钓鱼)。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
域名服务器
介绍:敌人可能会收集有关受害者DNS的信息,这些信息可以在瞄准过程中使用。DNS信息可以包括各种细节,包括注册的名称服务器以及概述目标子域、邮件服务器和其他主机的寻址的记录。DNS、MX、TXT和SPF记录也可能揭示第三方云和SaaS提供商的使用情况,如Office 365、G Suite、Salesforce或Zendesk。对手可以通过各种方式收集这些信息,例如通过DNS/被动DNS查询或以其他方式收集详细信息。DNS信息也可能通过在线或其他可访问的数据集(例如:搜索开放技术数据库)暴露给对手。收集这些信息可能会揭示其他形式的侦察(例如:搜索开放的技术数据库、搜索开放的网站/域或主动扫描)、建立运营资源(例如:获取基础设施或破坏基础设施)和/或初始访问(例如:外部远程服务)的机会。
预防措施:预防性控制无法轻易缓解这种情况,因为它是基于企业防御和控制范围之外的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
网络信任依赖项
介绍:敌人可以收集关于受害者的网络信任依赖性的信息,这些信息可以在瞄准过程中使用。关于网络信任的信息可以包括各种细节,包括已经连接(并可能提升)网络访问的第二或第三方组织/域(例如:托管服务提供商、承包商等)。敌人可以通过各种方式收集这些信息,例如通过网络钓鱼获取信息的直接启发。有关网络信任的信息也可能通过在线或其他可访问的数据集(例如:搜索开放技术数据库)暴露给对手。收集这些信息可能会揭示其他形式的侦察(例如:主动扫描或搜索开放网站/域)、建立运营资源(例如:获取基础设施或破坏基础设施)和/或初始访问(例如:可信关系)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
网络拓扑
介绍:敌人可以收集关于受害者的网络拓扑的信息,这些信息可以在瞄准过程中使用。关于网络拓扑的信息可以包括各种细节,包括面向外部和内部网络环境的物理和/或逻辑布置。该信息还可以包括关于网络设备(网关、路由器等)和其他基础设施的细节。敌人可以通过各种方式收集这些信息,例如通过主动扫描或网络钓鱼进行直接收集。有关网络拓扑的信息也可能通过在线或其他可访问的数据集(例如:搜索受害者拥有的网站)暴露给对手。收集这些信息可能会揭示其他形式的侦察(例如:搜索开放的技术数据库或搜索开放的网站/域)、建立运营资源(例如:获取基础设施或破坏基础设施)和/或初始访问(例如:外部远程服务)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
IP地址
介绍:敌人可能会收集受害者的IP地址,以便在锁定目标时使用。公共IP地址可以按块或一系列顺序地址分配给组织。关于所分配的IP地址的信息可以包括各种细节,例如正在使用哪些IP地址。IP地址还可以使对手能够获得关于受害者的其他细节,例如组织规模、物理位置、互联网服务提供商,以及他们面向公众的基础设施的托管地点/方式。敌人可以通过各种方式收集这些信息,例如通过主动扫描或网络钓鱼进行直接收集。关于分配的IP地址的信息也可能通过在线或其他可访问的数据集(例如:搜索开放技术数据库)暴露给对手。收集这些信息可能会揭示其他形式的侦察(例如:主动扫描或搜索开放网站/域)、建立运营资源(例如:获取基础设施或破坏基础设施)和/或初始访问(例如:外部远程服务)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
网络安全设备
介绍:敌人可能会收集有关受害者网络安全设备的信息,这些信息可以在瞄准过程中使用。关于网络安全设备的信息可能包括各种细节,例如部署的防火墙、内容过滤器和代理/堡垒主机的存在和细节。敌人还可以针对关于基于受害者网络的入侵检测系统(NIDS)或与防御网络安全操作相关的其他设备的信息。敌人可以通过各种方式收集这些信息,例如通过主动扫描或网络钓鱼进行直接收集。有关网络安全设备的信息也可能通过在线或其他可访问的数据集(例如:搜索受害者拥有的网站)暴露给对手。收集这些信息可能会揭示其他形式的侦察(例如:搜索开放的技术数据库或搜索开放的网站/域)、建立作战资源(例如:开发能力或获得能力)和/或初始访问(例如:外部远程服务)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
5.收集受害者组织信息
确定物理位置
介绍:敌人可能会收集受害者的物理位置,以便在瞄准过程中使用。关于目标组织的物理位置的信息可以包括各种细节,包括关键资源和基础设施所在的位置。实际位置也可以表明受害者在什么法律管辖权和/或当局内活动。敌人可以通过各种方式收集这些信息,例如通过网络钓鱼获取信息的直接启发。目标组织的物理位置也可能通过在线或其他可访问的数据集(例如:搜索受害者拥有的网站或社交媒体)暴露给对手。收集这些信息可能会揭示其他形式的侦察(例如:网络钓鱼获取信息或搜索开放网站/域)、建立运营资源(例如:开发能力或获取能力)和/或初始访问(例如:互联网钓鱼或硬件添加)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
业务关系
介绍:敌人可能会收集有关受害者商业关系的信息,这些信息可以在瞄准过程中使用。关于组织的业务关系的信息可能包括各种细节,包括已连接(并可能提升)网络访问的第二或第三方组织/域(例如:托管服务提供商、承包商等)。这些信息还可能揭示受害者的硬件和软件资源的供应链和运输路径。敌人可以通过各种方式收集这些信息,例如通过网络钓鱼获取信息的直接启发。有关商业关系的信息也可能通过在线或其他可访问的数据集(例如:社交媒体或搜索受害者所有的网站)暴露给对手。收集这些信息可能会揭示其他形式的侦察(例如:网络钓鱼或搜索开放网站/域)、建立运营资源(例如:建立账户或泄露账户)和/或初始访问(例如:供应链泄露、驾车泄露或可信关系)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
识别业务时间
介绍:敌人可能会收集有关受害者商业节奏的信息,这些信息可以在瞄准过程中使用。有关组织业务节奏的信息可能包括各种细节,包括一周中的运营时间/天数。该信息还可以揭示受害者的硬件和软件资源的购买和运输的时间/日期。敌人可以通过各种方式收集这些信息,例如通过网络钓鱼获取信息的直接启发。有关业务节奏的信息也可能通过在线或其他可访问的数据集(例如:社交媒体或搜索受害者拥有的网站)暴露给对手。收集这些信息可能会发现其他形式的侦察(例如:网络钓鱼或搜索开放网站/域)、建立运营资源(例如:建立账户或泄露账户)和/或初始访问(例如:供应链泄露或可信关系)的机会
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
确定角色
介绍:敌人可能会收集有关受害者组织内的身份和角色的信息,这些信息可以在瞄准过程中使用。有关业务角色的信息可能会揭示各种有针对性的细节,包括关键人员的可识别信息以及他们可以访问的数据/资源。对手可以通过各种方式收集这些信息,例如通过网络钓鱼获取信息。有关商业角色的信息也可能通过在线或其他可访问的数据集(例如:社交媒体或搜索受害者拥有的网站)暴露给对手。收集这些信息可能会发现其他形式的侦察(例如:网络钓鱼获取信息或搜索开放网站/域)、建立运营资源(例如:建立账户或泄露账户)和/或初始访问(例如:互联网钓鱼)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
6.信息网络钓鱼
网络钓鱼服务
介绍:敌人可能会通过第三方服务发送鱼叉式网络钓鱼消息,以获取可在瞄准过程中使用的敏感信息。鱼叉式网络钓鱼是一种试图诱骗目标泄露信息、经常是凭据或其他可操作信息的行为。信息的网络钓鱼经常涉及社会工程技术,例如冒充有理由收集信息的来源(例如:建立账户或泄露账户)和/或发送多条看似紧急的消息。所有形式的鱼叉式网络钓鱼都是针对特定个人、公司或行业的电子社会工程。在这种情况下,对手通过各种社交媒体服务、个人网络邮件和其他非企业控制的服务发送消息。与企业相比,这些服务更有可能具有不那么严格的安全策略。与大多数鱼叉式网络钓鱼一样,目标是与目标建立融洽的关系,或以某种方式获得目标的兴趣。对手可能会创建虚假的社交媒体账户,并向员工发送潜在工作机会的信息。这样做可以为询问有关服务、政策和环境信息提供合理的理由。敌人也可能使用以前侦察工作中的信息(例如:社交媒体或搜索受害者拥有的网站)来制造有说服力和可信的诱饵。
预防措施:可以对用户进行培训,以识别社会工程技术和鱼叉式网络钓鱼企图。
检测:监控社交媒体流量中的可疑活动,包括请求信息的消息以及异常文件或数据传输(尤其是涉及未知或其他可疑账户的信息)。这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现。检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间;监控和分析与不遵循预期协议标准和流量的协议相关的流量模式和数据包检查(例如,不属于已建立流量的无关数据包、无端或异常流量模式、异常语法或结构)。考虑与进程监控和命令行的相关性,以检测异常进程执行和与流量模式相关的命令行参数(例如,监控使用文件时的异常情况,这些文件通常不会启动相应协议的连接);监控网络数据中不常见的数据流。使用网络的进程通常不具有网络通信或以前从未见过,这些进程是可疑的。
网络钓鱼附件
介绍:敌人可能会发送带有恶意附件的鱼叉式网络钓鱼消息,以获取可在瞄准过程中使用的敏感信息。鱼叉式网络钓鱼是一种试图诱骗目标泄露信息、经常是凭据或其他可操作信息的行为。信息的网络钓鱼经常涉及社会工程技术,例如冒充有理由收集信息的来源(例如:建立账户或泄露账户)和/或发送多条看似紧急的消息。所有形式的鱼叉式网络钓鱼都是针对特定个人、公司或行业的电子社会工程。在这种情况下,对手会将文件附加到鱼叉式网络钓鱼电子邮件中,通常依靠收件人填充信息然后返回文件。鱼叉式网络钓鱼电子邮件的文本通常试图给出一个合理的理由来说明为什么应该填写该文件,例如向业务伙伴索取信息。敌人也可能使用以前侦察工作中的信息(例如:搜索开放网站/域或搜索受害者拥有的网站)来制造有说服力和可信的诱饵。
预防措施:使用反欺骗和电子邮件身份验证机制,根据发件人域的有效性检查(使用SPF)和邮件的完整性(使用DKIM)过滤邮件。在组织内启用这些机制(通过DMARC等策略)可以使收件人(组织内和跨域)执行类似的消息过滤和验证;可以对用户进行培训,以识别社会工程技术和鱼叉式网络钓鱼企图。
检测:监控可疑的电子邮件活动,例如多个帐户接收来自一个不寻常/未知发件人的消息。基于DKIM+SPF或邮件头分析的过滤可以帮助检测电子邮件发件人何时被欺骗;监控和分析与不遵循预期协议标准和流量的协议相关的流量模式和数据包检查(例如,不属于已建立流量的无关数据包、无端或异常流量模式、异常语法或结构)。考虑与进程监控和命令行的相关性,以检测异常进程执行和与流量模式相关的命令行参数(例如,监控使用文件时的异常情况,这些文件通常不会启动相应协议的连接);监控网络数据中不常见的数据流。使用网络的进程通常不具有网络通信或以前从未见过,这些进程是可疑的。
网络钓鱼链接
介绍:敌人可能会发送带有恶意链接的鱼叉式网络钓鱼消息,以获取可在锁定目标时使用的敏感信息。鱼叉式网络钓鱼是一种试图诱骗目标泄露信息、经常是凭据或其他可操作信息的行为。信息的网络钓鱼经常涉及社会工程技术,例如冒充有理由收集信息的来源(例如:建立账户或泄露账户)和/或发送多条看似紧急的消息。所有形式的鱼叉式网络钓鱼都是针对特定个人、公司或行业的电子社会工程。在这种情况下,恶意电子邮件包含通常伴随着社会工程文本的链接,以诱使用户主动点击或复制并粘贴URL到浏览器中。给定的网站可以是合法网站(如在线或公司登录门户)的克隆,也可以在外观上与合法网站非常相似,并具有包含真实网站元素的URL。URL也可以通过利用URL模式中的怪癖来混淆,例如接受基于整数或十六进制的主机名格式,以及自动丢弃“@”符号之前的文本:例如,hxxp://google.com@1157586937.敌人还可以在网络钓鱼消息中嵌入“跟踪像素”、“网络漏洞”或“网络信标”,以验证电子邮件的接收情况,同时还可能对IP地址等受害者信息进行分析和跟踪。这些机制通常以小图像(通常为一个像素大小)或其他模糊对象的形式出现,并且通常以包含到远程服务器的链接的HTML代码的形式提供。敌人还可以使用所谓的“浏览器中的浏览器”(BitB)攻击来欺骗整个网站。通过生成一个带有基于HTML的地址栏的虚假浏览器弹出窗口,该地址栏似乎包含合法的URL(如身份验证门户),他们可以提示用户输入凭据,同时绕过典型的URL验证方法。攻击者可以使用EvilProxy和Evilginx2等网络钓鱼工具包,通过代理受害者与合法网站之间的连接来执行中间对抗性网络钓鱼。成功登录后,受害者会被重定向到合法网站,而对手除了获取用户名和密码外,还会获取他们的会话cookie(即窃取网络会话cookie)。这可能使对手能够通过Web会话Cookie绕过MFA。敌人也可能以快速响应(QR)代码的形式发送恶意链接(也称为“征服”)。这些链接可能会将受害者引导到凭据网络钓鱼页面。通过使用二维码,URL可能不会暴露在电子邮件中,因此大多数自动电子邮件安全扫描可能无法检测到。这些二维码可以由用户的移动设备(即网络钓鱼)扫描或直接传送到用户的移动装置,这在几个相关方面可能不太安全。例如,由于移动设备的外形尺寸较小,移动用户可能无法注意到正版网站和凭证收集网站之间的细微差异。从虚假网站,信息以网络形式收集并发送给对手。敌人也可能使用以前侦察工作中的信息(例如:搜索开放网站/域或搜索受害者拥有的网站)来制造有说服力和可信的诱饵。
预防措施:使用反欺骗和电子邮件身份验证机制,根据发件人域的有效性检查(使用SPF)和邮件的完整性(使用DKIM)过滤邮件。在组织内启用这些机制(通过DMARC等策略)可以使收件人(组织内和跨域)执行类似的消息过滤和验证;此外,策略可以强制执行/安装浏览器扩展,以防止IDN和同源图攻击。浏览器密码管理器也可以配置为仅在URL与原始合法网站的URL匹配时填充凭据字段;可以对用户进行培训,以识别社会工程技术和鱼叉式网络钓鱼企图。此外,用户可以对他们访问的域进行视觉检查;然而,ASCII和IDN域中的同形图以及URL模式混淆可能会使手动检查变得困难。网络钓鱼培训和其他网络安全培训可能会提高人们在访问网站之前检查URL的意识。
检测:监控可疑的电子邮件活动,例如多个帐户接收来自一个不寻常/未知发件人的消息。基于DKIM+SPF或邮件头分析的过滤可以帮助检测电子邮件发件人何时被欺骗。监控对未分类或已知坏网站的引用。电子邮件中的URL检查(包括扩展缩短的链接和识别模糊的URL)也可以帮助检测导致已知恶意网站的链接;此外,监控浏览器日志中ASCII和国际化域名中滥用不同字符集的同形图(例如,受信任网站的西里尔文版本与拉丁文版本);监控和分析与协议相关的流量模式和数据包检查,利用SSL/TLS检查不符合预期协议标准和流量流的加密流量(例如,不属于已建立流量的无关数据包、无端或异常流量模式、异常语法或结构)。考虑与进程监控和命令行的相关性,以检测异常进程执行和与流量模式相关的命令行参数(例如,监控使用文件时的异常情况,这些文件通常不会启动相应协议的连接);此外,通过使用滥用不同字符集的国际化域名(例如受信任网站的西里尔文版本与拉丁文版本)来监控同形词的网络流量。还监测和分析流量模式和数据包检查,以确定克隆网站的指标。例如,如果对手使用HTTrack克隆网站,则从(受害者URL)镜像可能会在数据包的HTML部分中可见;监控网络数据中不常见的数据流。使用网络的进程通常不具有网络通信或以前从未见过,这些进程是可疑的。
网络钓鱼语音
介绍:敌人可能会使用语音通信来获取可在瞄准过程中使用的敏感信息。鱼叉式网络钓鱼是一种试图诱骗目标泄露信息、经常是凭据或其他可操作信息的行为。对信息的网络钓鱼通常涉及社会工程技术,例如冒充有理由收集信息的来源(例如:冒充)和/或为接收者创造紧迫感或警报感。所有形式的网络钓鱼都是通过电子方式进行的社会工程。在这种情况下,对手会通过电话从受害者那里获取敏感信息。这些通信被称为语音网络钓鱼(或“监视”),可以由对手、雇佣的呼叫中心手动执行,甚至可以通过机器人语音实现自动化。语音钓鱼者可能会伪造他们的电话号码,同时冒充可信实体,如商业合作伙伴或技术支持人员。受害者还可能收到钓鱼信息,指示他们拨打对方试图收集机密信息的电话号码(“回拨钓鱼”)。敌人也可能使用以前侦察工作中的信息(例如:搜索开放网站/域或搜索受害者所有的网站)来定制对受害者更有说服力和可信度的借口。
预防措施:用户可以接受识别和报告社会工程技术和鱼叉式网络钓鱼企图的培训,同时也可以怀疑和验证呼叫者的身份。
检测:监控公司设备的通话日志,以识别潜在的语音网络钓鱼模式,例如与已知恶意电话号码的通话。
7.搜索关闭的源
威胁英特尔供应商
介绍:敌人可能会从威胁情报供应商那里搜索私人数据,寻找可以在瞄准过程中使用的信息。威胁情报供应商可能会提供比公开报道的数据更多的付费订阅源或门户网站。尽管敏感细节(如客户姓名和其他标识符)可能会被编辑,但这些信息可能包含有关违规行为的趋势,如目标行业、归因索赔和成功的TTP/对策。敌人可能会搜索私人威胁情报供应商的数据,以收集可操作的信息。威胁行为体可能会寻求收集到的关于其自身战役的信息/指标,以及其他对手进行的可能与其目标行业、能力/目标或其他作战问题相一致的信息/指示符。供应商报告的信息还可能揭示其他形式的侦察(例如:搜索开放网站/域)、建立运营资源(例如:开发能力或获得能力)和/或初始访问(例如:利用面向公众的应用程序或外部远程服务)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
采购技术数据
介绍:敌人可以购买关于受害者的技术信息,这些信息可以在瞄准过程中使用。关于受害者的信息可以在信誉良好的私人来源和数据库中购买,例如扫描数据库或其他数据聚合服务的订阅。敌人也可能从信誉较差的来源购买信息,如暗网或网络犯罪黑市。敌人可能会购买有关其已确定目标的信息,或使用购买的数据来发现成功突破的机会。威胁行为者可能会从购买的数据中收集各种技术细节,包括但不限于员工联系信息、证书或受害者基础设施的细节。来自这些来源的信息可能揭示其他形式的侦察(例如:网络钓鱼或搜索开放网站/域)、建立运营资源(例如:开发能力或获得能力)和/或初始访问(例如:外部远程服务或有效帐户)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
8.搜索开放的技术数据库
DNS/被动DNS
介绍:敌人可以在DNS数据中搜索可以在瞄准过程中使用的受害者信息。DNS信息可以包括各种细节,包括注册的名称服务器以及概述目标子域、邮件服务器和其他主机的寻址的记录。敌人可以搜索DNS数据以收集可操作的信息。威胁参与者可以直接查询目标组织的名称服务器,也可以通过记录的DNS查询响应(称为被动DNS)的集中存储库进行搜索。敌人还可能寻求并针对泄露内部网络信息的DNS错误配置/泄漏。来自这些来源的信息可能揭示其他形式的侦察(例如:搜索受害者拥有的网站或搜索开放的网站/域)、建立运营资源(例如:获取基础设施或破坏基础设施)和/或初始访问(例如:外部远程服务或可信关系)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
WHOIS
介绍:敌人可以搜索世界卫生组织的公共数据,寻找可以在瞄准过程中使用的受害者信息。WHOIS数据由负责分配和分配域名等互联网资源的区域互联网登记处(RIR)存储。任何人都可以向WHOIS服务器查询有关注册域的信息,如分配的IP块、联系信息和DNS名称服务器。敌人可以搜索世界卫生组织的数据来收集可操作的信息。威胁行为者可以使用在线资源或命令行实用程序,通过WHOIS数据掠夺潜在受害者的信息。来自这些来源的信息可能揭示其他形式的侦察(例如:主动扫描或网络钓鱼信息)、建立作战资源(例如:获取基础设施或破坏基础设施)和/或初始访问(例如:外部远程服务或可信关系)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
数字证书
介绍:敌人可能会搜索公共数字证书数据,以获取在锁定目标时可以使用的受害者信息。数字证书由证书颁发机构(CA)颁发,以加密方式验证签名内容的来源。这些证书,例如用于加密网络流量(HTTPS SSL/TLS通信)的证书,包含有关注册组织的信息,如名称和位置。对手可能会搜索数字证书数据以收集可操作的信息。威胁参与者可以使用在线资源和查找工具来获取有关证书的信息。数字证书数据也可以从组织签名的工件中获得(例如:从加密的网络流量中使用的证书与内容一起提供)。来自这些来源的信息可能揭示其他形式侦察(例如:主动扫描或网络钓鱼信息)、建立作战资源(例如:开发能力或获得能力)和/或初始访问(例如:外部远程服务或可信关系)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
CDN
介绍:敌人可以搜索关于受害者的内容交付网络(CDN)数据,这些数据可以在定位过程中使用。CDN允许组织承载来自分布式、负载平衡的服务器阵列的内容。CDN还可以允许组织基于请求者的地理区域来定制内容递送。敌人可能会搜索CDN数据以收集可操作的信息。威胁参与者可以使用在线资源和查找工具来获取CDN内内容服务器的信息。对手还可能寻求并针对CDN错误配置,这些配置泄露了不打算托管的敏感信息和/或没有与组织网站上托管的内容相同的保护机制(例如:登录门户)。来自这些来源的信息可能揭示其他形式的侦察(例如:主动扫描或搜索开放网站/域)、建立运营资源(例如:获取基础设施或妥协基础设施)和/或初始访问(例如:妥协驱动)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
扫描数据库
介绍:敌人可以在公共扫描数据库中搜索可以在瞄准过程中使用的受害者信息。各种在线服务不断发布互联网扫描/调查的结果,经常收集信息,如活动IP地址、主机名、开放端口、证书,甚至服务器横幅。敌人可以搜索扫描数据库来收集可操作的信息。威胁行为者可以使用在线资源和查找工具从这些服务中获取信息。敌人可能会寻求有关其已经确定的目标的信息,或使用这些数据集来发现成功突破的机会。来自这些来源的信息可能揭示其他形式的侦察(例如:主动扫描或搜索开放网站/域)、建立作战资源(例如:开发能力或获得能力)和/或初始访问(例如:外部远程服务或利用面向公众的应用程序)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
9.搜索打开的网站/域
社会化媒体
介绍:敌人可能会在社交媒体上搜索受害者的信息,以便在锁定目标时使用。社交媒体网站可能包含有关受害者组织的各种信息,如商业公告以及有关员工角色、地点和兴趣的信息。敌人可能会根据他们想要收集的信息在不同的社交媒体网站上进行搜索。威胁行为者可能会被动地从这些网站获取数据,并利用收集的信息创建虚假的个人资料/群组,诱使受害者泄露特定信息(即网络钓鱼服务)。来自这些来源的信息可能揭示其他形式的侦察(例如:网络钓鱼获取信息或搜索开放技术数据库)、建立运营资源(例如:建立账户或泄露账户)和/或初始访问(例如:通过服务进行网络钓鱼)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
搜索引擎
介绍:敌人可能会使用搜索引擎来收集受害者的信息,这些信息可以在锁定目标时使用。搜索引擎服务典型地抓取在线网站以索引上下文,并且可以向用户提供专门的语法来搜索特定的关键字或特定类型的内容(即文件类型)。敌人可能会根据他们想要收集的信息来制作各种搜索引擎查询。威胁行为者可能使用搜索引擎获取有关受害者的一般信息,也可能使用专门的查询来寻找敏感信息的泄露,如网络详细信息或凭据。来自这些来源的信息可能揭示其他形式的侦察(例如:网络钓鱼获取信息或搜索开放的技术数据库)、建立运营资源(例如:建立账户或泄露账户)和/或初始访问(例如:有效账户或网络钓鱼)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
代码存储库
介绍:敌人可能会在公共代码库中搜索可以在瞄准过程中使用的受害者信息。受害者可能会将代码存储在各种第三方网站的存储库中,如GitHub、GitLab、SourceForge和BitBucket。用户通常通过web应用程序或命令行实用程序(如git)与代码存储库进行交互。敌人可以在各种公共代码库中搜索关于受害者的各种信息。公共代码库通常可以是有关受害者的各种一般信息的来源,例如常用的编程语言和库以及员工的姓名。敌人还可能识别更敏感的数据,包括意外泄露的凭证或API密钥。来自这些来源的信息可能揭示其他形式的侦察(例如:信息网络钓鱼)、建立运营资源(例如:泄露账户或泄露基础设施)和/或初始访问(例如:有效账户或网络钓鱼)的机会。注意:这与代码存储库不同,后者侧重于从私有和内部托管的代码存储库中收集。
预防措施:上传到公共代码存储库的应用程序开发人员应小心避免发布凭据和API密钥等敏感信息;在进行提交之前,扫描公共代码存储库中暴露的凭据或其他敏感信息。确保从提交历史记录中删除任何泄露的凭据,而不仅仅是当前最新版本的代码。
检测:这种活动的大部分发生率和相关的假阳性率可能非常高,而且可能发生在目标组织的可见性之外,这使得维权者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
10.搜索受害者拥有的网站
介绍:敌人可能会在受害者拥有的网站上搜索可在瞄准过程中使用的信息。受害者拥有的网站可能包含各种详细信息,包括部门/部门的名称、实际位置以及关键员工的数据,如姓名、角色和联系信息(例如:电子邮件地址)。这些网站也可能有突出业务运营和关系的详细信息。敌人可能会搜索受害者拥有的网站,以收集可操作的信息。来自这些来源的信息可能揭示其他形式的侦察(例如:信息网络钓鱼或搜索开放技术数据库)、建立运营资源(例如:建立账户或泄露账户)和/或初始访问(例如:可信关系或网络钓鱼)的机会。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在尽量减少可供外部各方使用的数据的数量和敏感性上。
检测:监控可能指示对手侦察的可疑网络流量,例如指示网络爬行的快速连续请求和/或源自单个来源的大量请求(尤其是在已知来源与对手相关的情况下)。分析web元数据还可能揭示可归因于潜在恶意活动的工件,例如referer或用户代理字符串HTTP/S字段。
二、资源开发
1.获取访问权限
介绍:敌人可以购买或以其他方式获取对目标系统或网络的现有访问权限。各种在线服务和初始访问代理网络可用于出售对先前受损系统的访问权限。在某些情况下,敌对团体可能会结成伙伴关系,相互共享受损的系统。对受损系统的立足点可以采取多种形式,例如访问植入的后门(例如Web Shell)或通过外部远程服务建立的访问权限。在某些情况下,访问代理会向受损的系统植入“负载”,用于为付费客户安装额外的恶意软件。通过利用现有的接入代理网络,而不是开发或获得自己的初始接入能力,对手可以潜在地减少在目标网络上站稳脚跟所需的资源,并将精力集中在后期的妥协阶段。对手可能会优先获得对已确定缺乏安全监控或具有高特权的系统或属于特定部门组织的系统的访问权限。在某些情况下,购买对IT合同、软件开发或电信等部门组织的访问权限,可能会使对手通过可信关系、多因素身份验证拦截,甚至供应链泄露,危及其他受害者。注意:虽然这项技术不同于其他行为,如购买技术数据和凭证,但它们可能经常结合使用(尤其是在获得的立足点需要有效账户的情况下)。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。
检测:其中大部分发生在目标组织的可见性之外,这使得防御者很难被发现;检测工作可以集中在对手生命周期的相关阶段,例如在初始访问期间。
2.收购基础设施
域
介绍:敌人可能会获得可在瞄准过程中使用的领域。域名是用于表示一个或多个IP地址的人类可读名称。它们可以购买,或者在某些情况下免费获得。敌人可以将获取的域名用于各种目的,包括网络钓鱼、妥协驱动和指挥控制。对手可以选择与合法域名相似的域名,包括通过使用同源符号或使用不同的顶级域名(TLD)。打字可以用来帮助通过“折衷驱动”交付有效载荷。敌人也可能使用国际化域名(IDN)和不同的字符集(如西里尔字母、希腊字母等)来执行“IDN同源图攻击”,从而创建视觉上相似的域,用于向受害者机器传递恶意软件。还可以动态生成不同的URI/URL,以唯一地向受害者提供恶意内容(包括一次性、一次性域名)。对手也可能收购并重新利用过期域名,根据现有的声誉/历史,这些域名可能已经被防御者允许/信任。每个域注册商都维护一个可公开查看的数据库,该数据库显示每个注册域的联系信息。私人WHOIS服务显示替代信息,例如他们自己的公司数据,而不是域的所有者。敌人可能会使用此类私人WHOIS服务来掩盖谁拥有所购买域名的信息。对手可能会通过使用不同的注册信息和向不同的域名注册商购买域名,进一步中断跟踪其基础设施的工作。
预防措施:组织可能会有意注册与自己类似的域名,以阻止对手创建拼写错误的域名。这项技术的其他方面无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。
检测:监视查询的域名系统(DNS)注册表数据,以查找可在定位过程中使用的已购买域。在更新分类之前,基于信誉/类别的检测可能是困难的。探测工作可以集中在对手生命周期的相关阶段,例如在初始访问和指挥控制期间;域名注册信息按设计被捕获在公共注册日志中。考虑使用可能有助于跟踪新获取的域的服务,如WHOIS数据库和/或被动DNS。在某些情况下,可以利用已知的域注册信息来发现对手购买的其他基础设施。考虑对使用与您自己的结构相似的结构创建的域进行监控,包括在不同的TLD下。尽管存在各种工具和服务来跟踪、查询和监控域名注册信息,但跨多个DNS基础设施的跟踪可能需要多种工具/服务或更高级的分析。探测工作可以集中在对手生命周期的相关阶段,例如在初始访问和指挥控制期间;监视可在目标确定期间使用的已购买域的已记录域名系统(DNS)数据。在更新分类之前,基于信誉/类别的检测可能是困难的。探测工作可以集中在对手生命周期的相关阶段,例如在初始访问和指挥控制期间。
DNS服务器
介绍:敌人可能会建立自己的域名系统(DNS)服务器,以便在锁定目标时使用。在妥协后活动期间,对手可能会将DNS流量用于各种任务,包括指挥和控制(例如:应用层协议)。对手可以选择配置和运行自己的DNS服务器来支持行动,而不是劫持现有的DNS服务器。通过运行自己的DNS服务器,对手可以更好地控制如何管理服务器端DNS C2流量(DNS)。通过对DNS服务器的控制,对手可以配置DNS应用程序以提供对恶意软件的条件响应,并且通常在基于DNS的C2通道的结构中具有更大的灵活性。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。
检测:这种活动的大部分将发生在目标组织的可见性之外,这使得检测这种行为变得困难。探测工作可以集中在对手生命周期的相关阶段,例如在指挥和控制期间。
虚拟专用服务器
介绍:敌人可以租用虚拟专用服务器(VPN),这些服务器可以在瞄准过程中使用。有各种各样的云服务提供商将虚拟机/容器作为服务进行销售。通过使用VPS,对手很难在物理上将行动与他们联系起来。云基础设施的使用还可以使对手更容易地快速提供、修改和关闭其基础设施。获得VPS用于对手生命周期的后期阶段,如指挥和控制,可以让对手从与更高声誉的云服务提供商相关的普遍性和信任中受益。敌人还可以从VPS服务提供商那里获取基础设施,这些服务提供商以租用注册信息最少的VPS而闻名,从而允许对基础设施进行更匿名的获取。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。
检测:一旦对手提供了VPS(例如:用作指挥和控制服务器),互联网扫描可能会显示对手已经获得的服务器。考虑寻找可识别的模式,如服务侦听、使用中的证书、SSL/TLS协商功能或与对手C2软件相关的其他响应工件。这种活动的大部分将发生在目标组织的可见性之外,这使得检测这种行为变得困难。探测工作可以集中在对手生命周期的相关阶段,例如在指挥和控制期间;这种活动的大部分将发生在目标组织的可见性之外,这使得检测这种行为变得困难。探测工作可以集中在对手生命周期的相关阶段,例如在指挥和控制期间。
服务器
介绍:敌人可以购买、租赁、租赁或获得可在瞄准过程中使用的物理服务器。使用服务器可以让对手策划、发动和执行行动。在妥协后活动中,对手可能会利用服务器执行各种任务,如“驾车妥协”中的水坑操作、启用网络钓鱼操作或促进指挥和控制。对手可以选择配置和运行自己的服务器来支持作战,而不是损害第三方服务器或租用虚拟专用服务器。云服务器的免费试用期也可能被滥用。如果敌人的大部分活动都将使用在线基础设施进行,那么他们可能只需要一个轻量级的设置。或者,如果他们想在自己的系统上测试、通信和控制活动的其他方面,他们可能需要构建广泛的基础设施。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。
检测:一旦对手提供了服务器(例如:用作指挥和控制服务器),互联网扫描可能会显示对手已经获得的服务器。考虑寻找可识别的模式,如服务侦听、使用中的证书、SSL/TLS协商功能或与对手C2软件相关的其他响应工件;这种活动的大部分将发生在目标组织的可见性之外,这使得检测这种行为变得困难。探测工作可以集中在对手生命周期的相关阶段,例如在指挥和控制期间。
Botnet
介绍:敌人可能会购买、租赁或租用一个可在瞄准过程中使用的受损系统网络。僵尸网络是一个由受损系统组成的网络,可以被指示执行协调的任务。敌人可以从引导程序/压力程序服务购买订阅以使用现有的僵尸网络。有了僵尸网络,对手可能会进行后续活动,如大规模网络钓鱼或分布式拒绝服务(DDoS)。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。
检测:这种活动的大部分将发生在目标组织的可见性之外,这使得检测这种行为变得困难。检测工作可能集中在对手生命周期的相关阶段,例如在网络钓鱼、端点拒绝服务或网络拒绝服务期间。
Web服务
介绍:敌人可能会注册可在瞄准过程中使用的网络服务。存在各种流行的网站,供对手注册基于网络的服务,这些服务可能在对手生命周期的后期阶段被滥用,例如在指挥与控制(web服务)、网络服务过滤或网络钓鱼期间。使用通用服务,如谷歌或推特提供的服务,使对手更容易隐藏在预期的噪音中。通过利用网络服务,对手可能会使其难以在物理上将行动与他们联系起来。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。
检测:一旦对手利用web服务作为基础设施(例如:用于指挥和控制),就有可能寻找与对手软件相关的独特特征(如果已知的话)。这种活动的大部分将发生在目标组织的可见性之外,这使得检测这种行为变得困难。检测工作可能集中在对手生命周期的相关阶段,例如在指挥与控制(Web服务)或通过Web服务进行过滤期间。
无服务器
介绍:对手可能会购买和配置无服务器云基础设施,如Cloudflare Workers
或AWS Lambda
功能,这些功能可在瞄准过程中使用。通过利用无服务器基础设施,对手可能更难将作战期间使用的基础设施归还给他们。一旦获得,无服务器运行时环境可以用来直接响应受感染的机器或代理到对手拥有的命令和控制服务器的流量。由于这些功能产生的流量似乎来自普通云提供商的子域,因此可能很难区分这些提供商的普通流量。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。
检测:一旦对手利用无服务器功能作为基础设施(例如:用于指挥和控制),就有可能寻找与对手软件相关的独特特征(如果已知的话)。这种活动的大部分将发生在目标组织的可见性之外,这使得检测这种行为变得困难。探测工作可以集中在对手生命周期的相关阶段。
恶意广告
介绍:攻击者可能会购买可以被滥用的在线广告,将恶意软件分发给受害者。可以购买广告来在网上的特定位置种植和有利地定位工件,例如在搜索引擎结果中的显著位置。这些广告可能会使用户更难区分实际搜索结果和广告。购买的广告还可以利用广告网络的功能瞄准特定受众,从而可能进一步利用对搜索引擎和流行网站固有的信任。攻击者可能会购买广告和其他资源,以帮助将包含恶意代码的工件分发给受害者。购买的广告可能试图假冒或恶搞知名品牌。例如,这些恶搞广告可能会诱使受害者点击广告,然后将其发送到一个恶意域,该域可能是包含广告软件的木马版本的官方网站的克隆。对手创建恶意域名和购买广告的努力也可能大规模自动化,以更好地抵制清理工作。恶意广告可用于支持“目标驱动”和“妥协驱动”,如果广告中包含感染目标系统web浏览器的代码/漏洞,则可能需要用户进行有限的交互。对手还可以使用几种技术来逃避广告网络的检测。例如,对手可以动态路由广告点击,将自动抓取器/策略执行器流量发送到良性网站,同时验证潜在目标,然后将真实广告点击中的受害者发送到恶意页面。因此,这种感染媒介可以对广告网络以及任何没有通过点击广告到达具有有效标识符的恶意网站的访问者保持隐藏。其他技巧,如故意拼写错误以避免品牌声誉监控,也可能被用来逃避自动检测。
预防措施:这种技术无法通过预防性控制轻易缓解,因为它是基于在企业防御和控制范围之外执行的行为。应将工作重点放在初始访问活动上,例如通过折衷方式进行驱动,在这种情况下,广告屏蔽广告拦截程序可以帮助防止恶意代码的执行。
检测:如果先前已经识别出与恶意广告相关的恶意网络内容中的基础设施或模式,则互联网扫描可能会发现对手何时发布了恶意网络内容。这种活动的大部分将发生在目标组织的可见性之外,这使得检测这种行为变得困难。检测工作可能集中在对手生命周期的其他阶段,如通过妥协驱动或利用客户端执行。
3.入侵账户
社交媒体账户
介绍:对手可能会入侵社交媒体账户,并在针对目标时使用这些账户。在包含社会工程的行动中,使用一个在线身份可能非常重要。对手可能会入侵现有的社交媒体账户,而不是创建和培育新的社交媒体资料(即社交媒体账户)。利用现有身份可能会在潜在受害者中产生一定的信任感,特别是如果他们与被入侵的身份有关系或了解该身份的话。有多种方法可以入侵社交媒体账户,例如通过钓鱼获取凭证、从第三方网站购买凭证或通过暴力破解凭证(如从泄露的凭证数据库中重复使用密码)。在入侵社交媒体账户之前,对手可能会进行侦察,以决定要入侵哪些账户以推进他们的行动。身份可能存在于单个网站或多个网站上(如Facebook、LinkedIn、Twitter等)。被入侵的社交媒体账户可能需要进一步发展,包括填写或修改个人资料信息、进一步发展社交网络或添加照片。对手可以利用被入侵的社交媒体资料来创建新的连接,或劫持现有的连接到目标。这些连接可能是直接的,也可能是通过其他人进行连接的。被入侵的资料可能会在对手生命周期的其他阶段使用,例如在初始访问阶段(如通过服务进行鱼叉式网络钓鱼)。
预防措施:由于此技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易缓解。
检测:监控和分析与协议相关的流量模式和数据包检查,利用SSL/TLS检查加密流量,查看是否存在不符合预期协议标准和流量流动的情况(例如不属于已建立流量的额外数据包、无偿或异常的流量模式、异常的语法或结构)。考虑将其与进程监控和命令行进行关联,以检测与流量模式相关的异常进程执行和命令行参数(例如,监控在相应协议下通常不发起连接的文件的使用异常)。考虑监控与您组织相关的社交媒体活动。可疑活动可能包括声称在您组织工作的人物或最近修改账户并向与您组织有联系的账户发送大量连接请求的账户。检测工作可能集中在对手生命周期的相关阶段,例如在初始访问期间(如通过服务进行鱼叉式网络钓鱼)。
电子邮件账户
介绍:对手可能会入侵电子邮件账户,并在针对目标时使用这些账户。对手可以利用被入侵的电子邮件账户来进一步他们的行动,例如利用它们进行信息钓鱼、钓鱼或大规模垃圾邮件活动。使用现有身份和被入侵的电子邮件账户,如果潜在受害者与被入侵身份有关系或了解该身份,可能会在他们中产生一定的信任感。被入侵的电子邮件账户也可以用于获取基础设施(如域名)。有多种方法可以入侵电子邮件账户,例如通过钓鱼获取凭证、从第三方网站购买凭证、暴力破解凭证(如从泄露的凭证数据库中重复使用密码)或支付员工、供应商或业务合作伙伴获取凭证。在入侵电子邮件账户之前,对手可能会进行侦察,以决定要入侵哪些账户以推进他们的行动。对手可能会针对知名电子邮件账户或域名,以便恶意垃圾邮件或钓鱼邮件可以规避基于信誉的电子邮件过滤规则。对手可以利用被入侵的电子邮件账户劫持与目标的现有电子邮件线程。
预防措施:由于此技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易缓解。
检测:大部分此类活动将发生在目标组织的可见范围之外,使得检测这种行为变得困难。检测工作可能集中在对手生命周期的相关阶段,例如在初始访问期间(如钓鱼)。
云账户
介绍:对手可能会入侵云账户,并在针对目标时使用这些账户。对手可以利用被入侵的云账户来进一步他们的行动,包括利用云存储服务如Dropbox、Microsoft OneDrive或AWS S3存储桶进行数据外传到云存储或上传工具。云账户也可以用于获取基础设施,如虚拟专用服务器或无服务器基础设施。入侵云账户可能使对手无需管理自己的服务器即可开发复杂的能力。有多种方法可以入侵云账户,例如通过钓鱼获取凭证、从第三方网站购买凭证、进行密码喷射攻击或试图窃取应用访问令牌。在入侵云账户之前,对手可能会进行侦察,以决定要入侵哪些账户以推进他们的行动。在某些情况下,对手可能会针对具有特权的服务提供商账户,以利用服务提供商与其客户之间的信任关系。
预防措施:由于此技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易缓解。
检测:大部分此类活动将发生在目标组织的可见范围之外,使得检测这种行为变得困难。检测工作可能集中在对手生命周期的相关阶段,例如在外传期间(如将数据传输到云账户)。
4.入侵基础设施
域名
介绍:对手可能会劫持域名和/或子域名,并在针对目标时使用这些域名。域名注册劫持是指在未经原注册人许可的情况下更改域名注册信息。对手可能会获取列为域名所有者的电子邮件账户,然后声称忘记密码以更改域名注册信息。其他可能性包括通过社会工程手段获取域名注册帮助台的访问权限或利用续订流程中的漏洞。子域名劫持可能发生在组织的DNS条目指向不存在或未启用的资源时。在这种情况下,对手可以控制子域名,以利用与该域名相关的信任进行操作。入侵域名的对手还可能通过创建恶意子域名来进行域名影子攻击,同时保留现有的DNS记录。由于服务不会中断,恶意子域名可能会在长时间内未被察觉。
预防措施:由于此技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易缓解。
检测:监控查询的域名系统(DNS)注册数据,可能会发现劫持域名和/或子域名的行为。在某些情况下,异常的子域名IP地址(例如与根域名所在国家不同的IP地址)可能表明是恶意子域名。大部分此类活动将发生在目标组织的可见范围之外,使得检测这种行为变得困难。检测工作可能集中在对手生命周期的相关阶段,例如在命令与控制期间;考虑监控域名注册信息和/或域名解析信息的异常变化,这可能表明域名被入侵。由于互联网中注册和解析变化是常见的,因此需要针对特定的感兴趣域名进行定制化努力;监控已记录的域名系统(DNS)注册数据,可能会发现劫持域名和/或子域名的行为。在某些情况下,异常的子域名IP地址(例如与根域名所在国家不同的IP地址)可能表明是恶意子域名。大部分此类活动将发生在目标组织的可见范围之外,使得检测这种行为变得困难。检测工作可能集中在对手生命周期的相关阶段,例如在命令与控制期间。
DNS服务器
介绍:对手可能会入侵第三方DNS服务器,并在针对目标时使用这些服务器。在后期入侵活动中,对手可能会利用DNS流量执行各种任务,包括命令与控制(如应用层协议)。对手可能会入侵第三方DNS服务器来支持他们的行动,而不是自己设置DNS服务器。通过入侵DNS服务器,对手可以更改DNS记录。这种控制可以让对手重定向组织的流量,方便他们进行数据收集和凭证访问。此外,对手还可能利用这种控制结合数字证书,将流量重定向到对手控制的基础设施,模拟正常的可信网络通信。对手还可以静默地创建指向恶意服务器的子域名,而不会提醒DNS服务器的实际所有者。
预防措施:由于此技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易缓解。
检测:监控查询的域名系统(DNS)注册数据,可能会发现入侵第三方DNS服务器的行为,并在针对目标时使用这些服务器。大部分此类活动将发生在目标组织的可见范围之外,使得检测这种行为变得困难。检测工作可能集中在对手生命周期的相关阶段,例如在命令与控制期间;监控已记录的域名系统(DNS)注册数据,可能会发现入侵第三方DNS服务器的行为,并在针对目标时使用这些服务器。大部分此类活动将发生在目标组织的可见范围之外,使得检测这种行为变得困难。检测工作可能集中在对手生命周期的相关阶段,例如在命令与控制期间。
虚拟专用服务器(VPS)
介绍:对手可能会入侵第三方虚拟专用服务器(VPS),并在针对目标时使用这些服务器。有多种云服务提供商会出售虚拟机/容器作为服务。对手可能会入侵由第三方实体购买的VPS。通过入侵VPS作为基础设施,对手可以使其操作难以物理追溯到自己。入侵VPS以用于对手生命周期的后期阶段,例如命令与控制,可以使对手利用高信誉云服务提供商的普及性和信任,以及被入侵的第三方所增加的信任。
预防措施:由于此技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易缓解。
检测:一旦对手在被入侵的VPS上配置了软件(例如用于命令与控制服务器),互联网扫描可能会揭示对手已入侵的VPS。考虑寻找可识别的模式,例如正在监听的服务、使用的证书、SSL/TLS协商特征或与对手C2软件相关的其他响应工件;大部分此类活动将发生在目标组织的可见范围之外,使得检测这种行为变得困难。检测工作可能集中在对手生命周期的相关阶段,例如在命令与控制期间。
服务器
介绍:对手可能会入侵第三方服务器,并在针对目标时使用这些服务器。使用服务器可以让对手进行阶段、启动和执行操作。在后期入侵活动中,对手可能会利用服务器执行各种任务,包括命令与控制。对手可能会入侵第三方服务器来支持他们的行动,而不是购买服务器或虚拟专用服务器。对手还可能入侵Web服务器以支持水坑攻击,如驱动下载攻击,或入侵电子邮件服务器以支持钓鱼活动。
预防措施:由于此技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易缓解。
检测:一旦对手在被入侵的服务器上配置了软件(例如用于命令与控制服务器),互联网扫描可能会揭示对手已入侵的服务器。考虑寻找可识别的模式,例如正在监听的服务、使用的证书、SSL/TLS协商特征或与对手C2软件相关的其他响应工件;大部分此类活动将发生在目标组织的可见范围之外,使得检测这种行为变得困难。检测工作可能集中在对手生命周期的相关阶段,例如在命令与控制期间。
僵尸网络
介绍:对手可能会入侵大量第三方系统,组成一个僵尸网络,并在针对目标时使用这个僵尸网络。僵尸网络是指一个由被入侵系统组成的网络,这些系统可以被指示执行协调任务。对手可能会通过入侵大量第三方系统,自己组建一个僵尸网络,而不是从DDoS攻击服务购买/租用僵尸网络。对手还可能接管现有僵尸网络,例如将僵尸重定向到对手控制的命令与控制服务器。拥有一个僵尸网络,对手可以执行后续活动,例如大规模钓鱼或分布式拒绝服务(DDoS)攻击。
预防措施:由于此技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易缓解。
检测:大部分此类活动将发生在目标组织的可见范围之外,使得检测这种行为变得困难。检测工作可能集中在对手生命周期的相关阶段,例如在钓鱼、端点拒绝服务或网络拒绝服务期间。
网络服务
介绍:对手可能会入侵第三方网络服务的访问权限,并在针对目标时使用这些服务。存在各种流行的网站,合法用户可以注册网络服务,例如GitHub、Twitter、Dropbox、Google、SendGrid等。对手可能试图夺取合法用户对网络服务的访问权限,并利用该网络服务支持网络行动。在对手生命周期的后期阶段,这些网络服务可能会被滥用,例如在命令与控制(网络服务)、通过网络服务外传或钓鱼期间。使用常见服务(如Google或Twitter提供的服务)使对手更容易隐藏在预期的噪音中。通过利用网络服务,特别是当访问权限是从合法用户那里窃取时,对手可以使其操作难以物理追溯到自己。此外,利用被入侵的基于网络的电子邮件服务可能会使对手利用与合法域名相关的信任。
预防措施:由于此技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易缓解。
检测:一旦对手利用被滥用的网络服务作为基础设施(例如用于命令与控制),可能可以寻找与已知对
5. 发展能力
恶意软件
介绍:对手可能会开发恶意软件及其组件,这些组件可以在目标攻击过程中使用。构建恶意软件可能包括开发负载、加载程序、后妥协工具、后门(包括后门图像)、打包器、C2协议,以及创建受感染的可移动媒体。对手可能会开发恶意软件以支持其操作,创建一种保持对远程机器控制、规避防御和执行后妥协行为的方法。与合法开发工作一样,开发恶意软件可能需要不同的技能。这些技能可能在内部,也可能需要外包。使用承包商可以被视为对手恶意软件开发能力的延伸,前提是对手在制定需求和保持对恶意软件的某种程度的独占性方面发挥作用。恶意软件开发的某些方面(例如C2协议开发)可能需要对手获得额外的基础设施。例如,与Twitter通信的恶意软件可能需要使用Web服务。
预防措施:由于此技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻松缓解。
检测:可以考虑分析恶意软件的特征,这些特征可能与对手及其开发人员相关,例如使用的编译器、调试工件或代码相似性。恶意软件存储库也可以用于识别与对手相关的其他样本,并识别其随时间变化的开发模式;监视恶意负载的上下文数据,例如编译时间、文件哈希值以及水印或其他可识别的配置信息。大部分活动将在目标组织的可见范围之外进行,使得检测此行为变得困难。检测工作可以集中在对手生命周期的后妥协阶段。
代码签名证书
介绍:对手可能会创建自签名代码签名证书,这些证书可以在目标攻击过程中使用。代码签名是数字签名可执行文件和脚本的过程,以确认软件作者并保证代码未被更改或损坏。代码签名为程序提供了一定程度的真实性,并保证程序未被篡改。即使用户和/或安全工具不知道是谁颁发了证书或作者是谁,他们也可能更信任已签名的代码而不是未签名的代码。在代码签名之前,对手可能会开发自签名代码签名证书以用于操作。
预防措施:由于此技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻松缓解。
检测:可以考虑分析自签名代码签名证书的特征,这些特征可能与对手及其开发人员相关,例如指纹、使用的算法、有效期和通用名称。恶意软件存储库也可以用于识别与对手相关的其他样本,并识别对手在制作自签名代码签名证书时使用的模式。大部分活动将在目标组织的可见范围之外进行,使得检测此行为变得困难。检测工作可以集中在相关的后续行为上,例如代码签名或安装根证书。
数字证书
介绍:对手可能会创建自签名SSL/TLS证书,这些证书可以在目标攻击过程中使用。SSL/TLS证书旨在建立信任。它们包括有关密钥的信息、有关其所有者身份的信息以及验证证书内容正确性的实体的数字签名。如果签名有效,并且检查证书的人信任签名者,那么他们就知道可以使用该密钥与其所有者通信。在自签名的情况下,数字证书将缺乏与第三方证书颁发机构(CA)签名相关的信任元素。对手可能会创建自签名SSL/TLS证书,以进一步推进其操作,例如加密C2通信(例如:使用Web协议的非对称加密)或如果添加到信任根目录(即安装根证书)中甚至启用中间人攻击。在创建数字证书后,对手可能会将其安装在其控制的基础设施上(见安装数字证书)。
预防措施:由于此技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻松缓解。
检测:可以考虑使用有助于跟踪互联网上网站使用的证书的服务。在某些情况下,可以基于已知的证书信息发现其他对手基础设施。检测工作可以集中在相关行为上,例如Web协议、非对称加密和/或安装根证书。
漏洞利用
介绍:对手可能会开发可用于目标攻击的漏洞利用。漏洞利用利用错误或漏洞以在计算机硬件或软件上引发意外或意外行为。与在线查找/修改漏洞利用或从漏洞利用供应商处购买不同,对手可能会开发自己的漏洞利用。对手可能会使用通过漏洞获取的信息来集中漏洞利用开发工作。作为漏洞利用开发过程的一部分,对手可能会通过模糊测试和补丁分析等方法发现可利用的漏洞。与合法开发工作一样,开发漏洞利用可能需要不同的技能。这些技能可能在内部,也可能需要外包。使用承包商可以被视为对手漏洞利用开发能力的延伸,前提是对手在制定需求和保持对漏洞利用的初步独占性方面发挥作用。对手可能会在对手生命周期的各个阶段使用漏洞利用(即:利用面向公众的应用程序、客户端执行漏洞利用、权限提升漏洞利用、逃避防御漏洞利用、凭证访问漏洞利用、远程服务漏洞利用以及应用程序或系统漏洞利用)。
预防措施:由于此技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻松缓解。
检测:大部分活动将在目标组织的可见范围之外进行,使得检测此行为变得困难。检测工作可以集中在与漏洞利用使用相关的行为上(即:利用面向公众的应用程序、客户端执行漏洞利用、权限提升漏洞利用、逃避防御漏洞利用、凭证访问漏洞利用、远程服务漏洞利用以及应用程序或系统漏洞利用)。
6.建立账户
社交媒体账户
介绍:对手可能会创建和培育社交媒体账户,用于目标定位。对手可以创建社交媒体账户,用于建立一个用于进一步行动的角色。角色开发包括开发公共信息、存在感、历史记录和适当的关联。对于包含社会工程学的操作,在社交媒体上使用一个角色可能是重要的。这些角色可能是虚构的,或者冒充真实的人物。角色可以存在于单个社交媒体网站上,也可以跨多个网站(例如:Facebook、LinkedIn、Twitter等)。在社交媒体上建立一个角色可能需要开发额外的文档以使其看起来真实。这可能包括填写个人资料信息、发展社交网络或整合照片。一旦角色开发完成,对手可以利用它来与感兴趣的目标建立联系。这些联系可能是直接的,也可能包括通过其他人来尝试连接。这些账户可能会在对手生命周期的其他阶段中被利用,例如在初始访问阶段(例如:通过服务进行鱼叉式网络钓鱼)。
预防措施:由于该技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易缓解。
检测:监控和分析与不符合预期协议标准和流量模式的协议相关的流量模式和数据包检查(例如,属于已建立流量之外的额外数据包、无谓或异常的流量模式、异常的语法或结构)。考虑结合进程监控和命令行来检测与流量模式相关的异常进程执行和命令行参数(例如,监控使用文件的异常情况,这些文件通常不会启动各自协议的连接)。考虑监控与您组织相关的社交媒体活动。可疑活动可能包括声称为您组织工作的人物或最近创建/修改的账户,向与您组织有关联的账户发出大量连接请求。检测工作可能集中在对手生命周期的相关阶段,例如在初始访问期间(例如:通过服务进行鱼叉式网络钓鱼)。
电子邮件账户
介绍:对手可能会创建电子邮件账户,用于目标定位。对手可以使用在电子邮件提供商处创建的账户来进一步其操作,例如利用它们进行信息钓鱼或网络钓鱼。建立电子邮件账户还可能允许对手滥用免费服务——例如试用期——以获取后续用途的基础设施。对手还可能采取措施围绕电子邮件账户培育一个角色,例如通过使用社交媒体账户,以增加后续行为成功的机会。创建的电子邮件账户还可以用于获取基础设施(例如:域名)。为了减少将操作与自己物理关联的机会,对手可能会使用一次性电子邮件服务。
预防措施:由于该技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易缓解。
检测:大部分活动将在目标组织的可见范围之外进行,使得检测此类行为变得困难。检测工作可能集中在对手生命周期的相关阶段,例如在初始访问期间(例如:网络钓鱼)。
云账户
介绍:对手可能会创建云提供商账户,用于目标定位。对手可以使用云账户来进一步其操作,包括利用云存储服务如Dropbox、MEGA、Microsoft OneDrive或AWS S3存储桶进行向云存储的外传或上传工具。云账户还可以用于获取基础设施,例如虚拟私有服务器或无服务器基础设施。建立云账户可能允许对手在不管理自己服务器的情况下开发复杂的能力。创建云账户还可能要求对手建立电子邮件账户以注册云提供商。
预防措施:由于该技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易缓解。
检测:大部分活动将在目标组织的可见范围之外进行,使得检测此类行为变得困难。检测工作可能集中在对手生命周期的相关阶段,例如在外传期间(例如:将数据传输到云账户)。
7. 获取能力
恶意软件
介绍:对手可能会购买、盗取或下载在攻击过程中使用的恶意软件。恶意软件可以包括有效载荷、投放器、后期妥协工具、后门、打包工具和C2协议。对手可能会获取恶意软件来支持他们的操作,获取远程控制机器、规避防御和执行后期妥协行为的方法。除了从互联网上下载免费的恶意软件,对手还可能从第三方实体购买这些能力。第三方实体可以包括专门从事恶意软件开发的技术公司、犯罪市场(包括恶意软件即服务,或MaaS)或个人。除了购买恶意软件外,对手还可能从第三方实体(包括其他对手)盗取和重新利用恶意软件。
预防措施:由于这种技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易减轻其影响。
检测:可以考虑分析恶意软件的特征,这些特征可能与恶意软件提供者相关,例如使用的编译器、调试工件、代码相似性,甚至是与特定MaaS产品相关的组标识。恶意软件库也可以用来识别与开发者和利用其服务的对手相关的其他样本。识别不同对手使用的恶意软件的重叠可能表明对手获取了恶意软件而不是自己开发的。在某些情况下,识别不同对手使用的恶意软件中的重叠特征可能指向一个共享的供应商;监控恶意载荷的上下文数据,例如编译时间、文件哈希值以及水印或其他可识别的配置信息。由于大部分活动发生在目标组织的可见范围之外,因此很难检测到这种行为。检测工作可以集中在对手生命周期的后期妥协阶段。
工具
介绍:对手可能会购买、盗取或下载在攻击过程中使用的软件工具。工具可以是开源或闭源的,免费的或商业的。工具可以被对手用于恶意目的,但(与恶意软件不同)并非旨在用于这些目的(例如:PsExec
)。工具的获取可能涉及商业软件许可证的采购,包括红队工具如Cobalt Strike
。商业软件可以通过购买、盗取许可证(或已许可的软件副本)或破解试用版来获得。对手可能获取工具以支持他们的操作,包括支持后期妥协行为的执行。除了免费下载或购买软件外,对手还可能从第三方实体(包括其他对手)盗取软件和/或软件许可证。
预防措施:由于这种技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易减轻其影响。
检测:监控恶意载荷的上下文数据,例如编译时间、文件哈希值以及水印或其他可识别的配置信息。在某些情况下,恶意软件库也可以用来识别与对手相关的工具使用特征,例如Cobalt Strike载荷中的水印。由于大部分活动发生在目标组织的可见范围之外,因此很难检测到这种行为。检测工作可以集中在对手生命周期的后期妥协阶段。
代码签名证书
介绍:对手可能会购买和/或盗取在攻击过程中使用的代码签名证书。代码签名是对可执行文件和脚本进行数字签名的过程,以确认软件作者并保证代码未被篡改或损坏。代码签名为开发者提供了程序的真实性保证,并保证程序未被篡改。用户和/或安全工具可能会比未签名的代码更信任签名的代码,即使他们不知道是谁颁发了证书或谁是作者。在代码签名之前,对手可能会购买或盗取代码签名证书以在操作中使用。购买代码签名证书可能是通过一个前台组织进行的,或者使用从先前被破坏的实体中盗取的信息来向证书提供者验证为该实体。对手还可能直接从受感染的第三方中盗取代码签名材料。
预防措施:由于这种技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易减轻其影响。
检测:可以考虑分析代码签名证书的特征,这些特征可能与对手和/或其开发者相关,例如指纹、使用的算法、有效期、通用名称和证书颁发机构。恶意软件库也可以用来识别与对手相关的其他样本,并识别对手在获取代码签名证书时使用的模式。由于大部分活动发生在目标组织的可见范围之外,因此很难检测到这种行为。检测工作可以集中在相关的后续行为上,例如代码签名或安装根证书。
数字证书
介绍:对手可能会购买和/或盗取在攻击过程中使用的SSL/TLS证书。SSL/TLS证书旨在建立信任。它们包括关于密钥的信息、关于所有者身份的信息以及一个实体的数字签名,该实体已验证证书内容是正确的。如果签名有效,并且检查证书的人信任签名者,那么他们就知道可以使用该密钥与其所有者进行通信。对手可能会购买或盗取SSL/TLS证书以进一步他们的操作,例如加密C2流量(例如:使用Web协议的非对称加密),甚至在证书被信任或被添加到信任根目录时启用中间人攻击(例如:安装根证书)。购买数字证书可能是通过一个前台组织进行的,或者使用从先前被破坏的实体中盗取的信息来向证书提供者验证为该实体。对手还可能直接从受感染的第三方中盗取证书材料,包括证书颁发机构。对手可能会注册或劫持域名,随后为其购买SSL/TLS证书。存在一些证书颁发机构允许对手获取SSL/TLS证书,例如域名验证证书,免费的。在获得数字证书后,对手可能会将该证书安装在他们控制的基础设施上(参见安装数字证书)。
预防措施:由于这种技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易减轻其影响。
检测:可以考虑使用服务来帮助跟踪新发布的证书和/或互联网上网站使用的证书。在某些情况下,可以基于已知的证书信息来揭示其他对手基础设施。对手工具的一些服务器端组件可能为SSL/TLS证书设置了默认值;监控记录的网络流量,响应扫描显示协议头和正文值,这些值可能会购买和/或盗取SSL/TLS证书,用于攻击。检测工作可以集中在相关行为上,例如Web协议、非对称加密和/或安装根证书。
漏洞利用
介绍:对手可能会购买、盗取或下载在攻击过程中使用的漏洞利用。漏洞利用利用软件或硬件中的漏洞,导致计算机硬件或软件出现意外或不可预期的行为。对手可能会找到/修改在线的漏洞利用或从漏洞利用供应商处购买,而不是自己开发漏洞利用。除了从互联网上下载免费的漏洞利用,对手还可能从第三方实体购买漏洞利用。第三方实体可以包括专门从事漏洞利用开发的技术公司、犯罪市场(包括漏洞利用工具包)或个人。除了购买漏洞利用外,对手还可能从第三方实体(包括其他对手)盗取和重新利用漏洞利用。对手可能会监控漏洞利用提供者论坛,以了解现有和新发现的漏洞利用的状态。通常在发现漏洞利用和公开发布之间会有一个延迟。对手可能会针对已知从事漏洞研究和开发的系统进行攻击,以获取这些知识用于后续操作。对手可能会在对手生命周期的各个阶段使用漏洞利用(例如,利用面向公众的应用程序漏洞、客户端执行漏洞利用、权限提升漏洞利用、防御规避漏洞利用、凭证访问漏洞利用、远程服务漏洞利用和应用程序或系统漏洞利用)。
预防措施:由于这种技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易减轻其影响。
检测:由于大部分活动发生在目标组织的可见范围之外,因此很难检测到这种行为。检测工作可以集中在与利用漏洞使用相关的行为上(例如,利用面向公众的应用程序漏洞、客户端执行漏洞利用、权限提升漏洞利用、防御规避漏洞利用、凭证访问漏洞利用、远程服务漏洞利用和应用程序或系统漏洞利用)。
漏洞
介绍:对手可能会获取可以在攻击过程中使用的漏洞信息。漏洞是计算机硬件或软件中的一种弱点,对手可能会利用这种弱点导致意外或不可预期的行为。对手可能会通过搜索公开数据库或获取关闭的漏洞数据库中的信息来找到漏洞信息。对手可能会监控漏洞披露/数据库,以了解现有和新发现的漏洞的状态。通常在发现漏洞和公开发布之间会有一个延迟。对手可能会针对已知从事漏洞研究的系统(包括商业供应商)进行攻击。对漏洞的了解可能会导致对手寻找现有的漏洞利用(例如,漏洞利用)或尝试自己开发一个(例如,漏洞利用)。
预防措施:由于这种技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易减轻其影响。
检测:由于大部分活动发生在目标组织的可见范围之外,因此很难检测到这种行为。检测工作可以集中在与漏洞利用的潜在使用相关的行为上(例如,利用面向公众的应用程序漏洞、客户端执行漏洞利用、权限提升漏洞利用、防御规避漏洞利用、凭证访问漏洞利用、远程服务漏洞利用和应用程序或系统漏洞利用)。
人工智能
介绍:对手可能获得生成性人工智能工具的访问权限,例如大型语言模型(LLM),以在攻击过程中辅助各种技术。这些工具可以用于告知、增强和支持各种恶意任务,包括进行侦察、创建基本脚本、辅助社交工程,甚至开发有效载荷。例如,通过利用公开可用的LLM,对手实际上是将某些任务外包或自动化给工具。利用AI,对手可以起草和生成用于钓鱼/钓鱼信息活动的多种书面语言内容。同样的公开可用工具还可以进一步支持漏洞或其他攻击性研究,支持开发能力。AI工具还可以通过生成、改进或其他方式增强(例如,模糊文件或信息)恶意脚本和有效载荷来自动化技术任务。
预防措施:由于这种技术基于在企业防御和控制范围之外执行的行为,因此无法通过预防性控制轻易减轻其影响。
8.阶段功能
上传恶意软件
介绍:对手可能将恶意软件上传到第三方或对手控制的基础设施,以便在目标定位期间访问。恶意软件可以包括有效负载、传送器、后渗透工具、后门以及各种其他恶意内容。对手可能上传恶意软件来支持他们的操作,例如将有效负载放置在可通过互联网访问的Web服务器上,从而使受害者网络能够进行入口工具传输。恶意软件可能会放置在对手先前购买/租赁的基础设施(获取基础设施)或者对其进行了其他方式的妥协(妥协基础设施)。恶意软件还可以在Web服务(如GitHub或Pastebin)上进行分段,或者托管在星际文件系统(IPFS)上,后者的去中心化内容存储使得删除恶意文件变得困难。对手可以上传植入后门的文件,例如应用程序二进制文件、虚拟机映像或容器映像,到第三方软件商店或仓库(例如GitHub、CNET、AWS社区AMI、Docker Hub)。通过用户执行,受害者可能会直接下载/安装这些植入后门的文件。
预防措施:由于这是在企业防御和控制范围之外执行的行为,因此很难通过预防控制进行缓解。
检测:如果已经识别出基础设施或恶意软件中的模式,互联网扫描可能会揭示对手已经分段恶意软件,使其可用于目标定位。这种活动很大一部分会发生在目标组织的可见性之外,因此检测此行为可能会很困难。检测工作可能集中在对手生命周期的后渗透阶段,如用户执行或入口工具传输。
上传工具
介绍:对手可能将工具上传到第三方或对手控制的基础设施,以便在目标定位期间访问。工具可以是开源或闭源、免费或商业化。工具可以被对手用于恶意目的,但(与恶意软件不同)它们并不是为这些目的而设计的(例如PsExec)。对手可能上传工具来支持他们的操作,例如通过将其放置在可通过互联网访问的Web服务器上,使工具可用于受害者网络来启用入口工具传输。工具可能会被放置在对手先前购买/租赁的基础设施(获取基础设施)或者对其进行了其他方式的妥协(妥协基础设施)。工具还可以在Web服务上进行分段,例如对手控制的GitHub存储库,或者通过平台即服务提供的方式来轻松部署应用程序。对手可以避免上传工具的需要,通过使受害者机器下载工具直接从第三方托管位置(例如非对手控制的GitHub存储库),包括工具的原始托管站点。
预防措施:由于这是在企业防御和控制范围之外执行的行为,因此很难通过预防控制进行缓解。
检测:如果已经识别出基础设施或工具中的模式,互联网扫描可能会揭示对手已经分段工具,使其可用于目标定位。这种活动很大一部分会发生在目标组织的可见性之外,因此检测此行为可能会很困难。检测工作可能集中在对手生命周期的后渗透阶段,如入口工具传输。
安装数字证书
介绍:对手可能安装SSL/TLS证书,用于目标定位期间的使用。SSL/TLS证书是可安装在服务器上的文件,用于在系统之间启用安全通信。数字证书包括关于密钥的信息,其所有者身份的信息,以及已验证证书内容正确性的实体的数字签名。如果签名有效,并且检查证书的人信任签名者,则他们知道可以使用该密钥与其所有者安全地通信。证书可以上传到服务器,然后配置服务器以使用证书来启用与其的加密通信。对手可能安装SSL/TLS证书,以推进他们的操作,例如加密C2流量(例如Web协议的非对称加密)或增加对凭证窃取站点的可信度。数字证书可能适用于多种服务器类型,包括Web服务器和电子邮件服务器。对手可以获取数字证书(参见数字证书)或创建自签名证书(参见数字证书)。然后,数字证书可以安装在对手控制的基础设施上,该基础设施可能已被获取(获取基础设施)或先前受到妥协(妥协基础设施)。
预防措施:由于这是在企业防御和控制范围之外执行的行为,因此很难通过预防控制进行缓解。
检测:考虑使用服务来帮助跟踪在Internet上使用的证书。在某些情况下,可能可以通过已知的证书信息来旋转,以揭示其他对手基础设施。检测工作可能集中在相关行为,如Web协议或非对称加密。
无意中的目标
介绍:对手可能准备一个操作环境,用于感染通过正常浏览访问网站的系统。终端系统可能通过浏览到对手控制的网站而受到妥协,如无意中的妥协。在这种情况下,通常针对利用用户的Web浏览器进行利用(通常不需要在着陆网站后进行任何额外的用户交互),但对手也可能设置用于非利用行为的网站,如应用访问令牌。在无意中的妥协之前,对手必须准备交付利用的资源,以便用户浏览到对手控制的网站。无意中的内容可以在已被获取(获取基础设施)或先前受到妥协(妥协基础设施)的对手控制基础设施上分段。对手可能会上传或注入恶意Web内容,例如JavaScript,到网站中。这可以通过多种方式实现,包括:将恶意脚本插入网页或其他用户可控制的Web内容(例如论坛帖子)中,修改从公共可写云存储桶提供给网站的脚本文件,制作恶意网络广告并通过合法广告提供者购买广告空间(即恶意广告)。除了分段内容以利用用户的Web浏览器外,对手还可以分段脚本内容以对用户的浏览器进行配置文件(如收集受害者主机信息),以确保在尝试利用之前它是脆弱的。被对手入侵并用于分段无意中的网站,可能是由特定社区访问的网站,例如政府、特定行业或地区,其目标是基于共同利益来妥协特定用户或一组用户。这种针对性的活动被称为战略网站妥协或饮水机攻击。对手在获取基础设施(域名)期间,可能购买类似于合法域名的域名(例如同形字符、域名拼写变体、不同顶级域等),以帮助促成无意中的妥协。
预防措施:由于这是在企业防御和控制范围之外执行的行为,因此很难通过预防控制进行缓解。
检测:如果已经识别出恶意Web内容中的基础设施或模式,互联网扫描可能会揭示对手已经分段Web内容,以用于战略网站妥协。这种活动很大一部分会发生在目标组织的可见性之外,因此检测此行为可能会很困难。检测工作可能集中在对手生命周期的其他阶段,如无意中的妥协或客户端执行的利用。
链接目标
介绍:对手可能设立由链接引用的资源,可在目标定位期间使用。对手可能依赖于用户点击恶意链接以泄露信息(包括凭据)或执行入口,如恶意链接。链接可以用于精准钓鱼,例如发送电子邮件并附带社会工程文本,以诱使用户积极点击或复制并粘贴URL到浏览器中。在针对信息的钓鱼(如精准钓鱼链接)或用于系统初始访问的钓鱼之前(如精准钓鱼链接),对手必须为链接目标的资源设立资源。通常,链接目标的资源将是一个HTML页面,可能包括一些客户端脚本,如JavaScript,以决定向用户提供什么内容。对手可能克隆合法网站作为链接目标,这可能包括克隆合法Web服务的登录页面或组织登录页面,以在精准钓鱼链接期间收集凭据。对手还可以上传恶意软件,并使链接目标指向用户下载/执行的恶意软件。在获取基础设施(域名)期间,对手可能购买类似于合法域名的域名(例如同形字符、域名拼写变体、不同顶级域等),以帮助促成恶意链接。链接可能由对手编写,以掩盖真实目标,以欺骗受害者通过滥用URL模式并增加钓鱼的有效性。对手还可能使用链接缩短服务和平台即服务提供者的免费或付费帐户来托管链接目标,同时利用这些提供者的广泛信任域,以避免在将受害者重定向到恶意页面时被阻止。此外,对手可能通过唯一生成的URI/URL(包括一次性、单次使用链接)提供各种恶意链接。最后,对手可能利用星际文件系统(IPFS)的去中心化特性来托管难以删除的链接目标。
预防措施:由于这是在企业防御和控制范围之外执行的行为,因此很难通过预防控制进行缓解。
检测:如果已经识别出恶意Web内容中的基础设施或模式,互联网扫描可能会揭示对手已经分段Web内容,使其可用于目标定位。这种活动很大一部分会发生在目标组织的可见性之外,因此检测此行为可能会很困难。检测工作可能集中在对手生命周期的其他阶段,如在精准钓鱼链接、精准钓鱼链接或恶意链接期间。
SEO毒化
介绍:对手可能对影响搜索引擎优化(SEO)的机制进行毒化,以进一步吸引阶段化的能力向潜在受害者发起攻击。搜索引擎通常根据它们的Web爬虫和算法计算出的网站排名/分数/声誉来向用户显示结果。为了帮助推动无意中的妥协,对手可能分段内容,明确操纵SEO排名,以推广在搜索引擎中托管其恶意有效负载(如无意中的目标)。毒化SEO排名可能涉及各种技巧,例如将关键字(包括以隐藏文本形式)塞入受到妥协的网站中。这些关键字可以与预期受害者的兴趣/浏览习惯相关,也可以是更广泛、季节性流行的主题(例如选举、热门新闻)。对手还可能购买或植入指向托管能力的传入链接,以提升网站计算出的相关性和声誉。SEO毒化还可以与逃避重定向和其他伪装机制结合使用(例如测量鼠标移动或根据浏览器用户代理、用户语言/本地化设置或HTTP标头提供内容),以提供SEO输入并避免防御者的审查。
预防措施:由于这是在企业防御和控制范围之外执行的行为,因此很难通过预防控制进行缓解。
检测:如果已经识别出与SEO毒化或无意中的目标相关的恶意Web内容中的基础设施或模式,互联网扫描可能会揭示对手已经分段支持战略网站妥协的Web内容。这种活动很大一部分会发生在目标组织的可见性之外,因此检测此行为可能会很困难。检测工作可能集中在对手生命周期的其他阶段,如无意中的妥协或客户端执行的利用。
三、初始访问
1.内容注入
介绍:攻击者可以通过在线网络流量将恶意内容注入系统,从而获得访问权限并与受害者持续通信。与其引诱受害者使用受损网站上托管的恶意有效载荷(即先按目标驱动,然后按妥协驱动),对手最初可能会通过受损的数据传输渠道访问受害者,在那里他们可以操纵流量和/或注入自己的内容。这些受损的在线网络信道也可以用于向已经受损的系统递送额外的有效载荷(即,入口工具传输)和其他数据。敌人可能会以各种方式向受害者系统注入内容,包括:从中间,敌人处于合法的在线客户端-服务器通信之间(注意:这与中间的敌人类似,但不同,中间的敌人仅描述企业环境中的AiTM活动)从侧面,恶意内容被注入并作为对合法在线服务器请求的虚假响应而竞争到客户端内容注入通常是上游通信渠道受损的结果,例如在互联网服务提供商(ISP)级别,“合法拦截”就是这样
预防措施:在可能的情况下,确保通过可信VPN等服务对在线流量进行适当加密;考虑阻止下载/传输和执行已知在敌方战役中使用的可能不常见的文件类型。
检测:监视是否创建了意外和异常的文件,这些文件可能表明通过在线网络通信注入了恶意内容;监视是否存在其他异常网络流量,这些流量可能表明传输到系统的其他恶意内容。使用网络入侵检测系统(有时带有SSL/TLS检查)来查找已知的恶意有效载荷、内容混淆和利用代码;在端点系统上查找可能指示成功折衷的行为,例如浏览器进程的异常行为。这可能包括写入磁盘的可疑文件、进程注入试图隐藏执行的证据,或发现的证据。
2.驾车路过妥协
介绍:敌人可以通过用户在正常浏览过程中访问网站来访问系统。使用这种技术,用户的网络浏览器通常是被利用的目标,但对手也可能使用受损的网站进行非利用行为,例如获取应用程序访问令牌。存在多种将漏洞代码传递到浏览器的方式(即按目标驱动),包括:当对手注入某种形式的恶意代码(如JavaScript、iFrame和跨站点脚本)时,合法网站会受到威胁。从可公开写入的云存储桶提供给合法网站的脚本文件会被对手修改。恶意广告是通过合法的广告提供商付费和提供的(即恶意广告)。内置的web应用程序接口可用于插入任何其他类型的对象,这些对象可用于显示web内容或包含在访问客户端上执行的脚本(如论坛帖子、评论和其他用户可控的web内容)。通常,对手使用的网站是特定社区访问的网站,如政府、特定行业或地区,其目标是基于共同利益损害特定用户或一组用户。这种有针对性的战役通常被称为战略性的网络妥协或水坑攻击。这种情况有几个已知的例子。典型的折衷驱动过程:用户访问用于托管对手控制的内容的网站。脚本会自动执行,通常会在浏览器和插件的版本中搜索潜在的易受攻击版本。用户可能需要通过启用脚本或活动网站组件并忽略警告对话框来协助此过程。一旦发现有漏洞的版本,就会向浏览器发送利用漏洞的代码。如果利用成功,那么它将在用户的系统上执行对手的代码,除非有其他保护措施。在某些情况下,在发送漏洞代码之前,需要在初次扫描后再次访问网站。与利用面向公众的应用程序不同,该技术的重点是在访问网站时利用客户端上的软件。这通常会让对手访问内部网络上的系统,而不是DMZ中的外部系统。敌人还可能使用受损的网站将用户交付给恶意应用程序,该恶意应用程序旨在窃取应用程序访问令牌(如OAuth令牌),以获得对受保护应用程序和信息的访问权限。这些恶意应用程序是通过合法网站上的弹出窗口提供的。
预防措施:浏览器沙盒可以用来减轻利用的一些影响,但沙盒逃逸可能仍然存在;其他类型的虚拟化和应用程序细分也可以减轻客户端利用的影响。这些类型的系统可能仍然存在额外利用的风险和实施中的弱点;查找利用漏洞期间使用的行为的安全应用程序,如Windows Defender Exploit Guard(WDEG)和增强型缓解体验工具包(EMET),可用于缓解某些利用行为。控制流完整性检查是另一种可能识别和阻止软件利用的方法。其中许多保护取决于体系结构和目标应用程序二进制文件的兼容性;对于通过广告提供的恶意代码,广告拦截程序可以从一开始就帮助阻止该代码的执行;脚本阻塞扩展可以帮助阻止在利用过程中通常使用的JavaScript的执行;确保所有浏览器和插件都保持更新,这有助于防止该技术的漏洞利用阶段。使用启用了安全功能的现代浏览器。
检测:防火墙和代理可以检查URL中是否存在潜在的已知坏域或参数。他们还可以对网站及其请求的资源进行基于声誉的分析,例如域名的年龄、注册对象、是否在已知的坏名单上,或者之前有多少其他用户连接过它;监视写入磁盘的新建文件,以通过用户在正常浏览过程中访问网站来访问系统;监视到用于发送或接收数据的不受信任主机的新构建的网络连接;监控其他异常网络流量,这些流量可能指示向系统传输了其他工具。使用网络入侵检测系统(有时带有SSL/TLS检查)来查找已知的恶意脚本(侦察、堆喷和浏览器识别脚本已被频繁重用)、常见的脚本混淆和利用代码;在端点系统上查找可能指示成功折衷的行为,例如浏览器进程的异常行为。这可能包括写入磁盘的可疑文件、进程注入试图隐藏执行的证据,或发现的证据。
3.开发面向公众的应用程序
介绍:敌人可能试图利用面向互联网的主机或系统中的弱点来初始访问网络。系统中的漏洞可能是软件错误、临时故障或配置错误。被利用的应用程序通常是网站/web服务器,但也可以包括数据库(如SQL)、标准服务(如SMB或SSH)、网络设备管理和管理协议(如SNMP和Smart Install),以及任何其他具有Internet可访问开放套接字的系统。根据被利用的缺陷,这也可能涉及利用防御规避或利用客户端执行。如果应用程序托管在基于云的基础设施上和/或被容器化,那么利用它可能会导致底层实例或容器的损坏。这可以为对手提供访问云或容器API的路径,通过Escape to host利用容器主机访问,或利用薄弱的身份和访问管理策略。敌人也可能利用边缘网络基础设施和相关设备,特别是针对不支持强大的基于主机的防御的设备。对于网站和数据库,OWASP前10名和CWE前25名突出了最常见的基于web的漏洞。
预防措施:应用程序隔离将限制被利用的目标可以访问的其他进程和系统功能;Web应用程序防火墙可用于限制应用程序的暴露,以防止利用流量到达应用程序;分段面向外部的服务器和服务,这些服务器和服务来自具有DMZ或独立托管基础设施的网络的其他部分;对服务帐户使用最低权限将限制被利用的进程在系统其他部分上获得的权限;通过对外部暴露的应用程序使用补丁管理,定期更新软件;定期扫描面向外部的系统中的漏洞,并制定程序,在通过扫描和公开披露发现关键漏洞时快速修补系统。
检测:根据可用的工具,检测软件利用可能很困难。软件利用可能并不总是成功,或者可能导致被利用的进程变得不稳定或崩溃。Web应用程序防火墙可能会检测到试图利用漏洞的不当输入;使用深度数据包检查来查找常见漏洞流量的工件,例如SQL注入字符串或已知有效负载。例如,监视对手通常通过不安全的反序列化滥用的连续链接功能(即小工具链接),以利用面向公众的应用程序进行初始访问。
4.外部远程服务
介绍:敌人可以利用面向外部的远程服务来初始访问和/或在网络中保持。VPN、Citrix和其他访问机制等远程服务允许用户从外部位置连接到内部企业网络资源。通常有远程服务网关来管理这些服务的连接和凭据身份验证。Windows远程管理和VNC等服务也可以在外部使用。访问有效帐户以使用该服务通常是一项要求,可以通过凭据制药或在破坏企业网络后从用户那里获得凭据来获得。在操作过程中,访问远程服务可能被用作冗余或持久访问机制。也可以通过不需要身份验证的公开服务获得访问权限。在容器化环境中,这可能包括公开的Docker API、Kubernetes API服务器、kubelet或web应用程序,如Kubernetesdashboard。
预防措施:禁用或阻止可能不必要的远程可用服务;限制通过集中管理的集中器(如VPN和其他管理的远程访问系统)访问远程服务;对远程服务帐户使用强大的双因素或多因素身份验证,以降低对手利用被盗凭据的能力,但要注意某些双因素身份验证实现的多因素身份拦截技术;拒绝通过使用网络代理、网关和防火墙直接远程访问内部系统。
检测:当访问暴露的远程服务不需要身份验证时,监视后续活动,例如异常外部使用暴露的API或应用程序;遵循检测对手使用有效帐户对远程服务进行身份验证的最佳实践。收集身份验证日志并分析异常访问模式、活动窗口和正常工作时间以外的访问;监视可能使用有效帐户访问和/或使用外部远程服务在网络中保持的新构建的网络连接。外部远程服务的使用可能是合法的,这取决于环境和使用方式。其他因素,如访问模式和远程登录后发生的活动,可能表明使用外部远程服务的可疑或恶意行为;监控和分析与不遵循预期协议标准和流量的协议相关的流量模式和数据包检查(例如,不属于已建立流量的无关数据包、无端或异常流量模式、异常语法或结构)。考虑与进程监控和命令行的相关性,以检测异常进程执行和与流量模式相关的命令行参数(例如,监控使用文件时的异常情况,这些文件通常不会启动相应协议的连接);监视源自未知/意外硬件设备的网络流量。本地网络流量元数据(如源MAC寻址)以及网络管理协议(如DHCP)的使用可能有助于识别硬件。
5.硬件添加
介绍:对手可能会将计算机配件、网络硬件或其他计算设备引入系统或网络,这些设备可以用作获取访问权限的载体。不仅仅是通过可移动存储连接和分发有效负载(即通过可移动介质进行复制),还可以使用更强大的硬件添加来将新的功能和/或特性引入系统,然后这些功能或特性可能会被滥用。虽然威胁参与者使用的公开参考文献很少,但许多红队/渗透测试人员利用硬件添加进行初始访问。商业和开源产品可以利用被动网络窃听、网络流量修改(即中间的广告)、键击注入、通过DMA读取内核内存、向现有网络添加新的无线访问等功能。
预防措施:建立网络访问控制策略,例如使用设备证书和802.1x标准。将DHCP的使用限制在已注册的设备上,以防止未注册的设备与受信任的系统通信;通过端点安全配置和监控代理阻止未知设备和附件。
检测:配置管理数据库(CMDB)和其他资产管理系统可以帮助检测不应该存在于网络上的计算机系统或网络设备;监视与连接到系统的计算机硬件和其他附件(尤其是新的或未知的)相关的新建驱动器或其他相关事件。端点传感器可能能够通过USB、Thunderbolt和其他外部设备通信端口检测硬件的添加;监视源自未知/意外硬件设备的网络流量。本地网络流量元数据(如源MAC寻址)以及网络管理协议(如DHCP)的使用可能有助于识别硬件。
6.网络钓鱼
网络钓鱼附件
介绍:攻击者可能会发送带有恶意附件的鱼叉式网络钓鱼电子邮件,试图访问受害者系统。鱼叉式钓鱼附件是鱼叉式网络钓鱼的一种特定变体。鱼叉式钓鱼附件与其他形式的鱼叉式网络钓鱼的不同之处在于,它使用了附在电子邮件上的恶意软件。所有形式的鱼叉式网络钓鱼都是针对特定个人、公司或行业的电子社会工程。在这种情况下,对手会在鱼叉式网络钓鱼电子邮件中附加一个文件,通常依靠用户执行来获得执行。网络钓鱼还可能涉及社会工程技术,例如冒充可信来源。附件有许多选项,如Microsoft Office文档、可执行文件、PDF或存档文件。打开附件(并可能点击过去的保护)后,对手的有效载荷会利用漏洞或直接在用户的系统上执行。鱼叉式网络钓鱼电子邮件的文本通常试图给出应该打开文件的合理理由,并可能解释如何绕过系统保护。电子邮件还可能包含如何解密附件的说明,如zip文件密码,以避开电子邮件边界防御。敌人经常操纵文件扩展名和图标,以使附加的可执行文件看起来是文档文件,或者利用一个应用程序的文件看起来是另一个应用的文件。
预防措施:防病毒还可以自动隔离可疑文件;网络入侵预防系统和设计用于扫描和删除恶意电子邮件附件的系统可用于阻止活动;默认情况下,阻止不应通过电子邮件传输的未知或未使用的附件,这是防止某些矢量(如.scr、.exe、.pif、.cpl等)的最佳做法。一些电子邮件扫描设备可以打开并分析压缩和加密格式,如zip和rar,这些格式可能用于隐藏恶意附件;使用反欺骗和电子邮件身份验证机制,根据发件人域的有效性检查(使用SPF)和邮件的完整性(使用DKIM)过滤邮件。在组织内启用这些机制(通过DMARC等策略)可以使收件人(组织内和跨域)执行类似的消息过滤和验证;用户可以接受识别社会工程技术和鱼叉式网络钓鱼电子邮件的培训。
检测:监控第三方应用程序日志、消息和/或其他可能发送带有恶意附件的鱼叉式网络钓鱼电子邮件以试图访问受害者系统的工件。基于DKIM+SPF或邮件头分析的过滤可以帮助检测电子邮件发件人何时被欺骗。当恶意文档和附件被扫描存储在电子邮件服务器或用户计算机上时,反病毒可能会检测到它们。监视从Microsoft Office和其他生产力软件生成的可疑子进程;监控带有恶意附件的鱼叉式网络钓鱼电子邮件中新构建的文件,试图访问受害者系统;监控和分析与不符合预期协议标准和流量的协议相关的SSL/TLS流量模式和数据包检查(例如,不属于已建立流量的无关数据包、无端或异常流量模式、异常语法或结构)。考虑与进程监控和命令行的相关性,以检测异常进程执行和与流量模式相关的命令行参数(例如,监控使用文件时的异常情况,这些文件通常不会启动相应协议的连接)。基于DKIM+SPF或邮件头分析的过滤可以帮助检测电子邮件发件人何时被欺骗;监控网络数据中不常见的数据流。使用网络的进程通常不具有网络通信或以前从未见过,这些进程是可疑的。
网络钓鱼链接
介绍:攻击者可能会发送带有恶意链接的鱼叉式网络钓鱼电子邮件,试图访问受害者系统。带有链接的鱼叉式网络钓鱼是鱼叉式网站钓鱼的一种特定变体。它与其他形式的鱼叉式网络钓鱼不同之处在于,它使用链接下载电子邮件中包含的恶意软件,而不是将恶意文件附加到电子邮件本身,以避免可能检查电子邮件附件的防御。网络钓鱼还可能涉及社会工程技术,例如冒充可信来源。所有形式的鱼叉式网络钓鱼都是针对特定个人、公司或行业的电子社会工程。在这种情况下,恶意电子邮件包含链接。通常,链接会附带社会工程文本,并要求用户主动点击或复制URL并粘贴到浏览器中,利用用户执行。访问的网站可能会利用漏洞危害网络浏览器,或者首先会提示用户下载应用程序、文档、zip文件,甚至可执行文件,这取决于电子邮件的借口。对抗还可能包括旨在与电子邮件阅读器直接交互的链接,包括旨在直接利用最终系统的嵌入图像。此外,对手可能会使用看似良性的链接,滥用特殊字符来模仿合法网站(称为“IDN同源图攻击”)。URL也可以通过利用URL模式中的怪癖来混淆,例如接受基于整数或十六进制的主机名格式,以及自动丢弃“@”符号之前的文本:例如,hxxp://google.com@1157586937
.对手还可以利用链接进行同意钓鱼,通常使用OAuth 2.0请求URL,当用户接受该URL时,该URL为恶意应用程序提供权限/访问权限,从而允许对手窃取应用程序访问令牌。这些被盗的访问令牌允许对手通过API调用代表用户执行各种动作。敌人还可能利用鱼叉式网络钓鱼链接窃取允许立即访问受害者环境的应用程序访问令牌。例如,用户可能会通过“同意网络钓鱼”被引诱,通过恶意的OAuth 2.0请求URL授予对手权限/访问权限。类似地,恶意链接也可能以基于设备的授权为目标,例如OAuth 2.0设备授权授予流,其通常用于在没有UI/浏览器的情况下对设备进行身份验证。被称为“设备代码钓鱼”的对手可能会发送一个链接,将受害者引导到恶意授权页面,在该页面上,用户被诱骗输入生成设备令牌的代码/凭据。
预防措施:根据必要性和最低权限原则,审核应用程序及其权限,以确保对数据和资源的访问受到限制;确定某些可用于鱼叉式网络钓鱼的网站是否对业务运营是必要的,如果活动无法得到很好的监控或构成重大风险,则考虑阻止访问;使用反欺骗和电子邮件身份验证机制,根据发件人域的有效性检查(使用SPF)和邮件的完整性(使用DKIM)过滤邮件。在组织内启用这些机制(通过DMARC等策略)可以使收件人(组织内和跨域)执行类似的消息过滤和验证;此外,策略可以强制执行/安装浏览器扩展,以防止IDN和同源图攻击;Azure AD管理员对用户向不熟悉或未经验证的第三方应用程序授予同意的能力施加限制;用户可以接受培训,以识别社会工程技术和带有恶意链接的鱼叉式网络钓鱼电子邮件,其中包括使用OAuth 2.0进行同意的网络钓鱼。此外,用户可以对他们访问的域进行视觉检查;然而,ASCII和IDN域中的同形图以及URL模式混淆可能会使手动检查变得困难。网络钓鱼培训和其他网络安全培训可能会提高人们在访问网站之前检查URL的意识。
检测:监控第三方应用程序日志、消息和/或其他可能发送带有恶意链接的鱼叉式网络钓鱼电子邮件以试图访问受害者系统的工件。基于DKIM+SPF或邮件头分析的过滤可以帮助检测电子邮件发件人何时被欺骗。电子邮件中的URL检查(包括扩展缩短的链接和识别模糊的URL)可以帮助检测导致已知恶意网站的链接。引爆室可以用来检测这些链接,并自动转到这些网站以确定它们是否具有潜在的恶意,或者在用户访问链接时等待并捕获内容;此外,监控浏览器日志中ASCII和国际化域名中滥用不同字符集的同形图(例如,受信任网站的西里尔文版本与拉丁文版本);监控和分析与不符合预期协议标准和流量的协议相关的SSL/TLS流量模式和数据包检查(例如,不属于已建立流量的无关数据包、无端或异常流量模式、异常语法或结构)。考虑与进程监控和命令行的相关性,以检测异常进程执行和与流量模式相关的命令行参数(例如,监控使用文件时的异常情况,这些文件通常不会启动相应协议的连接);此外,通过使用滥用不同字符集的国际化域名(例如受信任网站的西里尔文版本与拉丁文版本),监控克隆网站和同形图的网络流量;监控网络数据中不常见的数据流。使用网络的进程通常不具有网络通信或以前从未见过,这些进程是可疑的。
通过服务进行网络钓鱼
介绍:攻击者可能通过第三方服务发送鱼叉式网络钓鱼消息,试图访问受害者系统。通过服务进行鱼叉式网络钓鱼是鱼叉式网站钓鱼的一种特定变体。它与其他形式的鱼叉式网络钓鱼不同之处在于,它使用第三方服务,而不是直接通过企业电子邮件渠道。所有形式的鱼叉式网络钓鱼都是针对特定个人、公司或行业的电子社会工程。在这种情况下,对手通过各种社交媒体服务、个人网络邮件和其他非企业控制的服务发送消息。与企业相比,这些服务更有可能具有不那么严格的安全策略。与大多数鱼叉式网络钓鱼一样,目标是与目标建立融洽的关系,或以某种方式获得目标的兴趣。敌人会创建虚假的社交媒体账户,并向员工发送潜在工作机会的信息。这样做可以为询问在环境中运行的服务、策略和软件提供合理的理由。然后,对手可以通过这些服务发送恶意链接或附件。一个常见的例子是通过社交媒体与目标建立融洽的关系,然后将内容发送到目标在工作计算机上使用的个人网络邮件服务。这允许对手绕过工作帐户上的一些电子邮件限制,目标更有可能打开文件,因为这是他们所期望的。如果有效载荷没有按预期工作,对手可以继续正常通信,并与目标就如何使其工作进行故障排除。
预防措施:防病毒还可以自动隔离可疑文件;确定某些社交媒体网站、个人网络邮件服务或其他可用于鱼叉式网络钓鱼的服务是否对业务运营有必要,如果活动无法得到很好的监控或构成重大风险,则考虑阻止访问;可以训练用户识别社交工程技术和带有恶意链接的鱼叉式网络钓鱼消息。
检测:监控第三方应用程序日志、消息和/或其他工件,这些工件可能通过第三方服务发送鱼叉式网络钓鱼消息,试图访问受害者系统;监控和分析与不遵循预期协议标准和流量的协议相关的流量模式和数据包检查(例如,不属于已建立流量的无关数据包、无端或异常流量模式、异常语法或结构)。考虑与进程监控和命令行的相关性,以检测异常进程执行和与流量模式相关的命令行参数(例如,监控使用文件时的异常情况,这些文件通常不会启动相应协议的连接);监控网络数据中不常见的数据流。使用网络的进程通常不具有网络通信或以前从未见过,这些进程是可疑的。
网络钓鱼语音
介绍:敌人可能会使用语音通信来最终访问受害者系统。钓鱼语音是钓鱼语音的一种特殊变体。它与其他形式的鱼叉式网络钓鱼的不同之处在于,它使用操纵用户通过电话或其他形式的语音通信来提供对系统的访问。网络钓鱼经常涉及社会工程技术,例如冒充可信来源(例如:冒充)和/或为接收者制造紧迫感或警报。所有形式的网络钓鱼都是电子传递的社会工程。在这种情况下,对手不会直接向受害者发送恶意软件,而是依靠用户执行来传递和执行。例如,受害者可能会收到钓鱼消息,指示他们拨打电话号码,访问恶意URL、下载恶意软件或在计算机上安装对手可访问的远程管理工具(远程访问软件)。对手还可能将语音钓鱼与多因素身份验证请求生成相结合,以诱使用户泄露MFA凭据或接受身份验证提示。
预防措施:用户可以接受识别和报告社会工程技术和鱼叉式网络钓鱼企图的培训,同时也可以怀疑和验证呼叫者的身份。
检测:监控公司设备的通话日志,以识别潜在的语音网络钓鱼模式,例如与已知恶意电话号码的通话。将这些记录与系统事件关联起来。
7.通过可移动介质进行复制
介绍:通过将恶意软件复制到可移动媒体,并在媒体插入系统并执行时利用自动运行功能,敌人可能会转移到系统上,可能是那些处于断开连接或空气间隙网络上的系统。在横向移动的情况下,这可能是通过修改存储在可移动媒体上的可执行文件,或者通过复制恶意软件并将其重命名为合法文件来诱骗用户在单独的系统上执行。在初始访问的情况下,这可能通过手动操作介质、修改用于初始格式化介质的系统或修改介质的固件本身来实现。如果通过USB连接,移动设备也可能被用来感染带有恶意软件的PC。这种感染可以使用设备(Android、iOS等)实现,在某些情况下,还可以使用USB充电电缆。例如,当智能手机连接到系统时,其安装方式可能类似于USB连接的磁盘驱动器。如果移动设备上存在与连接的系统兼容的恶意软件,则该恶意软件可能会感染机器(尤其是在启用了自动运行功能的情况下)。
预防措施:在Windows 10上,启用减少攻击表面(ASR)规则以阻止未签名/不受信任的可执行文件(如.exe、.dll或.scr)从USB可移动驱动器运行;如果不需要,请禁用“自动运行”。如果业务运营不需要可移动媒体,则在组织策略级别上禁止或限制可移动媒体;限制在网络中使用USB设备和可移动媒体。
检测:监视新构建的驱动器号或到可移动介质的装入点;监视可移动媒体上访问的意外文件;监视可移动媒体上新建的文件;监视新执行的进程,这些进程在可移动介质装入后或由用户启动时从可移动介质执行。如果以这种方式使用远程访问工具进行横向移动,那么在执行之后可能会发生其他操作,例如打开用于指挥和控制以及系统和网络信息发现的网络连接。
8.供应链妥协
折衷软件依赖关系和开发工具
介绍:对手可能会在最终消费者收到软件依赖性和开发工具之前操纵软件依赖性或开发工具,以达到数据或系统泄露的目的。应用程序通常依赖于外部软件才能正常工作。在许多应用程序中用作依赖项的流行开源项目可能会成为向依赖项用户添加恶意代码的一种手段。目标定位可能特定于所需的受害者群体,也可能分布于广泛的消费者群体,但只能针对特定受害者采取额外策略。
预防措施:应用程序开发人员在选择要集成到其应用程序中的第三方库时应谨慎。此外,在可能的情况下,开发人员应该将软件依赖项锁定到特定版本,而不是在构建时提取最新版本;在可能的情况下,考虑要求开发人员从包含经过验证和批准的包的内部存储库中提取,而不是从外部存储库中;应实施补丁管理流程,以检查未使用的依赖项、未维护的和/或以前易受攻击的依赖项,不必要的功能、组件、文件和文档;还应持续监测漏洞来源,并使用自动和手动代码审查工具。
检测:通过哈希检查或其他完整性检查机制使用分布式二进制文件的验证。扫描下载中的恶意签名,并在部署前尝试测试软件和更新,同时注意潜在的可疑活动。
损害软件供应链
介绍:对手可能在最终消费者收到应用软件之前操纵应用软件,以达到数据或系统泄露的目的。软件的供应链妥协可以通过多种方式发生,包括操纵应用程序源代码、操纵该软件的更新/分发机制,或用修改后的版本替换编译后的版本。目标定位可能特定于所需的受害者群体,也可能分布于广泛的消费者群体,但只能针对特定受害者采取额外策略。
预防措施:应实施补丁管理流程,以检查未使用的应用程序、未维护和/或以前易受攻击的软件、不必要的功能、组件、文件和文档;还应持续监测漏洞来源,并使用自动和手动代码审查工具。
检测:通过哈希检查或其他完整性检查机制使用分布式二进制文件的验证。扫描下载中的恶意签名,并在部署前尝试测试软件和更新,同时注意潜在的可疑活动。
损害硬件供应链
介绍:在最终消费者收到产品之前,对手可能会出于数据或系统泄露的目的操纵产品中的硬件组件。通过修改供应链中的硬件或固件,对手可以将后门插入可能难以检测的消费者网络,并赋予对手对系统的高度控制权。硬件后门可以插入到各种设备中,例如服务器、工作站、网络基础设施或外围设备。
预防措施:使用受信任的平台模块技术和安全或受信任的引导过程来防止系统完整性受到损害。检查现有BIOS或EFI的完整性,以确定其是否容易被修改。
检测:对硬件进行物理检查,以寻找潜在的篡改。对可能被恶意操纵的操作系统前引导机制进行完整性检查,并与已知的良好基线行为进行比较。
9.受信任的关系
介绍:敌人可能会破坏或以其他方式利用能够接触到预期受害者的组织。通过可信的第三方关系进行访问会滥用现有连接,该连接可能不受保护,或者比获得网络访问权限的标准机制受到的审查更少。组织通常会向第二或第三方外部提供商授予更高的访问权限,以使其能够管理内部系统以及基于云的环境。这些关系的一些例子包括IT服务承包商、托管安全提供商、基础设施承包商(如暖通空调、电梯、物理安全)。第三方提供商的访问可能仅限于所维护的基础设施,但可能与企业的其他部分存在于同一网络上。因此,另一方用于访问内部网络系统的有效帐户可能会被泄露和使用。在Office 365环境中,组织可以授予Microsoft合作伙伴或经销商委派的管理员权限。通过损害合作伙伴或经销商帐户,对手可能能够利用现有的委托管理员关系或向客户端发送新的委托管理员报价,以获得对受害租户的管理控制权。
预防措施:要求所有委派的管理员帐户使用MFA;网络分段可用于隔离不需要广泛网络访问的基础设施组件;正确管理信任关系中各方使用的帐户和权限,以最大限度地减少该方的潜在滥用,以及该方是否受到对手的威胁。在Office 365环境中,可以在“合作伙伴关系”页面下查看合作伙伴关系和角色。
检测:配置管理数据库(CMDB)和其他资产管理系统可能有助于检测网络上不应存在的计算机系统或网络设备。监视日志以了解任何委派管理员帐户采取的意外操作;监控新构建的登录行为,这些行为可能会破坏或以其他方式利用有权访问预期受害者的组织;将其他安全系统与登录信息关联起来(例如,用户有活动登录会话,但尚未进入大楼或没有VPN访问权限);监控和分析与不遵循预期协议标准的协议相关的流量模式和数据包检查以及来自可信实体的流量流(例如,不属于已建立流的无关数据包、无端或异常流量模式、异常语法或结构)。考虑与进程监控和命令行的相关性,以检测异常进程执行和与流量模式相关的命令行参数(例如,监控使用文件时的异常情况,这些文件通常不会启动相应协议的连接)。
10.有效帐户
默认帐户
介绍:敌人可能会获取并滥用默认帐户的凭据,以此作为获得初始访问、持久性、特权提升或防御规避的手段。默认帐户是内置在操作系统中的帐户,例如Windows系统上的Guest或Administrator帐户。默认帐户还包括其他类型的系统、软件或设备上的默认工厂/提供商设置帐户,包括AWS中的根用户帐户和Kubernetes中的默认服务帐户。默认帐户不仅限于客户端计算机,还包括为网络设备和计算机应用程序等设备预设的帐户,无论这些设备是内部的、开源的还是商业的。预设有用户名和密码组合的设备对安装后不更改的组织构成了严重威胁,因为它们很容易成为对手的目标。类似地,对手也可能利用公开披露或被盗的私钥或凭证材料,通过远程服务合法连接到远程环境。
预防措施:使用默认用户名和密码的应用程序和设备应在安装后以及部署到生产环境之前立即进行更改。
检测:监视已激活或登录的默认帐户中新建的登录行为。这些审核还应包括检查任何设备和应用程序的默认凭据或SSH密钥,如果发现任何凭据或SSH密匙,应立即更新;监视用户访问网络或计算资源的尝试,通常是通过提供凭据
域帐户
介绍:对手可能会获取并滥用域帐户的凭据,作为获得初始访问、持久性、特权升级或防御规避的手段。域帐户是由Active Directory域服务管理的帐户,其中访问和权限是在属于该域的系统和服务之间配置的。域帐户可以覆盖用户、管理员和服务。对手可能会通过各种方式(如操作系统凭据转储或密码重用)危害域帐户,其中一些帐户具有较高的权限,从而允许访问域的特权资源。
预防措施:将多因素身份验证(MFA)作为组织策略的一部分进行集成,可以大大降低对手获得有效证书控制权的风险,这些证书可用于其他策略,如初始访问、横向移动和收集信息。MFA还可以用于限制对云资源和API的访问;定期审核域帐户权限级别,以查找可能允许对手通过获取特权帐户的凭据获得广泛访问权限的情况。不要将用户或管理域帐户放在跨系统的本地管理员组中,除非它们受到严格控制,并且帐户的使用是分段的,因为这通常相当于在所有系统上都有一个具有相同密码的本地管理员帐户。遵循企业网络设计和管理的最佳实践,以限制跨管理层的特权帐户使用。限制系统之间的凭据重叠,以防止在获得帐户凭据时进行访问;应用程序可以发送推送通知以验证作为多因素身份验证(MFA)形式的登录。培训用户只接受有效的推送通知并报告可疑的推送消息。
检测:监控共享帐户(用户、管理员或服务帐户)的系统中的可疑帐户行为。示例:一个帐户同时登录多个系统;多个帐户同时登录到同一台机器;在奇数时间或非营业时间登录的帐户。活动可以来自交互式登录会话,也可以来自作为特定帐户在远程系统上执行二进制文件的帐户的进程所有权;通过远程桌面协议的远程桌面登录可能是系统管理员或IT支持的典型登录,但只能从选定的工作站进行。监控远程桌面登录并与已知/批准的始发系统进行比较,可以检测对手的横向移动;在我们观察到的网络中,通常不会出现多个用户同时、甚至在同一小时内登录到一台机器的情况。登录事件对于Windows Vista及更高版本为Windows事件代码4624,对于Vista之前版本为518。对于Windows Vista及以上版本,注销事件为4634,对于Vista之前版本为538。登录类型2、3、9和10令人感兴趣。有关详细信息,请参阅Microsoft的“审核登录事件”页面上的“登录类型”表;分析1-远程桌面登录;(source="*WinEventLog:Security" EventCode="4624") AuthenticationPackageName= "Negotiate" AND Severity= "Information" AND logon_type= "10"
;将其他安全系统与登录信息关联起来(例如,用户有活动登录会话,但尚未进入大楼或没有VPN访问权限);监视用户访问网络或计算资源的尝试,通常通过使用域身份验证服务,如Linux上的系统安全服务守护程序(sssd);笔记
本地帐户
介绍:敌人可能会获取并滥用本地帐户的凭据,以此作为获得初始访问、持久性、特权升级或防御规避的手段。本地帐户是指组织为用户、远程支持、服务或在单个系统或服务上进行管理而配置的帐户。本地帐户也可能被滥用,通过操作系统凭据转储来提升权限和获取凭据。密码重用可能允许在网络上的一组机器上滥用本地帐户,以实现特权升级和横向移动的目的。
预防措施:确保本地管理员帐户在网络上的所有系统中都具有复杂、唯一的密码;定期审核本地帐户的权限级别,以寻找可能允许对手通过获取特权帐户的凭据获得广泛访问权限的情况。限制将本地管理员帐户用于可能使其暴露于潜在对手的日常操作;例如,审核Kubernetes中服务帐户的使用情况,如果不需要,避免自动授予他们访问Kubernetesneneneba API的权限。实现LAPS还可以帮助防止跨域重复使用本地管理员凭据。
检测:监控共享帐户(用户、管理员或服务帐户)的系统中的可疑帐户行为。示例:一个帐户同时登录多个系统;多个帐户同时登录到同一台机器;在奇数时间或非营业时间登录的帐户。活动可以来自交互式登录会话,也可以来自作为特定帐户在远程系统上执行二进制文件的帐户的进程所有权;通过远程桌面协议的远程桌面登录可能是系统管理员或IT支持的典型登录,但只能从选定的工作站进行。监控远程桌面登录并与已知/批准的始发系统进行比较,可以检测对手的横向移动;在我们观察到的网络中,通常不会出现多个用户同时、甚至在同一小时内登录到一台机器的情况。登录事件对于Windows Vista及更高版本为Windows事件代码4624,对于Vista之前版本为518。对于Windows Vista及以上版本,注销事件为4634,对于Vista之前版本为538。登录类型2、3、9和10令人感兴趣。有关详细信息,请参阅Microsoft的“审核登录事件”页面上的“登录类型”表;分析1-远程桌面登录;(source="*WinEventLog:Security" EventCode="4624") AuthenticationPackageName= "Negotiate" AND Severity= "Information" AND logon_type= "10"
;将其他安全系统与登录信息关联起来(例如,用户有活动登录会话,但尚未进入大楼或没有VPN访问权限);监视用户访问网络或计算资源的尝试,通常通过使用域身份验证服务,如Linux上的系统安全服务守护程序(sssd);注意:对于Linux,审计守护进程(audited)等审计框架可用于警告跟踪身份验证尝试的日志文件的更改,包括/var/log/secure
。
云帐户
介绍:云环境中的有效帐户可能允许对手执行操作以实现初始访问、持久性、特权提升或防御规避。云帐户是指由组织创建和配置的帐户,供用户使用、远程支持、服务,或用于管理云服务提供商或SaaS应用程序中的资源。云帐户可以单独存在于云中;或者,它们可以通过与其他身份源(如Windows Active Directory)同步或联合,在本地系统和云之间混合连接。服务或用户帐户可能会被对手通过暴力、网络钓鱼或各种其他方式锁定,以访问环境。联合或同步帐户可能是对手影响本地系统和云环境的途径,例如,通过利用共享凭据登录远程服务。高特权云帐户,无论是联合的、同步的还是仅限云的,也可以通过利用基于SaaS的软件部署工具在混合连接的设备上运行命令来允许转向本地环境。对手可能会在受损的云帐户上创建持久的附加云凭据,以保持在环境中的持久性。这样的证书也可以用于绕过诸如多因素身份验证之类的安全控制。云帐户还可以通过环境中的各种方式获得临时提升云访问或其他特权。角色分配或角色承担策略中的错误配置可能会允许对手使用这些机制来利用帐户预期范围之外的权限。此类超权限帐户可用于通过云API或其他方法从在线存储帐户和数据库中获取敏感数据。
预防措施:使用条件访问策略阻止来自不兼容设备或来自定义的组织IP范围之外的登录;禁用不支持MFA的传统身份验证,并要求使用现代身份验证协议;对云帐户,特别是特权帐户使用多因素身份验证。这可以以各种形式(例如硬件、虚拟、SMS)实现,也可以使用管理报告功能进行审计;确保云帐户,特别是特权帐户,在网络上的所有系统中都有复杂、唯一的密码。密码和访问密钥应定期轮换。如果凭据在您不知情的情况下被泄露,这将限制凭据可用于访问资源的时间。云服务提供商可以跟踪访问密钥的使用年限,以帮助审计和识别可能需要轮换的密钥;定期审查特权云帐户权限级别,以查找那些可能允许对手获得广泛访问权限的级别,如Azure AD中的全局管理员和特权角色管理员。这些审查还应检查是否创建了未经授权的新特权云帐户。例如,在Azure AD环境中,配置警报以通知帐户在没有使用特权角色的情况下已离开多天,因为这些角色可能会被删除。考虑使用对Azure AD资源的临时实时(JIT)特权访问,而不是永久分配特权角色;定期检查用户帐户,并删除那些不活动或不必要的帐户。限制用户帐户创建其他帐户的能力;应用程序可以发送推送通知以验证作为多因素身份验证(MFA)形式的登录。培训用户只接受有效的推送通知并报告可疑的推送消息。
检测:监控共享帐户的云服务中的可疑帐户行为;将其他安全系统与登录信息关联起来(例如,用户有活动登录会话,但尚未进入大楼或没有VPN访问权限);监控云帐户的活动,以检测异常或恶意行为,例如访问帐户正常功能之外的信息、在非正常时间使用帐户或从意外位置或IP地址进行帐户身份验证。服务帐户只能从云环境中的IP地址访问。例如,在Azure AD环境中,考虑使用身份保护根据位置、设备合规性和其他因素标记有风险的登录。在Okta环境中,配置可疑活动报告以允许用户报告他们不识别的可疑登录和其他行为。
四、执行
1.云管理命令
介绍:敌人可能会滥用云管理服务在虚拟机内执行命令。AWS Systems Manager、Azure RunCommand和Runbook等资源允许用户通过利用已安装的虚拟机代理在虚拟机中远程运行脚本。如果对手获得了对云环境的管理访问权限,他们可能会滥用云管理服务在环境的虚拟机中执行命令。此外,损害服务提供商或代理管理员帐户的对手可能同样能够利用可信关系在连接的虚拟机中执行命令。
预防措施:限制有权在虚拟机上远程执行命令的云帐户的数量,并确保这些帐户不用于日常操作。在Azure中,限制具有Azure Virtual Machine Contributor及以上角色的帐户数量,并考虑使用临时实时(JIT)角色,以避免永久分配对虚拟机的特权访问。
检测:监视在虚拟机上执行的命令和脚本。在Azure中,可以通过Azure活动日志识别Azure RunCommand的使用情况,并且有关执行作业结果的其他详细信息可在C:\Packages\Plugins\Microsoft
中获得。CPlat。果心Windows虚拟机上的RunCommandWindows目录;监视虚拟机以创建与云虚拟机代理相关联的进程。在基于Windows的Azure计算机中,监视WindowsAzureGuestAgent.exe
进程;监视在虚拟机上执行的命令和脚本。在Azure中,可以通过Azure活动日志识别Azure RunCommand的使用情况,并且有关执行作业结果的其他详细信息可在C:\Packages\Plugins\Microsoft
中获得。
2.命令和脚本解释器
PowerShell
介绍:敌人可能会滥用PowerShell命令和脚本进行执行。PowerShell是Windows操作系统中包含的功能强大的交互式命令行界面和脚本环境。敌人可以使用PowerShell执行许多操作,包括发现信息和执行代码。示例包括可用于运行可执行文件的Start-Process
cmdlet和在本地或远程计算机上运行命令的Invoke-Command
cmdlet(尽管使用PowerShell连接到远程系统需要管理员权限)。PowerShell还可以用于从互联网下载和运行可执行文件,这些文件可以在不接触磁盘的情况下从磁盘或内存中执行。有许多基于PowerShell的攻击性测试工具可用,包括Empire、PowerSploit、PoshC2和PSAttack。也可以执行PowerShell命令/脚本,而无需通过PowerShell底层系统的接口直接调用PowerShell.exe
二进制文件。经营通过System.Management.Automation
程序集DLL。NET框架和Windows通用语言界面(CLI)。
预防措施:防病毒可以用于自动隔离可疑文件;将PowerShell执行策略设置为仅执行已签名的脚本;如果不需要,可以从系统中删除PowerShell,但应进行审查以评估对环境的影响,因为它可能用于许多合法目的和管理功能;禁用/限制WinRM服务以帮助防止使用PowerShell进行远程执行;在适当的情况下使用应用程序控制。PowerShell受限语言模式可用于限制对敏感或危险语言元素的访问,例如用于执行任意Windows API或文件(例如,Add Type
)的语言元素;当需要PowerShell时,请考虑将PowerShell执行策略限制为管理员。请注意,根据环境配置,有一些绕过PowerShell执行策略的方法;PowerShell JEA(Just Enough Administration)
也可用于沙盒管理,并限制管理员/用户可以通过远程PowerShell会话执行的命令。
检测:如果设置了正确的执行策略,如果对手通过注册表或命令行获得管理员或系统访问权限,他们很可能能够定义自己的执行策略。此系统策略更改可能是检测恶意使用PowerShell的一种方法。如果PowerShell未在环境中使用,那么简单地查找PowerShell执行可能会检测到恶意活动。打开PowerShell日志记录也有利于提高执行过程中发生的事情(应用于.NET调用)的保真度。PowerShell 5.0引入了增强的日志记录功能,其中一些功能已添加到PowerShell 4.0中。PowerShell的早期版本没有许多日志记录功能。组织可以在数据分析平台中收集PowerShell执行详细信息,以使用其他数据进行补充;PowerShell可以通过WinRM在主机上远程运行命令。远程PowerShell会话启动时,svchost.exe将执行wsmprovhost.exe;要使其工作,必须设置某些注册表项,并且必须启用WinRM服务。PowerShell命令Enter PSSession-ComputerName<RemoteHost>可创建远程PowerShell会话;监视与PowerShell特定程序集(如系统)关联的项目的加载和/或执行情况。经营Automation.dll(特别是对于不寻常的进程名称/位置);分析1-加载PowerShell程序集的进程:source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="7" | where ModulePath LIKE "%system.management.automation%" OR FileDescription LIKE "%system.management.automation%"
;监视可能滥用PowerShell命令和脚本执行的新执行进程。PowerShell是Windows附带的脚本环境,攻击者和管理员都使用它。在大多数Windows版本中,PowerShell脚本的执行是不透明的,通常不受防病毒保护,这使得使用PowerShell成为规避安全措施的简单方法。此分析检测PowerShell脚本的执行情况;Powershell可用于隐藏监视的命令行执行,例如:;net usesc启动;注:-分析1的逻辑是基于检测非交互式Powershell会话(即那些不是由用户通过explorer.exe启动的会话)。当在生产环境中使用时,这可能会导致误报,因此我们建议通过包括额外的逻辑(例如,寻找可疑的父进程)来调整任何此类分析,以帮助过滤此类事件。-分析2的逻辑基于检测远程Powershell会话。PowerShell可以通过WinRM在主机上远程运行命令。远程PowerShell会话启动时,svchost.exe将执行wsmprovhost.exe;分析1-非交互式Powershell会话:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") Image="powershell.exe" AND ParentImage!="explorer.exe"
;分析2-远程Powershell会话:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") Image="wsmprovhost.exe" AND ParentImage="svchost.exe"
;分析3-Powershell执行:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") Image="C:\Windows\*\powershell.exe" ParentImage!="C:\Windows\explorer.exe"|stats values(CommandLine) as "Command Lines" values(ParentImage) as "Parent Images" by ComputerName
;请考虑监视Windows事件ID(EID)400,它显示在EngineVersion字段中执行的PowerShell版本(这也可能与检测潜在的降级攻击有关),以及在HostName字段中PowerShell是否在本地或远程运行。此外,EID 400可以指示PowerShell会话的开始时间,而EID 403指示PowerShell会话结束时间;监视是否有任何启用在系统上运行的脚本的尝试都将被视为可疑。如果脚本在系统上不常用,但已启用,则可能会怀疑脚本因修补或其他管理员功能而超出周期。脚本应尽可能从文件系统中捕获,以确定其操作和意图;分析1-编写块日志事件脚本:(source=WinEventLog:"Microsoft-Windows-PowerShell/Operational" EventID="4104" AND Image="powershell.exe" AND (CommandLine="-enc*" OR CommandLine="*-ep bypass*" OR CommandLine="*-noni*")
AppleScript
介绍:敌人可能会滥用AppleScript执行。AppleScript是一种macOS脚本语言,旨在通过名为AppleEvents的应用程序间消息控制应用程序和操作系统的部分。这些AppleEvent消息可以独立发送,也可以使用AppleScript轻松编写脚本。这些事件可以定位打开的窗口,发送按键,并与几乎任何本地或远程打开的应用程序进行交互。脚本可以通过osascript /path/to/script
或``osascript -e "script here"从命令行运行。除了命令行,脚本还可以通过多种方式执行,包括邮件规则、Calendar.app警报和Automator工作流。AppleScripts也可以作为纯文本shell脚本执行,方法是添加
#!/usr/bin/osascript到脚本文件的开头。AppleScripts不需要调用
osascript即可执行。但是,它们可以通过使用macOS Native API
NSAppleScript或
OSAScript从mach-O二进制文件中执行,这两种API都独立于
/usr/bin/osascript`命令行实用程序执行代码。敌人可能会滥用AppleScript来执行各种行为,例如与打开的SSH连接交互、移动到远程机器,甚至向用户提供虚假对话框。这些事件不能远程启动应用程序(它们可以在本地启动),但如果应用程序已经在远程运行,它们可以与应用程序交互。在macOS 10.10 Yosemite及更高版本上,AppleScript能够执行Native API,否则需要以mach-O二进制文件格式进行编译和执行。由于这是一种脚本语言,它也可以用于启动更常见的技术,例如通过Python的反向shell。
预防措施:要求所有AppleScript在执行之前都由受信任的开发人员ID签名-这将防止随机AppleScript代码执行。这使AppleScript代码受到与其他通过Gatekeeper的.app文件相同的审查;在适当的情况下使用应用程序控制。
检测:监视可能滥用AppleScript执行的已执行命令和参数。脚本可能会在系统上执行具有各种效果的操作,这些操作可能会生成事件,具体取决于所使用的监视类型。动作可以与网络和系统信息发现、收集或其他可编写脚本的妥协后行为有关,并且可以用作返回源脚本的检测的指示符;通过osascript监控AppleScript的执行情况,以及可能与系统上发生的其他可疑行为有关的NSAppleScript和osascript API的使用情况;监视可能滥用AppleScript执行的新执行进程。脚本可能会在系统上执行具有各种效果的操作,这些操作可能会生成事件,具体取决于所使用的监视类型。动作可以与网络和系统信息发现、收集或其他可编写脚本的妥协后行为有关,并且可以用作返回源脚本的检测的指示符;分析1-异常执行:source="*Osquery:*" EventCode="process_added" AND CommandLine LIKE "*osascript*"
;分析2-不受信任的位置:source="*Osquery:*" EventCode="process_added" AND Path LIKE "/Users/*/Downloads/*" OR Path LIKE "/tmp/*"
;分析3-父/子过程关系:source="*Osquery:*" EventCode="process_added" AND ParentImage= "/System/Library/CoreServices/Finder.app/Contents/MacOS/Finder" AND Image LIKE "*osascript*"
Windows命令行shell
介绍:敌人可能会滥用Windows命令shell执行。Windows命令shell(cmd)是Windows系统上的主要命令提示符。Windows命令提示符几乎可以用于控制系统的任何方面,不同的命令子集需要不同的权限级别。可以通过SSH等远程服务远程调用命令提示符。批处理文件(例如:.bat或.cmd)还为shell提供了要运行的顺序命令列表,以及条件和循环等常规脚本操作。批处理文件的常见用途包括长时间或重复的任务,或者需要在多个系统上运行同一组命令。敌人可以利用cmd来执行各种命令和有效载荷。常见的用途包括cmd来执行单个命令,或者通过命令和控制通道转发输入和输出来交互滥用cmd。
预防措施:在适当的情况下使用应用程序控制。
检测:监视可能滥用Windows命令shell程序执行的已执行命令和参数。根据作业功能的不同,在管理员、开发人员或高级用户系统中,Windows命令shell的使用可能很常见。如果脚本仅限于普通用户,那么任何启用系统上运行的脚本的尝试都将被视为可疑。如果脚本在系统上不常用,但已启用,则可能会怀疑脚本因修补或其他管理员功能而超出周期。脚本应尽可能从文件系统中捕获,以确定其操作和意图;监视可能滥用Windows命令shell执行的新执行进程;注意:通过创建过去30天内看到的cmd父进程的基线和今天看到的cmd的父进程的列表,尝试进行分析。基线中的父进程将从今天看到的父进程集中删除,留下一个新的父进程列表。此分析试图通过查找通常不创建cmd的程序来识别生成cmd的可疑程序。一些程序通常会将cmd作为子进程生成,例如运行批处理文件或Windows命令。然而,许多进程并没有定期启动命令提示符,例如Microsoft Outlook。从通常不启动命令提示符的进程启动的命令提示符可能是恶意代码注入该进程的结果,或者是攻击者用恶意程序替换合法程序的结果;分析1-异常命令执行:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") AND CommandLine="*cmd.exe*" AND (CommandLine REGEXP "./c.*" OR CommandLine REGEXP ".*._ \/k.*")
Unixshell
介绍:敌人可能会滥用Unixshell命令和脚本来执行。Unix shell是Linux和macOS系统上的主要命令提示符,尽管根据特定的操作系统或分布,存在许多Unix shell的变体(例如sh、bash、zsh等)。Unix shell可以控制系统的各个方面,某些命令需要提升权限。Unix shell还支持能够顺序执行命令的脚本,以及其他典型的编程操作,如条件语句和循环。shell脚本的常见用途包括长时间或重复的任务,或者需要在多个系统上运行同一组命令。敌人可能会滥用Unixshell来执行各种命令或有效载荷。交互式shell可以通过命令和控制通道访问,或者在横向移动期间访问,例如使用SSH。敌人也可以利用shell脚本在受害者身上传递和执行多个命令,或者作为用于持久性的有效载荷的一部分。
预防措施:在适当的情况下使用应用程序控制。
检测:监视可能滥用Unix shell命令和脚本执行的已执行命令和参数。Unix shell的使用可能在管理员、开发人员或超级用户系统中很常见,具体取决于作业功能。如果脚本仅限于普通用户,那么任何启用系统上运行的脚本的尝试都将被视为可疑。如果脚本在系统上不常用,但已启用,则可能会怀疑脚本因修补或其他管理员功能而超出周期。脚本应尽可能从文件系统中捕获,以确定其操作和意图;注意:此分析不包括可以通过shell解释器执行的潜在可疑命令的详尽列表。相反,它旨在作为一个命令类型的例子,值得进一步调查;分析1-异常命令执行:source="*Linux:*" CommandLine="*sh -c*" AND (CommandLine="*wget*" OR CommandLine="*curl*" OR CommandLine="*nc*" OR CommandLine="*perl*")
;监视可能滥用Unix shell命令和脚本执行的新执行进程。
Visual Basic
介绍:敌人可能会滥用Visual Basic(VB)进行执行。VB是Microsoft创建的一种编程语言,通过Windows API与许多Windows技术(如组件对象模型和本机API)具有互操作性。尽管被标记为没有计划的未来演进的遗留版本,但VB在中得到了集成和支持。NET框架和跨平台。NET核心。还创建了基于VB的派生语言,如Visual Basic for Applications(VBA)和VBScript。VBA是一种内置于Microsoft Office以及多个第三方应用程序中的事件驱动编程语言。VBA使文档能够包含用于在主机上自动执行任务和其他功能的宏。VBScript是Windows主机上的默认脚本语言,也可以在Internet Explorer提供的HTML应用程序(HTA)网页上代替JavaScript使用(尽管大多数现代浏览器都不支持VBScript)。敌人可能会使用VB有效载荷来执行恶意命令。常见的恶意使用包括使用VBScript自动执行行为,或将VBA内容嵌入到“钓鱼式附件”有效载荷中(这也可能涉及标记Web绕过以启用执行)。
预防措施:防病毒可以用于自动隔离可疑文件;在Windows 10上,启用减少攻击面(ASR)规则,以防止Visual Basic脚本执行潜在的恶意下载内容;关闭或限制对不需要的VB组件的访问;在适当的情况下使用应用程序控制。默认情况下,从Windows 2203版本开始,基于文件的Web标记(MOTW)属性从Internet获取的VBA宏可能会被阻止在Office应用程序(例如:Access、Excel、PowerPoint、Visio和Word)中执行;脚本阻塞扩展可以帮助防止在利用过程中通常使用的脚本和HTA文件的执行。对于通过广告提供的恶意代码,广告拦截程序可以从一开始就帮助阻止该代码的执行。
检测:监视可能滥用Visual Basic(VB)执行的已执行命令和参数;监视与VB语言相关联的模块的加载(例如:vbscript.dll);注意:对于Windows,Sysmon Event ID 7(已加载图像)可用于警告与Visual Basic相关的DLL模块(例如vbscript.DLL)加载到进程中。由于图像加载操作的频率很高,事件ID 7可以生成大量的事件。因此,我们建议调整Sysmon配置文件,以排除可能导致误报的常见良性图像加载;监视与VB执行相关联的事件,如Office应用程序生成进程、Windows脚本主机(通常为csccript.exe或wscript.exe)的使用情况。VB执行可能会对系统执行各种影响的操作,这些操作可能会生成事件,具体取决于所使用的监视类型;监视是否有任何启用在系统上运行的脚本的尝试都将被视为可疑。如果脚本在系统上不常用,但已启用,则可能会怀疑脚本因修补或其他管理员功能而超出周期。脚本应尽可能从文件系统中捕获,以确定其操作和意图;注意:要注意从临时或不寻常的文件位置执行VBScript,这可能表明存在恶意活动;分析1-从临时位置执行脚本:(source=WinEventLog:"*Microsoft-Windows-PowerShell/Operational" EventID="4103") | WHERE CommandLine LIKE "*AppData*.vbs*" OR CommandLine LIKE "*AppData*.vbe*" OR CommandLine LIKE "*AppData*.vba*"
Python
介绍:敌人可能会滥用Python命令和脚本来执行。Python是一种非常流行的脚本/编程语言,具有执行许多功能的能力。Python可以从命令行(通过python.exe
解释器)或脚本(.py)交互执行,脚本可以编写并分发到不同的系统。Python代码也可以编译成二进制可执行文件。Python附带了许多与底层系统交互的内置包,如文件操作和设备I/O。攻击者可以使用这些库下载和执行命令或其他脚本,以及执行各种恶意行为。
预防措施:防病毒可以用于自动隔离可疑文件;清点系统中未经授权的Python安装;Denylist Python在不需要的地方;防止用户在不需要的地方安装Python。
检测:监视系统是否有异常的Python使用和Python.exe行为,这可能是恶意活动的指标。了解标准使用模式对于避免大量误报非常重要。如果脚本仅限于普通用户,那么任何启用系统上运行的脚本的尝试都将被视为可疑。如果脚本在系统上不常用,但已启用,则可能会怀疑脚本因修补或其他管理员功能而超出周期。脚本应尽可能从文件系统中捕获,以确定其操作和意图。脚本可能会在系统上执行具有各种效果的操作,这些操作可能会生成事件,具体取决于所使用的监视类型。监视可能滥用Python命令和脚本执行的已执行命令和参数;监视系统是否有异常的Python使用和Python.exe行为,这可能是恶意活动的指标。了解标准使用模式对于避免大量误报非常重要。如果脚本仅限于普通用户,那么任何启用系统上运行的脚本的尝试都将被视为可疑。如果脚本在系统上不常用,但已启用,则可能会怀疑脚本因修补或其他管理员功能而超出周期。脚本应尽可能从文件系统中捕获,以确定其操作和意图。脚本可能会在系统上执行具有各种效果的操作,这些操作可能会生成事件,具体取决于所使用的监视类型。监视可能滥用Python命令和脚本执行的新执行进程。
JavaScript
介绍:敌人可能会滥用JavaScript的各种实现来执行。JavaScript(JS)是一种独立于平台的脚本语言(在运行时及时编译),通常与网页中的脚本相关,尽管JS可以在浏览器之外的运行时环境中执行。JScript是相同脚本标准的Microsoft实现。JScript通过Windows脚本引擎进行解释,因此与Windows的许多组件集成,如组件对象模型和Internet Explorer HTML应用程序(HTA)页面。JavaScript for Automation(JXA)是一种基于JavaScript的macOS脚本语言,作为苹果开放脚本体系结构(OSA)的一部分,在OSX 10.10中引入。苹果的OSA提供了控制应用程序、与操作系统接口以及桥接访问苹果其他内部API的脚本功能。从OSX 10.10开始,OSA只支持两种语言,JXA和AppleScript。脚本可以通过命令行实用程序osascript执行,也可以通过osacompile编译成应用程序或脚本文件,还可以利用OSAKit框架在其他程序的内存中编译和执行。敌人可能会滥用JavaScript的各种实现来执行各种行为。常见用途包括将恶意脚本作为“折衷驱动”的一部分托管在网站上,或下载并执行这些脚本文件作为辅助有效载荷。由于这些有效载荷是基于文本的,因此对手将其内容作为混淆文件或信息的一部分进行混淆也是非常常见的。
预防措施:在Windows 10上,启用减少攻击面(ASR)规则,以防止JavaScript脚本执行潜在的恶意下载内容;关闭或限制对不需要的脚本组件的访问;Denylist脚本(如果适用);脚本阻塞扩展可以帮助防止在利用过程中通常使用的JavaScript和HTA文件的执行。对于通过广告提供的恶意代码,广告拦截程序可以从一开始就帮助阻止该代码的执行。
检测:脚本执行可能会对系统执行各种影响的操作,这些操作可能会生成事件,具体取决于所使用的监视类型。监视进程和命令行参数的执行和后续行为。动作可以与网络和系统信息发现、收集或其他可编程的后折衷行为有关,并且可以用作返回源的检测的指示符。通过osascript
监控JXA的执行情况,以及可能与系统上发生的其他可疑行为有关的osascript API
的使用情况;监视与脚本语言(例如:JScript.dll)相关联的模块的加载情况;监视与脚本执行相关联的事件,如进程活动、Windows脚本主机(通常为cscript.exe或wscript.exe)的使用、涉及脚本的文件活动;监视是否有任何启用在系统上运行的脚本的尝试都将被视为可疑。如果脚本在系统上不常用,但已启用,则可能会怀疑脚本因修补或其他管理员功能而超出周期。脚本应尽可能从文件系统中捕获,以确定其操作和意图。
网络设备CLI
介绍:敌人可能会滥用网络设备上的脚本或内置命令行解释器(CLI)来执行恶意命令和有效载荷。CLI是用户和管理员与设备交互的主要方式,以便查看系统信息、修改设备操作或执行诊断和管理功能。CLI通常包含不同命令所需的各种权限级别。脚本解释器自动执行任务,并将功能扩展到网络操作系统中包含的命令集之外。可以通过直接控制台连接或通过远程方式(如telnet或SSH)访问CLI和脚本解释器。敌人可以使用网络CLI来更改网络设备的行为和操作方式。CLI可用于操纵流量以拦截或操纵数据,修改启动配置参数以加载恶意系统软件,或禁用安全功能或日志以避免检测。
预防措施:TACACS+可以通过身份验证和命令授权的配置来控制管理员可以使用哪些命令;使用身份验证、授权和记帐(AAA)系统将限制管理员可以执行的操作,并提供用户操作的历史记录,以检测未经授权的使用和滥用。TACACS+可以通过身份验证和命令授权的配置来控制管理员可以使用哪些命令;使用身份验证、授权和记帐(AAA)系统将限制用户可以执行的操作,并提供用户操作的历史记录,以检测未经授权的使用和滥用。确保将最低权限原则应用于用户帐户和组,以便只有经过授权的用户才能执行配置更改。
检测:考虑在控制台中或作为运行内存的一部分查看命令历史记录,以确定是否使用了未经授权或可疑的命令来修改设备配置。请考虑将网络设备配置的副本与已知的良好版本进行比较,以发现对命令解释器的未经授权的更改。同样的过程可以通过比较运行时内存来完成,尽管这不是小事,可能需要供应商的帮助。
云API
介绍:敌人可能会滥用云API来执行恶意命令。云环境中可用的API提供各种功能,是一种功能丰富的方法,用于对租户的几乎所有方面进行编程访问。这些API可以通过各种方法使用,如命令行解释器(CLI)、浏览器内云shell、PowerShell模块(如Azure for PowerShell)或可用于Python等语言的软件开发工具包(SDK)。云API功能可以允许跨租户中的所有主要服务进行管理访问,如计算、存储、身份和访问管理(IAM)、网络和安全策略。如果拥有适当的权限(通常通过使用应用程序访问令牌和Web会话Cookie等凭据),对手可能会滥用云API来调用执行恶意操作的各种功能。例如,CLI和PowerShell功能可以通过安装在云主机或本地主机上的二进制文件进行访问,也可以通过许多云平台(如AWS、Azure和GCP)提供的基于浏览器的云shell进行访问。这些云shell通常是一个打包的统一环境,使用CLI和/或脚本模块作为云环境中的容器托管。
预防措施:在适当的情况下使用应用程序控制阻止使用PowerShell Cmdlet或其他基于主机的资源访问云API资源;使用适当的身份和访问管理(IAM)以及基于角色的访问控制(RBAC)策略来限制管理员可以执行的操作,并提供管理操作的历史记录,以检测未经授权的使用和滥用。
检测:请考虑查看主机或云审核日志中的命令历史记录,以确定是否执行了未经授权或可疑的命令;云API活动日志记录通常在默认情况下启用,并且可以在Microsoft统一审计日志、AWS CloudTrail和GCP管理员活动日志等来源中进行审查。查看这些源以获取已执行API命令的历史记录。还可以查看主机日志,以捕获CLI命令或PowerShell模块使用来调用Cloud API函数。
AutoHotKey和AutoIT
介绍:敌人可能会使用AutoIT和AutoHotKey自动化脚本执行命令并执行恶意任务。AutoIT和AutoHotkey(AHK)是使用户能够自动执行Windows任务的脚本语言。这些自动化脚本可以用于执行各种各样的操作,例如单击按钮、输入文本以及打开和关闭程序。攻击者可能使用AHK(.AHK
)和AutoIT(.au3
)脚本在受害者的系统上执行恶意代码。例如,对手已经使用AHK来执行有效载荷和其他模块化恶意软件,如密钥记录器。敌人还使用包含嵌入式恶意软件的自定义AHK文件作为网络钓鱼的有效载荷。这些脚本也可以编译成自包含的可执行有效载荷(.exe
)。
预防措施:使用应用程序控制来阻止执行AutoIt3.exe
、AutoHotkey.exe
和其他相关功能,这些功能可能不是给定系统或网络所必需的,以防止对手滥用。
检测:监视已执行的命令和参数是否异常使用了可能用于支持恶意执行的实用程序和命令行参数。将AutoIt3.exe和AutoHotkey.exe
的最近调用与已知良好参数的先前历史进行比较,以确定异常和潜在的对抗性活动(例如:模糊和/或恶意命令);监视和分析AutoIt3.exe
和AutoHotkey.exe
解释器的执行和参数。非标准进程执行树也可能指示可疑或恶意行为,例如AutoHotkey.exe
是否是其他可疑进程和活动的父进程。
3.容器管理命令
介绍:敌人可能会滥用容器管理服务来执行容器内的命令。容器管理服务,如Docker守护进程、Kubernetes API服务器或kubelet,可以允许在环境中远程管理容器。在Docker中,对手可以在容器部署期间指定一个执行脚本或命令的入口点,也可以使用Docker exec等命令在运行的容器中执行命令。在Kubernetes中,如果对手有足够的权限,他们可以通过与Kubernetesneneneba API服务器kubelet的交互,或通过运行kubectl exec等命令,在集群中的容器中获得远程执行。
预防措施:从容器中移除不必要的工具和软件;尽可能使用只读容器、只读文件系统和最少的映像来阻止命令的执行。在可能的情况下,还可以考虑使用应用程序控制和软件限制工具(如SELinux提供的工具)来限制对容器中的文件、进程和系统调用的访问;将与容器服务的通信限制在受管理和安全的通道上,例如本地Unix套接字或通过SSH进行远程访问。通过禁用对Docker API和Kubernetes API服务器的未经身份验证的访问,要求安全端口访问以通过TLS与API通信。在部署在云环境中的Kubernetes集群中,使用本地云平台功能来限制允许访问API服务器的IP范围。在可能的情况下,考虑启用对Kubernetes API的实时(JIT)访问,以对访问施加额外的限制;确保默认情况下容器未以root身份运行。在Kubernetes环境中,考虑定义Pod安全标准,防止Pod运行特权容器,并使用NodeRestriction准入控制器拒绝kublet访问其所属节点之外的节点和Pod;对容器服务强制执行身份验证和基于角色的访问控制,以将用户限制为所需的最低权限。使用Kubernetes时,请避免向用户授予通配符权限或将用户添加到system:masters组,并使用RoleBindings而不是ClusterRoleBindings将用户权限限制在特定的命名空间中。
检测:监视容器服务执行的命令和参数。在Docker中,守护进程日志提供了对守护进程和容器服务级别的事件的深入了解。Kubernetes系统组件日志还可以检测集群中容器内外运行的活动;容器管理服务活动和执行的命令可以通过在容器上以及底层主机内使用命令行参数记录流程执行来捕获。
4.部署容器
介绍:敌人可能会将容器部署到环境中,以便于执行或躲避防御。在某些情况下,对手可能会部署新的容器来执行与特定映像或部署相关联的进程,例如执行或下载恶意软件的进程。在其他情况下,对手可以部署新的容器,该容器在没有网络规则、用户限制等的情况下配置,以绕过环境中的现有防御。在Kubernetes环境中,对手可能试图将特权或易受攻击的容器部署到特定节点中,以便逃逸到主机并访问该节点上运行的其他容器。容器可以通过各种方式进行部署,例如通过Docker的创建和启动API,或者通过web应用程序(如Kubernetes仪表板或Kubeflow)进行部署。在Kubernetes环境中,容器可以通过ReplicaSets或DaemonSets等工作负载进行部署,这可以允许容器跨多个节点进行部署。敌人可以基于检索到的或构建的恶意映像或从运行时下载并执行恶意有效载荷的良性映像部署容器。
预防措施:在部署之前扫描图像,并阻止那些不符合安全策略的图像。在Kubernetes环境中,准入控制器可以用于在容器部署请求经过身份验证之后但在部署容器之前验证映像;将与容器服务的通信限制在受管理和安全的通道上,例如本地Unix套接字或通过SSH进行远程访问。通过禁用对Docker API、Kubernetes API服务器和容器编排web应用程序的未经身份验证的访问,要求安全端口访问以通过TLS与API通信。在部署在云环境中的Kubernetes集群中,使用本地云平台功能来限制允许访问API服务器的IP范围。在可能的情况下,考虑启用对Kubernetes API的实时(JIT)访问,以对访问施加额外的限制;拒绝通过使用网络代理、网关和防火墙直接远程访问内部系统;通过将容器控制面板的访问权限限制为仅必要的用户,强制执行最小权限原则。使用Kubernetes时,请避免向用户授予通配符权限或将用户添加到system:masters组,并使用RoleBindings而不是ClusterRoleBindings将用户权限限制在特定的命名空间中。
检测:配置管理数据库(CMDB)和其他资产管理系统可以帮助检测不应该存在于网络上的计算机系统或网络设备;监视新构建的容器,这些容器可能会将容器部署到环境中以便于执行或规避防御;监视容器的激活或调用,该容器可能会将容器部署到环境中以便于执行或规避防御;监视新构建的pod,这些pod可能会将容器部署到环境中以便于执行或规避防御;监控对pod所做的更改,以防对设置和/或控制数据进行意外修改,这些更改可能会将容器部署到环境中以便于执行或规避防御。
5.利用客户端执行
介绍:敌人可能会利用客户端应用程序中的软件漏洞来执行代码。由于不安全的编码实践,软件中可能存在漏洞,从而导致意外行为。敌人可以通过有针对性的利用某些漏洞来执行任意代码。通常,对攻击性工具包最有价值的利用是那些可以用来在远程系统上获得代码执行的漏洞,因为它们可以用来访问该系统。用户希望看到与他们通常用于工作的应用程序相关的文件,因此,由于它们的高实用性,它们是利用研究和开发的有用目标。存在几种类型:基于浏览器的利用Web浏览器是通过“折衷驱动”和“钓鱼链接”的常见目标。端点系统可能会通过正常的网络浏览或某些用户被鱼叉式网络钓鱼电子邮件中的链接攻击到用于利用网络浏览器的对手控制的网站而受到损害。这些攻击通常不需要用户执行操作即可执行。Office应用程序常见的办公和生产力应用程序(如Microsoft Office)也成为网络钓鱼的目标。恶意文件将直接作为附件或通过链接下载。这需要用户打开文档或文件,以便运行该漏洞。常见的第三方应用程序常见的或是部署在目标网络中的软件的一部分的其他应用程序也可以用于利用。Adobe Reader和Flash等在企业环境中很常见的应用程序,经常成为试图访问系统的对手的目标。根据软件和漏洞的性质,有些漏洞可能会在浏览器中被利用,或者要求用户打开文件。例如,一些Flash漏洞攻击已作为Microsoft Office文档中的对象提供。
预防措施:浏览器沙盒可以用来减轻利用的一些影响,但沙盒逃逸可能仍然存在;其他类型的虚拟化和应用程序细分也可以减轻客户端利用的影响。这些系统中可能仍然存在其他漏洞和弱点的风险;查找利用漏洞期间使用的行为的安全应用程序,如Windows Defender Exploit Guard(WDEG)和增强型缓解体验工具包(EMET),可用于缓解某些利用行为。控制流完整性检查是另一种可能识别和阻止软件利用的方法。其中许多保护取决于体系结构和目标应用程序二进制文件的兼容性。
检测:根据可用的工具,检测软件利用可能很困难。软件利用可能并不总是成功,或者可能导致被利用的进程变得不稳定或崩溃;监视异常进程创建,例如从可能被利用的应用程序生成的命令和脚本解释器。还要在端点系统上查找可能指示成功折衷的其他行为,例如浏览器或Office进程的异常行为;例如,打印假脱机服务不应执行发现类型的进程。然而,这是一个例子,可以是任何数量的本地或第三方进程,它们正在执行不寻常或未知(可能是对手带来的)进程;注:-分析1,查找使用可疑参数或从异常位置启动Office应用程序(如Word、Excel、PowerPoint)的实例-分析2,查找Office应用程序创建的异常子进程,尤其是当伴随可疑命令行参数时;分析1-Office应用程序流程执行:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") AND (Image= "\winword.exe" OR Image= "\excel.exe" OR Image= "*\powerpnt.exe") AND (CommandLine= "*macro*" OR CommandLine= "*automation*" OR CommandLine= "*shellcode*") AND ParentCommandLine= "*open*"
;分析2-不寻常的子过程创建:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") AND (ParentImage= "\winword.exe" OR ParentImage= "\excel.exe" OR ParentImage= "\powerpnt.exe") AND (Image != "\system32\" OR Image != "*\program files")
6.进程间通信
组件对象模型
介绍:敌人可以使用Windows组件对象模型(COM)执行本地代码。COM是本机Windows应用程序编程接口(API)的进程间通信(IPC)组件,可实现软件对象或实现一个或多个接口的可执行代码之间的交互。通过COM,客户端对象可以调用服务器对象的方法,这些对象通常是二进制动态链接库(DLL)或可执行文件(EXE)。远程COM的执行由诸如分布式组件对象模型(DCOM)之类的远程服务来促进。公开了各种COM接口,这些接口可以被滥用以通过各种编程语言(如C、C++、Java和Visual Basic)调用任意执行。还存在特定的COM对象,用于直接执行代码执行之外的功能,例如创建计划任务/作业、无文件下载/执行以及其他与权限提升和持久性相关的对手行为。
预防措施:确保所有COM警报和受保护视图都已启用;修改HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\AppID\\{AppID_GUID}
中与单个COM应用程序的进程范围安全性相关的注册表设置(直接或使用Dcomcnfg.exe);修改HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Ole
中的注册表设置(直接或使用Dcomcnfg.exe),这些设置与未设置自己的进程范围安全性的所有COM应用程序的系统范围安全默认值相关联。
检测:监视加载DLL和其他通常与应用程序无关的模块的COM对象;监视与COM对象相关联的新执行进程,尤其是那些由与当前登录的用户不同的用户调用的进程;监视是否有任何启用在系统上运行的脚本的尝试都将被视为可疑。通过查询注册表或PowerShell枚举COM对象也可能进行恶意使用。
动态数据交换
介绍:敌人可以使用Windows动态数据交换(DDE)执行任意命令。DDE是一种客户端-服务器协议,用于应用程序之间的一次性和/或连续进程间通信(IPC)。一旦建立了链接,应用程序就可以自主交换由字符串、热数据链接(数据项更改时的通知)、热数据链路(数据项的更改重复)和命令执行请求组成的事务。对象链接和嵌入(OLE),或在文档之间链接数据的能力,最初是通过DDE实现的。尽管DDE已被组件对象模型取代,但Windows 10和大多数Microsoft Office 2016中都可以通过注册表项启用DDE。Microsoft Office文档可能会直接或通过嵌入文件被DDE命令毒害,并通过网络钓鱼活动或托管的Web内容用于执行,从而避免使用Visual Basic for Applications(VBA)宏。类似地,对手可能会通过在CSV文件中嵌入DDE公式来感染有效载荷,从而在受害者设备上执行应用程序和/或命令,该CSV文件旨在通过Windows电子表格程序打开。DDE也可能被在无法直接访问命令和脚本解释器的受损机器上操作的对手利用。DDE执行可以通过远程服务(如分布式组件对象模型(DCOM))远程调用。
预防措施:确保已启用受保护的视图;在Windows 10上,启用“减少攻击面”(ASR)规则,以防止DDE攻击和Office程序生成子进程;可以将特定于Microsoft Office功能控制安全性的注册表项设置为禁用DDE/OLE自动执行。Microsoft还创建并默认启用注册表项,以完全禁用Word和Excel中的DDE执行;请考虑禁用Office程序(如OneNote)中不适用于受保护视图的嵌入文件。
检测:监视进程是否存在指示DDE滥用的异常行为,例如Microsoft Office应用程序加载DLL和其他通常与应用程序无关的模块,或者这些应用程序生成异常进程(如cmd.exe);监视可能使用Windows动态数据交换(DDE)执行任意命令的新执行进程。敌人可以使用Windows动态数据交换(DDE)执行任意命令。DDE是一种客户端-服务器协议,用于应用程序之间的一次性和/或连续进程间通信(IPC)。一旦建立了链接,应用程序就可以自主交换由字符串、热数据链接(数据项更改时的通知)、热数据链路(数据项的更改重复)和命令执行请求组成的事务;分析1-使用DDE漏洞生成的异常子进程:(source="WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="WinEventLog:Security" EventCode="4688") Image="*.exe" (ParentImage="*excel.exe" OR ParentImage="*word.exe" OR ParentImage="*outlook.exe")
;监视是否有任何启用在系统上运行的脚本的尝试都将被视为可疑。OLE和Office Open XML文件可以扫描“DDEAUTO”、“DDE”和其他表示DDE执行的字符串。https://blog.nviso.be/2017/10/11/detecting-dde-in-ms-office-documents/
XPC服务
介绍:敌人可以向XPC服务守护进程提供恶意内容,以便执行本地代码。macOS使用XPC服务进行各种进程之间的基本进程间通信,例如XPC服务守护进程和第三方应用程序特权帮助工具之间的通信。应用程序可以使用低级别的XPC Service C API或高级别的NSXPCConnection API向以root身份运行的XPC服务守护进程发送消息,以处理需要提升权限的任务(如网络连接)。应用程序负责提供作为XPC服务蓝图的协议定义。开发人员通常使用XPC服务来提供应用程序的稳定性以及应用程序客户端和守护进程之间的权限分离。敌人可以滥用XPC服务来执行恶意内容。恶意执行的请求可以通过应用程序的XPC服务处理程序传递。这还可能包括识别和滥用不适当的XPC客户端验证和/或输入参数的不良净化,以进行特权升级利用。
预防措施:在开发应用程序时启用硬化运行时功能。不要包含值设置为true的任何变体的com.apple.security.get-task-allow权限。
检测:监视对更高特权进程(如连接到VPN服务的用户应用程序)进行异常调用的进程。
7.本机API
介绍:敌人可以与本机OS应用程序编程接口(API)交互以执行行为。本机API提供了一种可控的方式来调用内核内的低级操作系统服务,例如涉及硬件/设备、内存和进程的服务。操作系统在系统引导期间(当其他系统组件尚未初始化时)以及在例行操作期间执行任务和请求时,会利用这些本机API。敌人可能会滥用这些操作系统API函数作为执行行为的手段。与命令和脚本解释器类似,本机API及其接口层次结构提供了与受害系统的各种组件交互并利用这些组件的机制。本机API函数(如NtCreateProcess)可以通过系统调用/系统调用直接调用,但这些功能也经常通过接口和库暴露给用户模式应用程序。例如,诸如Windows API CreateProcess()或GNU fork()之类的函数将允许程序和脚本启动其他进程。这可以允许API调用方执行二进制文件、运行CLI命令、加载模块等,因为存在用于各种系统操作的数千个类似的API函数。更高级别的软件框架,如Microsoft。NET和macOS Cocoa也可用于与本机API交互。这些框架通常为API功能提供语言包装器/抽象,并为代码的易用性/可移植性而设计。敌人可以使用汇编直接或直接调用系统调用,试图破坏防御传感器和检测签名,如用户模式API-hooks。敌人还可能试图篡改与API监控相关的传感器和防御工具,例如通过禁用或修改工具解除监控功能。
预防措施:在Windows 10上,启用减少攻击面(ASR)规则以防止Office VBA宏调用Win32 API;通过使用应用程序控制工具,如Windows Defender应用程序控制、AppLocker或软件限制策略(如适用),识别并阻止可能通过此技术执行的潜在恶意软件。
检测:监视DLL/PE文件事件,特别是创建这些二进制文件以及将DLL加载到进程中。Windows API的使用可能涉及加载/访问与提供调用函数(例如:ntdll.dll、kernel32.dll、advapi32.dll、user32.dll和gdi32.dll)相关联的系统dll的进程。对DLL加载的监视,特别是对异常/异常或潜在恶意进程的监视,可能表明Windows API被滥用。尽管有噪声,但这些数据可以与其他指标相结合,以识别对手的活动;监控API调用可能会生成大量数据,除非在特定情况下收集,否则可能无法用于防御,因为API函数的良性使用很常见,很难与恶意行为区分开来。使用API监控将其他事件与API函数调用周围的行为关联起来,将为事件提供额外的上下文,这可能有助于确定该事件是否是由恶意行为引起的。按流程沿袭按流程ID的活动相关性可能就足够了。
8.计划任务/作业
At
介绍:敌人可能会滥用at实用程序来执行任务调度,以初始或重复执行恶意代码。at实用程序作为可执行文件存在于Windows、Linux和macOS中,用于在指定的时间和日期安排任务。尽管不赞成在Windows环境中使用计划任务的schtasks,但在使用时需要运行任务计划程序服务,并且用户必须作为本地管理员组的成员登录。在Linux和macOS上,超级用户以及添加到at.allow文件的任何用户都可以调用at。如果at.allow文件不存在,则检查at.deny文件。允许未在at.deny中列出的每个用户名在处调用。如果at.deny存在且为空,则允许全局使用at。如果两个文件都不存在(通常是基线),则只允许超级用户使用at。对手可以在系统启动时使用at执行程序,或在计划的基础上执行Persistence。at也可以被滥用来作为横向移动的一部分进行远程执行和/或在指定帐户(如SYSTEM)的上下文下运行进程。在Linux环境中,对手也可能滥用at,通过使用任务生成交互式系统shell或运行系统命令来突破受限环境。类似地,如果允许二进制文件作为超级用户通过sudo运行,at也可以用于特权提升。
预防措施:PowerSploit框架等工具包包含PowerUp模块,这些模块可用于探索系统中可用于提升权限的计划任务中的权限弱点。Windows操作系统还会在目标主机上创建一个注册表项,该注册表项专门与创建计划任务相关,位于:Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\At1
。在Linux和macOS环境中,使用at的计划任务可以在本地进行审核,也可以通过集中收集的日志记录、使用syslog或从主机审核事件进行审核;配置计划任务的设置,以强制任务在经过身份验证的帐户的上下文下运行,而不允许它们作为SYSTEM运行。关联的注册表项位于HKLM\SYSTEM\CurrentControlSet\Control\Lsa\SubmitControl
。可以通过GPO:计算机配置>[策略]>Windows设置>安全设置>本地策略>安全选项来配置该设置:域控制器:允许服务器操作员计划任务,设置为禁用;将“增加计划优先级”选项配置为仅允许管理员组具有计划优先级进程的权限。这可以通过GPO:计算机配置>[策略]>Windows设置>安全设置>本地策略>用户权限分配进行配置:增加计划优先级;限制用户帐户的权限并修正权限提升向量,以便只有经过授权的管理员才能在远程系统上创建计划任务。在Linux环境中,可以使用at.allow和at.deny文件管理用户对的帐户级访问。at.allow中列出的用户可以使用at计划操作,而at.deny文件中列出的使用者则被禁用。
检测:监视可用于创建/修改任务的操作的已执行命令和参数。任务也可以通过Windows系统管理工具(如Windows management Instrumentation和PowerShell)创建,因此可能需要配置额外的日志记录以收集适当的数据;在Windows上,监视Windows任务计划程序在%systemroot%\System32\Tasks
中存储的与计划任务相关的更改条目,尤其是那些与已知软件、修补程序周期等不相关的条目。在Linux和macOS上,所有at作业都存储在/var/spool/cron/atjobs/
中;监控网络数据中不常见的数据流。使用网络的进程通常不具有网络通信或以前从未见过,这些进程是可疑的。当AT.exe用于远程计划任务时,Windows通过SMB使用命名管道与远程计算机上的API通信。通过SMB进行身份验证后,将打开命名管道ATSVC,通过它调用JobAdd函数。在远程主机上,作业文件由任务计划程序创建,并遵循惯例C:\Windows\System32\AT
;这种管道活动可以通过网络解码器(如wireshark中的解码器)发现,该解码器可以检查SMB流量以识别管道的使用。它也可以通过查找原始数据包捕获流或从主机上挂接适当API函数的自定义传感器中检测到。如果没有网络或API级别的可见性,则可以通过查看445/tcp上的SMB连接,然后创建与模式C:\Windows\System32\at\<job_id>
匹配的文件来推断该流量;为了通过网络流量检测AT,需要一种能够提取和解码PCAP信息的传感器。具体来说,它需要正确解码SMB以及通过NamedPipes实现的功能。如果传感器满足这些标准,则PCAP数据需要通过管道ATSVC搜索命令JobAdd的实例,该命令全部通过Windows SMB 445/tcp实现;分析1-通过AT远程计划的任务:source="*Zeek:*" (dest_port=445 AND proto_info.pipe="ATSVC") AND (proto_info.function="JobAdd")
;使用创建/修改任务或从任务中执行的命令行来监视新构建的进程。例如,在Windows上,任务可能会从svchost.exe或旧操作系统版本的Windows任务计划程序taskeng.exe派生。与历史数据相比,通过计划任务执行的可疑程序可能会显示为以前从未见过的异常进程。正在运行的进程at.exe的实例意味着查询或创建任务。尽管command_line对于运行分析不是必不可少的,但在识别计划的命令时,它是至关重要的;分析1-计划任务:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") Image="*at.exe"
;监视新构建的计划作业。如果计划任务不用于持久性,那么对手很可能会在行动完成后删除任务。在Windows上,在事件日志记录服务中启用“Microsoft Windows TaskScheduler/Operational”设置,然后在计划的任务活动中记录多个事件,包括:;Sysinternals Autorun等工具也可以用于检测可能是持久性尝试的系统更改,包括列出当前计划任务。
Cron
介绍:敌人可能会滥用cron实用程序来执行恶意代码的初始或重复执行的任务调度。cron实用程序是用于类Unix操作系统的基于时间的作业调度程序。crontab文件包含要运行的cron项的时间表和指定的执行时间。任何crontab文件都存储在特定于操作系统的文件路径中。对手可能会在Linux或Unix环境中使用cron在系统启动时执行程序,或在计划的基础上执行Persistence。
预防措施:查看对cron计划的更改。可以在/var/log目录中查看cron的执行情况。要验证cron日志文件的位置,请检查/etc/rsyslog.conf或/etc/syslog.conf中的syslog配置;cron权限由/etc/cron.allow和/etc/cron.deny控制。如果有一个cron.allow文件,则需要在该文件中列出需要使用cron的一个或多个用户。cron.deny用于明确禁止用户使用cron。如果这两个文件都不存在,那么只允许超级用户运行cron。
检测:监视执行的atq命令,并确保存储在SSH_CONNECTION和SSH_CLIENT变量(创建作业的机器)中的IP地址是受信任的主机。所有at作业都存储在/var/spool/cron/atjobs/中;监视对文件所做的更改,以防对访问权限和属性进行意外修改;Linux Cron目录中的分析1-修改文件:source=“Linux:”;创建cron作业及其在您的环境中生成的进程的基线。当与基线数据进行比较时,监视通过以前从未见过的cron作业执行的新生成的异常进程;分析1-不寻常的Cron创造就业机会:source="*Linux:*" Image= "crontab" OR Image= "cron" AND CommandLine LIKE "*crontab -e*" OR CommandLine LIKE "*cron*"
;分析2-异常执行频率:source="*Linux:*" Image= "crontab" OR Image= "cron" AND CommandLine LIKE "*crontab -e*" OR CommandLine LIKE "*cron*"
;监视新构建的计划作业。合法的计划任务可以在安装新软件期间或通过系统管理功能创建。寻找与已知软件、补丁周期等不相关的任务更改。
Launchd
计划的任务
介绍:敌人可能会滥用Windows任务计划程序,为恶意代码的初始或重复执行执行执行任务计划。在Windows中有多种访问任务计划程序的方法。schtasks实用程序可以直接在命令行上运行,也可以通过“控制面板”的“管理员工具”部分中的GUI打开“任务调度器”。在某些情况下,对手使用了。NET包装器,或者,对手使用Windows netapi32库来创建计划任务。不推荐使用的at实用程序也可能被对手滥用(例如:at),尽管at.exe无法访问使用schtasks或控制面板创建的任务。对手可能会使用Windows任务调度程序在系统启动时执行程序,或在计划的基础上执行程序以实现持久性。Windows任务调度程序也可能被滥用,作为横向移动的一部分进行远程执行和/或在指定帐户(如SYSTEM)的上下文下运行进程。与系统二进制代理执行类似,对手也滥用Windows任务调度程序,可能掩盖签名/可信系统进程下的一次性执行。敌人还可能创建“隐藏”的计划任务(即隐藏工件),防御者工具和用于枚举任务的手动查询可能看不到这些任务。具体而言,对手可以通过删除相关的安全描述符(SD)注册表值(其中必须使用SYSTEM权限完成该值的删除)来向schtasks/query和任务调度器隐藏任务。对手也可以使用替代方法来隐藏任务,例如更改相关注册表项内的元数据(例如,索引值)。
预防措施:PowerSploit框架等工具包包含PowerUp模块,这些模块可用于探索系统中可用于提升权限的计划任务中的权限弱点;配置计划任务的设置,以强制任务在经过身份验证的帐户的上下文下运行,而不允许它们作为SYSTEM运行。关联的注册表项位于HKLM\SYSTEM\CurrentControlSet\Control\Lsa\SubmitControl
。可以通过GPO:计算机配置>[策略]>Windows设置>安全设置>本地策略>安全选项来配置该设置:域控制器:允许服务器操作员计划任务,设置为禁用;将“增加计划优先级”选项配置为仅允许管理员组具有计划优先级进程的权限。这可以通过GPO:计算机配置>[策略]>Windows设置>安全设置>本地策略>用户权限分配进行配置:增加计划优先级;限制用户帐户的权限并修正权限提升向量,以便只有经过授权的管理员才能在远程系统上创建计划任务。
检测:也可以通过Windows系统管理工具(如Windows management Instrumentation和PowerShell)创建监控器执行的命令和可用于收集任务的操作的参数,因此可能需要配置额外的日志记录以收集适当的数据;监视Windows任务计划程序在%systemroot%\System32\Tasks中存储与计划任务相关的更改条目,这些任务与已知软件、修补程序周期等不相关。为了获得持久性、权限提升或远程执行,对手可能会使用Windows任务计划程序将命令安排在指定的时间、日期甚至主机上运行。任务计划程序将任务作为文件存储在两个位置-C:\Windows\tasks(旧版)或C:\Windows\System32\tasks。因此,此分析将在这两个位置查找任务文件的创建;分析1-计划任务-文件创建:(source="WinEventLog:Microsoft Windows Sysmon/Operative" EventCode=“11")(TargetFilename="C:\Windows\System32\Tasks\" OR TargetFilename="C:\Windows\Tasks\*") AND Image!="C:\WINDOWS\system32\svchost.exe"
;监视Windows任务计划程序在%systemroot%\System32\Tasks
中存储的与与已知软件、修补程序周期等不相关的计划任务相关的更改条目;监控网络数据中不常见的数据流。使用网络的进程通常不具有网络通信或以前从未见过,这些进程是可疑的。在映射后查找RPC流量,这意味着目标端口至少为49152。如果可以通过数据包捕获或NIDS进行网络检查,则可以检测通过ITaskSchedulerService接口的流量。Microsoft列出了ITaskSchedulerService接口可能实现的方法,这些方法可能有助于区分读取和查询操作与创建和修改;远程创建计划任务时,Windows使用RPC(135/tcp)与远程计算机上的任务计划程序进行通信。一旦建立了RPC连接,客户端就会与在服务组netsvcs中运行的Scheduled Tasks端点进行通信。通过数据包捕获和正确的数据包解码器或基于字节流的签名,可以识别这些功能的远程调用。通过以不同格式查找ITaskSchedulerService的接口UUID,某些字符串可以是schtasks的标识符;此标识符在RPC请求阶段出现三次。任何可以访问原始、解码或ASCII字节码的传感器都可以实现分析;监视从Windows 10中的svchost.exe和旧版本的Windows的Windows任务计划程序taskeng.exe执行的新建进程和/或命令行。如果计划任务不用于持久性,那么对手很可能会在行动完成后删除任务。查找作为进程运行的schtasks.exe的实例。command_line字段对于消除schtasks命令类型之间的歧义是必要的。其中包括标志/create、/run、/query、/delete、/change和/end;检测到创建或修改具有可疑脚本、扩展名或用户可写路径的计划任务。攻击者可以创建或修改计划任务以持续执行恶意代码。此检测同时关注进程创建(SCHTASKS)的EventID 4688和1以及计划任务创建/修改事件日志的EventID 4698、4702;
系统计时器
介绍:敌人可能会滥用系统计时器来执行任务调度,以初始或重复执行恶意代码。系统计时器是文件扩展名为.timer的单元文件,用于控制服务。计时器可以设置为在日历事件上运行,或者在相对于起点的一段时间之后运行。它们可以在Linux环境中用作Cron的替代方案。Systemd计时器可以通过systemctl命令行实用程序远程激活,该实用程序通过SSH进行操作。每个.timer文件都必须有一个具有相同名称的相应.service文件,例如example.timer和example.service。服务文件是由Systemd系统和服务管理器管理的Systemd服务单元文件。特权计时器写入/etc/systemd/system/和/usr/lib/systemd/system,而用户级别写入~/.config/systemd/user/。对手可能会在系统启动时或在计划的基础上使用systemd定时器来执行恶意代码,以实现持久性。使用特权路径安装的计时器可用于维护根级别的持久性。敌人还可以安装用户级定时器以实现用户级持久性。
预防措施:限制对根帐户的访问,并防止用户创建和/或修改systemd计时器单元文件;将对systemd.timer单元文件的读/写访问权限限制为仅选择有合法需要管理系统服务的特权用户;将用户对“systemctl”或“systemd-run”等系统实用程序的访问权限限制为有合法需求的用户。
检测:监视“systemd run”实用程序执行的命令和参数,因为它可能用于创建计时器;监视/etc/systemd/system、/usr/lib/systemd/system/和~/.config/systemd/user/目录中对systemd计时器单元文件所做的更改,以及相关的符号链接中的意外修改事件;监视新构建的进程和/或命令行,这些进程的父进程为“systemd”,父进程ID为1,并且通常作为“root”用户执行;还可以通过将结果与可信系统基线进行比较来识别可疑的系统计时器。可以使用systemctl实用程序检查系统范围内的计时器来检测恶意的systemd计时器:systemctl list timers–all。分析文件系统中相应的.service文件的内容,并确保它们引用合法的、预期的可执行文件。
容器编排作业
介绍:敌人可能会滥用容器编排工具(如Kubernetes)提供的任务调度功能来调度被配置为执行恶意代码的容器的部署。容器编排作业在特定的日期和时间运行这些自动化任务,类似于Linux系统上的cron作业。这种类型的部署也可以配置为随着时间的推移维护一定数量的容器,从而自动化在集群中维护持久性的过程。在Kubernetes中,CronJob可以用于调度运行一个或多个容器以执行特定任务的作业。因此,对手可以利用CronJob来调度在集群内的各个节点中执行恶意代码的作业的部署。
预防措施:确保默认情况下容器未以root身份运行。在Kubernetes环境中,考虑定义Pod安全标准,以防止Pod运行特权容器;限制用户帐户的权限并修正权限提升向量,以便只有经过授权的管理员才能创建容器编排作业。
检测:新建集装箱监控器;通过使用Kubernetes节点上的日志代理来监控新构建的文件,并从应用程序和资源pod的sidecar代理中检索日志,以监控恶意容器编排作业部署;监视容器编排环境中计划作业的异常创建。
9.无服务器执行
介绍:敌人可能会滥用无服务器计算、集成和自动化服务在云环境中执行任意代码。许多云提供商提供各种无服务器资源,包括计算引擎、应用程序集成服务和web服务器。敌人可能会以各种方式滥用这些资源,作为执行任意命令的手段。例如,对手可能使用无服务器功能来执行恶意代码,例如加密挖掘恶意软件(即资源劫持)。对手还可能创建功能,从而进一步损害云环境。例如,对手可以使用AWS中的IAM:PassRole权限或谷歌云中的IAM.serviceAccounts.actAs权限将附加云角色添加到无服务器云功能中,从而可以执行原始用户无法执行的操作。也可以调用无服务器功能来响应云事件(即事件触发执行),从而可能随着时间的推移实现持久执行。例如,在AWS环境中,对手可能会创建一个Lambda函数,该函数会自动向用户添加额外的云凭据,以及相应的CloudWatch事件规则,该规则会在创建新用户时调用该函数。同样,对手可能会在Office 365环境中创建Power Automate工作流,该工作流转发用户收到的所有电子邮件,或在授予用户访问SharePoint中文档的权限时创建匿名共享链接。
预防措施:从没有明确要求的用户中删除创建、修改或运行无服务器资源的权限。
检测:监视无服务器执行生成的日志中的异常活动。例如,在Exchange环境中,Power Automate通过Outlook 365连接器发送的电子邮件在SMTP标头“x-ms-mail-application”中包含短语“Power App”或“Power Automate”;监视无服务器资源(如功能和工作流)的创建和修改。
10.共享模块
介绍:敌人可能通过加载共享模块来执行恶意有效载荷。共享模块是加载到进程中以提供对可重用代码的访问的可执行文件,例如特定的自定义函数或调用OS API函数(即Native API)。敌人可以使用此功能在受害者系统上执行任意有效载荷。例如,对手可以将其恶意软件的功能模块化为执行各种功能的共享对象,例如管理C2网络通信或执行目标上的特定动作。Linux和macOS模块加载程序可以从任意本地路径加载和执行共享对象。此功能位于dlfcn.h中的函数(如dlopen和dlsym)中。尽管macOS可以执行.so文件,但通常的做法是使用.dlib文件。可以指示Windows模块加载程序从任意本地路径和任意通用命名约定(UNC)网络路径加载DLL。此功能驻留在NTDLL.dll中,是Windows Native API的一部分,该API在运行时从LoadLibrary等函数调用。
预防措施:通过使用能够防止加载未知模块的应用程序控制工具,识别并阻止通过该技术执行的潜在恶意软件。
检测:监控模块负载可能会生成大量数据,除非在特定情况下收集,否则可能不会直接用于防御,因为共享模块负载功能的良性使用很常见,可能很难与恶意行为区分开来。合法的软件可能只需要加载例程、捆绑或系统模块,因此与已知模块加载的偏差可能是可疑的;将模块加载限制到受信任的目录,如Windows上的%SystemRoot%
和%ProgramFiles%
,可以防止来自不安全路径的模块加载;监视可能通过加载共享模块执行恶意有效负载的API调用。
11.软件部署工具
介绍:敌人可以访问并使用安装在企业内的集中式软件套件来执行命令并在网络中横向移动。配置管理和软件部署应用程序可以在企业网络或云环境中用于日常管理目的。这些系统也可以集成到CI/CD管道中。此类解决方案的示例包括:SCCM、HBSS、Altiris、AWS Systems Manager、Microsoft Intune、Azure Arc和GCP Deployment Manager。访问网络范围或企业范围的端点管理软件可以使对手能够在所有连接的系统上实现远程代码执行。访问可以用于横向移动到其他系统、收集信息或造成特定影响,例如擦除所有端点上的硬盘驱动器。基于SaaS的配置管理服务可以允许在云托管的实例上执行广泛的云管理命令,以及在本地端点上执行任意命令。例如,Microsoft Configuration Manager允许全局或Intune管理员在加入Azure AD的本地设备上以SYSTEM的身份运行脚本。此类服务还可以利用Web协议与对手拥有的基础设施进行通信。网络基础设施设备也可能具有配置管理工具,这些工具同样会被对手滥用。此操作所需的权限因系统配置而异;本地凭证可能足以直接访问第三方系统,或者可能需要特定的域凭证。但是,系统可能需要管理帐户才能登录或访问特定功能。
预防措施:通过使用组策略确保关键网络系统的正确系统和访问隔离;限制使用安装在企业网络中的第三方软件套件;通过使用多因素身份验证,确保关键网络系统的正确系统和访问隔离;通过使用防火墙确保关键网络系统的适当系统隔离;验证可用于访问部署系统的帐户凭据是唯一的,并且未在整个企业网络中使用;仅向数量有限的授权管理员授予对应用程序部署系统的访问权限;如果应用程序部署系统可以配置为仅部署已签名的二进制文件,请确保受信任的签名证书不与应用程序部署体系位于同一位置,而是位于无法远程访问或远程访问受到严格控制的系统上;定期对部署系统进行修补,以防止通过特权升级漏洞进行潜在的远程访问;确保第三方提供商用于访问这些系统的任何帐户都可以追溯到第三方,并且不会在整个网络中使用,也不会被同一环境中的其他第三方供应商使用。确保对提供给这些系统的帐户进行定期审查,以验证持续的业务需求,并确保有治理来跟踪不再需要的访问的取消提供。通过使用帐户权限分离,确保关键网络系统的正确系统和访问隔离;对部署系统的使用有严格的审批政策。
检测:这些第三方应用程序通常会有自己的日志,这些日志可以收集并与环境中的其他数据关联。确保第三方应用程序日志已登录到企业日志系统,并定期审查日志。审核软件部署日志并查找可疑或未经授权的活动。通常不用于向客户端推送软件的系统,突然被用于已知管理功能之外的此类任务,可能是可疑的。监控这些应用程序上的帐户登录活动,以检测可疑/异常使用情况。定期执行应用程序部署,使不定期的部署活动脱颖而出;监视与已知良好软件不相关的新执行进程。分析流程执行树、来自第三方应用程序的历史活动(例如通常推送哪些类型的文件),以及推送到系统的文件/二进制文件/脚本中产生的活动或事件。
12.系统服务
Launchctl
介绍:敌人可能会滥用launchctl来执行命令或程序。Launchctl与launchd接口,launchd是macOS的服务管理框架。Launchctl支持在命令行上以交互方式执行子命令,甚至可以从标准输入重定向。敌人使用launchctl作为Launch Agent或Launch Daemon执行命令和程序。常见的子命令包括:launchctl-load、launchctl-unload和launchctl-start。敌人可以使用脚本或手动运行launchctl load-w“%s/Library/LaunchAgents/%s”或/bin/launchctl-load命令来执行Launch Agents或Launch Daemon。
预防措施:阻止用户安装自己的启动代理程序或启动守护程序。
检测:立即监视launchctl命令的命令行执行,然后是异常的网络连接;每个Launch Agent和Launch Daemon在磁盘上都必须有一个可监控的对应plist文件。Plist文件位于根目录、系统和用户/Library/LaunchAgents或/Librare/LaunchDaemons文件夹中。可执行路径指向/tmp和/Shared文件夹位置的Launch Agent或Launch Daemon可能是可疑的;监视可能滥用launchctl执行命令或程序的新执行守护程序;监视新构建的服务/守护进程以执行命令或程序;注意:此检测是为了识别“用户模式服务”的创建,其中服务文件路径位于windows中的非公共服务文件夹中;分析1-在可疑文件路径中创建服务:(source="WinEventLog:Security" EventCode="4697") OR (source="WinEventLog:System" EventCode="7045") Service_File_Name = "*.exe" NOT (Service_File_Name IN ("C:\Windows\*", "%windir%\*", "C:\Program File*", "C:\Programdata\*", "%systemroot%\*")) Service_Type = "user mode service"
服务执行
介绍:敌人可能会滥用Windows服务控制管理器来执行恶意命令或有效负载。Windows服务控制管理器(services.exe)是一个用于管理和操作服务的接口。用户可以通过GUI组件以及sc.exe和Net等系统实用程序访问服务控制管理器。PsExec还可以用于通过服务控制管理器API创建的临时Windows服务来执行命令或有效负载。PsExec和sc.exe等工具可以接受远程服务器作为参数,并可用于进行远程执行。敌人可能会利用这些机制来执行恶意内容。这可以通过执行新的或修改的服务来完成。此技术是在服务持久性或权限提升期间与Windows服务一起使用的执行。
预防措施:在Windows 10上,启用减少攻击面(ASR)规则以阻止PsExec创建的进程运行;确保权限不允许以较高权限级别运行的服务由具有较低权限级别的用户创建或与其交互;确保具有较低权限级别的用户不能替换或修改高权限级别的服务二进制文件。
检测:监视可能滥用Windows服务控制管理器执行恶意命令或有效负载的已执行命令和参数;监控网络数据中不常见的数据流。使用网络的进程通常不具有网络通信或以前从未见过,这些进程是可疑的;监视可能滥用Windows服务控制管理器执行恶意命令或有效负载的新执行进程;事件4688(Microsoft Windows安全审核)和1(Microsoft Windows Sysmon)提供了可用于实现此检测的Windows进程创建的上下文;这种检测基于不常见的进程和父进程关系。服务控制管理器生成命令shell是一个很好的起点。根据网络环境的实际情况添加更多可疑关系;为了减少误报,您还可以使用参数(如/c)过滤CommandLine事件字段,该参数执行父进程指定的命令;分析1-服务执行:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") | WHERE Image LIKE "*services.exe" AND Image LIKE "*cmd.exe"
;监视滥用控制管理器执行恶意命令或有效负载的新建服务;监视对windows注册表项和/或值所做的更改,这些更改可能会滥用windows服务控制管理器来执行恶意命令或有效负载。
13.用户执行
恶意链接
介绍:对手可能依靠用户点击恶意链接来获得执行。用户可能会受到社会工程的影响,从而点击将导致代码执行的链接。此用户操作通常会被视为“矛式网络钓鱼链接”的后续行为。点击链接也可能导致其他执行技术,例如通过“利用客户端执行”利用浏览器或应用程序漏洞。链接还可能导致用户通过恶意文件下载需要执行的文件。
预防措施:如果用户正在访问链接,则可以使用网络入侵预防系统和设计用于扫描和删除恶意下载的系统来阻止活动;如果用户正在访问某个链接,则默认情况下,阻止传输中不应下载的未知或未使用的文件,或者根据策略阻止可疑网站下载这些文件,作为防止某些矢量的最佳做法,如.scr、.exe、.pif、.cpl等。一些下载扫描设备可以打开并分析压缩和加密格式,如zip和rar,这些格式可能用于隐藏恶意文件;使用用户培训来提高人们对常见网络钓鱼和鱼叉式网络钓鱼技术的认识,以及如何提高对潜在恶意事件的怀疑。
检测:从链接下载并在用户计算机上执行的恶意文档和文件;监控新构建的基于web的网络连接是否发送到恶意或可疑目的地(例如,归因于网络钓鱼活动的目的地)。考虑与进程监视和命令行的相关性,以检测异常进程执行和命令行参数(例如,监视使用通常不启动网络连接的文件时的异常情况,或由regsvr32.exe、rundll.exe、.SCF、HTA、MSI、DLL或msiexec.exe启动的异常连接);监控和分析与发送到恶意或可疑检测(例如,归因于网络钓鱼活动的目的地)的基于网络的网络连接相关的流量模式和数据包检查。考虑与进程监视和命令行的相关性,以检测异常进程执行和命令行参数(例如,监视使用通常不启动网络连接的文件时的异常情况,或由regsvr32.exe、rundll.exe、.SCF、HTA、MSI、DLL或msiexec.exe启动的异常连接)。
恶意文件
介绍:对手可能依靠用户打开恶意文件来获得执行。用户可能会受到社会工程的影响,从而打开一个将导致代码执行的文件。此用户操作通常会被视为斯皮尔网络钓鱼附件的后续行为。对抗方可能使用几种类型的文件,这些文件需要用户执行,包括.doc、.pdf、.xls、.rtf、.scr、.exe、.lnk、.pif和.cpl。对抗方可能会使用各种形式的伪装和混淆文件或信息,以增加用户打开并成功执行恶意文件的可能性。这些方法可能包括使用熟悉的命名约定和/或密码来保护文件,并向用户提供如何打开文件的说明。虽然恶意文件经常发生在首次访问后不久,但也可能发生在入侵的其他阶段,例如对手将文件放在共享目录或用户桌面上,希望用户点击它。这种活动也可能在内部网络钓鱼后不久出现。
预防措施:在Windows 10上,可以启用各种减少攻击面(ASR)规则,以防止执行潜在的恶意可执行文件(例如那些已由Office应用程序/脚本解释器/电子邮件客户端下载和执行的文件,或者不符合特定的流行率、年龄或受信任列表标准的文件)。注意:必须为某些规则启用云提供的保护;应用程序控制可能能够防止伪装成其他文件的可执行文件的运行;使用用户培训来提高人们对常见网络钓鱼和鱼叉式网络钓鱼技术的认识,以及如何提高对潜在恶意事件的怀疑。
检测:监视在用户计算机上下载和执行的新建文件。一旦文件被打开,端点检测或网络检测就可能检测到恶意事件(例如Microsoft Word文档或PDF文件访问互联网或生成powershell.exe);虽然批处理文件本身并不是恶意的,但在操作系统安装后创建它们的情况并不常见,尤其是在Windows目录中。此分析查找C:\Windows\System32目录树中正在创建的批处理文件的可疑活动。由于管理员的操作,偶尔会出现误报;对于Windows,Sysmon Event ID 11(文件创建)可用于跟踪文件创建事件。该事件还提供创建文件的进程的进程ID,该进程ID可以与进程创建事件(例如Sysmon事件ID 1)相关联,以确定文件是否是从外部网络下载的;对于MacOS,可以使用与苹果端点安全框架(如文件监视器)协同工作的实用程序来跟踪文件创建事件;分析1-批处理文件写入系统32:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="11") file_path="*system32*" AND file_extension=".bat"
;监视新构建的过程和/或应用程序的命令行,这些应用程序可能被对手用来获得需要用户交互的初始访问权限。这包括压缩应用程序,例如压缩zip文件的应用程序,可用于对有效载荷中的文件或信息进行解密/解码。
恶意图片
介绍:敌人可能依赖于运行恶意映像的用户来促进执行。亚马逊网络服务(AWS)亚马逊机器图像(AMI)、谷歌云平台(GCP)图像和Azure图像以及Docker等流行的容器运行时都可以后门。后门图像可以通过Upload Malware上传到公共存储库,然后用户可以从该图像下载并部署实例或容器,而不会意识到该图像是恶意的,从而绕过了专门实现初始访问的技术。这可能导致在实例或容器中执行恶意代码,例如执行加密货币挖掘的代码。敌人也可能以某种方式命名图像,以增加用户错误地从图像部署实例或容器的机会(例如:匹配合法名称或位置)。
预防措施:审核环境中部署的映像,以确保它们不包含任何恶意组件;利用信任模型,如带有数字签名的Docker Content trust,确保特定图像标签的完整性和发布者的运行时验证;网络防护入侵系统和设计用于扫描和删除恶意下载的系统可用于阻止活动;培训用户了解恶意映像的存在,以及如何避免从中部署实例和容器。
检测:监视第三方应用程序日志记录、消息传递和/或其他工件,这些工件可能依赖于运行恶意映像的用户来促进执行;监控执行的命令和论据,这些命令和论据可能试图利用面向互联网的计算机或程序中的弱点,使用软件、数据或命令,从而导致意外或意外的行为;跟踪新容器的部署,尤其是从新建的映像中跟踪;监视环境中容器的行为,以检测用户从恶意映像部署后的异常行为或恶意活动;监视本地映像注册表以确保没有添加恶意映像;监控新构建的实例,这些实例可能试图利用面向互联网的计算机或程序中的弱点,使用软件、数据或命令,从而导致意外或意外的行为;监视实例的激活或调用(例如:GCP审核日志中的instance.start)
14.Windows Management Instrumentation
介绍:敌人可能会滥用Windows Management Instrumentation(WMI)来执行恶意命令和有效负载。WMI是为程序员设计的,是Windows系统上管理数据和操作的基础设施。WMI是一种管理功能,它提供了访问Windows系统组件的统一环境。WMI服务同时支持本地和远程访问,尽管后者由分布式组件对象模型和Windows远程管理等远程服务提供便利。DCOM上的远程WMI使用端口135进行操作,而WinRM上的WMI在使用HTTP和5986进行HTTPS时通过端口5985进行操作。对手可以使用WMI与本地和远程系统进行交互,并将其用作执行各种行为的手段,例如收集发现信息以及执行命令和有效载荷。例如,对手可能会滥用wmic.exe来使用命令wmic.exe Shadowcopy delete(即,禁止系统恢复)删除卷影副本。注意:自2024年1月起,wmic.exe
已被弃用,在Windows 11+上,wmic功能被“默认禁用”。WMIC将从后续的Windows版本中删除,并由PowerShell替换为主要WMI接口。除了PowerShell和wbemtool.exe等工具外,COM API还可用于通过C++以编程方式与WMI交互。NET、VBScript等。
预防措施:在Windows 10上,启用减少攻击面(ASR)规则以阻止WMI命令创建的进程运行。注意:许多合法的工具和应用程序使用WMI执行命令;如果给定系统或网络不需要执行wmic.exe,请使用配置为阻止其执行的应用程序控制,以防止对手滥用。例如,在Windows 10和Windows Server 2016及更高版本中,可以应用Windows Defender应用程序控制(WDAC)策略规则来阻止wmic.exe应用程序并防止滥用;防止管理员帐户和特权帐户系统之间的凭据重叠;默认情况下,只允许管理员使用WMI进行远程连接。限制允许连接的其他用户,或禁止所有用户远程连接到WMI。
检测:监视用于执行远程行为的操作的已执行命令和参数;监视WMI连接的网络流量,以用于远程编辑配置、启动服务或查询文件。当远程WMI请求通过RPC时,它会连接到RPC组netsvcs内的DCOM接口。要检测此活动,需要在网络级别上安装一个传感器,该传感器可以解码RPC流量,或者在可以更本地地检测通信的主机上,例如Windows的事件跟踪。使用wireshark/tshark解码器,可以提取WMI接口,从而可以检测RPC上的WMI活动。尽管描述详细说明了如何准确检测远程WMI,但一个不错的估计是在135/tcp上的初始RPC连接中查找字符串RPCSS。它返回此活动的超集,并将在RPC中运行的所有与DCOM相关的服务上触发,这可能也是应该在主机之间检测到的活动。有关RPCSS的详细信息,请访问:rpcs_dcom_interfaces.html;在网络流量中查找WMI查询的实例,并查找在看到连接后立即启动进程的情况。这实质上是将通过WMI启动远程进程的请求与进程执行合并在一起。如果在此时间段内从wmiprvse.exe派生出其他进程,则可能会出现竞争条件,并且可能会合并错误的进程。如果是这种情况,那么更深入地查看网络流量以查看是否可以提取所需的命令可能是有用的;初始化WMI连接后,可以使用命令wmic /node:"" process call create ""
远程启动进程,该命令在第三个检测伪代码中检测到;这会在网络(RPC)和进程(命令行)级别留下工件。当wmic.exe(或schtasks API)用于远程创建进程时,Windows使用RPC(135/tcp)和远程计算机进行通信;RPC身份验证后,RPC端点映射器打开一个高端口连接,通过该连接实际实现schtasks远程过程调用。使用正确的分组解码器,或者通过在原始数据中查找特定的字节流,可以识别这些功能;执行命令行时,它具有C:\windows\system32\wbem\WmiPrvSE.exe
的父进程。该分析查找按顺序发生的这两个事件,以便输出网络连接和目标进程;通过查找不同格式的IRemUnknown2的接口UUID,某些字符串可以成为WMI的标识符-UUID 00000143-0000-0000-c000-000000000046
(解码)-十六进制43 01 00 00 00 00 00c0 00 00 00 000 00 00 00 46
(原始)-ASCII CF(仅可打印文本);此标识符在RPC请求阶段出现三次。任何可以访问原始、解码或ASCII字节码的传感器都可以实现此分析。传输语法为-UUID 8a885d04-1ceb-11c9-9fe8-08002b104860
(已解码)-十六进制04 5d 88 8a eb 1c c9 11 9f e8 08 00 2b 10 48 60
(原始)-ASCI]+H\`\
(仅可打印文本);因此,一个伟大的基于ASCII的签名是-CF]+HCFCFhost"
;注意:要通过RPC检测WMI(使用DCOM),需要存在一个传感器,该传感器能够深入了解各个连接,并能够实际解码和理解RPC流量。具体来说,可以通过查看RPC流量来检测WMI,其中目标接口与WMI的接口匹配,即IRemUnknown2。在网络流量中查找WMI查询的实例,并查找在看到连接后立即启动进程的情况。这实质上是将通过WMI启动远程进程的请求与进程执行合并在一起。如果在此时间段内从wmiprvse.exe派生出其他进程,则可能会出现竞争条件,并且可能会合并错误的进程。如果是这种情况,那么更深入地查看网络流量以查看是否可以提取所需的命令可能是有用的;分析1-RPC上的远程WMI:source="*Zeek:RPC" dest_port="135" protocol_rpc_interface="IRemUnknown2"
;监控“wmic”的新建进程和/或命令行。如果在源主机上使用命令行实用程序wmic.exe
,则还可以在分析中检测到它。源主机上的命令行被构造为类似wmic.exe /node:"\<hostname>" process call create "\<command line>"
。也可以通过IP地址进行连接,在这种情况下,字符串"\<hostname>"
看起来像IP地址。进程可以通过WMI以其他几种方式远程创建,例如更直接的API访问或内置实用程序PowerShell;注意:事件ID用于Sysmon(事件ID 10-进程访问)和Windows安全日志(事件ID 4688-已创建新进程);除了执行任意进程外,wmic.exe还可以用于执行存储在NTFS备用数据流NTFS文件属性中的数据。在命令行中查找wmic.exe的实例以及子字符串:-process call create-/node:分析1:通过WMIC创建远程进程:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") AND Image="*wmic.exe" AND CommandLine="* process call create *"
;监视将执行恶意命令和有效负载的新建WMI对象。
五、持久化
1.账户操纵
其他云凭据
介绍:对手可以向云帐户添加对手控制的凭据,以保持对环境中受害者帐户和实例的持久访问。例如,除了Azure AD中现有的合法凭据外,对手还可以添加服务主体和应用程序的凭据。这些凭据包括x509密钥和密码。有了足够的权限,可以通过多种方式添加凭据,包括Azure门户、Azure命令行接口以及Azure或Az PowerShell模块。在基础设施即服务(IaaS)环境中,通过云帐户获得访问权限后,对手可能会使用AWS中的CreateKeyPair或ImportKeyPair
API或GCP中的gcloud compute os-login ssh-keys
命令生成或导入自己的SSH密钥。这允许对云环境中的实例进行持久访问,而无需进一步使用受损的云帐户。敌人还可以使用AWS中的CreateAccessKey
API或GCP中的gcloud iam service-accounts keys create
命令向帐户添加访问密钥。如果目标帐户与请求帐户具有不同的权限,则对手也可以升级其在环境中的权限(即云帐户)。例如,在Azure AD环境中,具有应用程序管理员角色的对手可以向其应用程序的服务主体添加一组新的凭据。在这样做的过程中,对手将能够访问服务主体的角色和权限,这可能与应用程序管理员的不同。在AWS环境中,拥有适当权限的对手也可以使用sts:GetFederationToken
API调用创建一组临时凭据,以伪造与原始用户帐户权限绑定的Web凭据。即使原始帐户的API凭据被停用,这些临时凭据也可能在其生命周期内保持有效。
预防措施:对用户和特权帐户使用多因素身份验证。请考虑通过IAM策略对CreateKeyPair和ImportKeyPair API调用强制执行多因素身份验证;配置访问控制和防火墙以限制对关键系统和域控制器的访问。大多数云环境都支持独立的虚拟专用云(VPC)实例,从而实现云系统的进一步细分;不允许域管理员或root帐户用于日常操作,因为这些操作可能会使他们暴露在非特权系统上的潜在对手面前;请确保低特权用户帐户没有向帐户添加访问密钥的权限。在AWS环境中,除非明确要求,否则禁止用户调用sts:GetFederationToken API
。
检测:监视对云用户帐户的意外更改,例如突出显示恶意服务主体和应用程序修改的Azure活动日志;监控向帐户添加访问密钥或令牌的API和CLI命令的使用情况,如AWS中的CreateAccessKey或GetFederationToken或GCP中创建的服务帐户密钥。还要监视创建或导入SSH密钥的API的使用情况,特别是由非预期用户或帐户(如根帐户)使用。
其他电子邮件委派权限
介绍:对手可以授予额外的权限级别,以保持对对手控制的电子邮件帐户的持久访问。例如,本地Exchange和基于云的服务Office 365中提供的Add-MailboxPermission PowerShell cmdlet可向邮箱添加权限。在谷歌工作区中,可以通过谷歌管理控制台启用委派,用户可以通过Gmail设置委派帐户。对手也可以通过单独的文件夹权限或角色分配邮箱文件夹权限。在Office 365环境中,对手可能会将默认或匿名用户权限或角色分配给信息存储顶部(根)、收件箱或其他邮箱文件夹。通过向文件夹分配一个或两个用户权限,对手可以利用租户中的任何其他帐户来保持对目标用户邮件文件夹的持久性。这可能用于持续威胁事件以及BEC(业务电子邮件泄露)事件,其中对手可以向他们希望泄露的帐户添加额外的云角色。这可以进一步使得能够使用额外的技术来获得对系统的访问。例如,在创建收件箱规则(例如:内部矛式网络钓鱼)时,受损的企业帐户通常用于向目标企业网络中的其他帐户发送消息,因此这些消息可以避开垃圾邮件/网络钓鱼检测机制。
预防措施:如果不需要电子邮件委派,请禁用它。在谷歌工作区中,这可以通过谷歌管理控制台完成;对用户和特权帐户使用多因素身份验证;不允许域管理员帐户用于日常操作,这可能会使它们暴露在非特权系统上的潜在对手面前。
检测:为所有登录类型启用UpdateFolderPermissions操作。邮箱审核日志将文件夹权限修改事件转发到统一审核日志。创建规则以在ModifyFolderPermissions操作中向匿名用户或默认用户分配除None以外的权限时发出警报;从一个帐户发送的电子邮件数量大于正常数量,以及从网络中的真实帐户发送的类似钓鱼电子邮件数量,这可能表明一个帐户受到了威胁,并试图利用修改后的电子邮件权限进行访问;监视异常的Exchange和Office 365电子邮件帐户权限更改,这些更改可能表明授予受威胁帐户的权限范围过大(包括特权组中的成员资格);监视Exchange和Office 365电子邮件帐户权限的异常更改,这些更改可能表明授予受威胁帐户的权限过于宽泛。
其他云角色
介绍:对手可以向对手控制的云帐户添加额外的角色或权限,以保持对租户的持久访问。例如,对手可能会在基于云的环境中更新IAM策略,或在Office 365环境中添加新的全局管理员。有了足够的权限,被泄露的帐户可以获得几乎无限的数据和设置访问权限(包括重置其他管理员密码的能力)。此帐户修改可能会在创建帐户或其他恶意帐户活动之后立即进行。对手还可以修改他们已经泄露的现有有效账户。这可能导致特权升级,特别是如果添加的角色允许横向移动到其他帐户。例如,在AWS环境中,具有适当权限的对手可能能够使用CreatePolicyVersion API来定义IAM策略的新版本,或者使用AttachUserPolicy API来将具有附加或不同权限的IAM策略附加到受损用户帐户。在某些情况下,对手可能会在受害者云租户之外为对手控制的帐户添加角色。这允许这些外部帐户在受害者租户内部执行操作,而无需对手创建帐户或修改受害者拥有的帐户。
预防措施:对用户和特权帐户使用多因素身份验证;确保所有帐户使用所需的最低权限。在Azure AD环境中,考虑使用特权身份管理(PIM)来定义在分配给用户之前需要两个或多个批准的角色;确保低特权用户帐户没有向帐户添加权限或更新IAM策略的权限。
检测:从云管理员帐户收集使用日志,以识别为这些帐户分配角色时的异常活动。监视分配给管理员角色的帐户是否超过已知管理员的特定阈值。监视IAM策略和附加到用户帐户的角色的更新。
SSH授权密钥
介绍:攻击者可以修改SSH authorized_keys
文件以在受害者主机上保持持久性。Linux发行版和macOS通常使用基于密钥的身份验证来保护SSH会话的身份验证过程,以进行远程管理。SSH中的authorized_keys
文件指定可用于登录到配置该文件的用户帐户的SSH密钥。该文件通常位于<userhome>/.ssh/authorized_keys
下的用户主目录中。用户可以编辑系统的SSH配置文件,将PubkeyAuthentication和RSAAuthentication指令修改为值“yes”,以确保启用公钥和RSA身份验证。SSH配置文件通常位于/etc/SSH/sshd_config
下。对手可以直接使用脚本或shell命令修改SSH authorized_keys
文件,以添加自己的对手提供的公钥。在云环境中,对手可能能够通过命令行接口或rest API修改特定虚拟机的SSH authorized_keys文件。例如,通过使用Google Cloud CLI的“添加元数据”命令,对手可以向用户帐户添加SSH密钥。类似地,在Azure中,对手可以通过对API的PATCH请求来更新虚拟机的authorized_keys文件。这确保了拥有相应私钥的对手可以通过SSH作为现有用户登录。它还可能导致权限提升,其中虚拟机或实例具有与请求用户不同的权限。在通过云API或命令行接口修改authorized_keys文件的情况下,如果对手向权限更高的用户添加密钥,则可以在目标虚拟机上实现权限提升。SSH密钥也可以添加到网络设备上的帐户,例如使用ip-SSH-pubkey-chain network Device CLI命令。
预防措施:如果在主机上没有必要,请禁用SSH,或者使用/etc/SSH/sshd_config
限制特定用户/组的SSH访问;限制对authorized_keys
文件的访问;在云环境中,确保只有明确要求拥有更新实例元数据或配置权限的用户才能这样做。
检测:监视执行的命令和参数以修改authorized_keys或/etc/ssh/sshd_config文件;监视所做的更改,以检测系统上每个用户对authorized_keys文件所做的修改。监视修改/etc/ssh/sshd_config的更改和可疑进程;监视修改authorized_keys或/etc/ssh/sshd_config文件的可疑进程。
设备注册
介绍:对手可以将设备注册到对手控制的帐户。设备可以在多因素身份验证(MFA)系统中注册,该系统处理对网络的身份验证,也可以在设备管理系统中注册。MFA系统,如Duo或Okta,允许用户将设备与其帐户关联,以完成MFA要求。损害用户凭据的对手可能会注册一个新设备,以绕过最初的MFA要求并获得对网络的持久访问。在某些情况下,MFA自注册过程可能只需要用户名和密码即可注册帐户的第一个设备或将设备注册到非活动帐户。类似地,现有网络访问权限的对手可以将设备注册到Azure AD和/或其设备管理系统Microsoft Intune,以便访问敏感数据或资源,同时绕过条件访问策略。在Azure AD中注册的设备可能能够通过组织内电子邮件进行内部钓鱼活动,而这些电子邮件不太可能被电子邮件客户端视为可疑。此外,对手可能能够通过注册大量设备在Azure AD租户上执行服务耗尽洪水。
预防措施:需要多因素身份验证才能在Azure AD中注册设备。将多因素身份认证系统配置为不允许为非活动帐户注册新设备。首次注册MFA时,请使用条件访问策略将设备注册限制在受信任的位置或设备,并考虑使用临时访问通行证作为注册设备的初始MFA解决方案。
检测:监视Active Directory中新设备对象的注册或加入。在不使用MFA的情况下注册或加入新设备时发出警报;Azure AD在注册新设备时会创建多个日志项,可以监视这些日志项是否有意外的设备注册。此外,可以通过Azure AD门户查看加入的设备;监控用户帐户中是否存在新的和可疑的设备关联,例如源自异常来源、发生在异常时间或可疑登录后的关联。
其他容器群集角色
介绍:对手可以向对手控制的用户或服务帐户添加额外的角色或权限,以保持对容器编排系统的持久访问。例如,拥有足够权限的对手可以创建RoleBinding或ClusterRoleBinding,将Role或ClusterRole绑定到Kubernetes帐户。在使用基于属性的访问控制(ABAC)的情况下,具有足够权限的对手可以修改Kubernetes ABAC策略,为目标帐户提供额外权限。此帐户修改可能会在创建帐户或其他恶意帐户活动之后立即进行。对手还可以修改他们已经泄露的现有有效账户。请注意,在云环境中部署容器编排系统的情况下,如Google Kubernetes Engine、Amazon Elastic Kubernets Service和Azure Kubernete Service,通常可以使用基于云的基于角色的访问控制(RBAC)分配或ABAC策略来代替本地权限分配,也可以在本地权限分配之外使用。在这些情况下,此技术可以与其他云角色一起使用。
预防措施:要求通过云部署或通过LDAP或SAML等身份验证协议对集成到容器集群中的用户帐户进行多因素身份验证;确保低特权帐户没有向帐户添加权限或更新容器群集角色的权限。
检测:从帐户中收集使用日志,以识别为这些帐户分配角色时的异常活动。监视分配给高特权群集角色的帐户是否超过已知管理员的特定阈值。
2.BITS作业
介绍:敌人可能会滥用BITS作业来持续执行代码和执行各种后台任务。Windows后台智能传输服务(BITS)是一种通过组件对象模型(COM)公开的低带宽异步文件传输机制。BITS通常由更新程序、信使和其他应用程序使用,这些应用程序优选在后台操作(使用可用空闲带宽),而不会中断其他网络应用程序。文件传输任务被实现为BITS作业,BITS作业包含一个或多个文件操作的队列。可以通过PowerShell和BITSAdmin工具访问创建和管理BITS作业的接口。敌人可能会滥用BITS来下载(例如,Ingress Tool Transfer)、执行,甚至在运行恶意代码后进行清理(例如,指标删除)。BITS任务在BITS作业数据库中是自包含的,没有新文件或注册表修改,并且通常由主机防火墙允许。启用BITS的执行还可以通过创建长期作业(默认最长生存期为90天且可扩展)或在作业完成或出现错误时调用任意程序(包括系统重新启动后)来启用持久性。BITS上载功能也可用于通过替代协议执行Exfiltering。
预防措施:修改网络和/或主机防火墙规则以及其他网络控制,以仅允许合法的BITS流量;请考虑缩短组策略中的默认BITS作业生存期,或通过编辑HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\BITS中的JobInactivityTimeout和MaxDownloadTime注册表值;请考虑将BITS接口的访问权限限制为特定用户或组。
检测:监视BITSAdmin工具中执行的命令和参数(尤其是BITS活动的“Transfer”、“Create”、“AddFile”、“SetNotifyFlags”、“SetNotifyCmdLine”、“Set MinRetryDelay”、“GetCustomHeaders”和“Resume”命令选项)管理日志、PowerShell日志和Windows事件日志。还可以考虑通过分析BITS作业数据库来调查有关作业的更详细信息;监视BITS生成的新建网络活动。BITS作业使用HTTP(S)和SMB进行远程连接,并与创建用户连接,只有当该用户登录时才能运行(即使用户将作业附加到服务帐户,此规则也适用);使用BITSAdmin工具(BITSAdmin/list/allusers/verbose)监视要枚举的新建BITS任务;注意:事件ID用于Sysmon(事件ID 1-进程创建)和Windows安全日志(事件ID 4688-已创建新进程)。分析1的目标是寻找Microsoft后台智能传输服务实用程序(bitsadmin.exe)进程的创建,这些进程计划BITS作业在端点上持久存在。该分析确定用于创建、恢复文件或将文件添加到BITS作业的命令行参数;这些通常被视为组合在单个命令行中或按顺序执行;分析2使用传输参数识别Microsoft后台智能传输服务实用程序bitsadmin.exe以下载远程对象。此外,在命令行上查找下载或上载,执行传输不需要开关。捕获所有下载的文件。查看所用IP或域的信誉。通常,一旦执行,将使用后续命令来执行删除的文件。相关的网络连接或文件修改事件不会从bitsadmin.exe生成或创建,但项目将出现在svchost.exe的并行进程中,该进程具有类似于svchost.exe-k netsvcs-s BITS的命令行。审查所有并行进程和子进程以捕获任何行为和工件是很重要的。在某些可疑和恶意的实例中,将创建BITS作业。您可以使用bitsadmin/list/verbose列出调查期间的作业;分析1-BITS作业持久性:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") Image="C:\Windows\System32\bitsadmin.exe" AND (CommandLine= "*create*" OR CommandLine= "*addfile*" OR CommandLine= "*setnotifyflags*" OR CommandLine= "*setnotifycmdline*" OR CommandLine= "*setminretrydelay*" OR CommandLine= "*setcustomheaders*" OR CommandLine= "*resume*")
;分析2-BITSAdmin下载文件:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") Image="C:\Windows\System32\bitsadmin.exe" AND CommandLine= *transfer*
;BITS作为服务运行,并且可以使用Sc查询实用程序(Sc查询位)检查其状态。
3.启动或登录自动启动执行
注册表运行密钥/启动文件夹
介绍:对手可以通过将程序添加到启动文件夹或使用注册表运行键引用程序来实现持久性。在注册表或启动文件夹中的“运行键”中添加条目将导致用户登录时执行引用的程序。这些程序将在用户的上下文下执行,并具有帐户的相关权限级别。默认情况下,以下运行项在Windows系统上创建:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
,HKEY_CURRENT_USER\Software\Microsoft\Windows\urrentVersion\RunOnce
,HKEY_LOCAL_MACHINE\Software\Microsoft.com/Windows\CurrentVersion\Run
,HKEY_LOCAL_MACHINE\SSoftware\Microsoft\Windows \CurrentVersion\RunOnce
运行项可能存在于多个配置单元下。HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
也可用,但默认情况下不会在Windows Vista及更新版本上创建。注册表运行项可以直接引用程序,也可以将它们作为依赖项列出。例如,可以在登录时使用reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\0001\Depend /v 1 /d "C:\temp\evil[.]dll"
的“Depend”键加载DLL。将程序放在启动文件夹中也会导致该程序在用户登录时执行。有一个单独用户帐户的启动文件夹位置,以及一个系统范围的启动文件夹,无论哪个用户帐户登录,都会检查该文件夹。当前用户的启动文件夹路径为C:\Users\[Username]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\startup
。所有用户的启动文件夹路径为C:\ProgramData\Microsoft\Windows\Start Menu\Programs\startup
。以下注册表项可用于设置要持久化的启动文件夹项:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\USER Shell Folders
、HKEY_CURRENT_USER\Software\Microsoft\Windows\urrentVersion\Explore\Shell Folders
、HKEY_LOCAL_MACHINE\Software\Microsoft\Windows \CurrentVersion\Explorer \ Shell Folders
、 HKEY_LOCAL_ MACHINE\ Software\MMicrosoft\Windows\CurrentVersion\ USER Shell Folders
。以下注册表项可以控制启动期间服务的自动启动:HKEY_LOCAL_MAC HINE\Software\MMicrosoft\Windows \CCurrentVersion\RunServicesOnce
、HKEY_CURREND_USER\Software\Windows\CURRENT Version\RunServiceOnce
、\Software\Microsoft\Windows\CurrentVersion\RunServices
、HKEY_CURRENT_USER\Software\Microsoft.com/Windows\CurrentVersion\RunServices
使用策略设置指定启动程序会在两个注册表项中的任一注册表项中创建相应的值:HKEY_LOCAL_MACHINE\Software\MMicrosoft\Windows\urrentVersion\Policies\Explorer\RunHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
注册表项HKEY_CURRENT_USER\Software\Wicrosoft\Windows NT\CurrentVersion\Windows
的加载值中列出的程序会为当前登录的用户自动运行。默认情况下,注册表项HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager
is set to autocheck autochk *
。如果系统异常关闭,此值会导致Windows在启动时检查硬盘的文件系统完整性。敌人可以将其他程序或进程添加到此注册表值,该值将在启动时自动启动。敌人可以使用这些配置位置来执行恶意软件,如远程访问工具,以通过系统重新启动来保持持久性。敌人也可以使用伪装使注册表条目看起来像是与合法程序相关。
预防措施:
检测:监视执行的命令和参数,这些命令和参数可以通过将程序添加到启动文件夹或使用注册表运行键引用程序来实现持久性;监视启动文件夹是否有添加或更改。Sysinternals Autorun等工具也可以用于检测可能是持久性尝试的系统更改,包括启动文件夹;通过Windows EID 9707或“Software\Microsoft\Windows\CurrentVersion\Run”和“Software\Microsoft.com/Windows\CurrentVersion\RunOnce”注册表项,用完整的命令行监视从Run/RunOnce注册表项执行的新执行进程;在通过已知的Windows机制建立持久性时,注册表修改通常是必不可少的。许多合法的修改都是通过regedit.exe或使用相应的通道以图形方式完成的,甚至可以直接调用注册表API。内置实用工具reg.exe为注册表提供了一个命令行界面,因此可以从shell(如cmd.exe)执行查询和修改。当用户负责这些操作时,cmd.exe的父级可能是explorer.exe。偶尔,高级用户和管理员也会编写执行此行为的脚本,但可能来自不同的流程树。必须学习这些背景脚本,以便相应地调整它们;输出描述导致reg.exe从shell启动的进程序列。也就是说,层次结构看起来像•great-grand_parent.exe•grand_parent.exe•reg.exe;分析1-从命令行shell程序调用Reg.exe:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") Image="reg.exe" AND ParentImage="cmd.exe"| join left=L right=R where L.ParentProcessGuid = R.ProcessGuid [search EventCode IN (1, 4688) Image="*cmd.exe" ParentImage!="*explorer.exe"]
;监视新创建的windows注册表项,这些注册表项可以通过将程序添加到启动文件夹或使用注册表运行项引用程序来实现持久性;监视注册表中与已知软件、修补程序周期等不相关的运行项的更改。Sysinternals Autorun等工具也可用于检测可能是持久性尝试的系统更改,包括列出运行项的注册表位置;检测注册表项Common Startup
的修改,该注册表项位于HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows \CurrentVersion\ Explorer\ User Shell Folders中。当用户登录时,启动启动文件夹中的所有文件。攻击者可能会用其他文件修改这些文件夹,以逃避在这些默认文件夹上设置的检测。此检测的重点是用于进程创建的EventID 4688和1,以及用于修改注册表项的EventID 4657;分析1-修改注册表项“Common Startup”中的默认启动文件夹:(source="*WinEventLog:Security" EventCode="4657" ObjectValueName="Common Startup") OR (source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="13" TargetObject="*Common Startup")
身份验证包
介绍:当系统启动时,敌人可能会滥用身份验证包来执行DLL。Windows身份验证包DLL由本地安全机构(LSA)进程在系统启动时加载。它们为操作系统提供了对多个登录进程和多个安全协议的支持。通过在Windows注册表位置HKLM\SYSTEM\CurrentControlSet\Control\LSA\
中放置对二进制文件的引用,对抗方可以使用LSA身份验证包提供的自动启动机制来实现持久性,该二进制文件的键值为 "authentication packages"=<target binary>
。当加载身份验证包时,二进制文件将由系统执行。
预防措施:Windows 8.1、Windows Server 2012 R2及更高版本可以通过设置注册表项HKLM\SYSTEM\CurrentControlSet\Control\LSA\RunAsPPL
使LSA作为受保护进程轻型(PPL)运行,该注册表项要求LSA加载的所有DLL都由Microsoft签名。
检测:监视已执行的命令和参数,这些命令和参数可能会在系统引导时滥用身份验证包来执行DLL;监视LSA进程的DLL加载。当未签名的DLL试图通过将注册表项HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe
设置为AuditLevel=8加载到LSA时,Windows 8.1和Windows Server 2012 R2可能会生成事件;监视注册表中LSA注册表项的更改。当未签名的DLL试图通过将注册表项HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe
设置为AuditLevel=8加载到LSA时,Windows 8.1和Windows Server 2012 R2可能会生成事件。
时间提供程序
介绍:当系统启动时,敌人可能会滥用时间提供程序来执行DLL。Windows时间服务(W32Time)支持跨域和域内的时间同步。W32时间提供程序负责从硬件/网络资源中检索时间戳,并将这些值输出到其他网络客户端。时间提供程序被实现为动态链接库(DLL),它们在HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W32Time\TimeProviders\
的子项中注册。时间提供程序管理器在服务控制管理器的指导下,在系统启动和/或参数更改时加载并启动在此密钥下列出和启用的时间提供程序。敌人可能会滥用这种体系结构来建立持久性,特别是通过在DllName值中创建一个指向恶意DLL的新的任意命名的子密钥。注册时间提供程序需要管理员权限,但执行将在本地服务帐户的上下文中运行。
预防措施:请考虑使用组策略来配置和阻止对W32Time DLL的添加/修改;请考虑使用组策略在注册表中配置和阻止对W32Time参数的修改。
检测:监视已执行的命令和参数,这些命令和参数可能会在系统引导时滥用时间提供程序来执行DLL;自定义时间提供程序注册的数量没有限制,尽管每个注册可能需要将DLL有效负载写入磁盘;监视新执行的进程,如W32tm.exe实用程序。Sysinternals自动运行工具也可用于分析自动启动位置,包括列为时间提供程序的DLL;监视对windows注册表项和/或修改注册表中W32Time信息的值所做的更改。
Winlogon帮助程序DLL
介绍:当用户登录时,敌人可能会滥用Winlogon的功能来执行DLL和/或可执行文件。Winlogon.exe是一个Windows组件,负责登录/注销时的操作以及由Ctrl-Alt-Delete触发的安全注意序列(SAS)。HKLM\Software[\Wow6432Node\]\Microsoft\Windows NT\CurrentVersion\Winlogon\
和HKCU\Software\Microsoft\Windows NT\CurrentVersion \Winlogon\
中的注册表项用于管理支持Winlogon的其他帮助程序和功能。对这些注册表项的恶意修改可能会导致Winlogon加载和执行恶意DLL和/或可执行文件。具体而言,已知以下子密钥可能容易被滥用:Winlogon\Notify-指向处理Winlogon事件的通知包DLL Winlogon\Userinit-指向Userinit.exe,用户登录Winlogon_Shell时执行的用户初始化程序-指向explorer.exe,用户登录Adversaries时执行的系统Shell可能利用这些功能重复执行恶意代码并建立持久性。
预防措施:通过使用AppLocker等能够审计和/或阻止未知DLL的应用程序控制工具,识别并阻止可能通过Winlogon帮助程序进程执行的潜在恶意软件;限制用户帐户的权限,以便只有经过授权的管理员才能执行Winlogon帮助程序更改。
检测:当用户登录时,监视可能滥用Winlogon功能执行DLL和/或可执行文件的已执行命令和参数;写入System32的与已知良好软件或修补程序不相关的新DLL也可能是可疑的。查找可能由于进程加载恶意DLL而导致的异常进程行为。不应孤立地看待数据和事件,而应将其视为可能导致其他活动的行为链的一部分,如为指挥和控制建立的网络连接、通过发现了解环境细节以及横向移动;监视用户登录时可能滥用Winlogon功能执行DLL和/或可执行文件的进程的执行情况;分析1-修改Winlogon注册表项:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") | where (CommandLine LIKE "%Microsoft\Windows NT\CurrentVersion\Winlogon%" AND (CommandLine LIKE "%Userinit%" OR CommandLine LIKE "%Shell%" OR CommandLine LIKE "%Notify%")) AND (CommandLine LIKE "%reg%" OR CommandLine LIKE "%add%" OR CommandLine LIKE "%/d%" OR CommandLine LIKE "%Set-ItemProperty%" OR CommandLine LIKE "%New-ItemProperty%" CommandLine LIKE "%-value%")
;监视与Winlogon相关的注册表项是否与已知软件、修补程序周期等不相关的更改。Sysinternals Autorun等工具也可用于检测可能是持久性尝试的系统更改,包括列出当前Winlogon帮助程序值;分析1-修改Userinit、Shell或Notify的注册表编辑:source="*WinEventLog:Security" EventCode="4657" (ObjectValueName="Userinit" OR ObjectValueName="Shell" OR ObjectValueName="Notify") OR source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="13" (TargetObject="*Userinit" OR TargetObject="*Shell" OR TargetObject="*Notify")
安全支持提供商
介绍:当系统启动时,敌人可能会滥用安全支持提供程序(SSP)来执行DLL。Windows SSP DLL在系统启动时加载到本地安全机构(LSA)进程中。一旦加载到LSA,SSP DLL就可以访问存储在Windows中的加密和明文密码,例如任何登录用户的域密码或智能卡PIN。SSP配置存储在两个注册表项中:HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages
和HKLM\SYSTEM\CurrentControlSet\Control\Lsa\SOConfig\Security Package
。对手可以修改这些注册表项以添加新的SSP,这些SSP将在下次系统引导时加载,或者在调用AddSecurityPackage Windows API函数时加载。
预防措施:Windows 8.1、Windows Server 2012 R2及更高版本可以通过设置注册表项HKLM\SYSTEM\CurrentControlSet\Control\LSA\RunAsPPL使LSA作为受保护进程轻型(PPL)运行,该注册表项要求所有SSP DLL都由Microsoft签名。
检测:监视已执行的命令和参数,这些命令和参数可能会在系统启动时滥用安全支持提供程序(SSP)来执行DLL;监视LSA进程的DLL加载。当未签名的SSP DLL试图通过将注册表项HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe
设置为AuditLevel=8加载到LSA时,Windows 8.1和Windows Server 2012 R2可能会生成事件;监视注册表中SSP注册表项的更改。当未签名的SSP DLL试图通过将注册表项HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe
设置为AuditLevel=8加载到LSA时,Windows 8.1和Windows Server 2012 R2可能会生成事件。
内核模块和扩展
介绍:敌人可能会修改内核以在系统启动时自动执行程序。可加载内核模块(LKM)是可以根据需要加载和卸载到内核中的代码片段。它们扩展了内核的功能,而无需重新启动系统。例如,一种类型的模块是设备驱动程序,它允许内核访问连接到系统的硬件。当被恶意使用时,LKM可以是一种以最高操作系统权限(Ring 0)运行的内核模式Rootkit。基于LKM的rootkit的常见功能包括:隐藏自身,选择性隐藏文件、进程和网络活动,以及篡改日志,提供经过身份验证的后门,并允许非特权用户进行root访问。内核扩展,也称为kext,在macOS中用于将功能加载到类似于Linux LKM的系统上。由于内核负责实施安全性,并且内核扩展作为内核的一部分运行,因此kexts不受macOS安全策略的管辖。通过kextload和kextunload命令加载和卸载Kexts。Kexts需要使用开发者ID进行签名,该ID被苹果授予特权,允许其签署内核扩展。没有这些特权的开发人员仍然可以签署kexts,但除非禁用SIP,否则他们不会加载。如果启用了SIP,则在将kext签名添加到AuxKC之前对其进行验证。自macOS Catalina 10.15以来,内核扩展一直被弃用,取而代之的是系统扩展。然而,kexts仍然被允许作为“遗留系统扩展”,因为内核编程接口没有系统扩展。敌人可以使用LKM和kexts对系统进行持久性和/或特权升级。在野外已经发现了一些例子,也有一些相关的开源项目。
预防措施:检测Linux rootkit的常用工具包括:rkhunter、chrootkit,尽管rootkit可能是为了躲避某些检测工具而设计的;应用程序控制和软件限制工具,如SELinux、KSPP、grsecurity MODHARDEN和Linux内核调优,可以帮助限制内核模块加载;通过适当的权限分离和限制权限提升机会,限制对根帐户的访问,防止用户加载内核模块和扩展;使用MDM可以禁用用户安装或批准内核扩展的能力,并确保所有批准的内核扩展都与com.apple.syspolicy.kernel-extraction-policy中指定的策略一致。
检测:在Linux系统上加载、卸载和操纵模块可以通过监视以下命令来检测:modprobe、insmod、lsmod、rmmod或modinfo Adversies可能在加载恶意模块之前在目标系统上运行命令,以确保其正确编译。敌人还可以执行命令来识别运行的Linux内核的确切版本和/或下载相同.ko(内核对象)文件的多个版本,以使用适合运行系统的文件。许多LKM需要Linux头(特定于目标内核)才能正确编译。这些通常是通过操作系统包管理器获得的,并像普通包一样安装;在macOS上,监视kextload命令的执行情况以及执行异常和/或潜在恶意活动(如创建网络连接)的用户安装的内核扩展。监视kext_policy表中添加的新行。KextPolicy在SQLite数据库/var/db/SystemPolicyConfiguration/KextPolicy
中存储用户批准的(非苹果)内核扩展列表和加载的内核模块的部分历史记录;监视新构建的文件,这些文件可能会修改内核以在系统启动时自动执行程序;监视对文件所做的更改,这些更改可能会修改内核以在系统启动时自动执行程序;LKM通常加载到/lib/模块中,并且自Linux内核的2.6版本以来具有扩展名.ko(“内核对象”);监视新创建的进程,这些进程可能会修改内核以在系统启动时自动执行程序。
重新打开的应用程序
介绍:敌人可能会修改plist文件,以便在用户登录时自动运行应用程序。当用户通过macOS图形用户界面(GUI)注销或重新启动时,会向用户提供一个提示,并带有“重新登录时重新打开窗口”复选框。选中后,当前打开的所有应用程序都会添加到名为com.apple.loginwindow
的属性列表文件中。[UUID].plist位于~/Library/Preferences/ByHost
目录中。此文件中列出的应用程序将在用户下次登录时自动重新打开。敌人可以通过向com.apple.loginwindow添加恶意应用程序路径来建立持久性。[UUID].plist文件,用于在用户登录时执行有效负载。
预防措施:此功能可以通过以下终端命令完全禁用:defaults write-g ApplePersistence-bool no
;登录时按住Shift键可防止应用程序自动打开。
检测:监视执行的命令和参数,这些命令和参数可能会修改plist文件,以便在用户登录时自动运行应用程序;监视与重新打开应用程序相关联的特定plist文件可以指示应用程序何时已注册要重新打开。
LSASS驱动程序
介绍:敌人可以修改或添加LSASS驱动程序,以在受损系统上获得持久性。Windows安全子系统是一组组件,用于管理和实施计算机或域的安全策略。本地安全机构(LSA)是负责本地安全策略和用户身份验证的主要组件。LSA包括与各种其他安全功能相关联的多个动态链接库(DLL),所有这些功能都在LSA子系统服务(LSASS)LSASS.exe进程的上下文中运行。敌人可能会以LSASS驱动程序为目标,以获得持久性。通过替换或添加非法驱动程序(例如劫持执行流),对手可以使用LSA操作连续执行恶意有效载荷。
预防措施:在Windows 10和Server 2016上,启用Windows Defender Credential Guard以在不带任何设备驱动程序的隔离虚拟化环境中运行lsass.exe;在Windows 8.1和Server 2012 R2上,通过将注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA\RunAsPPL
设置为dword:000000001
来启用LSA保护。LSA保护确保LSA插件和驱动程序只有在使用Microsoft签名进行数字签名并遵守Microsoft安全开发生命周期(SDL)过程指南的情况下才能加载;确保安全DLL搜索模式已启用HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode
,以降低lsass.exe加载恶意代码库的风险。
检测:在启用LSA保护的情况下,监视事件日志(事件3033和3063)是否有加载LSA插件和驱动程序的失败尝试。利用Sysinternals Autoruns/Autorunsc
实用程序检查与LSA相关联的已加载驱动程序;监视新构建的文件,这些文件可能会修改或添加LSASS驱动程序,以在受损系统上获得持久性;监视对文件所做的更改,这些更改可能会修改或添加LSASS驱动程序,以在受损系统上获得持久性;同时监视lsass.exe中的DLL加载操作。
快捷方式修改
介绍:敌人可能会创建或修改快捷方式,这些快捷方式可以在系统启动或用户登录期间执行程序。快捷方式或符号链接用于引用系统启动进程单击或执行快捷方式时将打开或执行的其他文件或程序。敌人可能会滥用启动文件夹中的快捷方式来执行他们的工具并实现持久性。尽管经常被用作感染链中的有效载荷(例如,鱼叉式网络钓鱼附件),但对手也可能创建新的快捷方式作为间接手段,同时滥用伪装使恶意快捷方式看起来像合法程序。敌人也可以编辑目标路径或完全替换现有的快捷方式,这样他们的恶意软件将被执行,而不是预期的合法程序。快捷方式也可能被滥用,通过实现其他方法来建立持久性。例如,LNK浏览器扩展可以被修改(例如浏览器扩展)以持久地启动恶意软件。
预防措施:将可以在Windows中创建符号链接的用户的权限限制为适当的组,如管理员和虚拟化所需的组。这可以通过GPO:计算机配置>[策略]>Windows设置>安全设置>本地策略>用户权限分配:创建符号链接来完成。
检测:监视创建的区域标识符值大于1的LNK文件,这可能表明LNK文件源自网络外部。分析应尝试将快捷方式创建事件与基于已知对手行为的其他潜在可疑事件关联起来,例如启动未知可执行文件以建立网络连接;由于快捷方式的目标路径可能不会更改,因此对与已知软件更改、修补程序、删除等不相关的快捷方式文件的修改可能是可疑的。分析应尝试根据已知的对手行为将快捷方式文件更改事件与其他潜在的可疑事件关联起来,例如启动建立网络连接的未知可执行文件;监视新执行的进程,这些进程可能会在系统启动或用户登录期间创建或编辑运行程序的快捷方式。
端口监视器
介绍:对手可以使用端口监视器在系统引导期间运行对手提供的DLL,以实现持久性或权限提升。可以通过AddMonitor API调用设置端口监视器,以设置在启动时加载的DLL。此DLL可以位于C:\Windows\System32
中,并将由后台打印程序服务spoosv.exe在启动时以SYSTEM级别的权限加载和运行。或者,如果权限允许将任意DLL的完全限定路径名写入HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors
的现有或新的任意命名子项的Driver值,则可以加载该DLL。注册表项包含以下项:本地端口标准TCP/IP端口USB监视器WSD端口
预防措施:
检测:监视新构建的文件,这些文件可能使用端口监视器在系统引导期间运行攻击者提供的DLL以实现持久性或权限提升;监视spoosv.exe加载的DLL中是否有异常的DLL。写入System32目录的与已知良好软件或修补程序不相关的新DLL可能是可疑的;监视进程API对AddMonitor的调用;监视器注册表写入HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors
。运行Autoruns实用程序,该实用程序将此注册表项作为持久性机制进行检查
打印处理器
介绍:敌人可能会滥用打印处理器,在系统引导期间运行恶意DLL,以实现持久性和/或权限提升。打印处理器是打印后台处理程序服务spoosv.exe在引导期间加载的DLL。敌人可能会通过添加在启动时加载恶意DLL的打印处理器来滥用后台打印程序服务。打印处理器可以通过AddPrintProcessor API调用使用启用了SeLoadDriverPrivilege的帐户进行安装。或者,可以通过添加指向DLL的HKLM\SYSTEM\[CurrentControlSet or ControlSet001]\Control\Print\Environments\[Windows architecture: e.g., Windows x64]\Print Processors\[user defined]\Driver
,将打印处理器注册到后台打印程序服务。为了正确安装恶意打印处理器,有效负载必须位于专用系统打印处理器目录中,该目录可以通过GetPrintProcessorDirectory
API调用找到,或者通过该目录的相对路径引用。安装打印处理器后,必须重新启动在引导过程中启动的后台打印程序服务才能运行。后台打印程序服务在SYSTEM级别权限下运行,因此对手安装的打印处理器可能在提升的权限下运行。
预防措施:通过禁用SeLoadDriverPrivilege来限制可以加载或卸载设备驱动程序的用户帐户。
检测:监视是否存在异常内核驱动程序安装活动,这些活动可能会在系统引导期间滥用打印处理器来运行恶意DLL,以实现持久性和/或权限提升;监视新构建的文件,这些文件可能会在系统引导期间滥用打印处理器来运行恶意DLL,以实现持久性和/或权限提升;监视spoosv.exe加载的异常DLL。与已知良好软件或修补程序不相关的打印处理器可能是可疑的。新的打印处理器DLL将写入打印处理器目录;监视进程API对AddPrintProcessor
和GetPrintProcessorDirectory
的调用;监视器注册表写入HKLM\SYSTEM\ControlSet001\Control\Print\Environments\[Windows architecture]\Print Processors\[user defined]\Driver
or HKLM\SYSTEM\CurrentControlSet\Control\Print\Environments\[Windows architecture]\Print Processors\[user defined]\Driver
,因为它们与打印处理器安装有关。
XDG自动启动条目
介绍:当用户的桌面环境在登录时加载时,对手可能会添加或修改XDG自动启动条目以执行恶意程序或命令。XDG Autostart条目可用于任何符合XDG的Linux系统。XDG自动启动条目使用桌面条目文件(.Desktop)在用户登录时配置用户的桌面环境。这些配置文件确定用户登录时启动哪些应用程序,定义相关应用程序以打开特定文件类型,并定义用于打开可移动媒体的应用程序。敌人可能会滥用此功能,通过在.desktop配置文件中向Exec指令添加恶意二进制文件或命令的路径来建立持久性。当用户登录时加载用户的桌面环境时,位于XDG Autostart目录中的.desktop文件将自动执行。系统范围的自动启动条目位于/etc/xdg/Autostart
目录中,而用户条目位于~/.config/autostart
文件夹中。敌人可以将这种技术与伪装相结合,将恶意的自动启动条目与合法程序混合在一起。
预防措施:仅将软件安装限制在受信任的存储库中,并小心孤立的软件包;将对XDG自动启动项的写访问权限限制为仅选择特权用户;限制用户帐户的权限,以便只有授权的特权用户才能创建和修改XDG自动启动条目。
检测:监视执行的命令和参数,这些命令和参数可能会修改XDG自动启动条目以在系统引导期间执行程序或命令;通过审核/etc/XDG/autostart
和~/.config/autostart
目录中的文件创建事件,可以检测到恶意的XDG自动启动条目。根据具体配置,防御者可能需要查询环境变量$XDG_CONFIG_HOME
或$XDG_ONFIG_DIRS
,以确定自动启动条目的路径。与合法程序包无关的自动启动条目文件可能被视为可疑文件。还可以通过将条目与可信系统基线进行比较来识别可疑条目;通过审核/etc/XDG/autostart
和~/.config/autostart
目录中的文件修改事件,可以检测到恶意XDG自动启动条目。根据具体配置,防御者可能需要查询环境变量$XDG_CONFIG_HOME
或$XDG_ONFIG_DIRS
,以确定自动启动条目的路径。与合法程序包无关的自动启动条目文件可能被视为可疑文件。还可以通过将条目与可信系统基线进行比较来识别可疑条目;监视新执行的进程,这些进程可能会修改XDG自动启动条目以在系统引导期间执行程序或命令。
活动设置
介绍:敌人可以通过在本地机器的活动设置中添加注册表项来实现持久性。活动安装程序是一种Windows机制,用于在用户登录时执行程序。存储在注册表项中的值将在用户登录计算机后执行。这些程序将在用户的上下文下执行,并具有帐户的相关权限级别。敌人可能会通过在HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\
下创建一个注册表项并设置StubPath的恶意值来滥用活动安装程序。此值将用作用户登录计算机时执行的程序。敌人可以滥用这些组件来执行恶意软件,如远程访问工具,以通过系统重新启动来保持持久性。敌人也可以使用伪装使注册表条目看起来像是与合法程序相关。
预防措施:
检测:监视执行的命令和参数,这些命令和参数可以通过向本地计算机的活动安装程序添加注册表项来实现持久性;监视新执行的进程,这些进程可以通过向本地机器的活动设置添加注册表项来实现持久性;监视注册表项添加到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\
。Sysinternals Autorun等工具也可用于检测可能是持久性尝试的系统更改,包括列出活动安装注册表位置和启动文件夹。当与历史数据进行比较时,作为启动程序的可疑程序执行可能会显示为以前从未见过的异常进程;监视注册表项对HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\
的修改。Sysinternals Autorun等工具也可用于检测可能是持久性尝试的系统更改,包括列出活动安装注册表位置和启动文件夹。当与历史数据进行比较时,作为启动程序的可疑程序执行可能会显示为以前从未见过的异常进程。
登录项
介绍:敌人可以添加登录项目以在用户登录时执行,从而获得持久性或升级权限。登录项是用户登录时自动启动的应用程序、文档、文件夹或服务器连接。登录项可以通过共享文件列表或服务管理框架添加。共享文件列表登录项可以使用AppleScript等脚本语言设置,而服务管理框架使用API调用SMLoginItemSetEnabled。使用服务管理框架安装的登录项利用launchd,在系统首选项中不可见,只能由创建它们的应用程序删除。使用共享文件列表创建的登录项在“系统首选项”中可见,可以在应用程序启动时隐藏应用程序,并通过LaunchServices而不是launchd执行,以在不使用Finder的情况下打开应用程序、文档或URL。用户和应用程序使用登录项来配置其用户环境,以启动常用的服务或应用程序,如电子邮件、聊天和音乐应用程序。敌人可以利用AppleScript和Native API调用创建登录项来生成恶意可执行文件。在macOS的10.5版本之前,对手可以通过使用AppleScript将苹果事件发送到“系统事件”进程来添加登录项目,该进程有一个用于操作登录项目的AppleScript字典。敌人可以使用命令,如告诉应用程序“系统事件”,使登录项在末尾具有properties/path/to/executable。此命令将恶意可执行文件的路径添加到登录项文件列表中,该列表位于~/Library/Application Support/com.apple.backgroundtaskmanagementagent/backgrounditems.btm
中。敌人还可以使用登录项启动可执行文件,这些可执行文件可用于远程控制受害者系统,或者通过提示用户凭据来获得权限提升。
预防措施:
检测:通过共享文件列表创建的所有登录项都可以使用系统首选项GUI或在~/Library/Application Support/com.apple.backgroundtaskmanagementagent/backgrounditems.btm
文件中查看。应对这些地点进行监测和审计;通过共享文件列表创建的所有登录项都可以使用系统首选项GUI或在~/Library/Application Support/com.apple.backgroundtaskmanagementagent/backgrounditems.btm
文件中查看。应对这些地点进行监测和审计;监视在登录时启动的进程中是否存在异常或未知的应用程序。登录项目的常规应用程序可能包括用户为配置其用户环境而添加的内容,如电子邮件、聊天或音乐应用程序,或者管理员为组织设置和保护所包含的内容。检查登录项中运行的应用程序是否也有异常行为,例如建立网络连接。
4.启动或登录初始化脚本
登录脚本(Windows)
介绍:敌人可以使用在登录初始化时自动执行的Windows登录脚本来建立持久性。Windows允许在特定用户或用户组登录到系统时运行登录脚本。这是通过将脚本的路径添加到HKCU\Environment\UserInitMprLogonScript注册表项来完成的。敌人可以使用这些脚本在单个系统上保持持久性。根据登录脚本的访问配置,可能需要本地凭据或管理员帐户。
预防措施:确保为注册表配置单元设置了适当的权限,以防止用户修改可能导致持久性的登录脚本的密钥。
检测:监视登录脚本的已执行命令和参数;监视新构建的进程和/或执行登录脚本的命令行;分析1-启动或登录初始化脚本:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") AND CommandLine="*reg*add*\Environment*UserInitMprLogonScript"
;监视与Windows登录脚本相关联的注册表项的创建,名称为HKCU\Environment\UserInitMprLogonScript
;敌人可以安排软件在用户登录系统时运行;这样做是为了建立持久性,有时是为了横向运动。此触发器是通过注册表项HKEY_CURRENT_USER\EnvironmentUserInitMprLogonScript建立的。此签名看起来是对现有密钥的编辑或在该路径中创建新密钥。用户有意将良性脚本添加到此路径将导致误报;然而,这种情况并不多见。还有其他在启动或登录时运行脚本的方式不在此签名中涵盖。请注意,此签名与Windows Sysinternals自动运行工具重叠,后者也会显示对此注册表路径的更改;分析1-启动或登录初始化脚本:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode IN (12, 14, 13)) TargetObject= "*\Environment*UserInitMprLogonScript")
登录挂钩
介绍:敌人可以使用登录挂钩来建立在用户登录时执行的持久性。登录挂钩是一个plist文件,它指向一个特定的脚本,以便在用户登录时使用root权限执行。plist文件位于/Library/Preferences/com.apple.loginwindow.plist文件中,可以使用默认的命令行实用程序进行修改。这种行为与注销挂钩相同,在注销挂钩中,用户注销时可以执行脚本。所有挂钩都需要管理员权限才能修改或创建挂钩。敌人可以使用LoginHook或LogoutHook键值对在com.apple.loginwindow.plist文件中添加或插入恶意脚本的路径。恶意脚本将在下一次用户登录时执行。如果登录挂钩已经存在,对手可以向现有的登录挂钩添加额外的命令。一个系统一次只能有一个登录和注销挂钩。注意:登录挂钩在10.11版本的macOS中被弃用,取而代之的是Launch Daemon和Launch Agent
预防措施:将对登录脚本的写入权限限制为特定管理员。
检测:使用参数监视已执行的命令,以安装或修改登录挂钩;监控登录挂钩文件(/Library/Preferences.com/apple.loginwindow.plist
)的创建和/或更改,尤其是正常管理职责之外的异常帐户;监视登录挂钩文件(/Library/Preferences.com/apple.loginwindow.plist
)的更改,尤其是正常管理职责之外的异常帐户的更改;监视用于安装或修改登录挂钩的进程和/或命令行,以及这些挂钩在用户登录时生成的进程。
网络登录脚本
介绍:对手可以使用在登录初始化时自动执行的网络登录脚本来建立持久性。可以使用Active Directory或组策略对象分配网络登录脚本。这些登录脚本使用分配给它们的用户的权限运行。根据网络中的系统,初始化其中一个脚本可能应用于多个系统,也可能应用于所有系统。对手可能会使用这些脚本在网络上保持持久性。根据登录脚本的访问配置,可能需要本地凭据或管理员帐户。
预防措施:将对登录脚本的写入权限限制为特定管理员。
检测:监视Active Directory中所做的更改,这些更改可能使用在登录初始化时自动执行的网络登录脚本来建立持久性;监视登录脚本的已执行命令和参数;监控正常管理职责之外的异常账户新建的文件;监控对文件的更改,以防在正常管理职责之外对异常帐户进行意外修改;监视新构建的进程和/或执行登录脚本的命令行
RC脚本
介绍:敌人可以通过修改在类Unix系统启动期间执行的RC脚本来建立持久性。这些文件允许系统管理员在启动时为不同的运行级别映射和启动自定义服务。RC脚本需要root权限才能修改。敌人可以通过向rc.local、rc.common和其他特定于Unix发行版的rc脚本添加恶意二进制路径或shell命令来建立持久性。重新启动后,系统将以root用户身份执行脚本的内容,从而实现持久性。RC脚本的对抗性滥用对于使用根用户作为默认用户的轻量级类Unix发行版(如IoT或嵌入式系统)尤其有效。一些类Unix系统已经转移到Systemd,并反对使用RC脚本。现在,这是macOS中一种不推荐使用的机制,支持Launchd。这项技术可以在仍然执行RC脚本的Mac OS X Panther v10.3和早期版本上使用。为了保持向后兼容性,一些系统,如Ubuntu,如果存在正确的文件权限,将执行RC脚本。
预防措施:限制用户帐户的权限,以便只有经过授权的用户才能编辑rc.common文件。
检测:监视RC脚本执行的命令和参数,以了解异常或未知的应用程序或行为;监视新构建的/etc/rc.local
文件;监视对/etc/目录中RC脚本的意外修改文件的更改;监视新构建的进程和/或执行/etc/rc.local
的命令行(如果存在)。
启动项目
介绍:敌人可以使用在启动初始化时自动执行的启动项来建立持久性。启动项在启动过程的最后阶段执行,包含shell脚本或其他可执行文件以及系统用于确定所有启动项的执行顺序的配置信息。从技术上讲,这是一种不推荐使用的技术(已被Launch Daemon取代),因此,默认情况下,系统上不保证存在相应的文件夹/Library/StartupItems,但在macOS Sierra上似乎默认存在。启动项是一个目录,其可执行文件和配置属性列表(plist)StartupParameters.plist位于顶级目录中。对手可以在StartupItems目录中创建适当的文件夹/文件,以注册自己的持久性机制。此外,由于StartupItems在macOS的启动阶段运行,因此它们将作为提升的根用户运行。
预防措施:由于StartupItems已被弃用,因此阻止所有用户写入/Library/StartupItemss
目录将阻止任何启动项的注册。
检测:监视登录脚本的已执行命令和参数;监控正常管理职责之外的异常账户新建的文件;监视对文件所做的更改,以防对/Library/StartupItem
文件夹进行意外修改;监视在启动过程中执行的新构建的进程和/或命令行,以检查异常或未知的应用程序和行为
5.扩充套件
介绍:敌人可能滥用互联网浏览器扩展来建立对受害者系统的持久访问。浏览器扩展或插件是小程序,可以添加功能并自定义Internet浏览器的各个方面。它们可以直接安装,也可以通过浏览器的应用商店安装,通常对浏览器可以访问的所有内容都有访问权限。恶意扩展可以通过伪装成合法扩展的恶意应用商店下载、通过社会工程或已经危害系统的对手安装到浏览器中。浏览器应用商店的安全性可能会受到限制,因此恶意扩展可能不难击败自动扫描仪。根据浏览器的不同,对手还可以操纵扩展的更新url以安装来自对手控制的服务器的更新,或者操纵移动配置文件以静默地安装其他扩展。在macOS 11之前,对手可以使用配置文件工具通过命令行静默安装浏览器扩展,以安装恶意的.mobileconfig
文件。在macOS 11+中,使用配置文件工具无法再安装配置文件,但可以通过用户交互植入和安装mobileconfig文件。一旦安装了扩展,它就可以在后台浏览到网站,窃取用户输入浏览器的所有信息(包括凭据),并用作RAT的安装程序以实现持久性。也有僵尸网络通过用于命令和控制的恶意Chrome扩展使用持久后门的例子。敌人还可以使用浏览器扩展来修改浏览器权限和组件、隐私设置以及防御规避的其他安全控制。
预防措施:确保安装的扩展是预期的扩展,因为许多恶意扩展会伪装成合法的扩展;根据您的安全策略设置浏览器扩展允许或拒绝列表;仅安装来自可验证的可信来源的浏览器扩展。某些浏览器的浏览器扩展可以通过组策略进行控制。更改设置以防止浏览器在没有足够权限的情况下安装扩展;确保操作系统和浏览器使用的是最新版本;完成使用后关闭所有浏览器会话,以防止任何潜在的恶意扩展继续运行。
检测:监视已执行的命令和参数以了解概要文件工具的使用情况,例如概要文件install-type=configuration
;监视新构建的文件和/或所有安装的扩展,在/Library/Managed Preferences/username/
目录中维护一个plist文件。确保所有列出的文件与批准的扩展名一致;监视由不受信任的主机发送或接收的新构建的网络连接;监视可能被用来滥用互联网浏览器扩展以建立持久性的新执行进程;监视写入注册表的任何新项目或写入磁盘的PE文件。这可能与浏览器扩展安装相关。
6.折衷主机软件二进制
介绍:敌人可以修改主机软件二进制文件以建立对系统的持久访问。软件二进制文件/可执行文件提供广泛的系统命令或服务、程序和库。常见的软件二进制文件包括SSH客户端、FTP客户端、电子邮件客户端、web浏览器以及许多其他用户或服务器应用程序。敌人可以通过修改主机软件二进制文件来建立持久性。例如,对手可能会用后门替换或以其他方式感染合法的应用程序二进制文件(或支持文件)。由于这些二进制文件可能由应用程序或用户常规执行,因此对手可以利用这些二进制文件对主机进行持久访问。对手还可以在二进制文件合法执行之前通过修补恶意功能(例如IAT挂钩/入口点修补)来修改现有二进制文件。例如,对手可以在恢复正常执行流之前修改二进制的入口点,以指向对手修补的恶意代码。
预防措施:确保所有应用程序组件二进制文件都由正确的应用程序开发人员签名。
检测:监视可能修改客户端软件二进制文件以建立对系统的持久访问的新建文件;监视客户端软件二进制文件的意外删除,以建立对系统的持久访问;收集和分析签名证书元数据,并检查在环境中执行的软件上的签名有效性;监视与已知软件或修补程序周期不相关的客户端软件更改。
7.创建帐户
本地帐户
介绍:敌人可能会创建一个本地帐户来维护对受害者系统的访问。本地帐户是指组织为用户、远程支持、服务或在单个系统或服务上进行管理而配置的帐户。例如,如果具有足够的访问级别,则可以使用Windows net user/add
命令创建本地帐户。在macOS系统上,dscl-create
命令可用于创建本地帐户。本地帐户也可以添加到网络设备,通常通过常见的网络设备CLI命令(如username),或使用kubectl实用程序添加到Kubernetes集群。这样的帐户可以用于建立不需要在系统上部署持久远程访问工具的二级认证访问。
预防措施:对用户和特权帐户使用多因素身份验证;限制允许创建其他帐户的帐户数。限制将本地管理员帐户用于可能使其暴露于潜在对手的日常操作。
检测:监视与本地帐户创建相关联的操作的已执行命令和参数,如net user/add
、useradd
、dscl-create
和kubectl create-serviceaccount
;监视与帐户创建相关联的新执行进程,如net.exe;分析1-使用net.exe创建本地管理员帐户:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") (Image= C:\Windows\System32\net.exe OR Image= C:\Windows\System32\net1.exe ) AND CommandLine = * -exportPFX * )
;通过帐户审计监控新建的用户和服务帐户,以检测可能由对手创建的可疑帐户。收集网络、Kubernetes集群或Windows事件ID 4720中的帐户创建数据(用于在Windows系统和域控制器上创建用户帐户时)。
域帐户
介绍:敌人可能会创建一个域帐户来维护对受害者系统的访问。域帐户是由Active Directory域服务管理的帐户,其中访问和权限是在属于该域的系统和服务之间配置的。域帐户可以包括用户、管理员和服务帐户。有了足够的访问级别,可以使用net user/add/domain
命令创建域帐户。这样的帐户可以用于建立不需要在系统上部署持久远程访问工具的二级认证访问。
预防措施:对用户和特权帐户使用多因素身份验证;配置访问控制和防火墙,以限制对用于创建和管理帐户的域控制器和系统的访问;通过确保关键服务器的正确安全配置来保护域控制器;限制有权创建其他帐户的帐户数。不允许域管理员帐户用于日常操作,这可能会使它们暴露在非特权系统上的潜在对手面前。
检测:监视与本地帐户创建相关联的操作的已执行命令和参数,如net user/add/domain
;监视与帐户创建相关联的新执行进程,如net.exe;通过帐户审计监控新建的用户帐户,以检测可能由对手创建的可疑帐户。收集网络内帐户创建的数据或Windows事件ID 4720(用于在Windows系统和域控制器上创建用户帐户时)。
云帐户
介绍:敌人可能会创建一个云帐户来维护对受害者系统的访问。有了足够的访问级别,这样的帐户可以用于建立不需要在系统上部署持久远程访问工具的二级认证访问。除了用户帐户之外,云帐户还可以与服务相关联。云提供商以不同的方式处理服务帐户的概念。在Azure中,服务帐户包括服务主体和托管身份,它们可以链接到各种资源,如OAuth应用程序、无服务器功能和虚拟机,以便授予这些资源在环境中执行各种活动的权限。在GCP中,服务帐户也可以链接到特定的资源,也可以由其他帐户模拟临时提升云访问。虽然AWS没有服务帐户的具体概念,但可以直接授予资源承担角色的权限。对手可能会创建只能访问特定云服务的帐户,这可以减少被检测的机会。一旦对手创建了云帐户,他们就可以操纵该帐户以确保持久性并允许访问额外的资源,例如,通过添加额外的云凭据或分配额外的云角色。
预防措施:对用户和特权帐户使用多因素身份验证;配置访问控制和防火墙以限制对关键系统和域控制器的访问。大多数云环境都支持独立的虚拟专用云(VPC)实例,从而实现云系统的进一步细分;限制有权创建其他帐户的帐户数。不允许将特权帐户用于日常操作,这可能会使它们暴露在非特权系统上的潜在对手面前。
检测:通过收集云用户和管理员帐户的使用日志来监控新构建的用户帐户,以识别创建新帐户时的异常活动,例如不遵循指定命名约定的帐户或由未经批准的用户或来源创建的帐户。监视新创建的超过已知管理员的特定阈值的管理员帐户。
8.创建或修改系统流程
启动代理
介绍:作为持久性的一部分,敌人可以创建或修改启动代理以重复执行恶意有效载荷。当用户登录时,将启动一个按用户启动进程,该进程从/System/Library/LaunchAgents
、/Librare/LaunchAgents
和~/Library/LaunchAgents
中的属性列表(.plist)文件中加载每个按需启动用户代理的参数。属性列表文件使用Label、ProgramArguments和RunAtLoad键来标识启动代理的名称、可执行文件位置和执行时间。安装Launch Agent通常是为了执行程序更新、在登录时启动用户指定的程序或执行其他开发人员任务。Launch Agent也可以使用Launchctl命令执行。对手可以安装一个新的Launch Agent,该Agent在登录时执行,方法是将.plist文件放入RunAtLoad或KeepAlive密钥设置为true的相应文件夹中。Launch Agent名称可以通过使用相关操作系统或良性软件中的名称进行伪装。启动代理是使用用户级权限创建的,并使用用户级许可执行。
预防措施:设置组策略以将文件权限限制到~/launchangents
文件夹。
检测:确保指向/tmp或/shared文件夹中可执行文件的Launch Agent的ProgramArguments键与企业策略一致。确保RunAtLoad键设置为true的所有启动代理都与策略一致;监视新构建的文件,这些文件可能会创建或修改启动代理,以作为持久性的一部分重复执行恶意有效载荷;Launch Agent还需要磁盘上的文件以实现持久性,也可以通过其他文件监视应用程序对其进行监视;通过其他plist文件和实用程序(如Objective See的KnockKnock应用程序)监视Launch Agent的创建;监视对启动代理所做的更改,以便作为持久性的一部分重复执行恶意有效负载。
系统化服务
介绍:作为持久性的一部分,敌人可能会创建或修改系统服务,以重复执行恶意有效载荷。Systemd是一种系统和服务管理器,通常用于管理后台守护进程(也称为服务)和其他系统资源。Systemd是许多Linux发行版上的默认初始化(init)系统,取代了传统的init系统,包括SysVinit和Upstart,同时保持向后兼容。Systemd使用扩展名为.service的单元配置文件来编码有关服务进程的信息。默认情况下,系统级单元文件存储在根目录(/)的/systemd/system
目录中。用户级单元文件存储在用户拥有的目录($HOME
)的/systemd/User
目录中。在.service单元文件中,以下指令用于执行命令:当服务由systemctl手动启动时执行ExecStart、ExecStartPre和ExecStartPost指令,或者当服务设置为自动启动时在系统启动时执行。ExecReload指令在服务重新启动时执行。ExecStop、ExecStopPre和ExecStopPost指令在服务停止时执行。敌人创建了新的服务文件,更改了.service文件的指令执行的命令,并修改了.server文件执行的用户指令,这可能会导致权限提升。敌人还可以在这些目录中放置符号链接,使systemd能够找到这些有效载荷,而不管它们位于文件系统的何处。.service文件的User指令可用于以特定用户身份运行服务,这可能导致基于特定用户/组权限的权限提升。
预防措施:仅将软件安装限制在受信任的存储库中,并小心孤立的软件包;systemd服务单元文件的创建和修改通常保留给管理员,如Linux根用户和其他具有超级用户权限的用户;将对systemd单元文件的读/写访问权限限制为仅选择有合法需要管理系统服务的特权用户;将用户对系统实用程序(如systemctl)的访问权限限制为只有合法需要的用户。
检测:还可以通过将结果与可信系统基线进行比较来识别可疑的系统服务。可以通过使用systemctl实用程序检查系统范围的服务来检测恶意的systemd服务:systemctl list units-type=service-all
。审核“systemctl”实用程序的执行和命令行参数,以及/usr/sbin/service
等相关实用程序,可能会发现恶意的systemd服务执行;可以通过审核/etc/Systemd/system
、/usr/lib/Systemd/system/
和/home//.config/Systemd/user/
目录中的文件创建和修改事件以及相关的符号链接来检测系统服务单元文件;可以通过审核/etc/Systemd/system
、/usr/lib/Systemd/system/
和/home//.config/Systemd/user/
目录中的文件创建和修改事件以及相关的符号链接来检测系统服务单元文件;以这种方式生成的可疑进程或脚本的父进程为“systemd”,父进程ID为1,通常以“root”用户身份执行;作为持久性的一部分,监视新构建的systemd服务是否重复执行恶意有效负载;分析文件系统上存在的.service文件的内容,并确保它们引用合法的、预期的可执行文件。
Windows服务
介绍:作为持久性的一部分,攻击者可能会创建或修改Windows服务,以重复执行恶意有效负载。当Windows启动时,它会启动称为服务的程序或应用程序,以执行后台系统功能。Windows服务配置信息,包括服务的可执行程序或恢复程序/命令的文件路径,存储在Windows注册表中。敌人可以安装新服务或修改现有服务以在启动时执行,以便在系统上持久存在。可以使用系统实用程序(如sc.exe)、直接修改注册表或直接与Windows API交互来设置或修改服务配置。敌人也可能使用服务来安装和执行恶意驱动程序。例如,将驱动程序文件(例如.sys)拖放到磁盘后,可以通过CreateServiceW()等原生API函数(或通过ZwLoadDriver()和ZwSetValueKey()等函数手动加载和注册有效负载,方法是创建所需的服务注册表值(即修改注册表),或使用PnPUtil.exe等命令行实用程序。敌人可能会利用这些驱动程序作为Rootkit来隐藏系统上存在的恶意活动。作为特权升级利用的一部分,敌人也可能将已签名但易受攻击的驱动程序加载到受损的机器上(称为“自带易受攻击驱动程序”(BYOVD))。服务可以使用管理员权限创建,但在SYSTEM权限下执行,因此对手也可以使用服务升级权限。敌人也可以通过服务执行直接启动服务。为了使检测分析更具挑战性,恶意服务还可能包含伪装任务或服务(例如:使用与合法操作系统或良性软件组件相关的服务和/或有效载荷名称)。对手还可以创建“隐藏”服务(即隐藏工件),例如通过使用sc sdset
命令通过服务描述符定义语言(SDDL)设置服务权限。这可能会在标准服务枚举方法(如Get-service、sc-query和services.exe)的视图中隐藏Windows服务。
预防措施:使用能够检测企业内系统上的特权和服务滥用机会并加以纠正的审核工具;在Windows 10上,启用减少攻击面(ASR)规则,以防止应用程序将签名的易受攻击的驱动程序写入系统。在Windows 10和11上,启用Microsoft漏洞驱动程序阻止列表,以帮助加强对第三方开发的服务驱动程序的攻击;在可能的情况下,只强制注册和执行合法签名的服务驱动程序;确保已启用驱动程序签名强制以限制未签名的驱动程序的安装;限制用户帐户和组的权限,以便只有经过授权的管理员才能与服务更改和服务配置进行交互。
检测:监视可以创建或修改服务的操作的进程和命令行参数。命令行调用能够添加或修改服务的工具可能不常见,这取决于系统在特定环境中的典型使用方式。服务也可以通过Windows系统管理工具(如Windows management Instrumentation和PowerShell)进行修改,因此可能需要配置额外的日志记录以收集适当的数据。还收集用于分析的服务实用程序执行和服务二进制路径参数。甚至可以更改服务二进制路径以执行命令或脚本;监视不属于已知软件更新/修补程序周期的新服务驱动程序安装和加载(例如:Sysmon事件ID 6);注意:Sysmon事件ID 6(驱动程序加载)提供了有关加载的驱动程序是否使用有效签名进行签名的信息(通过signature和SignatureStatus字段)。因此,帮助减少与此事件相关的警报和误报数量的一种方法是过滤并排除由Microsoft等常见合法发布者签名的任何驱动程序加载事件;敌人可能会修改现有服务的二进制文件,以实现持久性,同时可能进行防御规避。如果新创建或修改的服务作为服务运行,则可能指示APT活动。然而,服务通常是由合法软件安装的。一个经过良好调优的基线对于区分良性和恶意服务修改至关重要。查找创建文件后作为服务运行的事件。在这些情况下,会创建一个新的服务或修改二进制文件。许多程序,如msiexec.exe,可以合法地执行这些行为,并可用于帮助验证合法的服务创建/修改;监视代码在远程主机上执行的几种方式。最常见的方法之一是通过Windows服务控制管理器(SCM),它允许授权用户远程创建和修改服务。一些工具(如PsExec)使用此功能;当客户端与服务控制管理器远程通信时,有两种可观察的行为。首先,客户端通过135/tcp连接到RPC端点映射器。这处理身份验证,并告诉客户端在这种情况下SCM-i监听的端点是哪个端口。然后,客户端直接连接到services.exe上的监听端口。如果请求是使用已知的命令行启动现有服务,则SCM进程将运行相应的命令;通过查找services.exe接收网络连接并立即生成子进程,可以检测到这种复合行为;监视API调用,这些调用可能创建或修改Windows服务(例如:CreateServiceW()),以作为持久性的一部分重复执行恶意有效负载;与历史数据相比,通过服务执行的可疑程序可能会显示为以前从未见过的异常进程。从已知服务中查找异常进程调用树,并查找可能与发现或其他对手技术有关的其他命令的执行。不应孤立地看待数据和事件,而应将其视为可能导致其他活动的行为链的一部分,如为指挥和控制建立的网络连接、通过发现了解环境细节以及横向移动;Windows在processservices.exe中运行服务控制管理器(SCM)。Windows在svchost.exe组中作为独立进程或DLL加载启动服务。要成为合法服务,进程(或DLL)必须具有适当的服务入口点SvcMain。如果应用程序没有入口点,那么它将超时(默认为30秒),进程将被终止;为了在超时后幸存下来,对手和红队可以创建直接指向cmd.exe的服务,该服务带有/c标志,后面跟着所需的命令。/c
标志使命令shell运行命令并立即退出。因此,所需的程序将保持运行,并且它将报告启动服务的错误。此分析将捕获用于启动实际恶意可执行文件的命令提示符实例。此外,services.exe的子代和子代默认情况下将作为SYSTEM用户运行;注意:创建过去30天内看到的服务的基线和今天看到的服务列表。从今天看到的服务中删除基线中的服务,留下新服务的列表。返回将services.exe作为父进程的所有名为cmd.exe的进程。因为这种情况永远不会发生,/c标志在搜索中是多余的;分析2-服务启动CMD:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") Image="*cmd.exe" and ParantImage="*services.exe"
;新服务的创建可以生成可变事件(例如:事件ID 4697和/或7045),尤其是与未知/异常驱动程序相关联的事件。可以在安装新软件期间创建新的、良性的服务;分析1-创建具有异常目录路径的新服务,如APPDATA中的临时文件:(source="*WinEventLog:Security" EventCode="4697") OR (source="*WinEventLog:System" EventCode="7045") | where ServiceFilePath LIKE "%APPDATA%" OR ServiceImage LIKE "%PUBLIC%"
;监视对Windows服务所做的更改,以作为持久性的一部分重复执行恶意有效负载;监视新构建的windows注册表项,这些注册表项可能会创建或修改windows服务,以作为持久性的一部分重复执行恶意有效负载;分析1-创建HKLM\System\CurrentControlSet\Services
注册表项:source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="12" TargetObject="HKLM\System\CurrentControlSet\Services*"
;查找与已知软件、修补程序周期等不相关的服务注册表项的更改。服务信息存储在注册表的HKLM\SYSTEM\CurrentControlSet\Services中。对二进制路径和服务启动类型的更改从手动或禁用更改为自动,如果通常不这样做,则可能是可疑的。诸如Sysinternals Autorun之类的工具也可以用于检测可能是持久性尝试的系统服务更改;分析1-修改HKLM\System\CurrentControlSet\Services
注册表项:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode IN (13, 14) EventType= "SetValue" TargetObject="HKLM\System\CurrentControlSet\Services*" | where RegistryKeyPath LIKE "%ImagePath%" OR RegistryKeyPath LIKE "%Type%" OR RegistryKeyPath LIKE "%DisplayName%" OR RegistryKeyPath LIKE "%Objectname%"
启动精灵
介绍:作为持久性的一部分,敌人可能会创建或修改Launch Daemon以执行恶意有效载荷。Launch Daemon是用于与Launchd交互的plist文件,Launchd是macOS使用的服务管理框架。启动守护程序需要提升的安装权限,在登录前为系统上的每个用户执行,并在后台运行,无需用户交互。在macOS初始化启动过程中,launchd进程从/system/Library/LaunchDaemons/和/Librare/LaunchDaemons/
中的plist文件加载用于按需启动系统级守护程序的参数。所需的启动后台进程参数包括用于标识任务的标签、用于提供可执行文件路径的程序以及用于指定任务运行时间的RunAtLoad。启动守护程序通常用于提供对共享资源的访问、软件更新或执行自动化任务。敌人可以通过使用设置为true的RunAtLoad参数和设置为恶意可执行路径的Program参数来安装配置为在启动时执行的启动守护程序。守护进程名称可以通过使用相关操作系统或良性软件的名称来伪装(即伪装)。执行启动守护程序时,程序将继承管理权限。此外,系统配置更改(如安装第三方软件包管理软件)可能会导致/usr/local/bin等文件夹变得全局可写。因此,糟糕的配置可能会允许对手修改当前Launch Daemon的plist文件所引用的可执行文件。
预防措施:使用能够检测系统上文件夹权限滥用机会的审核工具,尤其是审查第三方软件对文件夹所做的更改;限制用户帐户的权限并修正权限提升向量,以便只有经过授权的管理员才能创建新的启动后台进程。
检测:一些合法的LaunchDaemon指向可能被利用的未签名代码。对于RunAtLoad参数设置为true的Launch Daemon,请确保Program参数指向已签名的代码或可执行文件符合企业策略。某些参数可以与其他参数互换,例如Program和ProgramArguments参数,但必须存在一个参数;监视添加到/Library/LaunchDaemons/
文件夹的新文件。系统启动守护程序受SIP保护;监视文件中可能创建或修改Launch Daemon以作为持久性的一部分执行恶意有效负载的更改;监视新执行的进程,这些进程可能会创建或修改Launch Daemon以作为持久性的一部分执行恶意有效负载;作为持久性的一部分,新构建服务的监视器可能会创建或修改启动守护进程以执行恶意有效负载;作为持久性的一部分,监视服务对Launch Daemon所做的更改,以执行恶意有效负载。
集装箱服务
介绍:敌人可能会创建或修改容器或容器集群管理工具,这些工具作为守护程序、代理或服务在单个主机上运行。其中包括用于创建和管理单个容器的软件,如Docker和Podman,以及容器集群节点级代理,如kubelet。通过修改这些服务,对手可能能够实现持久性或提升其在主机上的权限。例如,通过使用带有restart=always
指令的docker-run或podman-run命令,可以将容器配置为在主机上持续重新启动。有权访问(rootful)docker命令的用户也可以升级他们在主机上的权限。在Kubernetes环境中,DaemonSets允许对手在所有节点上持久部署容器,包括稍后添加到集群中的节点。还可以使用pod规范中的nodeSelector或nodeName字段将pod部署到特定节点。请注意,容器也可以配置为作为Systemd Services运行。
预防措施:在可能的情况下,考虑在无根模式下强制使用容器服务,以限制权限提升或对运行容器的主机产生恶意影响的可能性;将对docker等实用程序的访问权限限制为只有合法需要的用户,尤其是在以root模式使用docker的情况下。在Kubernetes环境中,只向需要的用户授予部署pod的权限。
检测:监视docker或podman命令的可疑使用,例如试图装载主机的根文件系统;监视作为持久性或权限提升的一部分重复执行恶意有效负载的新建容器。
9.事件触发的执行
更改默认文件关联
介绍:对手可以通过执行由文件类型关联触发的恶意内容来建立持久性。打开文件时,将检查用于打开文件的默认程序(也称为文件关联或处理程序)。文件关联选择存储在Windows注册表中,可以由具有注册表访问权限的用户、管理员或程序编辑,也可以由管理员使用内置的assoc实用程序编辑。当具有给定扩展名的文件打开时,应用程序可以修改给定文件扩展名的关联以调用任意程序。系统文件关联列在HKEY_CLASSES_ROOT下。[扩展名],例如HKEY_CLASSES_ROOT.txt。这些条目指向位于HKEY_CLASSES_ROOT[handler]的该扩展的处理程序。然后,在HKEY_CLASSES_ROOT\[handler]\shell\[action]\command
键下,将各种命令作为子键列出。例如:HKEY_CLASSES_ROOT\txtfile\shell\open\command HKEY_CLASSES_ROOT\txtfile\shell\print\command
列出的键的值是处理程序打开文件扩展名时执行的命令。敌人可以修改这些值以连续执行任意命令。
预防措施:
检测:监视执行的命令和参数,这些命令和参数可能通过执行由文件类型关联触发的恶意内容来建立持久性;监视新执行的进程,这些进程可能通过执行由文件类型关联触发的恶意内容来建立持久性;收集并分析注册表项的更改,这些更改将文件扩展名与要执行的默认应用程序相关联,并与该进程的未知进程启动活动或异常文件类型相关联。用户文件关联首选项存储在[HKEYCURRENT_User]\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
下,并覆盖在[HKEYCLASSES_ROOT]
下配置的关联。用户首选项的更改将发生在此条目的子项下。
屏幕保护程序
介绍:对手可以通过执行由用户不活动触发的恶意内容来建立持久性。屏幕保护程序是在用户不活动的可配置时间后执行的程序,由扩展名为.scr的可移植可执行文件(PE)组成。Windows屏幕保护程序scrnsave.scr位于C:\Windows\System32\和C:\Windows\sysWOW64\
中(在64位Windows系统上),以及基本Windows安装中包含的屏幕保护程序。以下屏幕保护程序设置存储在注册表(HKCU\Control Panel\Desktop\
)中,可以进行操作以实现持久性:SCRNSAVE.exe-设置为恶意PE路径ScreenSaveActive-设置为“1”以启用屏幕保护程序ScreenSaveIsSecure-设置为为“0”以不需要密码解锁ScreenSaveTimeout-在执行屏幕保护程序之前设置用户不活动超时。敌人可以通过设置屏幕保护程序在用户不活动一定时间段后运行恶意软件来使用屏幕保护程序设置来保持持久性。
预防措施:如果不需要屏幕保护程序,请使用组策略禁用它们;阻止.scr文件从非标准位置执行。
检测:监视.scr文件的已执行命令和参数;监视新构建的文件,这些文件可能通过执行由用户不活动触发的恶意内容来建立持久性;分析1-在用作屏幕保护程序文件的磁盘上创建:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="11") TargetObject="*\Software\Policies\Microsoft\Windows\Control Panel\Desktop\SCRNSAVE.EXE"
;监视对文件所做的更改,这些更改可能会通过执行由用户不活动触发的恶意内容来建立持久性;注意:虽然没有文件修改的标准事件,但Windows事件ID 4663(试图访问对象)可用于警告试图访问屏幕保护程序文件(通常以.scr的文件扩展名结尾);监视新执行的进程,这些进程可能通过执行由用户不活动触发的恶意内容来建立持久性;分析1-HKCU\控制面板\桌面注册表项:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") | where CommandLine LIKE "%reg%" AND CommandLine LIKE "%add%" AND CommandLine LIKE "%HKCU\Control Panel\Desktop\%"
;监视注册表中可能与典型用户行为不相关的屏幕保护程序配置更改。Sysinternals Autorun等工具可用于检测注册表中屏幕保护程序二进制路径的更改。默认的屏幕保护程序文件存储在C:\Windows\System32中。定义不可疑的屏幕保护程序文件列表时,请将这些文件用作参考;分析1-从屏幕保护程序编辑注册表:source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode IN (13, 14) TargetObject="*\Software\Policies\Microsoft\Windows\Control Panel\Desktop\SCRNSAVE.EXE"
Windows Management Instrumentation事件订阅
介绍:敌人可以通过执行由Windows Management Instrumentation(WMI)事件订阅触发的恶意内容来建立持久性并提升权限。WMI可用于安装在定义的事件发生时执行代码的事件筛选器、提供程序、使用者和绑定。可以订阅的事件示例包括挂钟时间、用户登录或计算机的正常运行时间。敌人可以使用WMI的功能订阅事件,并在事件发生时执行任意代码,从而在系统上提供持久性。敌人还可以使用mofcomp.exe将WMI脚本编译到Windows管理对象(MOF)文件(扩展名.MOF)中,这些文件可用于创建恶意订阅。WMI订阅执行由WMI提供程序主机进程(WmiPrvSe.exe)代理,因此可能导致SYSTEM权限提升。
预防措施:在Windows 10上,启用减少攻击面(ASR)规则,以防止恶意软件滥用WMI以获得持久性;防止管理员帐户和特权帐户系统之间的凭据重叠;默认情况下,只允许管理员使用WMI进行远程连接;限制允许连接的其他用户,或禁止所有用户远程连接到WMI。
检测:监视可用于注册WMI持久性的已执行命令和参数,例如register-WmiEvent PowerShell cmdlet
;监视HKLM\SOFTWARE\Microsoft\WBEM文件夹外的MOF文件,因为几乎所有合法的MOF都将存储在WBEM文件夹中。对手可能会创建修改后的MOF文件,以便将其编入WMI事件订阅;监视订阅执行后新执行的进程(即从WmiPrvSe.exe WMI提供程序主机进程生成);注意:Windows事件ID 4688(已创建新进程)和Sysmon事件ID 1(进程创建)可用于通过筛选父进程名称为WmiPrvSe.exe的事件来提醒WMI事件订阅触发器创建的进程;监视mofcomp.exe是否作为可疑shell或脚本运行实用程序的子级(\powershell.exe或\cmd.exe)执行,或者通过在命令行中具有可疑路径(如%temp%)执行。对手可能会使用mofcomp.exe编译修改后的MOF文件,以创建恶意WMI事件订阅;监视WMI事件订阅条目,将当前WMI事件订阅与每个主机的已知良好订阅进行比较。诸如Sysinternals Autorun之类的工具也可以用于检测WMI更改,这些更改可能是持久化的尝试。监视新WMI EventFilter、EventConsumer和FilterToConsumerBinding事件的创建。当创建新的EventFilterToConsumerBinding事件时,事件ID 5861会记录在Windows 10系统上。
Unixshell配置修改
介绍:敌人可以通过执行由用户shell触发的恶意命令来建立持久性。用户Unixshell在整个会话的不同时间点根据事件执行多个配置脚本。例如,当用户打开命令行界面或远程登录(例如通过SSH)时,会启动登录shell。登录shell执行来自系统(/etc/
)和用户主目录(~/
)的脚本来配置环境。系统上的所有登录shell在启动时都使用/etc/profile。这些配置脚本在其目录的权限级别运行,通常用于设置环境变量、创建别名和自定义用户的环境。当shell退出或终止时,将执行额外的shell脚本以确保shell正确退出。敌人可能试图通过将命令插入shell自动执行的脚本来建立持久性。以bash为例,它是大多数GNU/Linux系统的默认shell,对手可能会在/etc/profile和/etc/profile.d
文件中添加启动恶意二进制文件的命令。这些文件通常需要root权限才能修改,并且每次启动系统上的任何shell时都会执行这些文件。对于用户级权限,对手可以在~/.bash_profile
、~/.bash _login
或~/.profile
中插入恶意命令,这些命令是在用户打开命令行界面或远程连接时来源的。由于系统只执行所列顺序中的第一个现有文件,因此对手使用~/.bash_profile来确保执行。敌人还利用了~/.bashrc
文件,如果远程建立连接或打开额外的交互式shell(如命令行界面中的新选项卡),则会额外执行该文件。一些恶意软件的目标是终止程序以触发执行,对手可以在会话结束时使用~/.bash_logout
文件执行恶意命令。对于macOS,该技术的功能类似,但可能会利用zsh,这是macOS 10.15+的默认shell。当Terminal.app打开时,应用程序将启动一个zsh登录shell和一个zsh-交互式shell。登录shell使用/etc/profile
、/etc/zshenv
、/etc/zprofile
和/etc/zlogin
配置系统环境。登录shell然后使用~/.zprofile
和~/.zlogin
配置用户环境。交互式shell使用~/.zshrc
来配置用户环境。退出后,将执行/etc/zlogout
和~/.zlogout
。对于遗留程序,macOS在启动时执行/etc/bashrc
。
预防措施:使这些文件不可变并且只能由某些管理员更改将限制对手轻松创建用户级持久性的能力。
检测:监视执行的命令和参数,这些命令和参数可能通过执行由用户shell触发的恶意命令来建立持久性;监视新构建的文件,这些文件可能通过执行由用户shell触发的恶意命令来建立持久性。对于大多数Linux和macOS系统,系统上可用的有效shell选项的文件路径列表位于/etc/shell文件中;监视/etc/profile和/etc/profile.d的更改,这些文件只能由系统管理员修改。MacOS用户可以利用Endpoint Security Framework文件事件监视这些特定文件;监视新执行的进程,这些进程可能通过执行由用户shell触发的恶意命令来建立持久性。
陷阱
介绍:敌人可以通过执行由中断信号触发的恶意内容来建立持久性。trap命令允许程序和shell指定将在接收到中断信号时执行的命令。一种常见的情况是脚本允许优雅地终止和处理常见的键盘中断,如ctrl+c和ctrl+d。作为持久机制,当shell遇到特定中断时,对手可以使用它来注册要执行的代码。陷阱命令采用以下格式陷阱“命令列表”信号,当接收到“信号”时,将执行“命令列表“。
预防措施:
检测:监视执行的命令和自变量,这些命令和自变量可能通过执行由中断信号触发的恶意内容来建立持久性;监视新构建的文件,这些文件可能通过执行由中断信号触发的恶意内容来建立持久性;监视对文件所做的更改,这些更改可能通过执行由中断信号触发的恶意内容来建立持久性;监视新执行的进程,这些进程可能通过执行由中断信号触发的恶意内容来建立持久性。
LC_LOAD_DYLIB添加
介绍:攻击者可以通过执行由受污染二进制文件的执行触发的恶意内容来建立持久性。Mach-O二进制文件有一系列标头,用于在加载二进制文件时执行某些操作。Mach-O二进制文件中的LC_LOAD_DYLIB头告诉macOS和OSX在执行期间要加载哪些动态库(DYLIB)。只要对其余字段和依赖项进行了调整,就可以将它们临时添加到已编译的二进制文件中。有一些工具可用于执行这些更改。敌人可以修改Mach-O二进制头,以在每次执行二进制时加载并执行恶意dylib。尽管任何更改都会使二进制文件上的数字签名无效,因为二进制文件正在被修改,但这可以通过简单地从二进制文件中删除LC_CODE_SIGNATURE命令来补救,以便在加载时不检查签名。
预防措施:二进制文件也可以根据它们需要的动态库进行基线化,如果应用程序需要一个新的动态库,而该动态库没有作为更新的一部分,则应该进行调查;强制所有二进制文件由正确的Apple Developer ID签名;允许应用程序通过已知哈希。
检测:监视执行的命令和参数,这些命令和参数可能通过执行受污染二进制文件触发的恶意内容来建立持久性;对二进制文件的更改与应用程序更新或修补程序不一致也极为可疑;监视文件系统中应用程序二进制文件的更改和无效的校验和/签名;监视DLL/PE文件事件,特别是创建这些二进制文件以及将DLL加载到进程中。查找无法识别或未正常加载到进程中的DLL;监视进程中可能用于修改二进制标头的进程。
Netsh帮助程序DLL
介绍:敌人可以通过执行由Netsh Helper DLL触发的恶意内容来建立持久性。Netsh.exe(也称为Netshell)是一个命令行脚本实用程序,用于与系统的网络配置交互。它包含添加辅助DLL以扩展实用程序功能的功能。已注册netsh.exe帮助程序DLL的路径输入到位于HKLM\SOFTWARE\Microsoft\netsh的Windows注册表中。敌人可以使用netsh.exe助手DLL以持久的方式触发任意代码的执行。此执行将在执行netsh.exe的任何时候发生,这可以通过另一种持久性技术自动发生,或者如果作为其正常功能的一部分执行netshexe的系统上存在其他软件(例如:VPN)。
预防措施:
检测:监视执行的命令和参数,这些命令和参数可能通过执行由Netsh Helper DLL触发的恶意内容来建立持久性;监视DLL/PE文件事件,特别是创建这些二进制文件以及将DLL加载到进程中。查找无法识别或未正常加载到进程中的DLL;在大多数环境中,netsh.exe具有任何子进程可能是不常见的。监视进程执行情况,并调查netsh.exe派生的任何子进程是否存在恶意行为;监视HKLM\SOFTWARE\Microsoft\Netsh注册表项中与已知系统文件或良性软件不相关的任何新条目或可疑条目。
辅助功能
介绍:对手可以通过执行由可访问性特征触发的恶意内容来建立持久性和/或提升权限。Windows包含辅助功能,这些功能可以在用户登录之前使用组合键启动(例如:当用户在Windows登录屏幕上时)。对手可以在不登录系统的情况下修改这些程序的启动方式,以获得命令提示或后门。两个常见的辅助功能程序是C:\Windows\System32\sethc.exe
,当按下shift键五次时启动;C:\Windows\Systems32\utilman.exe
,当按Windows+U组合键时启动。sethc.exe程序通常被称为“粘性密钥”,被对手用于通过远程桌面登录屏幕进行未经验证的访问。根据Windows版本的不同,对手可能会以不同的方式利用这些功能。对手使用的常见方法包括替换注册表中的可访问性功能二进制文件或指向这些二进制文件的指针/引用。在较新版本的Windows中,对于x64系统,需要对替换的二进制文件进行数字签名,二进制文件必须位于%systemdir%\中,并且必须受到Windows文件或资源保护(WFP/WRP)的保护。图像文件执行选项注入调试器方法可能是一种潜在的解决方法,因为它不需要替换相应的可访问性功能二进制文件。例如,对于Windows XP及更高版本以及Windows Server 2003/R2及更高版上的简单二进制替换,程序(例如C:\Windows\System32\utilman.exe
)可以替换为“cmd.exe”(或其他提供后门访问的程序)。随后,坐在键盘旁或通过远程桌面协议连接时,在登录屏幕上按下适当的组合键,将使用SYSTEM权限执行替换的文件。其他辅助功能也可以以类似的方式使用:屏幕键盘:C:\Windows\System32\osk.exe
;放大镜:C:\Windows\System32\Magnify.exe
;讲述人:C:\Windows\ System32\Narrator.exe
;显示切换器:C:\Windows\System32\DisplaySwitch.exe
;应用程序切换器:C:\Windows\System32\AtBroker.exe
预防措施:对手可以用替代二进制文件替换可访问性功能二进制文件来执行此技术。通过使用应用程序控制工具,如Windows Defender应用程序控制、AppLocker或软件限制策略(如适用),识别并阻止通过辅助功能功能执行的潜在恶意软件;如果可能,请使用远程桌面网关来管理网络中RDP的连接和安全配置;要远程使用此技术,对手必须将其与RDP结合使用。在创建会话并显示登录屏幕之前,请确保启用“网络级身份验证”以强制远程桌面会话进行身份验证。在Windows Vista及更高版本上,默认情况下会启用它。
检测:监视执行的命令和参数,这些命令和参数可能通过执行由可访问性功能触发的恶意内容来建立持久性和/或提升权限。命令行调用能够修改相关密钥注册表的工具也是可疑的。应该监视实用程序参数和二进制文件本身的更改;注意:事件ID 4104(来自Microsoft Windows Powershell/操作日志)捕获Powershell脚本块,这些脚本块可以被分析并用于检测辅助功能的滥用;监视新构建的文件,这些文件可能通过执行由可访问性功能触发的恶意内容来建立持久性和/或提升权限;监视对文件所做的更改,这些更改可能会通过执行由可访问性功能触发的恶意内容来建立持久性和/或提升权限。对可访问性实用程序二进制文件或与已知软件、补丁周期等不相关的二进制路径的更改是可疑的;监视新执行的进程,这些进程可能通过执行由可访问性功能触发的恶意内容来建立持久性和/或提升权限;对手可以使用可访问性功能(易于访问),如StickyKeys或Utilman,从登录屏幕启动命令shell并获得SYSTEM访问权限。由于对手无法对机器进行物理访问,因此必须在远程桌面中运行此技术。为了防止对手在未经首次身份验证的情况下进入登录屏幕,必须启用网络级身份验证(NLA)。如果为其中一个可访问性功能设置了调试器,则它将拦截该功能的进程启动,并执行新的命令行。此分析查找直接从登录进程winlogon.exe启动的cmd.exe或powershell.exe的实例;使用易用性中心可以运行多个辅助功能程序;实现此技术的一个简单方法是注意,在默认的Windows配置中,system32文件夹的路径中没有空格。如果辅助功能程序使用调试器集运行,则Windows将启动调试器进程并将命令行附加到辅助功能程序。因此,在路径之前的命令行中会插入一个空格。在可访问性程序的名称之前的命令行中查找空格的任何实例将有助于确定何时设置调试器;Windows注册表位置HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options允许在执行过程中为应用程序设置参数。恶意行为者使用的一个功能是“调试器”选项。如果某个键启用了此值,则可以指定“调试”命令行。Windows将启动“调试”命令行,并将原始命令行作为参数传入。敌人可以为辅助功能应用程序设置调试器。分析将查找原始命令行作为调试器的参数。当在参数中检测到字符串“sethc.exe”、“utilman.exe”、“osk.exe”、《叙述者.exe》和“Magnify.exe”,但不是作为主要可执行文件时,很可能设置了调试器;注意:事件ID用于Sysmon(事件ID 1-进程创建)和Windows安全日志(事件ID 4688-已创建新进程)。分析示例查找任何创建的通用可访问性进程(如sethc.exe),但不进行其他筛选,这可能会导致误报。因此,我们建议通过包括额外的逻辑(例如,测试父进程的名称)来调整任何此类分析,以帮助减少误报;分析2可能取决于已知字符串用作日常环境中使用的其他应用程序的参数的可能性。尽管字符串“sethc.exe”不太可能被用作另一个应用程序的参数,但这仍然是可能的;分析1-从Winlogon启动的命令:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") AND ParentImage="winlogon.exe" AND Image="cmd.exe"AND (CommandLine="*sethc.exe"OR CommandLine="*utilman.exe"OR CommandLine="*osk.exe" OR CommandLine="*narrator.exe" OR CommandLine="*magnify.exe"
;分析2-可访问性应用程序的调试器:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") | where CommandLine match "$. *.*(sethcutilmanosknarratormagnify).exe"
;监视HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
中的注册表项。
AppCert DLL
介绍:对手可以通过执行加载到进程中的AppCert DLL触发的恶意内容来建立持久性和/或提升权限。在AppCertDLL注册表项HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\下指定的动态链接库(DLL)加载到调用广泛使用的应用程序编程接口(API)函数CreateProcess、CreateProcessAsUser、CreateProcessWithLoginW、CreateProcessWithTokenW或WinExec的每个进程中。与进程注入类似,通过在计算机上的单独进程的上下文中加载和运行恶意DLL,可以滥用此值来获得提升的权限。恶意AppCert DLL还可以通过被API活动连续触发来提供持久性。
预防措施:敌人安装新的AppCertDLL二进制文件来执行这项技术。通过使用应用程序控制工具,如Windows Defender应用程序控制、AppLocker或软件限制策略(如适用),识别并阻止通过AppCertDLL功能执行的潜在恶意软件。
检测:监视执行的命令和参数,这些命令和参数可能通过执行加载到进程中的AppCert DLL触发的恶意内容来建立持久性和/或提升权限;按进程监视DLL加载,特别是查找未识别或未正常加载到进程中的DLL。Sysinternals Autorun等工具可能会忽略AppCert DLL作为自动启动位置;监视和分析指示注册表编辑的应用程序编程接口(API)调用,如RegCreateKeyEx和RegSetValueEx;监视新执行的进程,这些进程可能通过执行加载到进程中的AppCert DLL触发的恶意内容来建立持久性和/或提升权限;监视AppCertDLL注册表值是否存在与已知软件、修补程序周期等不相关的修改。
AppInit DLL
介绍:对手可以通过执行加载到进程中的AppInit DLL触发的恶意内容来建立持久性和/或提升权限。在注册表项HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows或HKEY_LOCAL_MACHINE\SSoftware\Wow6432Node\Microsoft\Windows NT\CurrentVersion \Windows的AppInit_dll值中指定的动态链接库(dll)由user32.dll加载到加载user32.dll的每个进程中。在实践中,这几乎是每个程序,因为user32.dll是一个非常常见的库。与进程注入类似,这些值可能会被滥用,从而通过在计算机上单独进程的上下文中加载和运行恶意DLL来获得提升的权限。恶意AppInit DLL还可以通过被API活动连续触发来提供持久性。启用安全引导后,在Windows 8及更高版本中会禁用AppInit DLL功能。
预防措施:敌人可以安装新的AppInit DLL二进制文件来执行这项技术。通过使用应用程序控制工具,如Windows Defender应用程序控制、AppLocker或软件限制策略(如适用),识别并阻止通过AppInit DLL功能执行的潜在恶意软件;升级到Windows 8或更高版本并启用安全引导。
检测:监视执行的命令和参数,这些命令和参数可能通过执行加载到进程中的AppInit DLL触发的恶意内容来建立持久性和/或提升权限;监视加载user32.DLL的进程的DLL加载,并查找未识别或未正常加载到进程中的DLL;监视和分析指示注册表编辑的应用程序编程接口(API)调用,如RegCreateKeyEx和RegSetValueEx;监视新执行的进程,这些进程可能通过执行加载到进程中的AppInit DLL触发的恶意内容来建立持久性和/或提升权限;注意:Sysmon事件ID 1(进程创建)和Windows安全日志事件ID 4688(已创建新进程)可用于检测修改AppInit DLL注册表项的新reg.exe进程,因为注册表项被指定为命令行参数;监视AppInit_DLL注册表值中是否存在与已知软件、修补程序周期等不相关的修改。攻击者可能会通过执行加载到进程中的AppInit DLL触发的恶意内容来建立持久性和/或提升权限。在注册表项HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows或HKEY_LOCAL_MACHINE\SSoftware\Wow6432Node\Microsoft\Windows NT\CurrentVersion \Windows的AppInit_dll值中指定的动态链接库(dll)由user32.dll加载到加载user32.dll的每个进程中。这些值可能会被滥用,从而通过在单独进程的上下文中加载和运行恶意DLL来获得提升的权限。因此,本分析旨在寻找可能表明此类滥用的对这些注册表项的修改;分析1-AppInit DLL:source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode IN (12, 13, 14) TargetObject= "*\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\Appinit_Dlls*" OR TargetObject= "*\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\Appinit_Dlls*"
应用程序填隙
介绍:敌人可以通过执行由应用程序垫片触发的恶意内容来建立持久性和/或提升特权。创建Microsoft Windows应用程序兼容性基础结构/框架(Application Shim)是为了在操作系统代码库随时间变化时允许软件的向后兼容性。例如,应用程序填充功能允许开发人员对为Windows XP创建的应用程序进行修复(无需重写代码),使其能够与Windows 10一起使用。在该框架内,垫片被创建为程序(或者更具体地说,导入地址表)和Windows操作系统之间的缓冲区。执行程序时,会引用填充程序缓存来确定程序是否需要使用填充程序数据库(.sdb)。如果是这样,填充程序数据库将根据需要使用挂钩重定向代码,以便与操作系统通信。当前由默认Windows安装程序(sdbinst.exe)安装的所有垫片的列表保存在:%WINDIR%\AppPatch\sysmain.sdb和hklm\software\microsoft\Windows nt\currentversion\appcompatflags\installedsdb中自定义数据库存储在:%WINDIR%\AppPatch\Custom和%WINDIR%%\AppPatch\AppPatch64\Custom和hklm\software\microsoft\Windows nt\currentversion \appcompatflages\Custom为了确保垫片的安全,Windows将它们设计为在用户模式下运行,因此它们无法修改内核,并且您必须具有管理员权限才能安装垫片。但是,某些垫片可用于绕过用户帐户控制(UAC和RedirectEXE)、将DLL注入进程(InjectDLL)、禁用数据执行防止(DisableNX)和结构异常处理(DisableSEH)以及截获内存地址(GetProcAddress)。利用这些垫片可能会让对手执行多种恶意行为,如提升权限、安装后门、禁用Windows Defender等防御。垫片也可能被滥用,通过不断被受影响的程序调用来建立持久性。
预防措施:微软发布了一个可选的补丁更新KB3045645,它将删除sdbinst.exe中的“自动提升”标志。这将防止使用应用程序填隙来绕过UAC;将UAC设置更改为“始终通知”将在请求UAC提升时为用户提供更多可见性,但是,由于UAC不断中断,此选项在用户中不受欢迎。
检测:监视sdbinst.exe的已执行命令和参数,以了解应用程序填充程序滥用的潜在迹象;监视对文件所做的更改,这些更改可能会通过执行由应用程序垫片触发的恶意内容来建立持久性和/或提升权限;监视加载user32.DLL的进程的DLL加载,并查找未识别或未正常加载到进程中的DLL;监视sdbinst.exe的新执行进程,以了解应用程序填充程序滥用的潜在迹象。有几个可用的公共工具可以检测当前可用的垫片:垫片过程扫描程序-检查每个运行进程的内存中是否有垫片标志垫片检测器Lite-检测自定义垫片数据库的安装,垫片保护程序-监视注册表中是否有任何垫片安装,垫片扫描程序-在内存中查找活动垫片的取证工具垫片缓存内存-从内存中提取垫片缓存的波动性插件(注意:垫片仅在重新启动后缓存);监视对windows注册表项和/或值的更改,这些更改可能会通过执行由应用程序垫片触发的恶意内容来建立持久性和/或提升权限。
图像文件执行选项注入
介绍:敌人可以通过执行由图像文件执行选项(IFEO)调试器触发的恶意内容来建立持久性和/或提升特权。IFEO使开发人员能够将调试器附加到应用程序。创建进程时,应用程序IFEO中的调试器将预先添加到应用程序的名称中,从而有效地在调试器下启动新进程(例如C:\dbg\ntsd.exe-g notepad.exe)。IFEO可以通过注册表直接设置,也可以通过GFlags工具在Global Flags中设置。IFEO表示为注册表中HKLM\SOFTWARE{\Wow6432Node}\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
下的调试器值,其中<executable>
是附加调试器的二进制文件。IFEO还可以在指定程序静默退出时(即由其自身或第二个非内核模式进程提前终止)启动任意监视器程序。与调试器类似,可以通过GFlags和/或直接修改HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\
中的IFEO和静默进程出口注册表值来启用静默出口监视。与辅助功能功能类似,在Windows Vista及更高版本以及Windows Server 2008及更高级别上,可以修改注册表项,该注册表项将“cmd.exe”或其他提供后门访问的程序配置为辅助功能程序(例如:utilman.exe)的“调试器”。修改注册表后,在键盘上或与远程桌面协议连接时,在登录屏幕上按下适当的组合键将导致“调试器”程序以SYSTEM权限执行。与进程注入类似,这些值也可能被滥用,通过在计算机上的单独进程的上下文中加载和运行恶意可执行文件来获得权限提升。安装IFEO机制也可以通过连续触发调用提供持久性。恶意软件还可能使用IFEO通过注册无效的调试器来破坏防御,这些调试器重定向并有效禁用各种系统和安全应用程序。
预防措施:
检测:监视执行的命令和自变量,这些命令和自变量可能通过执行由图像文件执行选项(IFEO)调试器触发的恶意内容来建立持久性和/或提升权限;监视GFlags工具的异常使用情况,以及在异常父进程和/或使用指示调试的创建标志(如DEBUG_PROCESS和DEBUG_ONLY_THIS_PROCESS)下生成的常见进程;监控与IFEOs相关的注册表值,以及静默过程退出监控,用于与已知软件、补丁周期等不相关的修改。
PowerShell配置文件
介绍:敌人可能会通过执行PowerShell配置文件触发的恶意内容来获得持久性并提升权限。PowerShell配置文件(profile.ps1)是在PowerShell启动时运行的脚本,可以用作自定义用户环境的登录脚本。PowerShell支持多个配置文件,具体取决于用户或主机程序。例如,PowerShell主机程序(如PowerShell控制台、PowerShell ISE或Visual Studio代码)可以有不同的配置文件。管理员还可以配置应用于本地计算机上的所有用户和主机程序的配置文件。敌人可以修改这些配置文件以包括任意命令、函数、模块和/或PowerShell驱动器,从而获得持久性。每次用户打开PowerShell会话时,都会执行修改后的脚本,除非在启动时使用-NoProfile标志。如果PowerShell配置文件中的脚本由具有更高权限的帐户(如域管理员)加载和执行,则对手也可以升级权限。
预防措施:仅强制执行已签名的PowerShell脚本。对配置文件进行签名以避免其被修改;使PowerShell配置文件不可变且仅可由某些管理员更改将限制对手轻松创建用户级持久性的能力;如果不需要,请避免使用PowerShell配置文件。远程执行PowerShell脚本时,请将-No Profile标志与一起使用,以防止执行本地配置文件和脚本。
检测:监视异常的PowerShell命令、PowerShell驱动器或模块的异常加载;应监控profile.ps1可以存储的位置是否有新的配置文件。配置文件位置示例包括:$PsHome\profile.ps1,$PsHome \Microsoftoft.{HostProgram}_profile.ps1 $Home\My Documents\Powers\Profile.ps1 $Home\Mi Documents\Power\MMicrosoft.{HostProgram}_profile.ps1
;应监控profile.ps1可以存储的位置是否有修改。配置文件位置示例包括:$PsHome\profile.ps1 $PsHome \Microsoftoft.{HostProgram}_profile.ps1 $Home\My Documents\Powers\Profile.ps1 $Home\Mi Documents\Power\MMicrosoft.{HostProgram}_profile.ps1
;监视新执行的进程,这些进程可能通过执行PowerShell配置文件触发的恶意内容来获得持久性并提升权限。
Emond
介绍:敌人可以通过执行事件监视程序守护程序(emond)触发的恶意内容来获得持久性并提升权限。Emond是一个Launch Daemon,它接受来自各种服务的事件,通过简单的规则引擎运行它们,并采取行动。位于/sbin/emon的emond二进制文件将从/etc/emond.d/rules/目录加载任何规则,并在发生明确定义的事件后执行操作。规则文件采用plist格式,定义名称、事件类型和要执行的操作。事件类型的一些示例包括系统启动和用户身份验证。操作示例包括运行系统命令或发送电子邮件。如果QueueDirectories路径/private/var/db/emondClients中没有文件,则emond服务将不会启动,该路径是在/System/Library/LaunchDaemons/com.apple.emond.plist的启动守护程序配置文件中指定的。当定义的事件(如系统启动或用户身份验证)发生时,对手可能会通过编写规则来执行命令,从而滥用此服务。当启动守护程序服务使用root权限执行emod服务时,敌人还可以将权限从管理员升级到root。
预防措施:请考虑通过删除Launch Daemon plist文件来禁用emod。
检测:监视执行的命令和参数,这些命令和参数可能通过执行由事件监视程序守护程序(emond)触发的恶意内容而获得持久性并提升权限;通过检查/etc/emond.d/rules/和/private/var/db/emondClients中创建的文件来监控emond规则的创建;通过检查/etc/emond.d/rules/和/private/var/db/emondClients中修改的文件来监控emond规则的创建;监视新执行的进程,这些进程可能通过执行由事件监视程序守护程序(emond)触发的恶意内容来获得持久性并提升权限。
组件对象模型劫持
介绍:攻击者可以通过执行由对组件对象模型(COM)对象的劫持引用触发的恶意内容来建立持久性。COM是Windows中的一个系统,通过操作系统实现软件组件之间的交互。对各种COM对象的引用存储在注册表中。敌人可以使用COM系统插入恶意代码,这些代码可以通过劫持COM引用和关系来代替合法软件执行,以此作为持久性的手段。劫持COM对象需要更改注册表以替换对合法系统组件的引用,这可能会导致该组件在执行时无法工作。当该系统组件通过正常的系统操作执行时,对手的代码将被执行。对手可能会劫持频繁使用的对象,以保持一致的持久性水平,但不太可能破坏系统内的显著功能,从而避免可能导致检测的系统不稳定。
预防措施:
检测:监视执行的命令和参数,这些命令和参数可能通过执行被劫持的组件对象模型(COM)对象引用触发的恶意内容来建立持久性;注意:事件ID 4104(来自Microsoft Windows Powershell/操作日志)捕获Powershell脚本块,这些脚本块可以被分析并用于检测COM注册表项的更改,包括HKCU\Software\Classes\CLSID
;同样,如果收集并分析软件DLL加载,则任何可能与COM对象注册表修改相关的异常DLL加载都可能表明已执行COM劫持;监视新执行的进程,这些进程可能通过执行被劫持的组件对象模型(COM)对象引用触发的恶意内容来建立持久性;通过搜索已被替换的注册表引用以及通过注册表操作(例如:Reg)将已知二进制路径替换为未知路径或其他恶意内容,可以检测COM劫持。即使某些第三方应用程序定义了用户COM对象,HKEY_CURRENT_user\Software\Classes\CLSID\
中对象的存在也可能是异常的,并且应该进行调查,因为用户对象将在HKEY_LOCAL_machine\Software\Classes\\CLSID
中的机器对象之前加载。现有COM对象的注册表项可能很少更改。当具有已知良好路径和二进制的条目被替换或更改为异常值以指向新位置中的未知二进制时,它可能表明存在可疑行为,应进行调查;分析的单组件对象模型劫持;source="WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode IN (12, 13, 14) TargetObject= "\Software\Classes\CLSID*"
安装程序包
介绍:敌人可以通过使用安装程序触发恶意内容的执行来建立持久性并提升权限。安装程序包是特定于操作系统的,包含操作系统在系统上安装应用程序所需的资源。安装程序包可以包括在安装之前以及安装完成之后运行的脚本。安装程序脚本在执行时可能会继承提升的权限。开发人员经常使用这些脚本来准备安装环境、检查需求、下载依赖项以及在安装后删除文件。对手使用合法的应用程序,通过修改安装程序脚本来分发应用程序,以执行恶意内容。用户安装应用程序时,可能需要授予管理权限以允许安装。在合法应用程序的安装过程结束时,可以使用继承的提升权限执行macOS postinstall脚本等内容。敌人可以使用这些脚本执行恶意可执行文件或安装具有提升权限的其他恶意组件(如启动守护程序)。根据发行版的不同,Linux版本的包安装程序脚本有时被称为维护程序脚本或安装后脚本。这些脚本可以包括prest、postinst、prerm、postrm脚本,并在执行时以root身份运行。对于Windows,Microsoft安装程序服务使用.msi文件来管理应用程序的安装、更新和卸载。这些安装例程还可以包括执行可能被对手滥用的附加动作的指令。
预防措施:
检测:监视可能与滥用安装程序包有关的已执行命令和参数,包括由应用程序安装触发的恶意命令;监视与安装程序包关联的文件的创建,这些文件可能被滥用以进行恶意执行;使用可能与滥用安装程序包有关的参数监视进程,包括恶意的、可能由应用程序安装触发的提升进程。
10.外部远程服务
介绍:敌人可以利用面向外部的远程服务来初始访问和/或在网络中保持。VPN、Citrix和其他访问机制等远程服务允许用户从外部位置连接到内部企业网络资源。通常有远程服务网关来管理这些服务的连接和凭据身份验证。Windows远程管理和VNC等服务也可以在外部使用。访问有效帐户以使用该服务通常是一项要求,可以通过凭据制药或在破坏企业网络后从用户那里获得凭据来获得。在操作过程中,访问远程服务可能被用作冗余或持久访问机制。也可以通过不需要身份验证的公开服务获得访问权限。在容器化环境中,这可能包括公开的Docker API、Kubernetes API服务器、kubelet或web应用程序,如Kubernetesdashboard。
预防措施:禁用或阻止可能不必要的远程可用服务;限制通过集中管理的集中器(如VPN和其他管理的远程访问系统)访问远程服务;对远程服务帐户使用强大的双因素或多因素身份验证,以降低对手利用被盗凭据的能力,但要注意某些双因素身份验证实现的多因素身份拦截技术;拒绝通过使用网络代理、网关和防火墙直接远程访问内部系统。
检测:当访问暴露的远程服务不需要身份验证时,监视后续活动,例如异常外部使用暴露的API或应用程序;遵循检测对手使用有效帐户对远程服务进行身份验证的最佳实践。收集身份验证日志并分析异常访问模式、活动窗口和正常工作时间以外的访问;监视可能使用有效帐户访问和/或使用外部远程服务在网络中保持的新构建的网络连接。外部远程服务的使用可能是合法的,这取决于环境和使用方式。其他因素,如访问模式和远程登录后发生的活动,可能表明使用外部远程服务的可疑或恶意行为;监控和分析与不遵循预期协议标准和流量的协议相关的流量模式和数据包检查(例如,不属于已建立流量的无关数据包、无端或异常流量模式、异常语法或结构)。考虑与进程监控和命令行的相关性,以检测异常进程执行和与流量模式相关的命令行参数(例如,监控使用文件时的异常情况,这些文件通常不会启动相应协议的连接);监视源自未知/意外硬件设备的网络流量。本地网络流量元数据(如源MAC寻址)以及网络管理协议(如DHCP)的使用可能有助于识别硬件。
11.劫持执行流程
DLL搜索顺序劫持
介绍:敌人可能会通过劫持用于加载DLL的搜索顺序来执行自己的恶意有效载荷。Windows系统使用一种通用方法来查找加载到程序中所需的DLL。劫持DLL加载可能是为了建立持久性以及提升特权和/或规避对文件执行的限制。对手可以通过多种方式劫持DLL加载。攻击者可能会在程序将请求的合法库的位置之前搜索的目录中植入特洛伊木马程序动态链接库文件(DLL),导致Windows在受害者程序调用恶意库时加载其恶意库。敌人还可以通过将与模糊指定的DLL同名的恶意DLL放置在Windows搜索的合法DLL之前的位置来执行DLL预加载,也称为二进制植入攻击。通常,此位置是程序的当前工作目录。当程序在加载DLL之前将其当前目录设置为远程位置(如Web共享)时,就会发生远程DLL预加载攻击。幻影DLL劫持是一种特定类型的DLL搜索顺序劫持,对手的目标是引用不存在的DLL文件。他们可以通过在缺失模块的位置植入正确名称来加载自己的恶意DLL。对手也可以通过DLL重定向直接修改搜索顺序,在启用后(在注册表中并创建重定向文件),可能会导致程序加载不同的DLL。如果搜索顺序易受攻击的程序被配置为以更高的特权级别运行,则加载的对手控制的DLL也将以更高级别执行。在这种情况下,根据程序的不同,可以使用该技术将权限从用户升级到管理员或SYSTEM,或从管理员升级到SYSTEM。成为路径劫持受害者的程序可能看起来行为正常,因为恶意DLL可能被配置为也加载它们要替换的合法DLL。
预防措施:使用能够检测企业内系统上DLL搜索顺序劫持机会的审核工具并进行更正。像PowerSploit框架这样的工具包包含PowerUp模块,这些模块可用于探索系统的DLL劫持弱点;使用Windows附带的程序sxstrace.exe以及手动检查来检查清单文件中的软件并排问题;敌人可能会使用新的DLL来执行这项技术。通过使用能够阻止合法软件加载的DLL的应用程序控制解决方案,识别并阻止通过搜索顺序劫持执行的潜在恶意软件;不允许加载远程DLL。默认情况下,它包含在Windows Server 2012+中,并可通过XP+和Server 2003+的修补程序获得;启用安全DLL搜索模式,强制搜索具有更大限制的目录(例如%SYSTEMROOT%)中的系统DLL,以便在本地目录DLL(例如用户的主目录)之前使用;安全DLL搜索模式可以通过组策略在“计算机配置”>“[策略]”>“管理模板”>“MSS(旧版):MSS:(SafeDllSearchMode)Enable Safe DLL Search Mode”中启用。相关的Windows注册表项位于HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\SafeDLLSearchMode
检测:监视新构建的与软件更新不相关的.manifest和.local重定向文件;监视对.manifest/.local重定向文件的更改,或用于移动、重命名、替换或修改DLL的文件系统。进程加载的DLL集中与已知软件、修补程序等不相关的更改(与过去的行为相比)是可疑的;监视加载到进程中的DLL,并检测具有相同文件名但路径异常的DLL。
DLL侧面加载
介绍:敌人可以通过侧加载DLL来执行自己的恶意有效载荷。与DLL搜索顺序劫持类似,侧加载涉及劫持程序加载的DLL。但是,与其只是在程序的搜索顺序中植入DLL,然后等待受害者应用程序被调用,对手可以通过植入然后调用执行其有效载荷的合法应用程序来直接侧加载其有效载荷。侧加载通过将受害应用程序和恶意负载并排放置,利用加载程序使用的DLL搜索顺序。对手可能会使用侧载作为掩盖他们在合法、可信且可能提升的系统或软件流程下执行的操作的手段。在交付和/或执行期间,可能不会标记用于侧加载有效载荷的良性可执行文件。对抗有效载荷也可以被加密/打包或以其他方式混淆,直到被加载到可信进程的存储器中。
预防措施:如果可能,请在清单文件中包含哈希值,以帮助防止恶意库的副加载;定期更新软件,以包括修复DLL端加载漏洞的修补程序。
检测:监视计算机系统上公用文件夹中的新建文件;监视对文件所做的更改,以发现对访问权限和属性的意外修改;监视DLL/PE文件事件,特别是创建这些二进制文件以及将DLL加载到进程中。查找无法识别或未正常加载到进程中的DLL;监控新构建的进程是否有异常活动(例如,不使用网络的进程开始使用网络)以及新文件/程序的引入。
Dylib劫持
介绍:攻击者可以通过在受害者应用程序运行时搜索的路径中放置具有预期名称的恶意动态库(dylib)来执行自己的有效载荷。动态加载程序将尝试根据搜索路径的顺序来查找dylib。dylib的路径可以以@rpath为前缀,这允许开发人员使用相对路径根据可执行文件的位置指定运行时使用的搜索路径阵列。此外,如果使用弱链接,例如LC_LOAD_weak_DYLIB函数,则即使不存在预期的DYLIB,应用程序仍将执行。弱链接使开发人员能够在添加新API时在多个macOS版本上运行应用程序。敌人可以通过在识别的路径中插入具有丢失dylib名称的恶意dylib来获得执行。dylib被加载到应用程序的地址空间中,允许恶意的dylib继承应用程序的特权级别和资源。根据应用程序,这可能导致权限提升和不受限制的网络访问。这种方法也可能逃避安全产品的检测,因为在合法过程下执行是被掩盖的。
预防措施:在运行应用程序的文件夹和标准dylib文件夹中,设置目录访问控制以防止文件写入应用程序的搜索路径。
检测:新建dylib监控器;监视文件系统是否移动、重命名、替换或修改dylib。进程加载的dylib集合中的变化(与过去的行为相比)与已知软件、补丁等不相关,这是可疑的。检查系统中是否有多个同名的dylib,并监控历史上哪些版本已加载到进程中;监视正在加载的动态库。运行路径相关库可以包括LC_LOAD_DYLIB、LC_LOAD_WAK_DYLIB和LC_RPATH。macOS加载程序识别的其他特殊关键字有@rpath、@loader_path和@executable_path。可以使用otool-l命令检查这些加载程序指令中的各个二进制文件或框架。目的See的Dylib劫持扫描仪可用于识别易受Dylib劫持影响的应用程序
可执行安装程序文件权限弱点
介绍:敌人可能会通过劫持安装程序使用的二进制文件来执行自己的恶意有效载荷。这些进程可以自动执行特定的二进制文件作为其功能的一部分,或者执行其他操作。如果包含目标二进制文件的文件系统目录上的权限或二进制文件本身的权限设置不正确,则目标二进制文件可能会被使用用户级权限的另一个二进制文件覆盖,并由原始进程执行。如果原始进程和线程在更高的权限级别下运行,那么替换的二进制文件也将在更高级别的权限下执行,其中可能包括SYSTEM。该技术的另一个变体可以通过利用可执行的自解压安装程序中常见的弱点来执行。在安装过程中,安装程序通常使用%TEMP%目录中的子目录来解压缩二进制文件,如DLL、EXE或其他有效负载。当安装程序创建子目录和文件时,他们通常不会设置适当的权限来限制写入访问,这允许执行放置在子目录中的不受信任的代码或覆盖安装过程中使用的二进制文件。此行为与DLL搜索顺序劫持有关,并可能利用它。作为在更高权限级别执行代码的一种手段,攻击者可能会使用此技术将合法二进制文件替换为恶意二进制文件。一些安装程序可能还需要提升的权限,这将导致在执行对手控制的代码时权限升级。此行为与绕过用户帐户控制有关。已经向软件供应商报告了现有常见安装程序中这种弱点的几个例子。如果执行进程被设置为在特定时间或特定事件(例如,系统启动)期间运行,那么该技术也可以用于持久性。
预防措施:使用能够检测企业内系统上文件系统权限滥用机会并加以纠正的审核工具。PowerSploit框架等工具包包含PowerUp模块,这些模块可用于探索系统中的服务文件系统权限弱点;关闭标准用户[HHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
的UAC权限提升,以自动拒绝提升请求,添加:"ConsentCompBehaviorUser"=dword:000000000
。考虑通过添加:"EnableInstallerDetection"=dword:000000001
为所有用户启用安装程序检测。这将提示输入安装密码,并记录尝试。要禁用安装程序检测,请改为添加:“EnableInstallerDetection”=dword:000000000。这可能会防止在UAC检测安装程序的过程中利用漏洞提升权限,但会允许安装过程在不被记录的情况下继续进行;限制用户帐户和组的权限,以便只有经过授权的管理员才能与服务更改和服务二进制目标路径位置进行交互。在可能的情况下,拒绝从用户目录(如文件下载目录和临时目录)执行。
检测:监视新构建的文件以匹配现有的服务可执行文件,它可以被检测到并与其他可疑行为相关联;监视软件更新过程中通常可能发生的二进制文件和服务可执行文件的更改;监视DLL/PE文件事件,特别是创建这些二进制文件以及将DLL加载到进程中。查找无法识别或未正常加载到进程中的DLL;监视新构建的进程以匹配现有的服务可执行文件;监视来自典型进程和服务的异常进程调用树,以及可能与发现或其他对手技术有关的其他命令的执行。
动态链接劫持
介绍:敌人可能会通过劫持动态链接器用于加载共享库的环境变量来执行自己的恶意有效载荷。在程序的执行准备阶段,动态链接器从环境变量和文件加载共享库的指定绝对路径,例如Linux上的LD_PRELOAD或macOS上的DYLD_INSERT_libraries。环境变量中指定的库将首先加载,优先于具有相同函数名的系统库。开发人员经常使用这些变量来调试二进制文件,而无需重新编译、消除映射符号的冲突,以及在不更改原始库的情况下实现自定义函数。在Linux和macOS上,劫持动态链接器变量可能会授予对受害进程的内存、系统/网络资源的访问权限,以及可能提升的权限。这种方法也可能逃避安全产品的检测,因为在合法过程下执行是被掩盖的。敌人可以使用export命令、setenv函数或putenv函数通过命令行设置环境变量。敌人还可以利用动态链接劫持在shell中导出变量,或者使用更高级别的语法(如Python的os.environ)以编程方式设置变量。在Linux上,对手可以将LD_PRELOAD设置为指向与受害者程序请求的合法库的名称匹配的恶意库,从而导致操作系统在执行受害者程序时加载对手的恶意代码。LD_PRELOAD可以通过环境变量或/etc/LD.so.PRELOAD文件进行设置。由LD_PRELOAD指定的库分别由dlopen()和mmap()加载并映射到内存中。在macOS上,这种行为在概念上与Linux上相同,只是在较低级别上如何实现macOS动态库(dyld)不同。敌人可以将DYLD_INSERT_LIBRARIES环境变量设置为指向包含受害者程序请求的合法库或函数名称的恶意库。
预防措施:敌人可能会使用新的有效载荷来执行这项技术。通过使用同样能够阻止合法软件加载的库的应用程序控制解决方案,识别并阻止通过劫持执行的潜在恶意软件;当macOS中启用系统完整性保护(SIP)时,执行受保护的二进制文件时会忽略上述环境变量。第三方应用程序还可以利用苹果的硬化运行时,确保这些环境变量受到强制限制。管理员可以通过设置setuid和/或setgid位、使用授权或在Mach-O二进制文件中有__RESTRICT段来向应用程序添加限制。
检测:监视与变量修改相关联的已执行命令和自变量,以及与加载共享库(如Linux上的LD_PRELOAD和macOS上的DYLD_INSERT_libraries)相关联的文件;监视添加到共享库绝对路径的新建文件,如Linux上的LD_PRELOAD和macOS上的DYLD_INSERT_libraries;监视与加载共享库相关的环境变量和文件的更改,如Linux上的LD_PRELOAD和macOS上的DYLD_INSERT_libraries;监视库元数据(如哈希),并将进程执行时加载的库与以前的执行进行比较,以检测与修补或更新无关的差异;监视新执行的进程是否有异常活动(例如,不使用网络的进程开始使用网络)。
Path环境变量的路径拦截
介绍:敌人可能会通过劫持用于加载库的环境变量来执行自己的恶意有效载荷。PATH环境变量包含一个目录列表(用户和系统),操作系统按顺序搜索这些目录,以搜索从脚本或命令行调用的二进制文件。敌人可以将恶意程序放在存储在PATH环境变量中的目录列表中的较早条目中,导致操作系统在按顺序搜索PATH列表时执行恶意二进制文件,而不是合法二进制文件。例如,在Windows上,如果对手将名为“net.exe”的恶意程序放置在C:\example路径中,默认情况下,该路径位于path环境变量中C:\Windows\system32\net.exe
之前,则从命令行执行“net”时,将调用C:\example路径,而不是位于C:\Windows\systems32\net.exe的系统合法可执行文件。一些执行程序的方法依赖于PATH环境变量来确定在没有给定程序路径时搜索的位置,例如从命令和脚本解释器执行程序。敌人也可以直接修改指定要搜索的目录的PATH变量以指向他们有写访问权限的目录。当调用使用$PATH
变量的程序时,操作系统会搜索指定的目录并执行恶意二进制文件。在macOS上,这也可以通过修改$HOME
变量来执行。可以使用命令行、launchctl、Unix Shell Configuration Modification或修改/etc/paths.d文件夹内容来修改这些变量。
预防措施:在程序配置文件、脚本、path环境变量、服务和快捷方式中,通过在函数允许的情况下用引号包围path变量,查找并消除路径拦截弱点。请注意Windows执行或加载二进制文件时使用的搜索顺序,并在适当的情况下使用完全限定的路径;卸载软件时,请清理旧的Windows注册表项,以避免密钥没有关联的合法二进制文件。定期搜索、纠正或报告系统上的路径拦截弱点,这些弱点可能是使用自定义或可用工具引入的,这些工具报告使用不安全路径配置的软件;敌人可能需要将新的二进制文件放置在要通过这个弱点执行的位置。通过使用应用程序控制工具,如Windows Defender应用程序控制、AppLocker或软件限制策略(如适用),识别并阻止潜在的恶意软件执行路径拦截;确保设置了适当的权限和目录访问控制,以拒绝用户将文件写入顶级目录C:和系统目录(如C:\Windows\),从而减少恶意文件可能被放置执行的位置。要求所有可执行文件都放在受写保护的目录中。
检测:监视以部分目录命名的新构建文件,以及可以通过环境变量搜索公共进程的位置,或者不应为用户可写的位置。此外,还可以监视以Windows系统程序命名的程序或通常无路径执行的程序(如“findstr”、“net”和“python”)的文件创建。如果此活动发生在已知的管理活动、升级、安装或修补程序之外,则可能是可疑的;监视以部分目录命名的进程可执行路径的新执行进程;监视PATH环境变量注册表项的修改,如HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\environment\PATH
。对手可以在可以执行程序的其他位置之前添加新目录或目录列表。
搜索顺序劫持的路径拦截
介绍:敌人可能会通过劫持用于加载其他程序的搜索顺序来执行自己的恶意有效载荷。由于某些程序不使用完整路径调用其他程序,因此对手可能会将自己的文件放在调用程序所在的目录中,导致操作系统应调用程序的要求启动恶意软件。当对手滥用Windows搜索未给定路径的程序的顺序时,就会发生搜索顺序劫持。与DLL搜索顺序劫持不同,搜索顺序因执行程序的方法而异。但是,Windows通常在搜索Windows系统目录之前先在启动程序的目录中进行搜索。发现程序容易被搜索顺序劫持的对手(即,未指定可执行文件路径的程序)可能会利用此漏洞,创建一个以不正确指定的程序命名的程序,并将其放在启动程序的目录中。例如,“example.exe”使用命令行参数net user运行“cmd.exe”。对手可能会将一个名为“net.exe”的程序放在与example.exe相同的目录中,运行“net.exe”而不是Windows系统实用程序net。此外,如果对手将名为“net.com”的程序放在与“net.exe”相同的目录中,则cmd.exe/C net user将执行“net.com“而不是“net.exe“,这是由于在PATHEXT下定义的可执行扩展名的顺序所致。搜索顺序劫持也是劫持DLL加载的常见做法,在DLL搜索顺序劫持中有介绍。
预防措施:在程序配置文件、脚本、path环境变量、服务和快捷方式中,通过在函数允许的情况下用引号包围path变量,查找并消除路径拦截弱点。请注意Windows执行或加载二进制文件时使用的搜索顺序,并在适当的情况下使用完全限定的路径;卸载软件时,请清理旧的Windows注册表项,以避免密钥没有关联的合法二进制文件。定期搜索、纠正或报告系统上的路径拦截弱点,这些弱点可能是使用自定义或可用工具引入的,这些工具报告使用不安全路径配置的软件;敌人可能需要将新的二进制文件放置在要通过这个弱点执行的位置。通过使用应用程序控制工具,如Windows Defender应用程序控制、AppLocker或软件限制策略(如适用),识别并阻止潜在的恶意软件执行路径拦截;确保设置了适当的权限和目录访问控制,以拒绝用户将文件写入顶级目录C:和系统目录(如C:\Windows\),从而减少恶意文件可能被放置执行的位置。要求所有可执行文件都放在受写保护的目录中。
检测:监视以部分目录命名的文件的创建,这些文件位于可以通过环境变量搜索公共进程的位置,或者不应由用户写入。此外,还可以监视以Windows系统程序命名的程序或通常无路径执行的程序(如“findstr”、“net”和“python”)的文件创建。如果此活动发生在已知的管理活动、升级、安装或修补程序之外,则可能是可疑的;监视程序元数据的修改,例如删除可执行文件的路径,因为这会使程序容易受到这种技术的攻击。此外,还可以监视文件的修改,例如使用Windows系统实用程序名称重命名程序;监视以部分目录命名的进程可执行路径的新执行进程。
未引用路径的路径拦截
介绍:敌人可能会通过劫持易受攻击的文件路径引用来执行自己的恶意负载。敌人可以通过将可执行文件放在路径内的更高级别目录中来利用缺少周围引号的路径,以便Windows选择对手的可执行文件来启动。如果路径有一个或多个空格且未被引号包围,则服务路径和快捷方式路径也可能容易受到路径拦截(例如,C:\safe-path with space \program.exe与“C:\safe-pathwithspace \program.exe”)。(存储在Windows注册表项中)对手可以将可执行文件放置在路径的更高级别目录中,Windows将解析该可执行文件而不是预期的可执行文件。例如,如果快捷方式中的路径为C:\program files\myapp.exe,则对手可能会在C:\program.exe中创建一个程序,该程序将代替预期程序运行。如果定期调用可执行文件,则此技术可用于持久性,如果截获的可执行文件由更高特权的进程启动,则可用于权限提升。
预防措施:在程序配置文件、脚本、path环境变量、服务和快捷方式中,通过在函数允许的情况下用引号包围path变量,查找并消除路径拦截弱点。请注意Windows执行或加载二进制文件时使用的搜索顺序,并在适当的情况下使用完全限定的路径;卸载软件时,请清理旧的Windows注册表项,以避免密钥没有关联的合法二进制文件。定期搜索、纠正或报告系统上的路径拦截弱点,这些弱点可能是使用自定义或可用工具引入的,这些工具报告使用不安全路径配置的软件;敌人可能需要将新的二进制文件放置在要通过这个弱点执行的位置。通过使用应用程序控制工具,如Windows Defender应用程序控制、AppLocker或软件限制策略(如适用),识别并阻止潜在的恶意软件执行路径拦截;确保设置了适当的权限和目录访问控制,以拒绝用户将文件写入顶级目录C:和系统目录(如C:\Windows\),从而减少恶意文件可能被放置执行的位置。要求所有可执行文件都放在受写保护的目录中。
检测:监视以部分目录命名的文件的创建,这些文件位于可以通过环境变量搜索公共进程的位置,或者不应由用户写入。此外,还可以监视以Windows系统程序命名的程序或通常无路径执行的程序(如“findstr”、“net”和“python”)的文件创建。如果此活动发生在已知的管理活动、升级、安装或修补程序之外,则可能是可疑的;监视对文件所做的更改,这些文件可能会通过劫持易受攻击的文件路径引用来执行自己的恶意有效负载;监视新执行的进程,这些进程可能会通过劫持易受攻击的文件路径引用来执行自己的恶意有效负载。
服务文件权限弱点
介绍:敌人可能会通过劫持服务使用的二进制文件来执行自己的恶意有效载荷。敌人可能会使用Windows服务权限中的缺陷来替换服务启动时执行的二进制文件。这些服务进程可以自动执行特定的二进制文件作为其功能的一部分,或者执行其他操作。如果包含目标二进制文件的文件系统目录上的权限或二进制文件本身的权限设置不正确,则目标二进制文件可能会被使用用户级权限的另一个二进制文件覆盖,并由原始进程执行。如果原始进程和线程在更高的权限级别下运行,那么替换的二进制文件也将在更高级别的权限下执行,其中可能包括SYSTEM。作为在更高权限级别执行代码的一种手段,攻击者可能会使用此技术将合法二进制文件替换为恶意二进制文件。如果执行进程被设置为在特定时间或特定事件(例如,系统启动)期间运行,那么该技术也可以用于持久性。
预防措施:使用能够检测企业内系统上文件系统权限滥用机会并加以纠正的审核工具。PowerSploit框架等工具包包含PowerUp模块,这些模块可用于探索系统中的服务文件系统权限弱点;关闭标准用户[HHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
的UAC权限提升,以自动拒绝提升请求,添加:"ConsentCompBehaviorUser"=dword:000000000
。考虑通过添加:"EnableInstallerDetection"=dword:000000001
为所有用户启用安装程序检测。这将提示输入安装密码,并记录尝试。要禁用安装程序检测,请改为添加:"EnableInstallerDetection"=dword:000000000
。这可能会防止在UAC检测安装程序的过程中利用漏洞提升权限,但会允许安装过程在不被记录的情况下继续进行;限制用户帐户和组的权限,以便只有经过授权的管理员才能与服务更改和服务二进制目标路径位置进行交互。在可能的情况下,拒绝从用户目录(如文件下载目录和临时目录)执行。
检测:监视在定期软件更新或组织安排的更新期间未发生的二进制文件和服务可执行文件的创建。此行为还考虑被覆盖的文件;监视在定期软件更新或组织计划的更新期间未发生的二进制文件和服务可执行文件的修改。修改文件时会考虑重命名和移动目录等操作;监视新执行的进程,这些进程可能会通过劫持服务使用的二进制文件来执行自己的恶意有效负载;二进制文件和服务可执行文件的哈希可以用于检测历史数据的替换。
服务注册表权限弱点
介绍:敌人可能会通过劫持服务使用的注册表项来执行自己的恶意有效载荷。对手可能会利用与服务相关的注册表项权限中的缺陷,将最初指定的可执行文件重定向到他们控制的可执行程序,以便在服务启动时启动自己的代码。Windows将本地服务配置信息存储在注册表的HKLM\SYSTEM\CurrentControlSet\Services下。存储在服务注册表项下的信息可以通过服务控制器、sc.exe、PowerShell或Reg等工具进行操作,以修改服务的执行参数。对注册表项的访问通过访问控制列表和用户权限进行控制。如果用户和组的权限设置不正确,并且不允许访问服务的注册表项,对手可能会更改服务的binPath/ImagePath,以指向其控制下的不同可执行文件。当服务启动或重新启动时,对手控制的程序将执行,允许对手建立持久性和/或特权升级到服务设置为在其下执行的帐户上下文(本地/域帐户、SYSTEM、LocalService或NetworkService)。敌人还可能更改服务注册表树中的其他注册表项。例如,可以更改FailureCommand密钥,以便在服务出现故障或故意损坏时,在提升的上下文中执行服务。Performance键包含驱动程序服务的性能DLL的名称以及DLL中几个导出函数的名称。如果性能密钥尚未存在,并且对手控制的用户具有“创建子密钥”权限,则对手可能会在服务的注册表树中创建性能密钥以指向恶意DLL。对手还可以为其恶意服务添加存储驱动程序特定数据的Parameters密钥或其他自定义子密钥,以建立持久性或启用其他恶意活动。此外,如果对手使用svchost.exe启动其恶意服务,则可以使用HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\servicename\Parameters\ServiceDll识别服务的文件。
预防措施:确保为注册表配置单元设置了适当的权限,以防止用户修改可能导致权限提升的系统组件的密钥。
检测:监视命令和参数的执行情况,这些命令和参数可用于对手通过Windows Management Instrumentation和PowerShell等应用程序修改服务的注册表项和值。可能需要配置额外的日志记录以收集适当的数据;通过服务监控可疑程序的执行情况。当与历史数据进行比较时,这些过程可能会显示为以前从未见过的异常过程;对现有服务的修改不应频繁发生。如果服务二进制路径或故障参数更改为该服务不典型的值,并且与软件更新不相关,则可能是由于恶意活动;监视HKLM\SYSTEM\CurrentControlSet\services等服务使用的注册表项和值的修改,这些服务可能允许对手在服务启动时启动自己的代码。
COR_PROFILER
介绍:敌人可能会利用COR_PROFILER环境变量劫持加载的程序的执行流。NET CLR。COR_PROFILER是一个。NET Framework功能,允许开发人员指定一个非托管(或.NET外部)分析DLL加载到每个DLL中。NET进程,该进程加载公共语言运行时(CLR)。这些评测器旨在监视、排除故障和调试由执行的托管代码。NET CLR。COR_PROFILER环境变量可以在不同的范围(系统、用户或进程)进行设置,从而产生不同级别的影响。系统和用户范围的环境变量作用域在注册表中指定,组件对象模型(COM)对象可以在注册表中注册为探查器DLL。进程范围COR_PROFILER也可以在内存中创建,而无需修改注册表。从开始。NET Framework 4,只要在COR_PROFILER_PATH环境变量中指定了DLL的位置,就不需要注册分析DLL。敌人可能会滥用COR_PROFILER来建立在所有上下文中执行恶意DLL的持久性。NET在每次调用CLR时进行处理。COR_PROFILER还可以用于提升受害者的权限(例如:绕过用户帐户控制)。NET进程在更高的权限级别执行,以及提供的钩子和Impair Defenses。NET进程。
预防措施:通过使用AppLocker等能够审核和/或阻止未经批准的DLL的应用程序控制解决方案,识别并阻止潜在的恶意非托管COR_PROFILER分析DLL;确保为注册表配置单元设置了正确的权限,以防止用户修改与COR_PROFILER关联的密钥;限制用户帐户的权限,以便只有经过授权的管理员才能编辑系统环境变量。
检测:对于通过wmic.exe、setx.exe和Reg等命令行工具对注册表项(如COR_ENABLE_PROFILING、COR_PROFILER和COR_PROFILER_PATH)进行的可疑修改,应进行额外的审查。监视指示COR_PROFILEER变量更改的命令行参数可能有助于检测;监视与COR_PROFILER环境变量关联的DLL文件;监视可能滥用COR_PROFILER变量的新执行进程,如setx.exe,监视加载到中的新的可疑非托管分析DLL。NET进程,导致进程行为异常;为了检测COR_PROFILER变量的系统和用户作用域滥用,请监视注册表中对COR_ENABLE_PROFILING、COR_PROFILEER和COR_PROFILER_PATH的更改,这些更改对应于与已知开发人员工具无关的系统和使用者环境变量。
内核回调表
介绍:敌人可能会滥用进程的KernelCallbackTable来劫持其执行流,以便运行自己的有效负载。KernelCallbackTable可以在进程环境块(PEB)中找到,并且在加载user32.dll后被初始化为GUI进程可用的图形函数阵列。对手可能会使用KernelCallbackTable通过用恶意负载替换原始回调函数来劫持进程的执行流。修改回调函数可以通过涉及相关行为的各种方式实现,如反射代码加载或将进程注入另一个进程。指向KernelCallbackTable的内存地址的指针可以通过定位PEB(例如:通过对NtQueryInformationProcess()Native API函数的调用)获得。一旦找到指针,就可以复制KernelCallbackTable,并将表中的函数(例如,fnCOPYDATA)设置为恶意负载的地址(例如:通过WriteProcessMemory())。然后用表的新地址来更新PEB。一旦被篡改的函数被调用,恶意负载就会被触发。被篡改的函数通常使用Windows消息调用。在进程被劫持并执行恶意代码后,KernelCallbackTable也可能被恶意负载的其余部分恢复到其原始状态。使用KernelCallbackTable劫持执行流可能会逃避安全产品的检测,因为在合法进程下可以屏蔽执行。
预防措施:一些端点安全解决方案可以配置为基于常见的指示符序列(例如:特定API函数的执行)来阻止与进程注入/内存篡改相关的某些类型的行为。
检测:监视指示各种类型的代码注入的Windows API调用可能会生成大量数据,除非在特定情况下收集,否则可能不会直接用于防御。对于已知的错误调用序列,因为API函数的良性使用可能很常见,并且很难与恶意行为区分开来。可以将参数设置为ProcessBasicInformation的Windows API调用(如WriteProcessMemory()和NtQueryInformationProcess())用于此技术。
AppDomainManager
介绍:敌人可能会通过劫持来执行自己的恶意有效载荷。NET AppDomainManager加载程序集。这个NET框架使用AppDomainManager类在进程内创建和管理一个或多个独立的运行时环境(称为应用程序域),以承载的执行。NET应用程序。程序集(编译为作为.NET代码运行的.exe或.dll二进制文件)可以作为可执行代码加载到应用程序域中。被称为“AppDomainManager注入”,对手可以通过劫持方式执行任意代码。NET应用程序加载程序集。例如,恶意软件可能在目标进程内创建自定义应用程序域,以加载和执行任意程序集。或者,配置文件(.config)或定义的过程环境变量。NET运行时设置可能会被篡改,以指示其他良性操作。NET应用程序将恶意程序集(通过名称标识)加载到目标进程中。
预防措施:安装NET应用程序和相关软件。设置目录访问控制以防止文件写入的搜索路径。NET应用程序,位于运行应用程序的文件夹和标准资源文件夹中。
检测:监视新构建的文件,尤其是未知的文件。NET程序集和用户可写文件夹路径中的配置文件;监视DLL/PE文件事件,特别是这些二进制文件的创建以及的加载。NET程序集转换为进程(可能并不总是创建标准映像加载事件);查找未识别或未正常加载到进程中的图像加载;监控新构建的进程是否有异常活动(例如,不使用网络的进程开始使用网络)以及意外负载。NET资源。
12.植入物内部图像
介绍:敌人可能会在访问环境后植入带有恶意代码的云或容器映像,以建立持久性。亚马逊网络服务(AWS)亚马逊机器图像(AMI)、谷歌云平台(GCP)图像和Azure图像以及Docker等流行的容器运行时都可以植入或后门。与上传恶意软件不同,这项技术专注于对手在受害者环境中的注册表中植入图像。根据基础设施的配置方式,如果指示基础设施配置工具始终使用最新映像,则可以提供持久访问。已经开发了一种工具来促进在云容器图像中植入后门。如果对手有权访问受损的AWS实例,并有权列出可用的容器映像,他们可能会植入后门,如Web Shell。
预防措施:定期检查云部署中使用的映像和容器的完整性,以确保它们没有被修改为包含恶意软件;一些云服务提供商支持内容信任模型,该模型要求容器映像由可信来源签名;基于最小权限原则限制与创建和修改平台映像或容器相关的权限。
检测:监控用户与图像和容器的交互,以识别异常添加的图像和容器;定期对虚拟机映像进行基线检查,以识别恶意修改或添加;监控用户与图像和容器的交互,以识别被异常修改的图像和容器。在容器化环境中,可以通过监控Docker守护进程日志或根据注册表配置设置和监控Kubernetes审核日志来检测更改。
13.修改身份验证过程
域控制器身份验证
介绍:对手可以修补域控制器上的身份验证过程,以绕过典型的身份验证机制并允许访问帐户。恶意软件可能被用于在域控制器上的身份验证过程中注入虚假凭据,目的是创建用于访问任何用户帐户和/或凭据(例如:Skeleton Key)的后门。骨架密钥通过企业域控制器身份验证过程(LSASS)上的补丁使用对手可能用来绕过标准身份验证系统的凭据工作。一旦修补,对手可以使用注入的密码成功验证为任何域用户帐户(直到通过重新启动域控制器从内存中删除骨架密钥)。经过身份验证的访问可以实现对单因素身份验证环境中的主机和/或资源的不受限制的访问。
预防措施:将多因素身份验证(MFA)作为组织策略的一部分进行集成,可以大大降低对手获得有效证书控制权的风险,这些证书可用于其他策略,如初始访问、横向移动和收集信息。MFA还可以用于限制对云资源和API的访问;定期审核域和本地帐户及其权限级别,以寻找可能允许对手通过获取特权帐户的凭据获得广泛访问权限的情况。这些审计还应包括是否已启用默认帐户,或者是否创建了未经授权的新本地帐户。遵循企业网络设计和管理的最佳实践,以限制跨管理层的特权帐户使用;已启用LSA的功能,如受保护的过程灯(PPL)。
检测:监视从身份验证相关的系统dll(如cryptdll.dll和samsrv.dll)导出的函数的更改;监视共享帐户(用户帐户、管理员帐户或服务帐户)的系统中新建的登录行为。示例:一个帐户同时登录多个系统;多个帐户同时登录到同一台机器;在奇数时间(例如:用户不在场时)或工作时间以外登录的帐户。活动可以来自交互式登录会话,也可以来自作为特定帐户在远程系统上执行二进制文件的帐户的进程所有权。将其他安全系统与登录信息关联起来(例如,用户有活动的登录会话,但尚未进入大楼或没有VPN访问权限)。通过外部可访问的服务在整个企业中配置强健、一致的帐户活动审核策略;监视对OpenProcess的API调用,该调用可用于操作在域控制器上运行的lsass.exe;监视与域控制器上的身份验证进程交互的意外进程,以绕过典型的身份验证机制并启用对帐户的访问。
密码筛选器DLL
介绍:对手可能会将恶意密码过滤器动态链接库(DLL)注册到身份验证过程中,以在验证用户凭据时获取这些凭据。Windows密码筛选器是域帐户和本地帐户的密码策略强制机制。过滤器被实现为DLL,其中包含一种根据密码策略验证潜在密码的方法。筛选器DLL可以位于本地帐户的本地计算机上和/或域帐户的域控制器上。在安全帐户管理器(SAM)中注册新密码之前,本地安全机构(LSA)请求每个注册的筛选器进行验证。在每个注册的筛选器确认验证之前,任何潜在的更改都无法生效。敌人可以注册恶意密码过滤器,从本地计算机和/或整个域获取凭据。要执行正确的验证,筛选器必须从LSA接收纯文本凭据。每次发出密码请求时,恶意密码过滤器都会收到这些纯文本凭据。
预防措施:确保只注册了有效的密码筛选器。筛选器DLL必须存在于域控制器和/或本地计算机的Windows安装目录(默认情况下为C:\Windows\System32\)中,并在HKEY_local_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Notification Packages中具有相应的条目。
检测:监视可能在身份验证过程中注册恶意密码过滤器动态链接库(DLL)的新建文件,以便在验证用户凭据时获取这些凭据;监视写入域控制器和/或本地计算机的新的、不熟悉的DLL文件。密码过滤器也将在lsass.exe中显示为自动运行和加载的DLL;监视密码筛选器的注册表项(例如:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Notification Packages)的更改,并进行关联,然后调查这些文件引用的DLL文件。
验证模块
介绍:对手可能会修改可插拔身份验证模块(PAM)以访问用户凭据,或以其他方式对帐户进行不必要的访问。PAM是一个由配置文件、库和可执行文件组成的模块化系统,用于指导许多服务的身份验证。最常见的身份验证模块是pam_unix.so,它检索、设置和验证/etc/passwd和/etc/shadow中的帐户身份验证信息。敌人可能会修改PAM系统的组件以创建后门。PAM组件(如PAM_unix.so)可以进行修补,以接受对手提供的任意值作为合法凭据。对PAM系统的恶意修改也可能被滥用来窃取凭据。由于PAM不存储密码,因此与PAM组件交换的值可能是纯文本,因此敌人可能会用获取用户凭据的代码感染PAM资源。
预防措施:将多因素身份验证(MFA)作为组织策略的一部分进行集成,可以大大降低对手获得有效证书控制权的风险,这些证书可用于其他策略,如初始访问、横向移动和收集信息;通过适当的权限分离(例如SELinux、grsecurity、AppArmor等)和限制权限提升机会,限制对根帐户的访问,防止用户修改PAM组件。
检测:监视PAM配置和模块路径(例如:/etc/PAM.d/)的更改。使用系统完整性工具(如AIDE)和监视工具(如audited)监视PAM文件;监视共享帐户(用户帐户、管理员帐户或服务帐户)的系统中新建的登录行为。示例:一个帐户同时登录多个系统;多个帐户同时登录到同一台机器;在奇数时间(例如:用户不在场时)或工作时间以外登录的帐户。活动可以来自交互式登录会话,也可以来自作为特定帐户在远程系统上执行二进制文件的帐户的进程所有权。将其他安全系统与登录信息关联起来(例如,用户有活动登录会话,但尚未进入大楼或没有VPN访问权限)。
网络设备身份验证
介绍:对手可能会使用补丁系统映像在操作系统中硬编码密码,从而绕过网络设备上本地帐户的本地身份验证机制。修改系统映像可以包括网络设备的操作系统的植入代码,以使用特定密码为对手提供访问权限。修改包括通过补丁植入操作系统映像中的特定密码。在尝试身份验证时,插入的代码将首先检查用户输入的是不是密码。如果是,则授予访问权限。否则,植入的代码将传递凭据以验证潜在的有效凭据。
预防措施:对用户和特权帐户使用多因素身份验证。大多数嵌入式网络设备支持TACACS+和/或RADIUS。遵循供应商规定的强化访问控制的最佳实践;按照最低权限原则,将管理员帐户限制为尽可能少的个人。防止管理员帐户和特权帐户系统之间的凭据重叠,特别是在网络和非网络平台(如服务器或端点)之间。
检测:监视对操作系统文件的校验和所做的更改,并验证内存中操作系统的映像。这种行为的检测可能很困难,检测工作可能集中在密切相关的对手行为上,例如修改系统图像。
可逆加密
介绍:对手可能会滥用Active Directory身份验证加密属性来访问Windows系统上的凭据。AllowReversiblePasswordEncryption属性指定是启用还是禁用帐户的可逆密码加密。默认情况下,此属性被禁用(而不是将用户凭据存储为单向哈希函数的输出),除非传统软件或其他软件需要,否则不应启用。如果启用了该属性和/或用户在启用后更改了密码,则对手可能能够获得在启用该属性后创建/更改的密码的明文。要解密密码,对手需要四个组件:来自Active Directory用户结构的加密密码(G$RADIUSCHAP)userParameters
16字节随机生成的值(G$RADIUSCHAPKEY
)也来自userParameters全局LSA机密(G$MSRADIUUSCHAPKEY
)远程访问子身份验证DLL(RASSFM.DLL)中硬编码的静态密钥有了这些信息,对手可能能够复制加密密钥,然后解密加密的密码值。对手可以通过本地组策略编辑器、用户属性、细粒度密码策略(FGPP)或通过ActiveDirectory PowerShell模块在各种范围内设置此属性。例如,如果域功能级别设置为“Windows Server 2008”或更高,对手可能会对用户或组实施并应用FGPP。在PowerShell中,对手可以使用类似于Set ADUser-AllowReversiblePasswordEncryption$true的命令对用户设置进行相关更改。
预防措施:除非有应用程序要求,否则请确保将AllowReversiblePasswordEncryption属性设置为禁用;定期审核域和本地帐户及其权限级别,以寻找可能允许对手通过获取特权帐户的凭据获得广泛访问权限的情况。这些审计还应包括是否已启用默认帐户,或者是否创建了未经授权的新本地帐户。遵循企业网络设计和管理的最佳实践,以限制跨管理层的特权帐户使用。
检测:监视组策略中的属性更改:计算机配置\Windows设置\安全设置\帐户策略\密码策略\使用可逆加密存储密码。默认情况下,该属性应设置为“禁用”;监视-AllowReversiblePasswordEncryption$true的命令行使用情况或可能与恶意篡改用户设置有关的其他操作(即组策略修改);考虑监视和/或阻止更改帐户配置的Active Directory PowerShell模块(如Set ADUser和Set ADAccountControl)的可疑执行;监控细粒度密码策略,并定期审核用户帐户和组设置。
多因素身份验证
介绍:对手可以禁用或修改多因素身份验证(MFA)机制,以实现对受损帐户的持久访问。一旦对手通过破坏缺乏MFA的帐户或采用MFA绕过方法(如多因素身份验证请求生成)访问网络,对手就可以利用其访问权限修改或完全禁用MFA防御。这可以通过滥用合法功能来实现,例如将用户排除在Azure AD条件访问策略之外,注册新的易受攻击/对手控制的MFA方法,或者手动修补MFA程序和配置文件以绕过预期功能。例如,修改Windows主机文件(C:\Windows\system32\drivers\etc\hosts)以将MFA调用重定向到localhost而不是MFA服务器可能会导致MFA进程失败。如果有“故障打开”策略,则任何其他成功的身份验证尝试都可以被授予访问权限,而无需强制执行MFA。根据对手的范围、目标和特权,可能会对单个帐户或与更大组绑定的所有帐户禁用MFA防御,例如受害者网络环境中的所有域帐户。
预防措施:在验证日志旁边查看MFA操作,以确保基于MFA的登录按预期运行。检查用户帐户以确保所有帐户都启用了MFA;确保对现有和停用或休眠的帐户和设备正确执行MFA和MFA政策和要求。如果可能,请考虑将MFA解决方案配置为“故障关闭”,而不是在出现严重错误时授予访问权限;确保实施适当的策略来规定用户帐户的MFA的安全注册和停用。
检测:监视对与MFA登录要求相关的AD安全设置所做的更改,例如对Azure AD条件访问策略的更改或新MFA应用程序的注册;监视对标识即服务提供商中的全局多因素身份验证设置所做的更改。例如,在Okta环境中,当mfa因子被全局激活或停用时,将触发事件system.mfa.factor.activate和system.mfa.factor.deactivate;监视不需要MFA进行身份验证的用户帐户和设备的登录会话;监视用户帐户未向身份验证实体提供MFA凭据的帐户身份验证;监视具有替代安全设置的设备和用户帐户的注册,这些设置不需要MFA凭据即可成功登录。监视是否尝试在单个用户帐户上禁用MFA。此外,监控是否试图更改或重置用户的MFA系数设置。例如,在Okta环境中,当为用户重置所有mfa因素时,将触发事件user.mfa.factor.reset_all。
混合身份
介绍:对手可能会修补、修改或以其他方式后门与本地用户身份绑定的云身份验证过程,以绕过典型的身份验证机制、访问凭据并实现对帐户的持久访问。许多组织维护混合用户和设备身份,这些身份在本地和基于云的环境之间共享。这些可以通过多种方式进行维护。例如,Azure AD包括用于在Active Directory和Azure AD之间同步身份的三个选项:密码哈希同步(PHS),其中特权本地帐户在Active Directory与Azure AD之间对用户密码哈希进行同步,允许对Azure AD的身份验证完全在云传递身份验证(PTA)中进行,其中Azure AD身份验证尝试被转发到本地PTA代理,该代理根据Active Directory Active Directory联合身份验证服务(AD FS)验证凭据,在该代理中,Active Directory与Azure AD FS之间建立信任关系。AD FS还可以与其他SaaS和云平台(如AWS和GCP)一起使用,后者将身份验证过程移交给AD FS,并接收包含混合用户身份和特权。通过修改与混合身份相关的身份验证过程,对手可能能够建立对云资源的持久特权访问。例如,危害运行PTA代理的本地服务器的对手可能会将恶意DLL注入AzureADConnectAuthenticationAgentService进程,该进程授权所有向Azure AD进行身份验证的尝试,并记录用户凭据。在使用AD FS的环境中,对手可能会编辑Microsoft。IdentityServer。Servicehost配置文件加载恶意DLL,该DLL为具有任何声明集的任何用户生成身份验证令牌,从而绕过多因素身份验证和定义的AD FS策略。在某些情况下,对手可能能够从云中修改混合身份验证过程。例如,危害Azure AD租户中的全局管理员帐户的对手可能能够通过网络控制台注册新的PTA代理,类似地,允许他们获取凭据并作为任何用户登录Azure AD环境。
预防措施:定期检查正在使用的混合身份解决方案是否存在任何差异。例如,查看Azure管理门户中的所有PTA代理,以确定任何不需要的或未经批准的代理。如果正在使用ADFS,请检查AD FS和全局程序集缓存目录中的DLL和可执行文件,以确保它们由Microsoft签名。请注意,在某些情况下,二进制文件可能是经过目录签名的,这可能会导致在查看文件属性时文件显示为未签名;将多因素身份验证(MFA)作为组织策略的一部分进行集成,可以大大降低对手获得有效证书控制权的风险,这些证书可用于其他策略,如初始访问、横向移动和收集信息。MFA还可以用于限制对云资源和API的访问;限制可访问混合身份解决方案的本地帐户。例如,将Azure AD Global Administrator帐户限制为仅需要的帐户,并确保这些帐户是专用的纯云帐户,而不是混合帐户。
检测:启用安全审核以从混合身份解决方案收集日志。例如,监视Azure AD应用程序代理连接器的登录,这些登录通常仅在添加新的PTA代理时生成。如果正在使用AD FS,请查看事件ID 501的日志,该日志指定声明上的所有EKU属性,并对环境中未配置的任何值发出警报;监视与混合身份验证过程相关的文件(如配置文件)的可疑修改。监控对证书和加密密钥材料的访问;监控云服务身份验证中的差异,例如Azure AD中记录的PTA登录在AD中缺少相应的事件;监视用于加载未经授权的DLL的混合身份解决方案。例如,监视所有PTA代理服务器以创建DLL以及将DLL加载到AzureADConnectionAuthenticationAgentService进程中。如果正在使用AD FS,请监视AD FS服务器是否创建DLL,以及是否将无法识别或未签名的DLL加载到Microsoft中。IdentityServer。Servicehost应用程序。
网络提供程序DLL
介绍:对手可能会注册恶意网络提供商动态链接库(DLL),以在身份验证过程中捕获明文用户凭据。网络提供程序DLL允许Windows与特定的网络协议对接,还可以支持附加凭据管理功能。在登录过程中,Winlogon(交互式登录模块)通过RPC向本地mpnotify.exe进程发送凭据。然后,mpnotify.exe进程在通知登录事件正在发生时,以明文形式与注册的凭据管理器共享凭据。敌人可以配置恶意网络提供程序DLL以从mpnotify.exe接收凭据。一旦安装为凭据管理器(通过注册表),每当用户通过NPLogonNotify()函数登录到Windows工作站或域时,恶意DLL都可以接收并保存凭据。敌人可能针对在已知具有增加的登录活动和/或管理员登录活动的系统(例如服务器和域控制器)上植入恶意网络提供商DLL。
预防措施:定期检查注册表中的新的和未知的网络提供程序DLL(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services<NetworkProviderName>\NetworkProvider\ProviderPath);请确保仅注册了有效的网络提供程序DLL。它们的名称可以在注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order中找到,并且相应的服务子项指向HKEY_LOCAL_MACHINE\SSYSTEM\CurrentC ControlSet\Services<NetworkProviderName>\NetworkProvider中的DLL;从Windows 11 22H2开始,可以通过组策略或配置服务提供程序禁用EnableMPRNotifications策略,以阻止Winlogon向网络提供程序发送凭据;限制注册表权限以禁止修改敏感注册表项,如HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order。
检测:监视可能用于注册恶意网络提供程序动态链接库(DLL)的新创建文件;监视对NPLogonNotify()的异常API调用;监视是否添加网络提供程序注册表项(例如,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services<NetworkProviderName>\NetworkProvider);监视网络提供程序的注册表项(例如HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order)的更改,并进行关联,然后调查这些值引用的DLL文件。
条件访问策略
介绍:对手可能会禁用或修改条件访问策略,以实现对受损帐户的持久访问。条件访问策略是身份提供者以及身份和访问管理系统使用的附加验证,用于确定是否应授予用户访问资源的权限。例如,在Azure AD、Okta和JumpCloud中,可以根据用户的IP地址、设备注册状态和使用多因素身份验证来拒绝用户访问应用程序。在某些情况下,身份提供者还可能支持使用基于风险的指标来拒绝基于各种指标的登录。在AWS和GCP中,IAM策略可以包含验证任意约束的条件属性,如源IP、请求日期以及请求的资源或区域的性质。这些措施有助于防止泄露的凭据导致对数据或资源的未经授权的访问,并将用户权限限制为仅需要的权限。通过修改条件访问策略,例如添加额外的可信IP范围、删除多因素身份验证要求或允许额外的未使用/不支持的云区域,对手可能能够确保对帐户的持久访问并规避防御措施。
预防措施:将修改条件访问策略的权限限制为仅需要的权限。
检测:监视对与Azure AD条件访问策略相关的安全设置所做的更改。例如,这些可以在Azure AD审核日志中的操作名称“更新条件访问”策略下找到;监控SaaS身份提供商和内部IaaS身份和访问管理系统使用的条件访问策略的更改。
14.Office应用程序启动
Office模板宏
介绍:敌人可能会滥用Microsoft Office模板在受损系统上获得持久性。Microsoft Office包含的模板是常见Office应用程序的一部分,用于自定义样式。每次启动应用程序时都会使用应用程序中的基本模板。Office Visual Basic for Applications(VBA)宏可以插入到基本模板中,并用于在相应的Office应用程序启动时执行代码,以获得持久性。已经发现并发布了Word和Excel的示例。默认情况下,Word会创建一个Normal.dotm模板,该模板可以修改为包含恶意宏。Excel默认情况下没有创建模板文件,但可以添加一个将自动加载的模板文件。共享模板也可以被存储和从远程位置提取。Word Normal.dotm位置:C:\Users\<用户名>\AppData\Roaming\Microsoft\Templates\Normal.dotm Excel Personal.xlsb
位置:C:\Users\<用户名>\AppData\\Roaming\MMicrosoft\Excel\XLSTART\Personal
。XLSB对手还可以通过劫持应用程序的搜索顺序来更改基本模板的位置以指向自己的位置,例如Word 2016将首先在C:\Program Files(x86)\Microsoft Office\root\Office16\下查找Normal.dotm,或者通过修改GlobalDotName注册表项。通过修改GlobalDotName注册表项,对手可以为应用程序启动时加载的模板指定任意位置、文件名和文件扩展名。要滥用GlobalDotName,对手可能首先需要将模板注册为可信文档或将其放置在可信位置。对手可能需要使宏能够不受限制地执行,这取决于系统或企业使用宏的安全策略。
预防措施:在Windows 10上,启用减少攻击面(ASR)规则,以防止Office应用程序创建子进程以及将潜在的恶意可执行内容写入磁盘;遵循适合您的环境的Office宏安全最佳实践。禁止执行Office VBA宏;禁用Office加载项。如果需要,请遵循保护它们的最佳做法,要求对它们进行签名,并禁用允许加载项的用户通知。对于某些加载项类型(WLL、VBA),可能需要额外的缓解措施,因为在Office信任中心中禁用加载项不会禁用WLL,也不会阻止VBA代码的执行。
检测:监视执行的命令和参数,这些命令和参数可能会滥用Microsoft Office模板,从而在受损的系统上获得持久性;监视新构建的文件,这些文件可能会滥用Microsoft Office模板以在受损系统上获得持久性;监视对文件所做的更改,这些更改可能会滥用Microsoft Office模板以在受损系统上获得持久性。对基础模板(如Normal.dotm)的修改也应进行调查,因为基础模板可能不包含VBA宏。还应调查对Office宏安全设置的更改;监视新执行的进程,这些进程可能会滥用Microsoft Office模板以在受损系统上获得持久性;为可用于基于Office的持久性的注册表项收集与注册表项创建相关的事件;为可用于基于Office的持久性的注册表项收集与注册表项修改相关的事件。
Office测试
介绍:敌人可能会滥用Microsoft Office“Office Test”注册表项,以在受损系统上获得持久性。存在一个Office测试注册表位置,该位置允许用户指定任意DLL,该DLL将在每次启动Office应用程序时执行。此注册表项被认为是Microsoft在开发Office应用程序时用于加载DLL以进行测试和调试的。在Office安装过程中,默认情况下不会创建此注册表项。Office测试功能存在用户和全局注册表项,例如:HKEY_CURRENT_user\Software\Microsoft\Office Test\Special\Perf HKEY_LOCAL_MACHINE\Software\MMicrosoft\Office Test\ Special\Perf Adversaries可能会添加此注册表项并指定恶意DLL,该DLL将在启动Office应用程序(如Word或Excel)时执行。
预防措施:在Windows 10上,启用减少攻击面(ASR)规则,以防止Office应用程序创建子进程以及将潜在的恶意可执行内容写入磁盘;创建用于执行它的注册表项,并将权限设置为“读取控制”,以防止在没有管理员权限或需要特权升级的情况下轻松访问该项。
检测:监视执行的命令和参数,这些命令和参数可能会滥用Microsoft Office“Office Test”注册表项以在受损系统上获得持久性;监视可能滥用Microsoft Office“Office Test”注册表项以在受损系统上获得持久性的新建文件;监视对文件所做的更改,这些更改可能会滥用Microsoft Office“Office Test”注册表项以在受损系统上获得持久性;监视DLL/PE文件事件,特别是创建这些二进制文件以及将DLL加载到进程中。查找无法识别或未正常加载到进程中的DLL;监视可能滥用Microsoft Office“Office Test”注册表项以在受损系统上获得持久性的新执行进程;监视Office测试注册表项的创建。为可用于基于Office的持久性的注册表项收集与注册表项创建相关的事件。自v13.52以来,自动运行可以检测使用Office测试注册表项设置的任务;监视对Office测试注册表项所做的更改。为可用于基于Office的持久性的注册表项收集与注册表项修改相关的事件。自v13.52以来,自动运行可以检测使用Office测试注册表项设置的任务。
Outlook窗体
介绍:敌人可能会滥用Microsoft Outlook表单在受损系统上获得持久性。Outlook表单用作Outlook邮件中演示文稿和功能的模板。可以创建自定义Outlook表单,当对手使用相同的自定义Outlook表单发送精心编制的电子邮件时,该表单将执行代码。一旦恶意表单被添加到用户的邮箱,它们将在启动Outlook时加载。当对手向用户发送特制的电子邮件时,恶意表单就会执行。
预防措施:在Windows 10上,启用减少攻击面(ASR)规则,以防止Office应用程序创建子进程以及将潜在的恶意可执行内容写入磁盘;对于Outlook方法,阻止宏可能无效,因为用于这些功能的Visual Basic引擎与宏脚本引擎是分开的。微软已经发布了修补程序,试图解决每一个问题。确保将阻止Outlook Visual Basic并显示恶意代码警告的KB3191938、默认情况下禁用自定义表单的KB4011091和删除旧主页功能的KB4011162应用于系统。
检测:监视第三方应用程序日志记录、消息传递和/或其他可能滥用Microsoft Outlook表单在受损系统上获得持久性的工件。SensePost发布了一款检测Ruler使用情况的工具,其工具Ruler可用于实施恶意规则、表单和主页攻击;监视执行的命令和参数,这些命令和参数可能会滥用Microsoft Outlook表单以在受损系统上获得持久性。Microsoft发布了一个PowerShell脚本,用于安全地收集邮件环境中的邮件转发规则和自定义表单,以及解释输出的步骤;监视新执行的进程,这些进程可能会滥用Microsoft Outlook表单以在受损系统上获得持久性。
Outlook主页
介绍:敌人可能会滥用Microsoft Outlook的主页功能,在受损的系统上获得持久性。Outlook主页是用于自定义Outlook文件夹演示文稿的传统功能。此功能允许在打开文件夹时加载和显示内部或外部URL。可以精心制作恶意HTML页面,该页面将在Outlook主页加载时执行代码。一旦将恶意主页添加到用户的邮箱中,就会在启动Outlook时加载这些主页。当加载/重新加载正确的Outlook文件夹时,恶意主页将执行。
预防措施:在Windows 10上,启用减少攻击面(ASR)规则,以防止Office应用程序创建子进程以及将潜在的恶意可执行内容写入磁盘;对于Outlook方法,阻止宏可能无效,因为用于这些功能的Visual Basic引擎与宏脚本引擎是分开的。微软已经发布了修补程序,试图解决每一个问题。确保将阻止Outlook Visual Basic并显示恶意代码警告的KB3191938、默认情况下禁用自定义表单的KB4011091和删除旧主页功能的KB4011162应用于系统。
检测:监视第三方应用程序日志、消息和/或其他可能滥用Microsoft Outlook主页功能在受损系统上获得持久性的工件。SensePost发布了一款检测Ruler使用情况的工具,其工具Ruler可用于实施恶意规则、表单和主页攻击;监视执行的命令和参数,这些命令和参数可能会滥用Microsoft Outlook的主页功能,从而在受损的系统上获得持久性。Microsoft发布了一个PowerShell脚本,用于安全地收集邮件环境中的邮件转发规则和自定义表单,以及解释输出的步骤;监视新执行的进程,这些进程可能会滥用Microsoft Outlook的主页功能,从而在受损的系统上获得持久性。
Outlook规则
介绍:敌人可能会滥用Microsoft Outlook规则在受损系统上获得持久性。Outlook规则允许用户定义管理电子邮件的自动行为。例如,如果电子邮件包含特定发件人的特定单词,则良性规则可能会自动将其移动到Outlook中的特定文件夹。可以创建恶意Outlook规则,当对手向该用户发送特制的电子邮件时,这些规则可以触发代码执行。一旦将恶意规则添加到用户的邮箱中,就会在启动Outlook时加载这些规则。当对手向用户发送特制的电子邮件时,恶意规则将执行。
预防措施:在Windows 10上,启用减少攻击面(ASR)规则,以防止Office应用程序创建子进程以及将潜在的恶意可执行内容写入磁盘;对于Outlook方法,阻止宏可能无效,因为用于这些功能的Visual Basic引擎与宏脚本引擎是分开的。微软已经发布了修补程序,试图解决每一个问题。确保将阻止Outlook Visual Basic并显示恶意代码警告的KB3191938、默认情况下禁用自定义表单的KB4011091和删除旧主页功能的KB4011162应用于系统。
检测:监视第三方应用程序日志记录、消息传递和/或其他可能滥用Microsoft Outlook规则在受损系统上获得持久性的工件。SensePost发布了一款检测Ruler使用情况的工具,其工具Ruler可用于实施恶意规则、表单和主页攻击;监视执行的命令和参数,这些命令和参数可能会滥用Microsoft Outlook规则以在受损系统上获得持久性。Microsoft发布了一个PowerShell脚本,用于安全地收集邮件环境中的邮件转发规则和自定义表单,以及解释输出的步骤。此PowerShell脚本在收集由使用Microsoft Exchange Server消息API编辑器(MAPI编辑器)的对手导致的具有修改的PR_RULE_MSG_NAME和PR_RULE_MSG_PROVIDER属性的规则时无效,因此只有使用Exchange管理工具MFCMapi进行检查才能揭示这些邮件转发规则;监视新执行的进程,这些进程可能会滥用Microsoft Outlook规则以在受损系统上获得持久性。
加载项
介绍:敌人可能会滥用Microsoft Office外接程序在受损系统上获得持久性。Office加载项可用于向Office程序添加功能。各种Office产品可以使用不同类型的加载项;包括Word/Excel加载项库(WLL/XLL)、VBA加载项、Office组件对象模型(COM)加载项、自动化加载项、VBA编辑器(VBE)、Visual Studio Tools for Office(VSTO)加载项和Outlook加载项。外接程序可用于获得持久性,因为它们可以设置为在Office应用程序启动时执行代码。
预防措施:在Windows 10上,启用减少攻击面(ASR)规则,以防止Office应用程序创建子进程以及将潜在的恶意可执行内容写入磁盘。
检测:监视执行的命令和参数,这些命令和参数可能会滥用Microsoft Office加载项以在受损系统上获得持久性;监视新构建的文件,这些文件可能会滥用Microsoft Office加载项以在受损系统上获得持久性;监视对文件所做的更改,这些更改可能会滥用Microsoft Office加载项以在受损系统上获得持久性;监视新执行的进程,这些进程可能会滥用Microsoft Office加载项以在受损系统上获得持久性;审核与启用加载项相关的注册表项;审核与启用加载项相关的注册表项。
15.电源设置
介绍:敌人可能会削弱系统休眠、重新启动或关闭的能力,以扩展对受感染机器的访问。当计算机进入休眠状态时,部分或所有软件和硬件可能停止运行,这可能会破坏恶意活动。敌人可能会滥用系统实用程序和配置设置,通过阻止机器进入可以终止恶意活动的状态(如待机状态)来维持访问。例如,powercfg控制Windows系统上的所有可配置电源系统设置,并可能被滥用以防止受感染的主机锁定或关闭。敌人还可能延长系统锁定屏幕超时设置。其他相关设置,如磁盘和休眠超时,也可能被类似地滥用,以保持受感染的机器运行,即使没有用户处于活动状态。意识到一些恶意软件无法在系统重新启动后存活,对手可能会完全删除用于调用系统关闭或重新启动的文件。
预防措施:定期检查系统是否存在可能表明恶意行为的异常和意外电源设置。
检测:监视和检查与操作系统电源设置相关的命令和参数;监视与系统电源设置相关联的配置文件是否发生意外更改。
16.操作系统前引导
系统固件
介绍:敌人可能会修改系统固件以在系统上持久存在。BIOS(基本输入/输出系统)和统一可扩展固件接口(UEFI)或可扩展固件界面(EFI)是作为计算机的操作系统和硬件之间的软件接口操作的系统固件的示例。BIOS和(U)EFI等系统固件是计算机功能的基础,可以被对手修改以执行或协助恶意活动。存在覆盖系统固件的能力,这可能会给老练的对手提供一种安装恶意固件更新的手段,作为在可能难以检测的系统上保持的手段。
预防措施:检查现有BIOS或EFI的完整性,以确定其是否容易被修改。使用Trusted Platform Module技术。将系统的信任根移到硬件上,以防止篡改SPI闪存。Intel Boot Guard等技术可以帮助实现这一点;防止对手访问特权帐户或执行此技术所需的访问权限;根据需要修补BIOS和EFI。
检测:监视对固件所做的更改。在易受攻击的系统上转储和检查BIOS映像,并与已知的良好映像进行比较。分析差异以确定是否发生了恶意更改。记录读取/写入BIOS的尝试,并与已知的修补行为进行比较。同样,可以收集EFI模块,并将其与已知的EFI可执行二进制文件的干净列表进行比较,以检测潜在的恶意模块。CHIPSEC框架可以用于分析以确定是否已经执行了固件修改。
组件固件
介绍:敌人可能会修改组件固件以在系统上持久存在。一些对手可能会采用复杂的手段来破坏计算机组件,并安装恶意固件,这些固件将在操作系统和主系统固件或BIOS之外执行对手代码。该技术可以类似于系统固件,但在可能不具有相同能力或完整性检查级别的其他系统组件/设备上进行。恶意组件固件可以提供对系统的持久访问,尽管维护访问和硬盘重新映像可能会出现典型故障,也可以提供一种逃避基于主机软件的防御和完整性检查的方法。
预防措施:定期执行固件更新,以降低利用和/或滥用的风险。
检测:监视是否有意外的磁盘分区表条目,或需要更深入调查的异常内存块;监视可能显示恶意固件(如字符串)指示符的更改。还要考虑将组件(包括组件固件和行为的散列)与已知的良好映像进行比较;监视与设备驱动程序的使用相关联的API调用和/或由SMART(Self-Monitoring,Analysis and Reporting Technology)磁盘监视提供的调用可能会发现对组件的恶意操作。否则,这种技术可能难以检测,因为恶意活动可能发生在操作系统安全性和完整性机制范围之外的系统组件上。
Bootkit
介绍:敌人可能会使用bootkit在系统上持久存在。Bootkit位于操作系统下面的一层,可能会使执行完全修复变得困难,除非组织怀疑使用了Bootkit并可以采取相应行动。bootkit是一种恶意软件变体,用于修改硬盘驱动器的引导扇区,包括主引导记录(MBR)和卷引导记录(VBR)。MBR是BIOS完成硬件初始化后首先加载的磁盘部分。它是引导加载程序的位置。对引导驱动器具有原始访问权限的对手可能会覆盖此区域,从而在启动期间将执行从正常引导加载程序转移到对手代码。MBR将引导过程的控制权传递给VBR。与MBR的情况类似,对引导驱动器具有原始访问权限的对手可能会覆盖VBR,以在启动期间将执行转移到对手代码。
预防措施:使用受信任的平台模块技术和安全或受信任的引导过程来防止系统完整性受到损害;确保适当的权限到位,以帮助防止对手访问安装bootkit所需的特权帐户。
检测:监测MBR和VBR的变化,以确定可疑活动的指标和进一步分析。拍摄MBR和VBR的快照,并与已知的良好样本进行比较。
ROMMONkit
介绍:对手可能会通过加载带有对手代码的未经授权的固件来滥用ROM监视器(ROMMON),以提供持久访问并操纵难以检测的设备行为。ROMMON是一种Cisco网络设备固件,可作为引导加载程序、引导映像或引导助手,在平台通电或重置时初始化硬件和软件。与TFTP引导类似,对手可以使用对手代码本地或远程(例如,通过TFTP)升级ROMMON映像,并重新启动设备,以覆盖现有的ROMMON映象。这为对手提供了更新ROMMON的手段,从而以可能难以检测的方式在系统上获得持久性。
预防措施:定期检查系统映像的完整性,以确保其未被修改;启用安全引导功能,使用专用硬件设备验证引导环境和系统映像的数字签名。如果验证检查失败,设备将无法启动,从而防止加载未经授权的软件;使用网络签名来识别特定协议(如TFTP)的流量的网络入侵检测和预防系统可用于减轻网络级别的活动。签名通常用于协议中的唯一指示符,并且可能基于特定对手或工具使用的特定技术,并且可能在各种网络配置中有所不同。
检测:在供应商支持之外,维权者没有证明ROMMON运行的手段。如果怀疑网络设备被泄露,请联系供应商以协助进一步调查。
TFTP引导
介绍:敌人可能会滥用网络引导从琐碎的文件传输协议(TFTP)服务器加载未经授权的网络设备操作系统。TFTP引导(netbooting)通常由网络管理员用于从集中式管理服务器加载配置控制的网络设备映像。Netbooting是引导序列中的一个选项,可用于集中、管理和控制设备映像。敌人可以操纵网络设备上的配置,指定使用恶意TFTP服务器,该服务器可以与“修改系统映像”一起使用,以便在设备启动或重置时加载修改后的映像。未经授权的图像允许对手修改设备配置,向设备添加恶意功能,并引入后门以保持对网络设备的控制,同时通过使用标准功能最大限度地减少检测。该技术类似于ROMMONkit,可能导致网络设备运行修改后的映像。
预防措施:定期检查正在运行的配置和系统映像的完整性,以确保它们没有被修改;启用安全引导功能,使用专用硬件设备验证引导环境和系统映像的数字签名。如果验证检查失败,设备将无法启动,从而防止加载未经授权的软件;限制使用没有加密或身份验证机制的协议。限制不受信任的网络源对管理和管理接口的访问;使用网络签名来识别特定协议(如TFTP)的流量的网络入侵检测和预防系统可用于减轻网络级别的活动。签名通常用于协议中的唯一指示符,并且可能基于特定对手或工具使用的特定技术,并且可能在各种网络配置中有所不同;遵循供应商设备强化的最佳实践,禁用不必要和未使用的功能和服务,避免使用默认配置和密码,并引入日志记录和检测审核;使用身份验证、授权和记帐(AAA)系统将限制管理员可以执行的操作,并提供用户操作的历史记录,以检测未经授权的使用和滥用。TACACS+可以通过身份验证和命令授权的配置来控制管理员可以使用哪些命令。
检测:监视控制台中或作为运行内存一部分的命令历史记录中执行的命令和参数,以确定是否使用了未经授权或可疑的命令来修改设备配置;监视启动信息的更改,包括系统正常运行时间、映像启动和启动配置,以确定结果是否与环境中的预期行为一致。监视可能专门针对TFTP或其他文件共享协议的设备的异常连接或连接尝试;根据已知的良好版本监控新构建的网络设备配置和系统映像,以发现对系统引导、启动配置或运行的操作系统的未经授权的更改。同样的过程可以通过比较运行时内存来完成,尽管这不是小事,可能需要供应商的帮助。
17.计划任务/作业
同4.8 节
18.服务器软件组件
SQL存储过程
介绍:敌人可能会滥用SQL存储过程来建立对系统的持久访问。SQL存储过程是可以保存和重用的代码,这样数据库用户就不会浪费时间重写频繁使用的SQL查询。存储过程可以通过SQL语句使用过程名称或通过定义的事件(例如,当SQL服务器应用程序启动/重新启动时)调用到数据库。对手可能会精心设计恶意存储过程,从而在SQL数据库服务器中提供持久性机制。要通过SQL语法执行操作系统命令,对手可能必须启用其他功能,例如MSSQL Server的xp_cmdshell。Microsoft SQL Server可以启用公共语言运行时(CLR)集成。启用CLR集成后,应用程序开发人员可以使用任何方法编写存储过程。NET框架语言(如VB.NET、C#等)。对手可以创建或修改链接到存储过程的CLR程序集,因为这些CLR程序集可以用来执行任意命令。
预防措施:定期检查对手可能针对的关键服务上的组件软件是否持久,以验证系统的完整性,并确定是否发生了意外更改;确保所有应用程序组件二进制文件都由正确的应用程序开发人员签名;不允许有权在这些服务上添加组件软件的管理员帐户用于日常操作,因为这些操作可能会使他们暴露在非特权系统上的潜在对手面前。
检测:监视第三方应用程序日志记录、消息传递和/或其他可能滥用SQL存储过程来建立对系统的持久访问的工件。在MSSQL Server上,请考虑监视xp_cmdshell的使用情况。考虑启用可以记录恶意启动活动的审核功能。
运输代理
介绍:敌人可能会滥用Microsoft传输代理来建立对系统的持久访问。Microsoft Exchange传输代理可以对通过传输管道的电子邮件进行操作,以执行各种任务,如过滤垃圾邮件、过滤恶意附件、记录日志或在所有传出电子邮件的末尾添加公司签名。传输代理可以由应用程序开发人员编写,然后编译到。随后向Exchange服务器注册的.NET程序集。传输代理将在电子邮件处理的指定阶段调用,并执行开发人员定义的任务。对手可能会注册恶意传输代理,以在Exchange Server中提供持久性机制,该机制可由对手指定的电子邮件事件触发。尽管通过Exchange传输管道的所有电子邮件都可能调用恶意传输代理,但可以将该代理配置为仅执行特定任务以响应对手定义的标准。例如,如果收件人的电子邮件地址与对手提供的列表中的条目相匹配,则传输代理只能执行复制传输中的附件并将其保存以供日后进行过滤等操作。
预防措施:定期检查对手可能针对的关键服务上的组件软件是否持久,以验证系统的完整性,并确定是否发生了意外更改;确保所有应用程序组件二进制文件都由正确的应用程序开发人员签名;不允许有权在这些服务上添加组件软件的管理员帐户用于日常操作,因为这些操作可能会使他们暴露在非特权系统上的潜在对手面前。
检测:监视第三方应用程序日志记录、消息传递和/或其他可能滥用Microsoft传输代理来建立对系统的持久访问的工件。考虑监视应用程序日志中的异常行为,这些异常行为可能表明应用程序软件组件安装可疑;考虑监视与新应用程序软件组件的安装相关联的文件位置,例如应用程序通常从中加载此类可扩展组件的路径。
Webshell
介绍:敌人可能会利用网络shell对网络服务器进行后门操作,以建立对系统的持久访问。Web shell是放置在可公开访问的Web服务器上的Web脚本,允许对手将Web服务器作为网络网关进行访问。Web shell可以提供一组要执行的功能,也可以在承载Web服务器的系统上提供命令行界面。除了服务器端脚本外,Webshell还可以具有用于与Web服务器(例如China Chopper Webshell客户端)对话的客户端接口程序。
预防措施:考虑禁用web技术中的函数,例如PHP的evaI()
,这些函数可能会被滥用于web shell;通过限制用户帐户的权限,使只有授权帐户才能修改web目录,从而执行最小权限原则。
检测:监控第三方应用程序日志记录、消息传递和/或其他工件,这些工件可能会使用webshell后门web服务器以建立对系统的持久访问。记录对服务器的身份验证尝试以及进出服务器和内部网络的任何异常流量模式;文件监视可以用于检测对Web服务器的Web目录中的文件的改变,这些改变与对Web服务器内容的更新不匹配并且可以指示Webshell脚本的植入;监视对文件所做的更改,这些更改可能会使用webshell对web服务器进行后门操作,以建立对系统的持久访问;监控和分析与不遵循预期协议标准和流量的协议相关的流量模式和数据包检查(例如,不属于已建立流量的无关数据包、无端或异常流量模式、异常语法或结构)。考虑与进程监控和命令行的相关性,以检测异常进程执行和与流量模式相关的命令行参数(例如,监控使用文件时的异常情况,这些文件通常不会启动相应协议的连接);监控网络数据中不常见的数据流。使用网络的进程通常不具有网络通信或以前从未见过,这些进程是可疑的;Webshell可能很难检测到。与其他形式的持久远程访问不同,它们不启动连接。Webshell在服务器上的部分可能很小,看起来无害。例如,ChinaChopperWebshell的PHP版本与以下短负载非常相似:<?php @evaI($_P0ST['password']);>
;然而,检测机制是存在的。进程监视可用于检测执行可疑操作的Web服务器,例如生成cmd.exe或访问不在Web目录中的文件;网络shell是放置在可公开访问的网络服务器上的网络脚本,允许对手将服务器用作网络中的网关。当shell运行时,命令将从网络应用程序内部发布到更广泛的服务器操作系统中。此分析查找由任何通常不会在该环境中执行的web服务启动的主机枚举可执行文件;分析1-Webshell指示性过程:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") (ParentImage="C:\Windows\System32\*w3wp.exe" OR ParentImage="*httpd.exe" OR ParentImage="*tomcat*.exe" OR ParentImage="*nginx.exe")(Image="C:\Windows\System32\cmd.exe OR Image="C:\Windows\SysWOW64\cmd.exe" OR Image="C:\Windows\System32\*\powershell.exe OR Image="C:\Windows\SysWOW64\*\powershell.exe OR Image="C:\Windows\System32\net.exe" OR Image="C:\Windows\System32\hostname.exe" OR Image="C:\Windows\System32\whoami.exe" OR Image="*systeminfo.exe OR Image="C:\Windows\System32\ipconfig.exe")
IIS组件
介绍:敌人可能会安装运行在Internet信息服务(IIS)web服务器上的恶意组件,以建立持久性。IIS提供了几种机制来扩展web服务器的功能。例如,可以安装Internet服务器应用程序编程接口(ISAPI)扩展和筛选器来检查和/或修改传入和传出的IIS web请求。扩展和筛选器部署为DLL文件,导出三个函数:Get{Extension/Filter}Version
、Http{Extension/Folder}Proc
和(可选)Terminate{Extension/Ffilter}
。还可以安装IIS模块来扩展IIS web服务器。敌人可能会安装恶意ISAPI扩展和过滤器,以观察和/或修改流量,在受损机器上执行命令,或代理命令和控制流量。ISAPI扩展和筛选器可以访问所有IIS web请求和响应。例如,对手可能会滥用这些机制来修改HTTP响应,以便将恶意命令/内容分发到先前包含的主机。敌人还可能安装恶意IIS模块来观察和/或修改流量。IIS 7.0引入的模块提供了与ISAPI扩展和筛选器相同的对HTTP请求和响应的无限制访问。IIS模块可以写成导出RegisterModule的DLL,也可以写成。NET应用程序,与ASP。NET API来访问IIS HTTP请求。
预防措施:定期检查已安装的IIS组件,以验证web服务器的完整性,并确定是否进行了意外更改;确保IIS DLL和二进制文件由正确的应用程序开发人员签名;通过指定可以在IIS上运行的ISAPI扩展和筛选器的列表,限制不允许的ISAPI延伸和筛选器运行;不允许具有添加IIS组件权限的管理员帐户用于可能将这些权限暴露给潜在对手和/或其他无特权系统的日常操作。
检测:监视AppCmd.exe的执行和命令行参数,这些参数可能被滥用以安装恶意IIS模块;监视是否创建了可能被滥用为恶意ISAPI扩展/筛选器或IIS模块的文件(尤其是Web服务器上的DLL);监视是否修改了可能被滥用为恶意ISAPI扩展/筛选器或IIS模块的文件(尤其是Web服务器上的DLL)。对%windir%\system32\inetsrv\config\applicationhost.config
的更改可能指示IIS模块已安装。
终端服务DLL
介绍:敌人可能会滥用终端服务的组件来实现对系统的持久访问。自2022年起,在一些Windows Server操作系统中,Microsoft终端服务更名为远程桌面服务,可实现与主机的远程终端连接。终端服务允许服务器通过RDP向客户端传输完整的交互式图形用户界面。作为“通用”进程(例如:svchost.exe)运行的Windows服务加载服务的DLL文件,该文件的位置存储在名为ServiceDll的注册表项中。termsrv.dll文件通常存储在%SystemRoot%\System32\中,是HKLM\System\CurrentControlSet\Services\TermService\Parameters\中终端服务的默认ServiceDll值。攻击者可以修改和/或替换终端服务DLL,以实现对受害主机的持久访问。可以对该DLL进行修改以执行任意有效载荷(同时还可能保留正常的termsrv.DLL功能),以及简单地启用终端服务的可利用功能。例如,对手可以通过修补termsrv.dll文件或修改ServiceDll值以指向提供增强的RDP功能的dll来启用诸如并发远程桌面协议会话之类的功能。在非服务器Windows操作系统上,这种增加的功能还可以使对手避免在创建新的RDP会话时警告/注销系统用户的终端服务提示。
预防措施:定期检查对手可能针对的关键服务上的组件软件是否持久,以验证系统的完整性,并确定是否发生了意外更改;请考虑使用组策略来配置和阻止对注册表中终端服务参数的修改。
检测:监视执行的命令和参数,以了解潜在的对手操作,从而修改注册表值(例如:reg.exe)或修改/替换合法的termsrv.dll;监视与termsrv.dll的意外更改和/或交互,termsrv..dll通常存储在%SystemRoot%\System32\
中;监控终端服务进程(例如:svchost.exe-k termsvcs)加载的模块是否有意外的dll(默认值为%SystemRoot%\System32\termsrv.dll,尽管对手也可以使用匹配合法名称或位置来潜在地隐藏恶意负载);使用参数监视进程,这些参数可能会突出显示对手修改注册表值(例如:reg.exe)或修改/替换合法termsrv.dll的操作;监视与ServiceDll相关联的注册表项以及HKLM\System\CurrentControlSet\services\TermService\Parameters\下的其他子项值的更改。
19.交通信号
端口敲击
介绍:敌人可以使用端口敲门来隐藏用于持久性或命令和控制的开放端口。为了启用一个端口,对手向预定义的关闭端口序列发送一系列尝试连接。序列完成后,打开端口通常由基于主机的防火墙完成,但也可以由自定义软件实现。对于监听端口的动态打开以及到不同系统上的监听服务器的连接的启动,已经观察到了这种技术。可以通过不同的方法来进行对信号分组的观察以触发通信。最初由Cd00r实现的一种方法是使用libpcap库来探查有问题的数据包。另一种方法利用原始套接字,使恶意软件能够使用已经打开供其他程序使用的端口。
预防措施:根据该技术的实现方式,可以通过使用有状态防火墙来实现对该技术某些变体的缓解。
检测:监视由不受信任的主机发送或接收的新构建的网络连接;监控和分析与不遵循预期协议标准的协议相关联的网络流和流量(例如,不属于已建立流量的无关数据包,或无偿或异常流量模式)。考虑分析由不受信任的主机、未反应的硬件设备或其他不常见的数据流发送或接收的新构建的网络连接。
套接字筛选器
介绍:敌人可以将过滤器连接到网络套接字以进行监视,然后激活用于持久性或命令和控制的后门。通过提升权限,对手可以使用libpcap库等功能打开套接字并安装过滤器,以允许或禁止某些类型的数据通过套接字。过滤器可以应用于通过指定网络接口(或者如果未指定,则应用于每个接口)的所有流量。当网络接口接收到与过滤标准匹配的数据包时,可以在主机上触发其他操作,例如激活反向shell。为了建立连接,对手向目标主机发送一个特制的数据包,该数据包与安装的过滤器标准相匹配。对手使用这些套接字过滤器来触发植入物的安装、进行ping back和调用命令shell。与这些套接字过滤器的通信也可以与协议隧道一起使用。过滤器可以安装在任何安装了libpcap的类Unix平台上,也可以安装在使用Winpcap的Windows主机上。对手可以使用带有pcap_setfilter的libpcap,也可以使用带有SO_ATTACH_FILTER选项的标准库函数setsockopt。由于套接字连接在接收到数据包之前是不活动的,因此由于主机上缺乏活动、CPU开销低以及对原始套接字使用的可见性有限,这种行为可能难以检测。
预防措施:根据该技术的实现方式,可以通过使用有状态防火墙来实现对该技术某些变体的缓解。
检测:监视最近启动的创建原始套接字连接的应用程序;识别具有原始套接字的正在运行的进程。确保列出的流程需要一个开放的原始套接字,并且符合企业策略。
20.有效帐户
默认帐户
介绍:敌人可能会获取并滥用默认帐户的凭据,以此作为获得初始访问、持久性、特权提升或防御规避的手段。默认帐户是内置在操作系统中的帐户,例如Windows系统上的Guest或Administrator帐户。默认帐户还包括其他类型的系统、软件或设备上的默认工厂/提供商设置帐户,包括AWS中的根用户帐户和Kubernetes中的默认服务帐户。默认帐户不仅限于客户端计算机,还包括为网络设备和计算机应用程序等设备预设的帐户,无论这些设备是内部的、开源的还是商业的。预设有用户名和密码组合的设备对安装后不更改的组织构成了严重威胁,因为它们很容易成为对手的目标。类似地,对手也可能利用公开披露或被盗的私钥或凭证材料,通过远程服务合法连接到远程环境。
预防措施:使用默认用户名和密码的应用程序和设备应在安装后以及部署到生产环境之前立即进行更改。
检测:监视已激活或登录的默认帐户中新建的登录行为。这些审核还应包括检查任何设备和应用程序的默认凭据或SSH密钥,如果发现任何凭据或SSH密匙,应立即更新;监视用户访问网络或计算资源的尝试,通常是通过提供凭据
域帐户
介绍:对手可能会获取并滥用域帐户的凭据,作为获得初始访问、持久性、特权升级或防御规避的手段。域帐户是由Active Directory域服务管理的帐户,其中访问和权限是在属于该域的系统和服务之间配置的。域帐户可以覆盖用户、管理员和服务。对手可能会通过各种方式(如操作系统凭据转储或密码重用)危害域帐户,其中一些帐户具有较高的权限,从而允许访问域的特权资源。
预防措施:将多因素身份验证(MFA)作为组织策略的一部分进行集成,可以大大降低对手获得有效证书控制权的风险,这些证书可用于其他策略,如初始访问、横向移动和收集信息。MFA还可以用于限制对云资源和API的访问;定期审核域帐户权限级别,以查找可能允许对手通过获取特权帐户的凭据获得广泛访问权限的情况。不要将用户或管理域帐户放在跨系统的本地管理员组中,除非它们受到严格控制,并且帐户的使用是分段的,因为这通常相当于在所有系统上都有一个具有相同密码的本地管理员帐户。遵循企业网络设计和管理的最佳实践,以限制跨管理层的特权帐户使用。限制系统之间的凭据重叠,以防止在获得帐户凭据时进行访问;应用程序可以发送推送通知以验证作为多因素身份验证(MFA)形式的登录。培训用户只接受有效的推送通知并报告可疑的推送消息。
检测:监控共享帐户(用户、管理员或服务帐户)的系统中的可疑帐户行为。示例:一个帐户同时登录多个系统;多个帐户同时登录到同一台机器;在奇数时间或非营业时间登录的帐户。活动可以来自交互式登录会话,也可以来自作为特定帐户在远程系统上执行二进制文件的帐户的进程所有权;通过远程桌面协议的远程桌面登录可能是系统管理员或IT支持的典型登录,但只能从选定的工作站进行。监控远程桌面登录并与已知/批准的始发系统进行比较,可以检测对手的横向移动;在我们观察到的网络中,通常不会出现多个用户同时、甚至在同一小时内登录到一台机器的情况。登录事件对于Windows Vista及更高版本为Windows事件代码4624,对于Vista之前版本为518。对于Windows Vista及以上版本,注销事件为4634,对于Vista之前版本为538。登录类型2、3、9和10令人感兴趣。有关详细信息,请参阅Microsoft的“审核登录事件”页面上的“登录类型”表;分析1-远程桌面登录:(source="*WinEventLog:Security" EventCode="4624") AuthenticationPackageName= "Negotiate" AND Severity= "Information" AND logon_type= "10"
;将其他安全系统与登录信息关联起来(例如,用户有活动登录会话,但尚未进入大楼或没有VPN访问权限);监视用户访问网络或计算资源的尝试,通常通过使用域身份验证服务,如Linux上的系统安全服务守护程序(sssd);笔记
本地帐户
介绍:敌人可能会获取并滥用本地帐户的凭据,以此作为获得初始访问、持久性、特权升级或防御规避的手段。本地帐户是指组织为用户、远程支持、服务或在单个系统或服务上进行管理而配置的帐户。本地帐户也可能被滥用,通过操作系统凭据转储来提升权限和获取凭据。密码重用可能允许在网络上的一组机器上滥用本地帐户,以实现特权升级和横向移动的目的。
预防措施:确保本地管理员帐户在网络上的所有系统中都具有复杂、唯一的密码;定期审核本地帐户的权限级别,以寻找可能允许对手通过获取特权帐户的凭据获得广泛访问权限的情况。限制将本地管理员帐户用于可能使其暴露于潜在对手的日常操作;例如,审核Kubernetes中服务帐户的使用情况,如果不需要,避免自动授予他们访问Kubernetesneneneba API的权限。实现LAPS还可以帮助防止跨域重复使用本地管理员凭据。
检测:监控共享帐户(用户、管理员或服务帐户)的系统中的可疑帐户行为。示例:一个帐户同时登录多个系统;多个帐户同时登录到同一台机器;在奇数时间或非营业时间登录的帐户。活动可以来自交互式登录会话,也可以来自作为特定帐户在远程系统上执行二进制文件的帐户的进程所有权;通过远程桌面协议的远程桌面登录可能是系统管理员或IT支持的典型登录,但只能从选定的工作站进行。监控远程桌面登录并与已知/批准的始发系统进行比较,可以检测对手的横向移动;在我们观察到的网络中,通常不会出现多个用户同时、甚至在同一小时内登录到一台机器的情况。登录事件对于Windows Vista及更高版本为Windows事件代码4624,对于Vista之前版本为518。对于Windows Vista及以上版本,注销事件为4634,对于Vista之前版本为538。登录类型2、3、9和10令人感兴趣。有关详细信息,请参阅Microsoft的“审核登录事件”页面上的“登录类型”表;分析1-远程桌面登录:(source="*WinEventLog:Security" EventCode="4624") AuthenticationPackageName= "Negotiate" AND Severity= "Information" AND logon_type= "10"
;将其他安全系统与登录信息关联起来(例如,用户有活动登录会话,但尚未进入大楼或没有VPN访问权限);监视用户访问网络或计算资源的尝试,通常通过使用域身份验证服务,如Linux上的系统安全服务守护程序(sssd);注意:对于Linux,审计守护进程(audited)等审计框架可用于警告跟踪身份验证尝试的日志文件的更改,包括/var/log/secure
。
云帐户
介绍:云环境中的有效帐户可能允许对手执行操作以实现初始访问、持久性、特权提升或防御规避。云帐户是指由组织创建和配置的帐户,供用户使用、远程支持、服务,或用于管理云服务提供商或SaaS应用程序中的资源。云帐户可以单独存在于云中;或者,它们可以通过与其他身份源(如Windows Active Directory)同步或联合,在本地系统和云之间混合连接。服务或用户帐户可能会被对手通过暴力、网络钓鱼或各种其他方式锁定,以访问环境。联合或同步帐户可能是对手影响本地系统和云环境的途径,例如,通过利用共享凭据登录远程服务。高特权云帐户,无论是联合的、同步的还是仅限云的,也可以通过利用基于SaaS的软件部署工具在混合连接的设备上运行命令来允许转向本地环境。对手可能会在受损的云帐户上创建持久的附加云凭据,以保持在环境中的持久性。这样的证书也可以用于绕过诸如多因素身份验证之类的安全控制。云帐户还可以通过环境中的各种方式获得临时提升云访问或其他特权。角色分配或角色承担策略中的错误配置可能会允许对手使用这些机制来利用帐户预期范围之外的权限。此类超权限帐户可用于通过云API或其他方法从在线存储帐户和数据库中获取敏感数据。
预防措施:使用条件访问策略阻止来自不兼容设备或来自定义的组织IP范围之外的登录;禁用不支持MFA的传统身份验证,并要求使用现代身份验证协议;对云帐户,特别是特权帐户使用多因素身份验证。这可以以各种形式(例如硬件、虚拟、SMS)实现,也可以使用管理报告功能进行审计;确保云帐户,特别是特权帐户,在网络上的所有系统中都有复杂、唯一的密码。密码和访问密钥应定期轮换。如果凭据在您不知情的情况下被泄露,这将限制凭据可用于访问资源的时间。云服务提供商可以跟踪访问密钥的使用年限,以帮助审计和识别可能需要轮换的密钥;定期审查特权云帐户权限级别,以查找那些可能允许对手获得广泛访问权限的级别,如Azure AD中的全局管理员和特权角色管理员。这些审查还应检查是否创建了未经授权的新特权云帐户。例如,在Azure AD环境中,配置警报以通知帐户在没有使用特权角色的情况下已离开多天,因为这些角色可能会被删除。考虑使用对Azure AD资源的临时实时(JIT)特权访问,而不是永久分配特权角色;定期检查用户帐户,并删除那些不活动或不必要的帐户。限制用户帐户创建其他帐户的能力;应用程序可以发送推送通知以验证作为多因素身份验证(MFA)形式的登录。培训用户只接受有效的推送通知并报告可疑的推送消息。
检测:监控共享帐户的云服务中的可疑帐户行为;将其他安全系统与登录信息关联起来(例如,用户有活动登录会话,但尚未进入大楼或没有VPN访问权限);监控云帐户的活动,以检测异常或恶意行为,例如访问帐户正常功能之外的信息、在非正常时间使用帐户或从意外位置或IP地址进行帐户身份验证。服务帐户只能从云环境中的IP地址访问。例如,在Azure AD环境中,考虑使用身份保护根据位置、设备合规性和其他因素标记有风险的登录。在Okta环境中,配置可疑活动报告以允许用户报告他们不识别的可疑登录和其他行为。
六、特权升级
1.滥用高程控制机制
Setuid和Setgid
介绍:对手可能会滥用应用程序设置了setuid或setgid位的配置,以便让代码在不同(可能更有特权)的用户上下文中运行。在Linux或macOS上,当为应用程序二进制文件设置setuid或setgid位时,应用程序将分别以拥有用户或组的权限运行。通常,应用程序是在当前用户的上下文中运行的,而不管哪个用户或组拥有该应用程序。然而,在某些情况下,程序需要在提升的上下文中执行才能正常运行,但运行这些程序的用户可能没有特定的所需权限。任何用户都可以指定要为自己的应用程序设置的setuid或setgid标志(即Linux和Mac文件和目录权限修改),而不是在sudoers文件中创建条目(这必须由root用户完成)。chmod命令可以使用位掩码、chmod 4777 [file]
或通过简写命名、chmod u+s [file]
来设置这些位。这将启用setuid位。要启用setgid位,可以使用chmod 2775
和chmod g+s
。敌人可以在自己的恶意软件上使用这种机制,以确保他们将来能够在高级环境中执行。这种滥用通常是“shell转义”或其他绕过具有受限权限的执行环境的操作的一部分。或者,对手可以选择在已启用setuid或setgid位(即文件和目录发现)的情况下查找和锁定易受攻击的二进制文件。当通过ls -l
查看文件的属性时,setuid和setguid位用“s”而不是“x”表示。find
命令也可用于搜索此类文件。例如,find / -perm +4000 2>/dev/null
可用于查找设置了setuid的文件,find / -perm +2000 2>/dev/null
可用于setgid。设置了这些比特的二进制文件可能会被对手滥用。
预防措施:具有已知漏洞或已知shell转义的应用程序不应设置setuid或setgid位,以减少应用程序受损时的潜在损坏。此外,在整个系统中,应尽量减少设置了setuid或setgid位的程序数量。
检测:监视实用程序(如chmod)及其命令行参数的执行情况,以查找正在设置的setuid或setguid位;监视文件系统中是否有设置了setuid或setgid位的文件;使用setuid或setgid位监视对文件所做的更改,这些更改可能会执行shell转义或利用应用程序中的漏洞来获取在不同用户上下文中运行的代码。
绕过用户帐户控制
介绍:敌人可以绕过UAC机制来提升系统上的进程权限。Windows用户帐户控制(UAC)允许程序提升其权限(按从低到高的完整性级别进行跟踪),以便在管理员级别的权限下执行任务,可能需要提示用户进行确认。对用户的影响包括在高度强制的情况下拒绝操作,如果用户在本地管理员组中并单击提示,则允许用户执行操作,或者允许用户输入管理员密码以完成操作。如果计算机的UAC保护级别设置为最高级别以外的任何级别,则某些Windows程序可以提升权限或执行某些提升的组件对象模型对象,而无需通过UAC通知框提示用户。例如,使用Rundll32加载特制的DLL,该DLL加载自动提升的组件对象模型对象,并在通常需要提升访问权限的受保护目录中执行文件操作。恶意软件也可以被注入可信进程,以在不提示用户的情况下获得提升的权限。已经发现了许多绕过UAC的方法。UACME的Github自述页面包含一个广泛的已发现和实现的方法列表,但可能不是一个全面的旁路列表。会定期发现其他绕过方法,有些方法在野外使用,例如:eventvwr.exe可以自动提升并执行指定的二进制文件或脚本。如果具有管理员权限的帐户的凭据是已知的,则可以通过一些横向移动技术进行另一种绕过,因为UAC是一种单一的系统安全机制,并且在一个系统上运行的进程的权限或完整性在远程系统上是未知的,并且默认为高完整性。
预防措施:检查Windows系统上常见的UAC旁路弱点,以了解风险状况并在适当的情况下解决问题;从系统上的本地管理员组中删除用户;考虑将Windows更新到最新版本和修补程序级别,以利用针对UAC绕过的最新保护措施;尽管存在无人机绕过技术,但在可能的情况下,仍应谨慎地对无人机使用最高执行级别,并减少DLL搜索顺序劫持等技术存在的绕过机会。
检测:监视执行的命令和参数,这些命令和参数可能绕过UAC机制来提升系统上的进程权限;监视新执行的进程,如eventvwr.exe和sdclt.exe,这些进程可能绕过UAC机制来提升系统上的进程权限;威胁参与者通常在破坏机器后,试图禁用用户访问控制(UAC)以提升权限。这通常是通过使用“reg.exe”更改系统策略的注册表项来完成的,reg.exe是Microsoft提供的一种合法工具,用于通过命令提示符或脚本修改注册表。此操作会干扰UAC,并可能使威胁参与者能够提升对受损系统的权限,从而允许进一步利用该系统;分析1-UAC旁路:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") IntegrityLevel=High|search (ParentCommandLine="\"c:\windows\system32\dism.exe\"*""*.xml" AND Image!="c:\users\*\appdata\local\temp\*\dismhost.exe") OR ParentImage=c:\windows\system32\fodhelper.exe OR (CommandLine="\"c:\windows\system32\wusa.exe\"*/quiet*" AND User!=NOT_TRANSLATED AND CurrentDirectory=c:\windows\system32\ AND ParentImage!=c:\windows\explorer.exe) OR CommandLine="*.exe\"*cleanmgr.exe /autoclean*" OR (ParentImage="c:\windows\*dccw.exe" AND Image!="c:\windows\system32\cttune.exe") OR Image="c:\program files\windows media player\osk.exe" OR ParentImage="c:\windows\system32\slui.exe"|eval PossibleTechniques=case(like(lower(ParentCommandLine),"%c:\windows\system32\dism.exe%"), "UACME #23", like(lower(Image),"c:\program files\windows media player\osk.exe"), "UACME #32", like(lower(ParentImage),"c:\windows\system32\fodhelper.exe"), "UACME #33", like(lower(CommandLine),"%.exe\"%cleanmgr.exe /autoclean%"), "UACME #34", like(lower(Image),"c:\windows\system32\wusa.exe"), "UACME #36", like(lower(ParentImage),"c:\windows\%dccw.exe"), "UACME #37", like(lower(ParentImage),"c:\windows\system32\slui.exe"), "UACME #45")
;分析2-禁用UAC:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") ParentImage="C:\Windows\System32\cmd.exe" CommandLine="reg.exe*HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System*REG_DWORD /d 0*""
;监视有关正在运行的进程的上下文数据,这些数据可能包括环境变量、映像名称、用户/所有者等信息,这些信息可能绕过UAC机制来提升系统上的进程权限;一些UAC绕过方法依赖于修改特定的、用户可访问的注册表设置。例如:eventvwr.exe
旁路使用[HKEYCURRENT_USER]\Software\Classes\mscfile\shell\open\command
注册表项。sdclt.exe
旁路使用[HHKEY_CURRENT_SER]\Software\Microsoft\Windows\CurrentVersion\App Paths\control.exe
和[HKEYCURrenT_USER]\ Software\Classes\\exefile\shell\runas\command\sisolatedCommand
注册表项。分析人员应监控这些注册表设置是否存在未经授权的更改;UAC旁路是一种有趣的技术,因为新的实现会定期找到,而现有的实现可能会被微软在新的Windows版本中修复(即打补丁)。因此,重要的是要验证UAC旁路的检测是否仍然相关(即,它们针对的是未修补的实现);注:Sysmon事件ID 12(注册表项创建/删除)、Sysmon事件ID13(注册表值集)和Sysmon事件ID:14(注册表项和值重命名)可用于在UAC旁路的上下文中创建注册表项修改的检测。
Sudo和Sudo缓存
介绍:敌人可以执行sudo缓存和/或使用sudoers文件来提升权限。敌人可能会这样做,以作为其他用户执行命令,或产生具有更高权限的进程。在Linux和MacOS系统中,sudo(有时被称为“超级用户do”)允许用户从具有提升权限的终端执行命令,并控制谁可以在系统上执行这些命令。sudo命令“允许系统管理员授权某些用户(或用户组)以root用户或其他用户的身份运行某些(或所有)命令,同时提供命令及其参数的审计跟踪。”由于sudo是为系统管理员设计的,因此它具有一些有用的配置功能,如时间戳超时,即sudo实例之间重新提示输入密码之前的时间(以分钟为单位)。这是因为sudo能够在一段时间内缓存凭据。Sudo在/var/db/Sudo创建(或触摸)一个文件,文件的时间戳为Sudo上次运行的时间,以确定此超时。此外,还有一个tty_tickets变量,用于隔离处理每个新的tty(终端会话)。这意味着,例如,一个tty的sudo超时不会影响另一个tti(您将不得不再次键入密码)。sudoers文件/etc/sudoers描述了哪些用户可以运行哪些命令以及从哪些终端运行命令。这还描述了用户可以作为其他用户或组运行哪些命令。这提供了最小权限的原则,使得用户在大多数时间都以尽可能低的权限运行,并且仅根据需要提升到其他用户或权限,通常通过提示输入密码。但是,sudoers文件也可以指定何时不使用user1 ALL=(ALL)NOPASSWD: ALL
这样的行提示用户输入密码。但是,编辑此文件需要提升的权限。敌人还可以滥用这些机制的糟糕配置,在不需要用户密码的情况下升级权限。例如,可以监视/var/db/sudo
的时间戳,看看它是否在timestamp_timeout
范围内。如果是这样,那么恶意软件就可以执行sudo命令,而无需提供用户的密码。此外,如果禁用了tty_tickets,对手可以从该用户的任何tty执行此操作。在野外,恶意软件已经禁用了tty_tickets,通过发出echo \'Defaults !tty_tickets\' >> /etc/sudoers
。为了让这一变化得以体现,该恶意软件还发布了killall终端。从macOS Sierra开始,sudoers文件默认启用tty_tickets。
预防措施:确保启用tty_tickets设置将防止这种跨tty会话的泄漏;通过要求密码,即使对手可以获得终端访问权限,他们也必须知道密码才能运行sudoers文件中的任何内容。将timestamp_timeout设置为0将要求用户在每次执行sudo时输入密码;应该严格编辑sudoers文件,以便始终需要密码,并且用户不能作为具有更高权限的用户生成有风险的进程。
检测:监视可能执行sudo缓存和/或使用suoders文件提升权限的已执行命令和参数,例如sudo命令;在Linux上,每当用户的实际ID和有效ID不同时,audited都会发出警报(这就是sudo时发生的情况)。这种技术滥用了macOS和Linux系统中的正常功能,但sudo能够根据/etc/sudoers
文件中的log_input
和log_output
指令记录所有输入和输出;监视可能执行sudo缓存和/或使用suoders文件提升权限的新执行进程;监视有关正在运行的进程的上下文数据,这些数据可能包括环境变量、映像名称、可能执行sudo缓存和/或使用suoders文件提升权限的用户/所有者等信息。
快速提升执行
介绍:敌对方可能会利用AuthorizationExecuteWithPrivileges
API提示用户输入凭据来提升权限。此API的目的是为应用程序开发人员提供一种使用根权限执行操作的简单方法,例如应用程序安装或更新。此API不会验证请求根权限的程序是否来自信誉良好的来源或已被恶意修改。尽管此API已被弃用,但它在最新版本的macOS中仍然完全起作用。调用此API时,将提示用户输入凭据,但不会对程序的来源或完整性进行检查。调用API的程序也可能加载世界可写文件,这些文件可以被修改以执行具有提升权限的恶意行为。敌人可能会滥用AuthorizationExecuteWithPrivileges
来获得root权限,以便在受害者身上安装恶意软件并安装持久性机制。这种技术可以与伪装相结合,诱骗用户向恶意代码授予升级的权限。这项技术也已被证明可以通过修改机器上使用此API的合法程序来工作。
预防措施:系统设置可以阻止未通过苹果商店下载的应用程序运行,这可能有助于缓解其中的一些问题。不允许未签名的应用程序运行也可以降低一些风险。
检测:为执行监控操作系统API回调也可以是检测这种行为的一种方式,但需要专门的安全工具;请考虑监视/usr/libexec/security_authtrampoline
的执行,这可能表明AuthorizationExecuteWithPrivileges
正在执行。MacOS系统日志还可以指示何时调用AuthorizationExecuteWithPrivileges
。
临时高架云访问
介绍:对手可能会滥用允许他们获得临时提升的云资源访问权限的权限配置。许多云环境允许管理员授予用户或服务帐户权限,以请求对角色的实时访问、模拟其他帐户、将角色传递到资源和服务上,或者以其他方式获得对一组可能不同于他们自己的权限的短期访问权。即时访问是一种以精细的临时方式向云帐户授予额外角色的机制。这允许帐户仅使用日常所需的权限进行操作,并在必要时请求其他权限。有时,即时访问请求被配置为需要手动批准,而其他时候则自动授予所需的权限。帐户模拟允许用户或服务帐户临时使用其他帐户的权限进行操作。例如,在GCP中,具有iam.serviceAccountTokenCreator角色的用户可以创建临时访问令牌或使用服务帐户的权限对任意有效载荷进行签名,而具有域范围委派权限的服务帐户可以模拟Google Workspace帐户。在Exchange Online中,ApplicationImpersonation角色允许服务帐户使用与指定用户帐户关联的权限。许多云环境还包括用户将角色传递给资源的机制,这些机制允许用户执行任务并向其他服务进行身份验证。虽然创建资源的用户不会直接承担他们传递给它的角色,但他们仍然可以利用角色的访问权限——例如,通过配置资源以使用授予的权限执行某些操作。在AWS中,具有PassRole权限的用户可以允许他们创建的服务承担给定的角色,而在GCP中,具有iam.serviceAccountUser角色的用户可以将服务帐户附加到资源。虽然用户需要特定的角色分配才能使用这些功能,但云管理员可能会错误配置权限。这可能导致升级路径,使对手能够获得超出最初意图的资源。注意:这项技术不同于附加云角色,后者涉及为帐户分配永久角色,而不是滥用现有的权限结构来获得临时提升的资源访问权限。然而,危害足够特权的帐户的对手可能会授予他们控制的另一个帐户额外的云角色,这将允许他们也滥用这些功能。这也可能允许比直接使用高特权帐户更大的隐蔽性,尤其是当日志没有说明何时进行角色模拟时。
预防措施:将云帐户承担、创建或模拟其他角色、策略和权限的权限仅限于所需的权限。如果启用了即时访问,请考虑要求手动批准临时提升权限。
检测:记录API调用以承担、创建或模拟其他角色、策略和权限。审查实时访问的使用情况,以确保提供的任何理由都是有效的,并且只采取了预期的行动。
TCC操纵
介绍:敌人可以操纵或滥用透明、同意和控制(TCC)服务或数据库,以执行权限提升的恶意应用程序。TCC是一种隐私与安全macOS控制机制,用于确定运行的进程是否有权访问TCC保护的数据或服务,如屏幕共享、摄像头、麦克风或全磁盘访问(FDA)。当应用程序请求访问受TCC保护的数据或服务时,TCC守护程序(tccd)会检查TCC数据库,该数据库位于/Library/application Support/company
。TCC/TCC.db(和~/等效),用于现有权限。如果权限不存在,则系统会提示用户授予权限。授予权限后,数据库将存储应用程序的权限,除非重置,否则不会再次提示用户。例如,当网络浏览器向用户的网络摄像头请求许可时,一旦被授予,网络浏览器可能不会再次明确提示用户。敌人可能会操纵TCC数据库或以其他方式滥用TCC服务来执行恶意内容。这可以通过多种方式实现,包括使用特权系统应用程序执行恶意有效载荷,或操纵数据库授予其应用程序TCC权限。例如,对手可以使用默认具有美国食品药品监督管理局权限的Finder执行恶意AppleScript,同时阻止用户提示。对于未启用系统完整性保护(SIP)的系统,对手还操纵操作系统,使用环境变量和Launchctl加载对手控制的TCC数据库。对手也可以选择将代码注入(例如,进程注入)到具有所需TCC许可的目标应用程序中。
预防措施:使用“安全和隐私系统首选项”下的“自动化”定期检查应用程序。要重置权限,用户可以使用tccutil reset命令。使用移动设备管理(MDM)时,请查看MDMOverrides.list中启用或禁用的应用程序列表,该列表将覆盖TCC数据库;从系统上的本地管理员组中删除不必要的用户;使用MDM时,请确保授予的权限是特定于二进制文件的要求的。应根据策略将完全磁盘访问限制为仅必要的二进制文件;定期更新软件。在可能的情况下,确保系统为macOS Sierra+,并启用SIP。
检测:监视执行的命令和自变量,这些命令和自变量可能会滥用或修改TCC机制,这些机制旨在控制对提升特权的访问。macOS系统日志还可以指示何时调用AuthorizationExecuteWithPrivileges;监视与TCC设置相关联的文件的更改,如/Library/Application Support/compapple
。TCC/TCC.db;监视可能绕过TCC机制的新执行进程,TCC机制旨在控制对提升权限的访问。macOS系统日志还可以指示何时调用AuthorizationExecuteWithPrivileges。
2.访问令牌操作
代币假冒/盗窃
介绍:敌人可能会复制,然后模仿另一个用户的现有令牌来升级权限并绕过访问控制。例如,对手可以使用DuplicateToken或DuplicateTokenEx复制现有令牌。然后,该令牌可以与ImpersonateLoggedOnUser一起使用,以允许调用线程模拟登录用户的安全上下文,或者与SetThreadToken一起使用,将模拟的令牌分配给线程。当对手有一个特定的、现有的进程想要分配重复的令牌时,他们可能会执行令牌模拟/盗窃。例如,当目标用户在系统上有非网络登录会话时,这可能很有用。当对手使用重复的令牌创建新进程而不是附加到现有进程时,他们可以使用CreateProcessWithTokenW或CreateProcessAsUserW额外创建带有令牌的进程。代币模拟/盗窃与Make和Impersonate代币的不同之处在于,它指的是复制现有代币,而不是创建新代币。
预防措施:限制权限,使用户和用户组无法创建令牌。应仅为本地系统帐户定义此设置。GPO:计算机配置>[策略]>Windows设置>安全设置>本地策略>用户权限分配:创建令牌对象。还定义谁可以通过GPO:计算机配置>[策略]>Windows设置>安全设置>本地策略>用户权限分配仅为本地和网络服务创建进程级令牌:替换进程级令牌;管理员应以标准用户身份登录,但使用内置的访问令牌操作命令runas以管理员权限运行其工具;对手必须已经对本地系统具有管理员级别的访问权限,才能充分利用这项技术;请确保将用户和帐户限制为所需的最低权限。
检测:监视已执行的命令和参数,以通过审核命令行活动来检测令牌操作。具体来说,分析人员应该查找runas命令的使用情况。在Windows中,默认情况下不启用详细的命令行日志记录;监视与其他可疑行为关联的API调用,以减少由于用户和管理员正常善意使用而导致的误报,如DuplicateToken(Ex)、ImpersonateLoggedOnUser和SetThreadToken。
使用令牌创建进程
介绍:敌人可能会使用现有令牌创建一个新进程,以提升权限并绕过访问控制。可以使用CreateProcessWithTokenW和runas等功能,使用另一个用户的令牌和由此产生的安全上下文来创建进程。使用与当前用户不关联的令牌创建进程可能需要目标用户的凭据、模拟该用户的特定权限或访问要使用的令牌。例如,在用于创建进程之前,可以通过token Impersonation/Theft复制令牌,或者通过Make和Impersonate token创建令牌。虽然这种技术不同于令牌模拟/盗窃,但这些技术可以与复制令牌然后用于创建新进程的情况结合使用。
预防措施:限制权限,使用户和用户组无法创建令牌。应仅为本地系统帐户定义此设置。GPO:计算机配置>[策略]>Windows设置>安全设置>本地策略>用户权限分配:创建令牌对象。还定义谁可以通过GPO:计算机配置>[策略]>Windows设置>安全设置>本地策略>用户权限分配仅为本地和网络服务创建进程级令牌:替换进程级令牌;管理员应以标准用户身份登录,但使用内置的访问令牌操作命令runas以管理员权限运行其工具;对手必须已经对本地系统具有管理员级别的访问权限,才能充分利用这项技术;请确保将用户和帐户限制为所需的最低权限。
检测:监视已执行的命令和参数,以通过审核命令行活动来检测令牌操作。具体来说,分析人员应该查找runas命令或类似工件的使用情况。在Windows中,默认情况下不启用详细的命令行日志记录;仅通过仔细分析用户活动、检查正在运行的进程以及与其他端点和网络行为的相关性,监控与检测令牌操作相关的API调用。分析师还可以监控Windows API(如CreateProcessWithTokenW)的使用情况,并将活动与其他可疑行为关联起来,以减少用户和管理员正常良性使用可能导致的误报。
制作和模拟代币
介绍:敌人可能会制作新的令牌并冒充用户来升级权限并绕过访问控制。例如,如果对手有用户名和密码,但用户没有登录到系统,则对手可以使用LogoUser功能为用户创建登录会话。该函数将返回新会话的访问令牌的副本,对手可以使用SetThreadToken将令牌分配给线程。这种行为与令牌模拟/盗窃的不同之处在于,它指的是创建一个新的用户令牌,而不是窃取或复制现有的令牌。
预防措施:限制权限,使用户和用户组无法创建令牌。应仅为本地系统帐户定义此设置。GPO:计算机配置>[策略]>Windows设置>安全设置>本地策略>用户权限分配:创建令牌对象。还定义谁可以通过GPO:计算机配置>[策略]>Windows设置>安全设置>本地策略>用户权限分配仅为本地和网络服务创建进程级令牌:替换进程级令牌;管理员应以标准用户身份登录,但使用内置的访问令牌操作命令runas以管理员权限运行其工具;对手必须已经对本地系统具有管理员级别的访问权限,才能充分利用这项技术;请确保将用户和帐户限制为所需的最低权限。
检测:监视已执行的命令和参数,以通过审核命令行活动来检测令牌操作。具体来说,分析人员应该查找runas命令或类似工件的使用情况。在Windows中,默认情况下不启用详细的命令行日志记录;仅通过仔细分析用户活动、检查正在运行的进程以及与其他端点和网络行为(如LogoUser和SetThreadToken)的相关性,来监控与检测令牌操作相关的API调用。将活动与其他可疑行为关联起来,以减少用户和管理员正常良性使用可能导致的误报
父PID后台处理
介绍:对手可能会伪造新进程的父进程标识符(PPID),以逃避进程监控防御或提升权限。除非明确指定,否则新进程通常直接从其父进程或调用进程派生。显式分配新进程PPID的一种方法是通过CreateProcess API调用,该调用支持定义要使用的PPID的参数。在SYSTEM(通常通过svchost.exe或consistent.exe)而不是当前用户上下文生成请求的提升进程后,用户帐户控制(UAC)等Windows功能使用此功能来正确设置PPID。敌人可能会滥用这些机制来逃避防御,例如阻止直接从Office文档生成的进程,以及针对不寻常/潜在恶意父子进程关系的分析,例如将PowerShell/Rundll32的PPID欺骗为explorer.exe,而不是作为矛式网络钓鱼附件的一部分提供的Office文档。这种欺骗可以通过Visual Basic在恶意Office文档或任何可以执行本机API的代码中执行。显式地分配PPID还可以在给定对父进程的适当访问权限的情况下启用提升的特权。例如,特权用户上下文中的对手(即管理员)可能会生成一个新进程,并将父进程分配为以SYSTEM(如lsass.exe)运行的进程,从而导致新进程通过继承的访问令牌提升。
预防措施:
检测:监视对CreateProcess/CreateProcessA的API调用,特别是来自用户/潜在恶意进程的调用,并使用显式分配PPID的参数(例如:进程创建标志为0x8XXX,表示正在使用扩展启动信息创建进程)。恶意使用CreateProcess/CreateProcessA也可能通过调用UpdateProcThreadAttribute来进行,这可能是更新进程创建属性所必需的。这可能会从正常的UAC提升行为中产生假阳性,因此尽可能与系统基线/对正常系统活动的理解进行比较;监视可能滥用机制逃避防御的新建进程和/或命令行,例如阻止直接从Office文档生成的进程,以及针对异常/潜在恶意父子进程关系的分析,例如将PowerShell/Rundll32的PPID欺骗为explorer.exe;查找存储PPID信息的各个字段之间的不一致性,例如通过Windows事件跟踪(ETW)收集的数据中的EventHeader ProcessId、Windows事件日志中的Creator Process ID/Name以及ProcessId和ParentProcessID(它们也由ETW和其他实用程序(如任务管理器和Process Explorer)生成)。ETW提供的EventHeader ProcessId标识实际的父进程。
SID历史注入
介绍:敌人可以使用SID历史注入来提升权限并绕过访问控制。Windows安全标识符(SID)是一个唯一的值,用于标识用户或组帐户。SID由Windows安全性在安全描述符和访问令牌中使用。帐户可以在SID History Active Directory属性中保存其他SID,从而允许域之间的可操作帐户迁移(例如,SID History中的所有值都包含在访问令牌中)。使用域管理员(或等效)权限,可以将获取的或已知的SID值插入到SID历史记录中,以启用对任意用户/组(如企业管理员)的模拟。这种操作可能会通过横向移动技术(如远程服务、SMB/Windows管理共享或Windows远程管理)提高对本地资源的访问权限和/或对其他无法访问的域的访问权限。
预防措施:合法帐户迁移完成后,请清理SID历史记录属性;请考虑将SID筛选应用于林间信任,如林信任和外部信任,以从访问域资源的请求中排除SID历史记录。SID筛选确保通过信任的任何身份验证请求只包含来自受信任域的安全主体的SID(即,防止受信任域声称用户在域外的组中具有成员身份);默认情况下启用了林信任的SID筛选,但在某些情况下可能已禁用,以允许子域过渡访问林信任。使用Server 2003或更高版本的域控制器在所有创建的外部信任上自动启用外部信任的SID筛选。但是请注意,SID筛选不会自动应用于传统信任,或者可能已被故意禁用以允许域间访问资源;SID筛选可以通过以下方式应用:;使用netdom工具禁用林信任的SIDHistory(域控制器上的netdom trust/domain:/EnableSIDHistory:no);使用netdom工具将SID筛选器隔离应用于外部信任(域控制器上的netdom trust/domain:/distrival:yes);不建议将SID筛选应用于单个林中的域信任,因为这是一种不受支持的配置,可能会导致中断更改。如果林中的域不可信,则它不应该是林的成员。在这种情况下,有必要首先将受信任域和不受信任域拆分为单独的林,其中SID筛选可以应用于林间信任
检测:监视域控制器上帐户管理事件的更改,以了解SID历史的成功和失败更改;监视API调用,如PowerShell的Get-ADUser cmdlet或Windows API DsAddSidHistory函数,以检查用户的SID-History属性中的数据,尤其是具有来自同一域的SID-Hhistory值的用户;检查用户的SID历史记录属性中的数据
3.账户操纵
其他云凭据
介绍:对手可以向云帐户添加对手控制的凭据,以保持对环境中受害者帐户和实例的持久访问。例如,除了Azure AD中现有的合法凭据外,对手还可以添加服务主体和应用程序的凭据。这些凭据包括x509密钥和密码。有了足够的权限,可以通过多种方式添加凭据,包括Azure门户、Azure命令行接口以及Azure或Az PowerShell模块。在基础设施即服务(IaaS)环境中,通过云帐户获得访问权限后,对手可能会使用AWS中的CreateKeyPair或ImportKeyPair API或GCP中的gcloud compute os-login ssh-keys add
命令生成或导入自己的SSH密钥。这允许对云环境中的实例进行持久访问,而无需进一步使用受损的云帐户。敌人还可以使用AWS中的CreateAccessKey API或GCP中的gcloud iam service-accounts keys create
命令向帐户添加访问密钥。如果目标帐户与请求帐户具有不同的权限,则对手也可以升级其在环境中的权限(即云帐户)。例如,在Azure AD环境中,具有应用程序管理员角色的对手可以向其应用程序的服务主体添加一组新的凭据。在这样做的过程中,对手将能够访问服务主体的角色和权限,这可能与应用程序管理员的不同。在AWS环境中,拥有适当权限的对手也可以使用sts:GetFederationToken
API调用创建一组临时凭据,以伪造与原始用户帐户权限绑定的Web凭据。即使原始帐户的API凭据被停用,这些临时凭据也可能在其生命周期内保持有效。
预防措施:对用户和特权帐户使用多因素身份验证。请考虑通过IAM策略对CreateKeyPair和ImportKeyPair API调用强制执行多因素身份验证;配置访问控制和防火墙以限制对关键系统和域控制器的访问。大多数云环境都支持独立的虚拟专用云(VPC)实例,从而实现云系统的进一步细分;不允许域管理员或root帐户用于日常操作,因为这些操作可能会使他们暴露在非特权系统上的潜在对手面前;请确保低特权用户帐户没有向帐户添加访问密钥的权限。在AWS环境中,除非明确要求,否则禁止用户调用sts:GetFederationToken
API。
检测:监视对云用户帐户的意外更改,例如突出显示恶意服务主体和应用程序修改的Azure活动日志;监控向帐户添加访问密钥或令牌的API和CLI命令的使用情况,如AWS中的CreateAccessKey或GetFederationToken或GCP中创建的服务帐户密钥。还要监视创建或导入SSH密钥的API的使用情况,特别是由非预期用户或帐户(如根帐户)使用。
其他电子邮件委派权限
介绍:对手可以授予额外的权限级别,以保持对对手控制的电子邮件帐户的持久访问。例如,本地Exchange和基于云的服务Office 365中提供的Add-MailboxPermission PowerShell cmdlet可向邮箱添加权限。在谷歌工作区中,可以通过谷歌管理控制台启用委派,用户可以通过Gmail设置委派帐户。对手也可以通过单独的文件夹权限或角色分配邮箱文件夹权限。在Office 365环境中,对手可能会将默认或匿名用户权限或角色分配给信息存储顶部(根)、收件箱或其他邮箱文件夹。通过向文件夹分配一个或两个用户权限,对手可以利用租户中的任何其他帐户来保持对目标用户邮件文件夹的持久性。这可能用于持续威胁事件以及BEC(业务电子邮件泄露)事件,其中对手可以向他们希望泄露的帐户添加额外的云角色。这可以进一步使得能够使用额外的技术来获得对系统的访问。例如,在创建收件箱规则(例如:内部矛式网络钓鱼)时,受损的企业帐户通常用于向目标企业网络中的其他帐户发送消息,因此这些消息可以避开垃圾邮件/网络钓鱼检测机制。
预防措施:如果不需要电子邮件委派,请禁用它。在谷歌工作区中,这可以通过谷歌管理控制台完成;对用户和特权帐户使用多因素身份验证;不允许域管理员帐户用于日常操作,这可能会使它们暴露在非特权系统上的潜在对手面前。
检测:为所有登录类型启用UpdateFolderPermissions操作。邮箱审核日志将文件夹权限修改事件转发到统一审核日志。创建规则以在ModifyFolderPermissions操作中向匿名用户或默认用户分配除None以外的权限时发出警报;从一个帐户发送的电子邮件数量大于正常数量,以及从网络中的真实帐户发送的类似钓鱼电子邮件数量,这可能表明一个帐户受到了威胁,并试图利用修改后的电子邮件权限进行访问;监视异常的Exchange和Office 365电子邮件帐户权限更改,这些更改可能表明授予受威胁帐户的权限范围过大(包括特权组中的成员资格);监视Exchange和Office 365电子邮件帐户权限的异常更改,这些更改可能表明授予受威胁帐户的权限过于宽泛。
其他云角色
介绍:对手可以向对手控制的云帐户添加额外的角色或权限,以保持对租户的持久访问。例如,对手可能会在基于云的环境中更新IAM策略,或在Office 365环境中添加新的全局管理员。有了足够的权限,被泄露的帐户可以获得几乎无限的数据和设置访问权限(包括重置其他管理员密码的能力)。此帐户修改可能会在创建帐户或其他恶意帐户活动之后立即进行。对手还可以修改他们已经泄露的现有有效账户。这可能导致特权升级,特别是如果添加的角色允许横向移动到其他帐户。例如,在AWS环境中,具有适当权限的对手可能能够使用CreatePolicyVersion API来定义IAM策略的新版本,或者使用AttachUserPolicy API来将具有附加或不同权限的IAM策略附加到受损用户帐户。在某些情况下,对手可能会在受害者云租户之外为对手控制的帐户添加角色。这允许这些外部帐户在受害者租户内部执行操作,而无需对手创建帐户或修改受害者拥有的帐户。
预防措施:对用户和特权帐户使用多因素身份验证;确保所有帐户使用所需的最低权限。在Azure AD环境中,考虑使用特权身份管理(PIM)来定义在分配给用户之前需要两个或多个批准的角色;确保低特权用户帐户没有向帐户添加权限或更新IAM策略的权限。
检测:从云管理员帐户收集使用日志,以识别为这些帐户分配角色时的异常活动。监视分配给管理员角色的帐户是否超过已知管理员的特定阈值。监视IAM策略和附加到用户帐户的角色的更新。
SSH授权密钥
介绍:攻击者可以修改SSH authorized_keys文件以在受害者主机上保持持久性。Linux发行版和macOS通常使用基于密钥的身份验证来保护SSH会话的身份验证过程,以进行远程管理。SSH中的authorized_keys
文件指定可用于登录到配置该文件的用户帐户的SSH密钥。该文件通常位于<userhome>/.ssh/authorized_keys
下的用户主目录中。用户可以编辑系统的SSH配置文件,将PubkeyAuthentication和RSAAuthentication指令修改为值“yes”,以确保启用公钥和RSA身份验证。SSH配置文件通常位于/etc/SSH/sshd_config
下。对手可以直接使用脚本或shell命令修改SSH authorized_keys文件,以添加自己的对手提供的公钥。在云环境中,对手可能能够通过命令行接口或rest API修改特定虚拟机的SSH authorized_keys文件。例如,通过使用Google Cloud CLI的“添加元数据”命令,对手可以向用户帐户添加SSH密钥。类似地,在Azure中,对手可以通过对API的PATCH请求来更新虚拟机的authorized_keys文件。这确保了拥有相应私钥的对手可以通过SSH作为现有用户登录。它还可能导致权限提升,其中虚拟机或实例具有与请求用户不同的权限。在通过云API或命令行接口修改authorized_keys文件的情况下,如果对手向权限更高的用户添加密钥,则可以在目标虚拟机上实现权限提升。SSH密钥也可以添加到网络设备上的帐户,例如使用ip ssh pubkey-chain
命令。
预防措施:如果在主机上没有必要,请禁用SSH,或者使用/etc/SSH/sshd_config限制特定用户/组的SSH访问;限制对authorized_keys文件的访问;在云环境中,确保只有明确要求拥有更新实例元数据或配置权限的用户才能这样做。
检测:监视执行的命令和参数以修改authorized_keys或/etc/ssh/sshd_config
文件;监视所做的更改,以检测系统上每个用户对authorized_keys文件所做的修改。监视修改/etc/ssh/sshd_config
的更改和可疑进程;监视修改authorized_keys或/etc/ssh/sshd_config
文件的可疑进程。
设备注册
介绍:对手可以将设备注册到对手控制的帐户。设备可以在多因素身份验证(MFA)系统中注册,该系统处理对网络的身份验证,也可以在设备管理系统中注册。MFA系统,如Duo或Okta,允许用户将设备与其帐户关联,以完成MFA要求。损害用户凭据的对手可能会注册一个新设备,以绕过最初的MFA要求并获得对网络的持久访问。在某些情况下,MFA自注册过程可能只需要用户名和密码即可注册帐户的第一个设备或将设备注册到非活动帐户。类似地,现有网络访问权限的对手可以将设备注册到Azure AD和/或其设备管理系统Microsoft Intune,以便访问敏感数据或资源,同时绕过条件访问策略。在Azure AD中注册的设备可能能够通过组织内电子邮件进行内部钓鱼活动,而这些电子邮件不太可能被电子邮件客户端视为可疑。此外,对手可能能够通过注册大量设备在Azure AD租户上执行服务耗尽洪水。
预防措施:需要多因素身份验证才能在Azure AD中注册设备。将多因素身份认证系统配置为不允许为非活动帐户注册新设备。首次注册MFA时,请使用条件访问策略将设备注册限制在受信任的位置或设备,并考虑使用临时访问通行证作为注册设备的初始MFA解决方案。
检测:监视Active Directory中新设备对象的注册或加入。在不使用MFA的情况下注册或加入新设备时发出警报;Azure AD在注册新设备时会创建多个日志项,可以监视这些日志项是否有意外的设备注册。此外,可以通过Azure AD门户查看加入的设备;监控用户帐户中是否存在新的和可疑的设备关联,例如源自异常来源、发生在异常时间或可疑登录后的关联。
其他容器群集角色
介绍:对手可以向对手控制的用户或服务帐户添加额外的角色或权限,以保持对容器编排系统的持久访问。例如,拥有足够权限的对手可以创建RoleBinding或ClusterRoleBinding,将Role或ClusterRole绑定到Kubernetes帐户。在使用基于属性的访问控制(ABAC)的情况下,具有足够权限的对手可以修改Kubernetes ABAC策略,为目标帐户提供额外权限。此帐户修改可能会在创建帐户或其他恶意帐户活动之后立即进行。对手还可以修改他们已经泄露的现有有效账户。请注意,在云环境中部署容器编排系统的情况下,如Google Kubernetes Engine、Amazon Elastic Kubernets Service和Azure Kubernete Service,通常可以使用基于云的基于角色的访问控制(RBAC)分配或ABAC策略来代替本地权限分配,也可以在本地权限分配之外使用。在这些情况下,此技术可以与其他云角色一起使用。
预防措施:要求通过云部署或通过LDAP或SAML等身份验证协议对集成到容器集群中的用户帐户进行多因素身份验证;确保低特权帐户没有向帐户添加权限或更新容器群集角色的权限。
检测:从帐户中收集使用日志,以识别为这些帐户分配角色时的异常活动。监视分配给高特权群集角色的帐户是否超过已知管理员的特定阈值。
4.启动或登录自动启动执行
注册表运行密钥/启动文件夹
介绍:对手可以通过将程序添加到启动文件夹或使用注册表运行键引用程序来实现持久性。在注册表或启动文件夹中的“运行键”中添加条目将导致用户登录时执行引用的程序。这些程序将在用户的上下文下执行,并具有帐户的相关权限级别。默认情况下,以下运行项在Windows系统上创建:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
,HKEY_CURRENT_USER\Software\Microsoft\Windows\urrentVersion\RunOnce
,HKEY_LOCAL_MACHINE\Software\Microsoft.com/Windows\CurrentVersion\Run
,HKEY_LOCAL_MACHINE\SSoftware\Microsoft\Windows \CurrentVersion\RunOnce
运行项可能存在于多个配置单元下。HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
也可用,但默认情况下不会在Windows Vista及更新版本上创建。注册表运行项可以直接引用程序,也可以将它们作为依赖项列出。例如,可以在登录时使用reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\0001\Depend /v 1 /d "C:\temp\evil[.]dll"
的“Depend”键加载DLL。将程序放在启动文件夹中也会导致该程序在用户登录时执行。有一个单独用户帐户的启动文件夹位置,以及一个系统范围的启动文件夹,无论哪个用户帐户登录,都会检查该文件夹。当前用户的启动文件夹路径为C:\Users\[Username]\AppData\Roaming\Microsoft\Windows \Start Menu\Programs\startup
。所有用户的启动文件夹路径为C:\ProgramData\Microsoft\Windows\Start Menu\Programs\startup
。以下注册表项可用于设置要持久化的启动文件夹项:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\USER Shell Folders
,HKEY_CURRENT_USER\Software\Microsoft\Windows\urrentVersion\Explore\Shell Folders
,HKEY_LOCAL_MACHINE\Software\Microsoft\Windows \CurrentVersion\Explorer\Shell Folders
,HKEY_LOCAL_ MACHINE\ Software\MMicrosoft\Windows\CurrentVersion\ USER Shell Folders
,以下注册表项可以控制启动期间服务的自动启动:HKEY_LOCAL_MAC HINE\Software\MMicrosoft\Windows \CCurrentVersion\RunServicesOnce
,HKEY_CURREND_USER\Software\Windows\CURRENT Version\RunServiceOnce
, \Software\Microsoft\Windows\CurrentVersion\RunServices
,HKEY_CURRENT_USER\Software\Microsoft.com/Windows\CurrentVersion\RunServices
使用策略设置指定启动程序会在两个注册表项中的任一注册表项中创建相应的值:HKEY_LOCAL_MACHINE\Software\MMicrosoft\Windows\urrentVersion\Policies\Explorer\RunHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
注册表项HKEY_CURRENT_USER\Software\Wicrosoft\Windows NT\CurrentVersion\Windows
的加载值中列出的程序会为当前登录的用户自动运行。默认情况下,注册表项HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager
的多环BootExecute
值设置为autocheck autochk *
。如果系统异常关闭,此值会导致Windows在启动时检查硬盘的文件系统完整性。敌人可以将其他程序或进程添加到此注册表值,该值将在启动时自动启动。敌人可以使用这些配置位置来执行恶意软件,如远程访问工具,以通过系统重新启动来保持持久性。敌人也可以使用伪装使注册表条目看起来像是与合法程序相关。
预防措施:
检测:监视执行的命令和参数,这些命令和参数可以通过将程序添加到启动文件夹或使用注册表运行键引用程序来实现持久性;监视启动文件夹是否有添加或更改。Sysinternals Autorun等工具也可以用于检测可能是持久性尝试的系统更改,包括启动文件夹;通过Windows EID 9707或“Software\Microsoft\Windows\CurrentVersion\Run”和“Software\Microsoft.com/Windows\CurrentVersion\RunOnce”注册表项,用完整的命令行监视从Run/RunOnce注册表项执行的新执行进程;在通过已知的Windows机制建立持久性时,注册表修改通常是必不可少的。许多合法的修改都是通过regedit.exe或使用相应的通道以图形方式完成的,甚至可以直接调用注册表API。内置实用工具reg.exe为注册表提供了一个命令行界面,因此可以从shell(如cmd.exe)执行查询和修改。当用户负责这些操作时,cmd.exe的父级可能是explorer.exe。偶尔,高级用户和管理员也会编写执行此行为的脚本,但可能来自不同的流程树。必须学习这些背景脚本,以便相应地调整它们;输出描述导致reg.exe从shell启动的进程序列。也就是说,层次结构看起来像•great-grand_parent.exe•grand_parent.exe•reg.exe;分析1-从命令行外壳程序调用Reg.exe:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") Image="reg.exe" AND ParentImage="cmd.exe"| join left=L right=R where L.ParentProcessGuid = R.ProcessGuid [search EventCode IN (1, 4688) Image="*cmd.exe" ParentImage!="*explorer.exe"]
;监视新创建的windows注册表项,这些注册表项可以通过将程序添加到启动文件夹或使用注册表运行项引用程序来实现持久性;监视注册表中与已知软件、修补程序周期等不相关的运行项的更改。Sysinternals Autorun等工具也可用于检测可能是持久性尝试的系统更改,包括列出运行项的注册表位置;检测注册表项Common Startup的修改,该注册表项位于HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\
和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows \CurrentVersion\ Explorer\ User Shell Folders
中。当用户登录时,启动启动文件夹中的所有文件。攻击者可能会用其他文件修改这些文件夹,以逃避在这些默认文件夹上设置的检测。此检测的重点是用于进程创建的EventID 4688和1,以及用于修改注册表项的EventID 4657;分析1-修改注册表项“Common Startup”中的默认启动文件夹:(source="*WinEventLog:Security" EventCode="4657" ObjectValueName="Common Startup") OR (source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="13" TargetObject="*Common Startup")
身份验证包
介绍:当系统启动时,敌人可能会滥用身份验证包来执行DLL。Windows身份验证包DLL由本地安全机构(LSA)进程在系统启动时加载。它们为操作系统提供了对多个登录进程和多个安全协议的支持。通过在Windows注册表位置HKLM\SYSTEM\CurrentControlSet\Control\LSA\
中放置对二进制文件的引用,对抗方可以使用LSA身份验证包提供的自动启动机制来实现持久性,该二进制文件的键值为"authentication packages"=<target binary>
。当加载身份验证包时,二进制文件将由系统执行。
预防措施:Windows 8.1、Windows Server 2012 R2及更高版本可以通过设置注册表项HKLM\SYSTEM\CurrentControlSet\Control\LSA\RunAsPPL使LSA作为受保护进程轻型(PPL)运行,该注册表项要求LSA加载的所有DLL都由Microsoft签名。
检测:监视已执行的命令和参数,这些命令和参数可能会在系统引导时滥用身份验证包来执行DLL;监视LSA进程的DLL加载。当未签名的DLL试图通过将注册表项HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe设置为AuditLevel=8加载到LSA时,Windows 8.1和Windows Server 2012 R2可能会生成事件;监视注册表中LSA注册表项的更改。当未签名的DLL试图通过将注册表项HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe
设置为AuditLevel=8加载到LSA时,Windows 8.1和Windows Server 2012 R2可能会生成事件。
时间提供程序
介绍:当系统启动时,敌人可能会滥用时间提供程序来执行DLL。Windows时间服务(W32Time)支持跨域和域内的时间同步。W32时间提供程序负责从硬件/网络资源中检索时间戳,并将这些值输出到其他网络客户端。时间提供程序被实现为动态链接库(DLL),它们在HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W32Time\TimeProviders\的子项中注册。时间提供程序管理器在服务控制管理器的指导下,在系统启动和/或参数更改时加载并启动在此密钥下列出和启用的时间提供程序。敌人可能会滥用这种体系结构来建立持久性,特别是通过在DllName值中创建一个指向恶意DLL的新的任意命名的子密钥。注册时间提供程序需要管理员权限,但执行将在本地服务帐户的上下文中运行。
预防措施:请考虑使用组策略来配置和阻止对W32Time DLL的添加/修改;请考虑使用组策略在注册表中配置和阻止对W32Time参数的修改。
检测:监视已执行的命令和参数,这些命令和参数可能会在系统引导时滥用时间提供程序来执行DLL;自定义时间提供程序注册的数量没有限制,尽管每个注册可能需要将DLL有效负载写入磁盘;监视新执行的进程,如W32tm.exe实用程序。Sysinternals自动运行工具也可用于分析自动启动位置,包括列为时间提供程序的DLL;监视对windows注册表项和/或修改注册表中W32Time信息的值所做的更改。
Winlogon帮助程序DLL
介绍:当用户登录时,敌人可能会滥用Winlogon的功能来执行DLL和/或可执行文件。Winlogon.exe是一个Windows组件,负责登录/注销时的操作以及由Ctrl-Alt-Delete触发的安全注意序列(SAS)。HKLM\Software[\Wow6432Node\]\Microsoft\Windows NT\CurrentVersion\Winlogon\
和HKCU\Software\Microsoft\Windows NT\CurrentVersion \Winlogon\
中的注册表项用于管理支持Winlogon的其他帮助程序和功能。对这些注册表项的恶意修改可能会导致Winlogon加载和执行恶意DLL和/或可执行文件。具体而言,已知以下子密钥可能容易被滥用:Winlogon\Notify-指向处理Winlogon事件的通知包DLL Winlogon\Userinit-指向Userinit.exe,用户登录Winlogon_Shell时执行的用户初始化程序-指向explorer.exe,用户登录Adversaries时执行的系统Shell可能利用这些功能重复执行恶意代码并建立持久性。
预防措施:通过使用AppLocker等能够审计和/或阻止未知DLL的应用程序控制工具,识别并阻止可能通过Winlogon帮助程序进程执行的潜在恶意软件;限制用户帐户的权限,以便只有经过授权的管理员才能执行Winlogon帮助程序更改。
检测:当用户登录时,监视可能滥用Winlogon功能执行DLL和/或可执行文件的已执行命令和参数;写入System32的与已知良好软件或修补程序不相关的新DLL也可能是可疑的。查找可能由于进程加载恶意DLL而导致的异常进程行为。不应孤立地看待数据和事件,而应将其视为可能导致其他活动的行为链的一部分,如为指挥和控制建立的网络连接、通过发现了解环境细节以及横向移动;监视用户登录时可能滥用Winlogon功能执行DLL和/或可执行文件的进程的执行情况;分析1-修改Winlogon注册表项:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") | where (CommandLine LIKE "%Microsoft\Windows NT\CurrentVersion\Winlogon%" AND (CommandLine LIKE "%Userinit%" OR CommandLine LIKE "%Shell%" OR CommandLine LIKE "%Notify%")) AND (CommandLine LIKE "%reg%" OR CommandLine LIKE "%add%" OR CommandLine LIKE "%/d%" OR CommandLine LIKE "%Set-ItemProperty%" OR CommandLine LIKE "%New-ItemProperty%" CommandLine LIKE "%-value%")
;监视与Winlogon相关的注册表项是否与已知软件、修补程序周期等不相关的更改。Sysinternals Autorun等工具也可用于检测可能是持久性尝试的系统更改,包括列出当前Winlogon帮助程序值;分析1-修改Userinit、Shell或Notify的注册表编辑:source="*WinEventLog:Security" EventCode="4657" (ObjectValueName="Userinit" OR ObjectValueName="Shell" OR ObjectValueName="Notify") OR source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="13" (TargetObject="*Userinit" OR TargetObject="*Shell" OR TargetObject="*Notify")
安全支持提供商
介绍:当系统启动时,敌人可能会滥用安全支持提供程序(SSP)来执行DLL。Windows SSP DLL在系统启动时加载到本地安全机构(LSA)进程中。一旦加载到LSA,SSP DLL就可以访问存储在Windows中的加密和明文密码,例如任何登录用户的域密码或智能卡PIN。SSP配置存储在两个注册表项中:HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages和HKLM\SYSTEM\CurrentControlSet\Control\Lsa\SOConfig\Security Package。对手可以修改这些注册表项以添加新的SSP,这些SSP将在下次系统引导时加载,或者在调用AddSecurityPackage Windows API函数时加载。
预防措施:Windows 8.1、Windows Server 2012 R2及更高版本可以通过设置注册表项HKLM\SYSTEM\CurrentControlSet\Control\LSA\RunAsPPL使LSA作为受保护进程轻型(PPL)运行,该注册表项要求所有SSP DLL都由Microsoft签名。
检测:监视已执行的命令和参数,这些命令和参数可能会在系统启动时滥用安全支持提供程序(SSP)来执行DLL;监视LSA进程的DLL加载。当未签名的SSP DLL试图通过将注册表项HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe设置为AuditLevel=8加载到LSA时,Windows 8.1和Windows Server 2012 R2可能会生成事件;监视注册表中SSP注册表项的更改。当未签名的SSP DLL试图通过将注册表项HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe设置为AuditLevel=8加载到LSA时,Windows 8.1和Windows Server 2012 R2可能会生成事件。
内核模块和扩展
介绍:敌人可能会修改内核以在系统启动时自动执行程序。可加载内核模块(LKM)是可以根据需要加载和卸载到内核中的代码片段。它们扩展了内核的功能,而无需重新启动系统。例如,一种类型的模块是设备驱动程序,它允许内核访问连接到系统的硬件。当被恶意使用时,LKM可以是一种以最高操作系统权限(Ring 0)运行的内核模式Rootkit。基于LKM的rootkit的常见功能包括:隐藏自身,选择性隐藏文件、进程和网络活动,以及篡改日志,提供经过身份验证的后门,并允许非特权用户进行root访问。内核扩展,也称为kext,在macOS中用于将功能加载到类似于Linux LKM的系统上。由于内核负责实施安全性,并且内核扩展作为内核的一部分运行,因此kexts不受macOS安全策略的管辖。通过kextload和kextunload命令加载和卸载Kexts。Kexts需要使用开发者ID进行签名,该ID被苹果授予特权,允许其签署内核扩展。没有这些特权的开发人员仍然可以签署kexts,但除非禁用SIP,否则他们不会加载。如果启用了SIP,则在将kext签名添加到AuxKC之前对其进行验证。自macOS Catalina 10.15以来,内核扩展一直被弃用,取而代之的是系统扩展。然而,kexts仍然被允许作为“遗留系统扩展”,因为内核编程接口没有系统扩展。敌人可以使用LKM和kexts对系统进行持久性和/或特权升级。在野外已经发现了一些例子,也有一些相关的开源项目。
预防措施:检测Linux rootkit的常用工具包括:rkhunter、chrootkit,尽管rootkit可能是为了躲避某些检测工具而设计的;应用程序控制和软件限制工具,如SELinux、KSPP、grsecurity MODHARDEN和Linux内核调优,可以帮助限制内核模块加载;通过适当的权限分离和限制权限提升机会,限制对根帐户的访问,防止用户加载内核模块和扩展;使用MDM可以禁用用户安装或批准内核扩展的能力,并确保所有批准的内核扩展都与com.apple.syspolicy.kernel-extraction-policy中指定的策略一致。
检测:在Linux系统上加载、卸载和操纵模块可以通过监视以下命令来检测:modprobe、insmod、lsmod、rmmod或modinfo Adversies可能在加载恶意模块之前在目标系统上运行命令,以确保其正确编译。敌人还可以执行命令来识别运行的Linux内核的确切版本和/或下载相同.ko(内核对象)文件的多个版本,以使用适合运行系统的文件。许多LKM需要Linux头(特定于目标内核)才能正确编译。这些通常是通过操作系统包管理器获得的,并像普通包一样安装;在macOS上,监视kextload命令的执行情况以及执行异常和/或潜在恶意活动(如创建网络连接)的用户安装的内核扩展。监视kext_policy表中添加的新行。KextPolicy在SQLite数据库/var/db/SystemPolicyConfiguration/KextPolicy中存储用户批准的(非苹果)内核扩展列表和加载的内核模块的部分历史记录;监视新构建的文件,这些文件可能会修改内核以在系统启动时自动执行程序;监视对文件所做的更改,这些更改可能会修改内核以在系统启动时自动执行程序;LKM通常加载到/lib/模块中,并且自Linux内核的2.6版本以来具有扩展名.ko(“内核对象”);监视新创建的进程,这些进程可能会修改内核以在系统启动时自动执行程序。
重新打开的应用程序
介绍:敌人可能会修改plist文件,以便在用户登录时自动运行应用程序。当用户通过macOS图形用户界面(GUI)注销或重新启动时,会向用户提供一个提示,并带有“重新登录时重新打开窗口”复选框。选中后,当前打开的所有应用程序都会添加到名为com.apple.loginwindow的属性列表文件中。[UUID].plist位于~/Library/Preferences/ByHost目录中。此文件中列出的应用程序将在用户下次登录时自动重新打开。敌人可以通过向com.apple.loginwindow添加恶意应用程序路径来建立持久性。[UUID].plist文件,用于在用户登录时执行有效负载。
预防措施:此功能可以通过以下终端命令完全禁用:defaults write-g ApplePersistence-bool no;登录时按住Shift键可防止应用程序自动打开。
检测:监视执行的命令和参数,这些命令和参数可能会修改plist文件,以便在用户登录时自动运行应用程序;监视与重新打开应用程序相关联的特定plist文件可以指示应用程序何时已注册要重新打开。
LSASS驱动程序
介绍:敌人可以修改或添加LSASS驱动程序,以在受损系统上获得持久性。Windows安全子系统是一组组件,用于管理和实施计算机或域的安全策略。本地安全机构(LSA)是负责本地安全策略和用户身份验证的主要组件。LSA包括与各种其他安全功能相关联的多个动态链接库(DLL),所有这些功能都在LSA子系统服务(LSASS)LSASS.exe进程的上下文中运行。敌人可能会以LSASS驱动程序为目标,以获得持久性。通过替换或添加非法驱动程序(例如劫持执行流),对手可以使用LSA操作连续执行恶意有效载荷。
预防措施:在Windows 10和Server 2016上,启用Windows Defender Credential Guard以在不带任何设备驱动程序的隔离虚拟化环境中运行lsass.exe;在Windows 8.1和Server 2012 R2上,通过将注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA\RunAsPPL设置为dword:00000000 1来启用LSA保护。LSA保护确保LSA插件和驱动程序只有在使用Microsoft签名进行数字签名并遵守Microsoft安全开发生命周期(SDL)过程指南的情况下才能加载;确保安全DLL搜索模式已启用HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode,以降低lsass.exe加载恶意代码库的风险。
检测:在启用LSA保护的情况下,监视事件日志(事件3033和3063)是否有加载LSA插件和驱动程序的失败尝试。利用Sysinternals Autoruns/Autorunsc实用程序检查与LSA相关联的已加载驱动程序;监视新构建的文件,这些文件可能会修改或添加LSASS驱动程序,以在受损系统上获得持久性;监视对文件所做的更改,这些更改可能会修改或添加LSASS驱动程序,以在受损系统上获得持久性;同时监视lsass.exe中的DLL加载操作。
快捷方式修改
介绍:敌人可能会创建或修改快捷方式,这些快捷方式可以在系统启动或用户登录期间执行程序。快捷方式或符号链接用于引用系统启动进程单击或执行快捷方式时将打开或执行的其他文件或程序。敌人可能会滥用启动文件夹中的快捷方式来执行他们的工具并实现持久性。尽管经常被用作感染链中的有效载荷(例如,鱼叉式网络钓鱼附件),但对手也可能创建新的快捷方式作为间接手段,同时滥用伪装使恶意快捷方式看起来像合法程序。敌人也可以编辑目标路径或完全替换现有的快捷方式,这样他们的恶意软件将被执行,而不是预期的合法程序。快捷方式也可能被滥用,通过实现其他方法来建立持久性。例如,LNK浏览器扩展可以被修改(例如浏览器扩展)以持久地启动恶意软件。
预防措施:将可以在Windows中创建符号链接的用户的权限限制为适当的组,如管理员和虚拟化所需的组。这可以通过GPO:计算机配置>[策略]>Windows设置>安全设置>本地策略>用户权限分配:创建符号链接来完成。
检测:监视创建的区域标识符值大于1的LNK文件,这可能表明LNK文件源自网络外部。分析应尝试将快捷方式创建事件与基于已知对手行为的其他潜在可疑事件关联起来,例如启动未知可执行文件以建立网络连接;由于快捷方式的目标路径可能不会更改,因此对与已知软件更改、修补程序、删除等不相关的快捷方式文件的修改可能是可疑的。分析应尝试根据已知的对手行为将快捷方式文件更改事件与其他潜在的可疑事件关联起来,例如启动建立网络连接的未知可执行文件;监视新执行的进程,这些进程可能会在系统启动或用户登录期间创建或编辑运行程序的快捷方式。
端口监视器
介绍:对手可以使用端口监视器在系统引导期间运行对手提供的DLL,以实现持久性或权限提升。可以通过AddMonitor API调用设置端口监视器,以设置在启动时加载的DLL。此DLL可以位于C:\Windows\System32中,并将由后台打印程序服务spoosv.exe在启动时以SYSTEM级别的权限加载和运行。或者,如果权限允许将任意DLL的完全限定路径名写入HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors的现有或新的任意命名子项的Driver值,则可以加载该DLL。注册表项包含以下项:本地端口标准TCP/IP端口USB监视器WSD端口
预防措施:
检测:监视新构建的文件,这些文件可能使用端口监视器在系统引导期间运行攻击者提供的DLL以实现持久性或权限提升;监视spoosv.exe加载的DLL中是否有异常的DLL。写入System32目录的与已知良好软件或修补程序不相关的新DLL可能是可疑的;监视进程API对AddMonitor的调用;监视器注册表写入HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors。运行Autoruns实用程序,该实用程序将此注册表项作为持久性机制进行检查
打印处理器
介绍:敌人可能会滥用打印处理器,在系统引导期间运行恶意DLL,以实现持久性和/或权限提升。打印处理器是打印后台处理程序服务spoosv.exe在引导期间加载的DLL。敌人可能会通过添加在启动时加载恶意DLL的打印处理器来滥用后台打印程序服务。打印处理器可以通过AddPrintProcessor API调用使用启用了SeLoadDriverPrivilege的帐户进行安装。或者,可以通过添加指向DLL的HKLM\SYSTEM[CurrentControlSet或ControlSet001]\Control\print\Environments\Windows体系结构:例如,Windows x64]\print Processors[用户定义的]\Driver注册表项,将打印处理器注册到后台打印程序服务。为了正确安装恶意打印处理器,有效负载必须位于专用系统打印处理器目录中,该目录可以通过GetPrintProcessorDirectory API调用找到,或者通过该目录的相对路径引用。安装打印处理器后,必须重新启动在引导过程中启动的后台打印程序服务才能运行。后台打印程序服务在SYSTEM级别权限下运行,因此对手安装的打印处理器可能在提升的权限下运行。
预防措施:通过禁用SeLoadDriverPrivilege来限制可以加载或卸载设备驱动程序的用户帐户。
检测:监视是否存在异常内核驱动程序安装活动,这些活动可能会在系统引导期间滥用打印处理器来运行恶意DLL,以实现持久性和/或权限提升;监视新构建的文件,这些文件可能会在系统引导期间滥用打印处理器来运行恶意DLL,以实现持久性和/或权限提升;监视spoosv.exe加载的异常DLL。与已知良好软件或修补程序不相关的打印处理器可能是可疑的。新的打印处理器DLL将写入打印处理器目录;监视进程API对AddPrintProcessor和GetPrintProcessorDirectory的调用;监视器注册表写入HKLM\SYSTEM\ControlSet001\Control\Print\Environments\Windows体系结构]\Print Processors[用户定义的]\Driver或HKLM\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows体系结构]\打印处理器[用户定义]\Driver,因为它们与打印处理器安装有关。
XDG自动启动条目
介绍:当用户的桌面环境在登录时加载时,对手可能会添加或修改XDG自动启动条目以执行恶意程序或命令。XDG Autostart条目可用于任何符合XDG的Linux系统。XDG自动启动条目使用桌面条目文件(.Desktop)在用户登录时配置用户的桌面环境。这些配置文件确定用户登录时启动哪些应用程序,定义相关应用程序以打开特定文件类型,并定义用于打开可移动媒体的应用程序。敌人可能会滥用此功能,通过在.desktop配置文件中向Exec指令添加恶意二进制文件或命令的路径来建立持久性。当用户登录时加载用户的桌面环境时,位于XDG Autostart目录中的.desktop文件将自动执行。系统范围的自动启动条目位于/etc/xdg/Autostart目录中,而用户条目位于~/.config/Autostart文件夹中。敌人可以将这种技术与伪装相结合,将恶意的自动启动条目与合法程序混合在一起。
预防措施:仅将软件安装限制在受信任的存储库中,并小心孤立的软件包;将对XDG自动启动项的写访问权限限制为仅选择特权用户;限制用户帐户的权限,以便只有授权的特权用户才能创建和修改XDG自动启动条目。
检测:监视执行的命令和参数,这些命令和参数可能会修改XDG自动启动条目以在系统引导期间执行程序或命令;通过审核``/etc/XDG/autostart和
/.config/autostart/.config/autostart目录中的文件创建事件,可以检测到恶意的XDG自动启动条目。根据具体配置,防御者可能需要查询环境变量
XDG_ONFIG_DIRS,以确定自动启动条目的路径。与合法程序包无关的自动启动条目文件可能被视为可疑文件。还可以通过将条目与可信系统基线进行比较来识别可疑条目;通过审核
/etc/XDG/autostart和
目录中的文件修改事件,可以检测到恶意XDG自动启动条目。根据具体配置,防御者可能需要查询环境变量
XDG_ONFIG_DIRS`,以确定自动启动条目的路径。与合法程序包无关的自动启动条目文件可能被视为可疑文件。还可以通过将条目与可信系统基线进行比较来识别可疑条目;监视新执行的进程,这些进程可能会修改XDG自动启动条目以在系统引导期间执行程序或命令。
活动设置
介绍:敌人可以通过在本地机器的活动设置中添加注册表项来实现持久性。活动安装程序是一种Windows机制,用于在用户登录时执行程序。存储在注册表项中的值将在用户登录计算机后执行。这些程序将在用户的上下文下执行,并具有帐户的相关权限级别。敌人可能会通过在HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\下创建一个注册表项并设置StubPath的恶意值来滥用活动安装程序。此值将用作用户登录计算机时执行的程序。敌人可以滥用这些组件来执行恶意软件,如远程访问工具,以通过系统重新启动来保持持久性。敌人也可以使用伪装使注册表条目看起来像是与合法程序相关。
预防措施:
检测:监视执行的命令和参数,这些命令和参数可以通过向本地计算机的活动安装程序添加注册表项来实现持久性;监视新执行的进程,这些进程可以通过向本地机器的活动设置添加注册表项来实现持久性;监视注册表项添加到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\。Sysinternals Autorun等工具也可用于检测可能是持久性尝试的系统更改,包括列出活动安装注册表位置和启动文件夹。当与历史数据进行比较时,作为启动程序的可疑程序执行可能会显示为以前从未见过的异常进程;监视注册表项对HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\的修改。Sysinternals Autorun等工具也可用于检测可能是持久性尝试的系统更改,包括列出活动安装注册表位置和启动文件夹。当与历史数据进行比较时,作为启动程序的可疑程序执行可能会显示为以前从未见过的异常进程。
登录项
介绍:敌人可以添加登录项目以在用户登录时执行,从而获得持久性或升级权限。登录项是用户登录时自动启动的应用程序、文档、文件夹或服务器连接。登录项可以通过共享文件列表或服务管理框架添加。共享文件列表登录项可以使用AppleScript等脚本语言设置,而服务管理框架使用API调用SMLoginItemSetEnabled。使用服务管理框架安装的登录项利用launchd,在系统首选项中不可见,只能由创建它们的应用程序删除。使用共享文件列表创建的登录项在“系统首选项”中可见,可以在应用程序启动时隐藏应用程序,并通过LaunchServices而不是launchd执行,以在不使用Finder的情况下打开应用程序、文档或URL。用户和应用程序使用登录项来配置其用户环境,以启动常用的服务或应用程序,如电子邮件、聊天和音乐应用程序。敌人可以利用AppleScript和Native API调用创建登录项来生成恶意可执行文件。在macOS的10.5版本之前,对手可以通过使用AppleScript将苹果事件发送到“系统事件”进程来添加登录项目,该进程有一个用于操作登录项目的AppleScript字典。敌人可以使用命令,如告诉应用程序“系统事件”,使登录项在末尾具有properties/path/to/executable。此命令将恶意可执行文件的路径添加到登录项文件列表中,该列表位于~/Library/Application Support/com.apple.backgroundtaskmanagementagent/backgrounditems.btm
中。敌人还可以使用登录项启动可执行文件,这些可执行文件可用于远程控制受害者系统,或者通过提示用户凭据来获得权限提升。
预防措施:
检测:通过共享文件列表创建的所有登录项都可以使用系统首选项GUI或在~/Library/Application Support/com.apple.backgroundtaskmanagementagent/backgrounditems.btm文件中查看。应对这些地点进行监测和审计;通过共享文件列表创建的所有登录项都可以使用系统首选项GUI或在~/Library/Application Support/com.apple.backgroundtaskmanagementagent/backgrounditems.btm文件中查看。应对这些地点进行监测和审计;监视在登录时启动的进程中是否存在异常或未知的应用程序。登录项目的常规应用程序可能包括用户为配置其用户环境而添加的内容,如电子邮件、聊天或音乐应用程序,或者管理员为组织设置和保护所包含的内容。检查登录项中运行的应用程序是否也有异常行为,例如建立网络连接。
5.启动或登录初始化脚本
登录脚本(Windows)
介绍:敌人可以使用在登录初始化时自动执行的Windows登录脚本来建立持久性。Windows允许在特定用户或用户组登录到系统时运行登录脚本。这是通过将脚本的路径添加到HKCU\Environment\UserInitMprLogonScript注册表项来完成的。敌人可以使用这些脚本在单个系统上保持持久性。根据登录脚本的访问配置,可能需要本地凭据或管理员帐户。
预防措施:确保为注册表配置单元设置了适当的权限,以防止用户修改可能导致持久性的登录脚本的密钥。
检测:监视登录脚本的已执行命令和参数;监视新构建的进程和/或执行登录脚本的命令行;分析1-启动或登录初始化脚本:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") AND CommandLine="*reg*add*\Environment*UserInitMprLogonScript"
;监视与Windows登录脚本相关联的注册表项的创建,名称为HKCU\Environment\UserInitMprLogonScript;敌人可以安排软件在用户登录系统时运行;这样做是为了建立持久性,有时是为了横向运动。此触发器是通过注册表项HKEY_CURRENT_USER\EnvironmentUserInitMprLogonScript建立的。此签名看起来是对现有密钥的编辑或在该路径中创建新密钥。用户有意将良性脚本添加到此路径将导致误报;然而,这种情况并不多见。还有其他在启动或登录时运行脚本的方式不在此签名中涵盖。请注意,此签名与Windows Sysinternals自动运行工具重叠,后者也会显示对此注册表路径的更改;分析1-启动或登录初始化脚本:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode IN (12, 14, 13)) TargetObject= "*\Environment*UserInitMprLogonScript")
登录挂钩
介绍:敌人可以使用登录挂钩来建立在用户登录时执行的持久性。登录挂钩是一个plist文件,它指向一个特定的脚本,以便在用户登录时使用root权限执行。plist文件位于/Library/Preferences/com.apple.loginwindow.plist文件中,可以使用默认的命令行实用程序进行修改。这种行为与注销挂钩相同,在注销挂钩中,用户注销时可以执行脚本。所有挂钩都需要管理员权限才能修改或创建挂钩。敌人可以使用LoginHook或LogoutHook键值对在com.apple.loginwindow.plist文件中添加或插入恶意脚本的路径。恶意脚本将在下一次用户登录时执行。如果登录挂钩已经存在,对手可以向现有的登录挂钩添加额外的命令。一个系统一次只能有一个登录和注销挂钩。注意:登录挂钩在10.11版本的macOS中被弃用,取而代之的是Launch Daemon和Launch Agent
预防措施:将对登录脚本的写入权限限制为特定管理员。
检测:使用参数监视已执行的命令,以安装或修改登录挂钩;监控登录挂钩文件(/Library/Preferences.com/apple.loginwindow.plist)的创建和/或更改,尤其是正常管理职责之外的异常帐户;监视登录挂钩文件(/Library/Preferences.com/apple.loginwindow.plist)的更改,尤其是正常管理职责之外的异常帐户的更改;监视用于安装或修改登录挂钩的进程和/或命令行,以及这些挂钩在用户登录时生成的进程。
网络登录脚本
介绍:对手可以使用在登录初始化时自动执行的网络登录脚本来建立持久性。可以使用Active Directory或组策略对象分配网络登录脚本。这些登录脚本使用分配给它们的用户的权限运行。根据网络中的系统,初始化其中一个脚本可能应用于多个系统,也可能应用于所有系统。对手可能会使用这些脚本在网络上保持持久性。根据登录脚本的访问配置,可能需要本地凭据或管理员帐户。
预防措施:将对登录脚本的写入权限限制为特定管理员。
检测:监视Active Directory中所做的更改,这些更改可能使用在登录初始化时自动执行的网络登录脚本来建立持久性;监视登录脚本的已执行命令和参数;监控正常管理职责之外的异常账户新建的文件;监控对文件的更改,以防在正常管理职责之外对异常帐户进行意外修改;监视新构建的进程和/或执行登录脚本的命令行
RC脚本
介绍:敌人可以通过修改在类Unix系统启动期间执行的RC脚本来建立持久性。这些文件允许系统管理员在启动时为不同的运行级别映射和启动自定义服务。RC脚本需要root权限才能修改。敌人可以通过向rc.local、rc.common和其他特定于Unix发行版的rc脚本添加恶意二进制路径或shell命令来建立持久性。重新启动后,系统将以root用户身份执行脚本的内容,从而实现持久性。RC脚本的对抗性滥用对于使用根用户作为默认用户的轻量级类Unix发行版(如IoT或嵌入式系统)尤其有效。一些类似Unix的系统已经转移到Systemd,并反对使用RC脚本。现在,这是macOS中一种不推荐使用的机制,支持Launchd。这项技术可以在仍然执行RC脚本的Mac OS X Panther v10.3和早期版本上使用。为了保持向后兼容性,一些系统,如Ubuntu,如果存在正确的文件权限,将执行RC脚本。
预防措施:限制用户帐户的权限,以便只有经过授权的用户才能编辑rc.common文件。
检测:监视RC脚本执行的命令和参数,以了解异常或未知的应用程序或行为;监视新构建的/etc/rc.local文件;监视对/etc/目录中RC脚本的意外修改文件的更改;监视新构建的进程和/或执行/etc/rc.local的命令行(如果存在)。
启动项目
介绍:敌人可以使用在启动初始化时自动执行的启动项来建立持久性。启动项在启动过程的最后阶段执行,包含shell脚本或其他可执行文件以及系统用于确定所有启动项的执行顺序的配置信息。从技术上讲,这是一种不推荐使用的技术(已被Launch Daemon取代),因此,默认情况下,系统上不保证存在相应的文件夹/Library/StartupItems,但在macOS Sierra上似乎默认存在。启动项是一个目录,其可执行文件和配置属性列表(plist)StartupParameters.plist位于顶级目录中。对手可以在StartupItems目录中创建适当的文件夹/文件,以注册自己的持久性机制。此外,由于StartupItems在macOS的启动阶段运行,因此它们将作为提升的根用户运行。
预防措施:由于StartupItems已被弃用,因此阻止所有用户写入/Library/StartupItemss目录将阻止任何启动项的注册。
检测:监视登录脚本的已执行命令和参数;监控正常管理职责之外的异常账户新建的文件;监视对文件所做的更改,以防对/Library/StartupItem文件夹进行意外修改;监视在启动过程中执行的新构建的进程和/或命令行,以检查异常或未知的应用程序和行为
6.创建或修改系统流程
启动代理
介绍:作为持久性的一部分,敌人可以创建或修改启动代理以重复执行恶意有效载荷。当用户登录时,将启动一个按用户启动进程,该进程从/System/Library/LaunchAgents、/Librare/LaunchAgents和~/Library/LaunchAgents中的属性列表(.plist)文件中加载每个按需启动用户代理的参数。属性列表文件使用Label、ProgramArguments和RunAtLoad键来标识启动代理的名称、可执行文件位置和执行时间。安装Launch Agent通常是为了执行程序更新、在登录时启动用户指定的程序或执行其他开发人员任务。Launch Agent也可以使用Launchctl命令执行。对手可以安装一个新的Launch Agent,该Agent在登录时执行,方法是将.plist文件放入RunAtLoad或KeepAlive密钥设置为true的相应文件夹中。Launch Agent名称可以通过使用相关操作系统或良性软件中的名称进行伪装。启动代理是使用用户级权限创建的,并使用用户级许可执行。
预防措施:设置组策略以将文件权限限制到~/launchangents文件夹。
检测:确保指向/tmp或/shared文件夹中可执行文件的Launch Agent的ProgramArguments键与企业策略一致。确保RunAtLoad键设置为true的所有启动代理都与策略一致;监视新构建的文件,这些文件可能会创建或修改启动代理,以作为持久性的一部分重复执行恶意有效载荷;Launch Agent还需要磁盘上的文件以实现持久性,也可以通过其他文件监视应用程序对其进行监视;通过其他plist文件和实用程序(如Objective See的KnockKnock应用程序)监视Launch Agent的创建;监视对启动代理所做的更改,以便作为持久性的一部分重复执行恶意有效负载。
系统化服务
介绍:作为持久性的一部分,敌人可能会创建或修改系统服务,以重复执行恶意有效载荷。Systemd是一种系统和服务管理器,通常用于管理后台守护进程(也称为服务)和其他系统资源。Systemd是许多Linux发行版上的默认初始化(init)系统,取代了传统的init系统,包括SysVinit和Upstart,同时保持向后兼容。Systemd使用扩展名为.service的单元配置文件来编码有关服务进程的信息。默认情况下,系统级单元文件存储在根目录(/)的/systemd/system目录中。用户级单元文件存储在用户拥有的目录($HOME)的/systemd/User目录中。在.service单元文件中,以下指令用于执行命令:当服务由systemctl手动启动时执行ExecStart、ExecStartPre和ExecStartPost指令,或者当服务设置为自动启动时在系统启动时执行。ExecReload指令在服务重新启动时执行。ExecStop、ExecStopPre和ExecStopPost指令在服务停止时执行。敌人创建了新的服务文件,更改了.service文件的指令执行的命令,并修改了.server文件执行的用户指令,这可能会导致权限提升。敌人还可以在这些目录中放置符号链接,使systemd能够找到这些有效载荷,而不管它们位于文件系统的何处。.service文件的User指令可用于以特定用户身份运行服务,这可能导致基于特定用户/组权限的权限提升。
预防措施:仅将软件安装限制在受信任的存储库中,并小心孤立的软件包;systemd服务单元文件的创建和修改通常保留给管理员,如Linux根用户和其他具有超级用户权限的用户;将对systemd单元文件的读/写访问权限限制为仅选择有合法需要管理系统服务的特权用户;将用户对系统实用程序(如systemctl)的访问权限限制为只有合法需要的用户。
检测:还可以通过将结果与可信系统基线进行比较来识别可疑的系统服务。可以通过使用systemctl实用程序检查系统范围的服务来检测恶意的systemd服务:systemctl list units-type=service-all。审核“systemctl”实用程序以及相关实用程序(如/usr/sbin/service)的执行和命令行参数可能会发现恶意的systemd服务执行;可以通过审核/etc/Systemd/system、/usr/lib/Systemd/system/和/home//.config/Systemd/user/目录中的文件创建和修改事件以及相关的符号链接来检测系统服务单元文件;可以通过审核/etc/Systemd/system、/usr/lib/Systemd/system/和/home//.config/Systemd/user/目录中的文件创建和修改事件以及相关的符号链接来检测系统服务单元文件;以这种方式生成的可疑进程或脚本的父进程为“systemd”,父进程ID为1,通常以“root”用户身份执行;作为持久性的一部分,监视新构建的systemd服务是否重复执行恶意有效负载;分析文件系统上存在的.service文件的内容,并确保它们引用合法的、预期的可执行文件。
Windows服务
介绍:作为持久性的一部分,攻击者可能会创建或修改Windows服务,以重复执行恶意有效负载。当Windows启动时,它会启动称为服务的程序或应用程序,以执行后台系统功能。Windows服务配置信息,包括服务的可执行程序或恢复程序/命令的文件路径,存储在Windows注册表中。敌人可以安装新服务或修改现有服务以在启动时执行,以便在系统上持久存在。可以使用系统实用程序(如sc.exe)、直接修改注册表或直接与Windows API交互来设置或修改服务配置。敌人也可能使用服务来安装和执行恶意驱动程序。例如,将驱动程序文件(例如.sys)拖放到磁盘后,可以通过CreateServiceW()等原生API函数(或通过ZwLoadDriver()和ZwSetValueKey()等函数手动加载和注册有效负载,方法是创建所需的服务注册表值(即修改注册表),或使用PnPUtil.exe等命令行实用程序。敌人可能会利用这些驱动程序作为Rootkit来隐藏系统上存在的恶意活动。作为特权升级利用的一部分,敌人也可能将已签名但易受攻击的驱动程序加载到受损的机器上(称为“自带易受攻击驱动程序”(BYOVD))。服务可以使用管理员权限创建,但在SYSTEM权限下执行,因此对手也可以使用服务升级权限。敌人也可以通过服务执行直接启动服务。为了使检测分析更具挑战性,恶意服务还可能包含伪装任务或服务(例如:使用与合法操作系统或良性软件组件相关的服务和/或有效载荷名称)。对手还可以创建“隐藏”服务(即隐藏工件),例如通过使用sc sdset命令通过服务描述符定义语言(SDDL)设置服务权限。这可能会在标准服务枚举方法(如Get-service、sc-query和services.exe)的视图中隐藏Windows服务。
预防措施:使用能够检测企业内系统上的特权和服务滥用机会并加以纠正的审核工具;在Windows 10上,启用减少攻击面(ASR)规则,以防止应用程序将签名的易受攻击的驱动程序写入系统。在Windows 10和11上,启用Microsoft漏洞驱动程序阻止列表,以帮助加强对第三方开发的服务驱动程序的攻击;在可能的情况下,只强制注册和执行合法签名的服务驱动程序;确保已启用驱动程序签名强制以限制未签名的驱动程序的安装;限制用户帐户和组的权限,以便只有经过授权的管理员才能与服务更改和服务配置进行交互。
检测:监视可以创建或修改服务的操作的进程和命令行参数。命令行调用能够添加或修改服务的工具可能不常见,这取决于系统在特定环境中的典型使用方式。服务也可以通过Windows系统管理工具(如Windows management Instrumentation和PowerShell)进行修改,因此可能需要配置额外的日志记录以收集适当的数据。还收集用于分析的服务实用程序执行和服务二进制路径参数。甚至可以更改服务二进制路径以执行命令或脚本;监视不属于已知软件更新/修补程序周期的新服务驱动程序安装和加载(例如:Sysmon事件ID 6);注意:Sysmon事件ID 6(驱动程序加载)提供了有关加载的驱动程序是否使用有效签名进行签名的信息(通过signature和SignatureStatus字段)。因此,帮助减少与此事件相关的警报和误报数量的一种方法是过滤并排除由Microsoft等常见合法发布者签名的任何驱动程序加载事件;敌人可能会修改现有服务的二进制文件,以实现持久性,同时可能进行防御规避。如果新创建或修改的服务作为服务运行,则可能指示APT活动。然而,服务通常是由合法软件安装的。一个经过良好调优的基线对于区分良性和恶意服务修改至关重要。查找创建文件后作为服务运行的事件。在这些情况下,会创建一个新的服务或修改二进制文件。许多程序,如msiexec.exe,可以合法地执行这些行为,并可用于帮助验证合法的服务创建/修改;监视代码在远程主机上执行的几种方式。最常见的方法之一是通过Windows服务控制管理器(SCM),它允许授权用户远程创建和修改服务。一些工具(如PsExec)使用此功能;当客户端与服务控制管理器远程通信时,有两种可观察的行为。首先,客户端通过135/tcp连接到RPC端点映射器。这处理身份验证,并告诉客户端在这种情况下SCM-i监听的端点是哪个端口。然后,客户端直接连接到services.exe上的监听端口。如果请求是使用已知的命令行启动现有服务,则SCM进程将运行相应的命令;通过查找services.exe接收网络连接并立即生成子进程,可以检测到这种复合行为;监视API调用,这些调用可能创建或修改Windows服务(例如:CreateServiceW()),以作为持久性的一部分重复执行恶意有效负载;与历史数据相比,通过服务执行的可疑程序可能会显示为以前从未见过的异常进程。从已知服务中查找异常进程调用树,并查找可能与发现或其他对手技术有关的其他命令的执行。不应孤立地看待数据和事件,而应将其视为可能导致其他活动的行为链的一部分,如为指挥和控制建立的网络连接、通过发现了解环境细节以及横向移动;Windows在processservices.exe中运行服务控制管理器(SCM)。Windows在svchost.exe组中作为独立进程或DLL加载启动服务。要成为合法服务,进程(或DLL)必须具有适当的服务入口点SvcMain。如果应用程序没有入口点,那么它将超时(默认为30秒),进程将被终止;为了在超时后幸存下来,对手和红队可以创建直接指向cmd.exe的服务,该服务带有/c标志,后面跟着所需的命令。/c标志使命令shell运行命令并立即退出。因此,所需的程序将保持运行,并且它将报告启动服务的错误。此分析将捕获用于启动实际恶意可执行文件的命令提示符实例。此外,services.exe的子代和子代默认情况下将作为SYSTEM用户运行;注意:创建过去30天内看到的服务的基线和今天看到的服务列表。从今天看到的服务中删除基线中的服务,留下新服务的列表。返回将services.exe作为父进程的所有名为cmd.exe的进程。因为这种情况永远不会发生,/c标志在搜索中是多余的;分析2-服务启动CMD:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") Image="*cmd.exe" and ParantImage="*services.exe"
;新服务的创建可以生成可变事件(例如:事件ID 4697和/或7045),尤其是与未知/异常驱动程序相关联的事件。可以在安装新软件期间创建新的、良性的服务;分析1-创建具有异常目录路径的新服务,如APPDATA中的临时文件:(source="*WinEventLog:Security" EventCode="4697") OR (source="*WinEventLog:System" EventCode="7045") | where ServiceFilePath LIKE "%APPDATA%" OR ServiceImage LIKE "%PUBLIC%"
;监视对Windows服务所做的更改,以作为持久性的一部分重复执行恶意有效负载;监视新构建的windows注册表项,这些注册表项可能会创建或修改windows服务,以作为持久性的一部分重复执行恶意有效负载;分析1-创建HKLM\System\CurrentControlSet\Services注册表项:source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="12" TargetObject="HKLM\System\CurrentControlSet\Services*"
;查找与已知软件、修补程序周期等不相关的服务注册表项的更改。服务信息存储在注册表的HKLM\SYSTEM\CurrentControlSet\Services中。对二进制路径和服务启动类型的更改从手动或禁用更改为自动,如果通常不这样做,则可能是可疑的。诸如Sysinternals Autorun之类的工具也可以用于检测可能是持久性尝试的系统服务更改;分析1-修改HKLM\System\CurrentControlSet\Services注册表项:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode IN (13, 14) EventType= "SetValue" TargetObject="HKLM\System\CurrentControlSet\Services*" | where RegistryKeyPath LIKE "%ImagePath%" OR RegistryKeyPath LIKE "%Type%" OR RegistryKeyPath LIKE "%DisplayName%" OR RegistryKeyPath LIKE "%Objectname%"
启动精灵
介绍:作为持久性的一部分,敌人可能会创建或修改Launch Daemon以执行恶意有效载荷。Launch Daemon是用于与Launchd交互的plist文件,Launchd是macOS使用的服务管理框架。启动守护程序需要提升的安装权限,在登录前为系统上的每个用户执行,并在后台运行,无需用户交互。在macOS初始化启动过程中,launchd进程从/system/Library/LaunchDaemons/和/Librare/LaunchDaemons/中的plist文件加载用于按需启动系统级守护程序的参数。所需的启动后台进程参数包括用于标识任务的标签、用于提供可执行文件路径的程序以及用于指定任务运行时间的RunAtLoad。启动守护程序通常用于提供对共享资源的访问、软件更新或执行自动化任务。敌人可以通过使用设置为true的RunAtLoad参数和设置为恶意可执行路径的Program参数来安装配置为在启动时执行的启动守护程序。守护进程名称可以通过使用相关操作系统或良性软件的名称来伪装(即伪装)。执行启动守护程序时,程序将继承管理权限。此外,系统配置更改(如安装第三方软件包管理软件)可能会导致/usr/local/bin等文件夹变得全局可写。因此,糟糕的配置可能会允许对手修改当前Launch Daemon的plist文件所引用的可执行文件。
预防措施:使用能够检测系统上文件夹权限滥用机会的审核工具,尤其是审查第三方软件对文件夹所做的更改;限制用户帐户的权限并修正权限提升向量,以便只有经过授权的管理员才能创建新的启动后台进程。
检测:一些合法的LaunchDaemon指向可能被利用的未签名代码。对于RunAtLoad参数设置为true的Launch Daemon,请确保Program参数指向已签名的代码或可执行文件符合企业策略。某些参数可以与其他参数互换,例如Program和ProgramArguments参数,但必须存在一个参数;监视添加到/Library/LaunchDaemons/文件夹的新文件。系统启动守护程序受SIP保护;监视文件中可能创建或修改Launch Daemon以作为持久性的一部分执行恶意有效负载的更改;监视新执行的进程,这些进程可能会创建或修改Launch Daemon以作为持久性的一部分执行恶意有效负载;作为持久性的一部分,新构建服务的监视器可能会创建或修改启动守护进程以执行恶意有效负载;作为持久性的一部分,监视服务对Launch Daemon所做的更改,以执行恶意有效负载。
集装箱服务
介绍:敌人可能会创建或修改容器或容器集群管理工具,这些工具作为守护程序、代理或服务在单个主机上运行。其中包括用于创建和管理单个容器的软件,如Docker和Podman,以及容器集群节点级代理,如kubelet。通过修改这些服务,对手可能能够实现持久性或提升其在主机上的权限。例如,通过使用带有restart=always指令的docker-run或podman-run命令,可以将容器配置为在主机上持续重新启动。有权访问(rootful)docker命令的用户也可以升级他们在主机上的权限。在Kubernetes环境中,DaemonSets允许对手在所有节点上持久部署容器,包括稍后添加到集群中的节点。还可以使用pod规范中的nodeSelector或nodeName字段将pod部署到特定节点。请注意,容器也可以配置为作为Systemd Services运行。
预防措施:在可能的情况下,考虑在无根模式下强制使用容器服务,以限制权限提升或对运行容器的主机产生恶意影响的可能性;将对docker等实用程序的访问权限限制为只有合法需要的用户,尤其是在以root模式使用docker的情况下。在Kubernetes环境中,只向需要的用户授予部署pod的权限。
检测:监视docker或podman命令的可疑使用,例如试图装载主机的根文件系统;监视作为持久性或权限提升的一部分重复执行恶意有效负载的新建容器。
7.域或租户策略修改
组策略修改
介绍:对手可能会修改组策略对象(GPO),以破坏对域的预期自由访问控制,通常目的是提升对域的权限。组策略允许集中管理Active Directory(AD)中的用户和计算机设置。GPO是组策略设置的容器,由存储在可预测的网络路径<DOMAIN>\SSYSVOL <DOMAIN>\Policies\中的文件组成。与AD中的其他对象一样,GPO具有与其相关联的访问控制。默认情况下,域中的所有用户帐户都具有读取GPO的权限。可以将GPO访问控制权限(例如写入访问)委派给域中的特定用户或组。恶意GPO修改可用于实现许多其他恶意行为,如计划任务/作业、禁用或修改工具、入口工具传输、创建帐户、服务执行等。由于GPO可以控制AD环境中的许多用户和机器设置,因此这种GPO滥用可能会引发大量潜在的攻击。例如,可以通过修改GPO设置(在本例中是修改<GPO_PATH>\Machine\Preferences\ScheduledTasks\ScheduledTTasks.xml
),利用公共可用脚本(如New-GPOIMediateTask)来自动创建恶意的计划任务/作业。在某些情况下,对手可能会修改特定的用户权限,如在<GPO_PATH>\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf
中设置的SeEnableDelegationPrivilege,以实现完全控制域的微妙AD后门,因为对手控制下的用户帐户将能够修改GPO。
预防措施:使用审核工具,如BloodHound(1.5.1及更高版本),识别并纠正GPO权限滥用机会(例如:GPO修改权限);考虑实现WMI和安全筛选,以进一步定制GPO将应用于哪些用户和计算机。
检测:监视新构建的活动目录对象,如Windows EID 5137;监视是否意外删除了活动目录对象,如Windows EID 5141;监视对AD设置所做的更改,以发现对用户帐户的意外修改,例如对用户属性(凭据、状态等)的删除或潜在的恶意更改;监视执行的命令和自变量,这些命令和自变量可能会修改组策略对象(GPO)以破坏域的预期自由访问控制,通常目的是提升域上的权限。
信任修改
介绍:对手可能会添加新的域信任,修改现有域信任的属性,或以其他方式更改域和租户之间的信任关系配置,以逃避防御和/或提升特权。信任细节,如用户身份是否联合,允许在域或租户之间应用身份验证和授权属性,以访问共享资源。这些信任对象可能包括应用于服务器、令牌和域的帐户、凭据和其他身份验证材料。操纵这些信任可能会使对手通过修改设置来添加他们控制的对象,从而提升特权和/或规避防御。例如,在Microsoft Active Directory(AD)环境中,这可以用于伪造SAML令牌,而不需要破坏签名证书来伪造新凭据。相反,对手可以操纵域信任来添加自己的签名证书。对手还可以使用Active Directory联合身份验证服务(AD FS)将AD域转换为联合域,这可能会启用恶意信任修改,例如更改声明发布规则,以作为指定用户登录任何有效的凭据集。对手还可以向诸如Okta的身份租户添加新的联合身份提供者,这可以使对手能够认证为租户的任何用户。
预防措施:使用最低权限的主体,并保护对域信任和身份租户的管理访问。
检测:监视新构建的活动目录对象,如Windows EID 5137;监视对AD设置所做的更改,以发现对域信任设置的意外修改,例如当用户或应用程序修改域上的联盟设置时;监控对基于云的目录服务和身份租户的更改,尤其是关于添加新的联合身份提供程序的更改。在Okta环境中,事件system.idp.lifecycle.create将在创建身份提供程序时触发,而来自第三方身份提供程序的登录将创建事件user.authentication.auth_via_idp;监视执行的命令和参数,这些命令和参数通过ActionTypes将域身份验证从“托管”更新为“联合”在域上设置联合设置并设置域身份验证。监视PowerShell命令,如:Update-MSOLFederatedDomain –DomainName: "Federated Domain Name"
,或Update-MSOLFederatedDomain –DomainName: "Federated Domain Name" –supportmultipledomain
。
8.逃到主机
介绍:敌人可能会突破容器以访问底层主机。这可以允许对手从主机级别或主机本身访问其他容器化资源。原则上,容器化资源应提供应用程序功能的清晰分离,并与主机环境隔离。对手有多种方式可以逃到宿主环境中。示例包括创建一个容器,该容器被配置为使用绑定参数装载主机的文件系统,这允许对手丢弃有效载荷并在主机上执行控制实用程序,如cron;利用特权容器在底层主机上运行命令或加载恶意内核模块;或者滥用系统调用(如unshare和keyctl)来提升权限和窃取机密。此外,对手可能能够利用安装了容器管理套接字(如docker.sock)的受损容器,通过容器管理命令突破容器。敌人也可以通过特权升级利用来逃脱,例如利用全局符号链接中的漏洞来访问主机的根目录。获得对主机的访问权限可以为对手提供实现后续目标的机会,例如建立持久性、在环境中横向移动、访问主机上运行的其他容器或在主机上建立指挥和控制通道。
预防措施:考虑使用seccomp、seccomp-bpf或限制某些系统调用(如装载)的类似解决方案。在Kubernetes环境中,考虑定义Pod安全标准,以限制容器对主机进程名称空间、主机网络和主机文件系统的访问;从容器中移除不必要的工具和软件;尽可能使用只读容器、只读文件系统和最少的映像来阻止命令的运行。在可能的情况下,还可以考虑使用应用程序控制和软件限制工具(如SELinux提供的工具)来限制对容器中的文件、进程和系统调用的访问;确保容器默认情况下不以root身份运行,并且不使用不必要的权限或已安装的组件。在Kubernetes环境中,考虑定义Pod安全标准,以防止Pod运行特权容器。
检测:监控环境中可疑或未知容器映像和pod的部署情况,尤其是以root身份运行的容器;监视内核模块的安装情况,这些模块可能被滥用来转义主机上的容器;监视系统调用的意外使用情况,如装载,这可能表明有人试图从特权容器转义到主机;监视进程活动(例如在容器外和/或主机上生成的意外进程),这些活动可能表明有人试图从特权容器转义到主机;监视与更改容器的卷配置相关联的集群级(Kubernetes)数据和事件。
9.事件触发的执行
更改默认文件关联
介绍:对手可以通过执行由文件类型关联触发的恶意内容来建立持久性。打开文件时,将检查用于打开文件的默认程序(也称为文件关联或处理程序)。文件关联选择存储在Windows注册表中,可以由具有注册表访问权限的用户、管理员或程序编辑,也可以由管理员使用内置的assoc实用程序编辑。当具有给定扩展名的文件打开时,应用程序可以修改给定文件扩展名的关联以调用任意程序。系统文件关联列在HKEY_CLASSES_ROOT下。[扩展名],例如HKEY_CLASSES_ROOT.txt。条目指向位于HKEY_CLASSES_ROOT[handler]的该扩展的处理程序。然后,在HKEY_CLASSES_ROOT[handler]\shell[action]\n命令的shell键下,将各种命令作为子键列出。例如:HKEY_CLASSES_ROOT\txtfile\shell\open\command HKEY_CLASSES_ROOT\txtfile\shell\print\command列出的键的值是处理程序打开文件扩展名时执行的命令。敌人可以修改这些值以连续执行任意命令。
预防措施:
检测:监视执行的命令和参数,这些命令和参数可能通过执行由文件类型关联触发的恶意内容来建立持久性;监视新执行的进程,这些进程可能通过执行由文件类型关联触发的恶意内容来建立持久性;收集并分析注册表项的更改,这些更改将文件扩展名与要执行的默认应用程序相关联,并与该进程的未知进程启动活动或异常文件类型相关联。用户文件关联首选项存储在[HKEYCURRENT_User]\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts下,并覆盖在[HKEYCLASSES_ROOT]下配置的关联。用户首选项的更改将发生在此条目的子项下。
屏幕保护程序
介绍:对手可以通过执行由用户不活动触发的恶意内容来建立持久性。屏幕保护程序是在用户不活动的可配置时间后执行的程序,由扩展名为.scr的可移植可执行文件(PE)组成。Windows屏幕保护程序scrnsave.scr位于C:\Windows\System32\和C:\Windows\sysWOW64\中(在64位Windows系统上),以及基本Windows安装中包含的屏幕保护程序。以下屏幕保护程序设置存储在注册表(HKCU\Control Panel\Desktop\)中,可以进行操作以实现持久性:SCRNSAVE.exe-设置为恶意PE路径ScreenSaveActive-设置为“1”以启用屏幕保护程序ScreenSaveIsSecure-设置为为“0”以不需要密码解锁ScreenSaveTimeout-在执行屏幕保护程序之前设置用户不活动超时。敌人可以通过设置屏幕保护程序在用户不活动一定时间段后运行恶意软件来使用屏幕保护程序设置来保持持久性。
预防措施:如果不需要屏幕保护程序,请使用组策略禁用它们;阻止.scr文件从非标准位置执行。
检测:监视.scr文件的已执行命令和参数;监视新构建的文件,这些文件可能通过执行由用户不活动触发的恶意内容来建立持久性;分析1-在用作屏幕保护程序文件的磁盘上创建:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="11") TargetObject="*\Software\Policies\Microsoft\Windows\Control Panel\Desktop\SCRNSAVE.EXE"
;监视对文件所做的更改,这些更改可能会通过执行由用户不活动触发的恶意内容来建立持久性;注意:虽然没有文件修改的标准事件,但Windows事件ID 4663(试图访问对象)可用于警告试图访问屏幕保护程序文件(通常以.scr的文件扩展名结尾);监视新执行的进程,这些进程可能通过执行由用户不活动触发的恶意内容来建立持久性;分析1-HKCU\控制面板\桌面注册表项:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") | where CommandLine LIKE "%reg%" AND CommandLine LIKE "%add%" AND CommandLine LIKE "%HKCU\Control Panel\Desktop\%"
;监视注册表中可能与典型用户行为不相关的屏幕保护程序配置更改。Sysinternals Autorun等工具可用于检测注册表中屏幕保护程序二进制路径的更改。默认的屏幕保护程序文件存储在C:\Windows\System32中。定义不可疑的屏幕保护程序文件列表时,请将这些文件用作参考;分析1-从屏幕保护程序编辑注册表:source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode IN (13, 14) TargetObject="*\Software\Policies\Microsoft\Windows\Control Panel\Desktop\SCRNSAVE.EXE"
Windows Management Instrumentation事件订阅
介绍:敌人可以通过执行由Windows Management Instrumentation(WMI)事件订阅触发的恶意内容来建立持久性并提升权限。WMI可用于安装在定义的事件发生时执行代码的事件筛选器、提供程序、使用者和绑定。可以订阅的事件示例包括挂钟时间、用户登录或计算机的正常运行时间。敌人可以使用WMI的功能订阅事件,并在事件发生时执行任意代码,从而在系统上提供持久性。敌人还可以使用mofcomp.exe将WMI脚本编译到Windows管理对象(MOF)文件(扩展名.MOF)中,这些文件可用于创建恶意订阅。WMI订阅执行由WMI提供程序主机进程(WmiPrvSe.exe)代理,因此可能导致SYSTEM权限提升。
预防措施:在Windows 10上,启用减少攻击面(ASR)规则,以防止恶意软件滥用WMI以获得持久性;防止管理员帐户和特权帐户系统之间的凭据重叠;默认情况下,只允许管理员使用WMI进行远程连接;限制允许连接的其他用户,或禁止所有用户远程连接到WMI。
检测:监视可用于注册WMI持久性的已执行命令和参数,例如register-WmiEvent PowerShell cmdlet
;监视HKLM\SOFTWARE\Microsoft\WBEM文件夹外的MOF文件,因为几乎所有合法的MOF都将存储在WBEM文件夹中。对手可能会创建修改后的MOF文件,以便将其编入WMI事件订阅;监视订阅执行后新执行的进程(即从WmiPrvSe.exe WMI提供程序主机进程生成);注意:Windows事件ID 4688(已创建新进程)和Sysmon事件ID 1(进程创建)可用于通过筛选父进程名称为WmiPrvSe.exe的事件来提醒WMI事件订阅触发器创建的进程;监视mofcomp.exe是否作为可疑shell或脚本运行实用程序的子级(\powershell.exe或\cmd.exe)执行,或者通过在命令行中具有可疑路径(如%temp%)执行。对手可能会使用mofcomp.exe编译修改后的MOF文件,以创建恶意WMI事件订阅;监视WMI事件订阅条目,将当前WMI事件订阅与每个主机的已知良好订阅进行比较。诸如Sysinternals Autorun之类的工具也可以用于检测WMI更改,这些更改可能是持久化的尝试。监视新WMI EventFilter、EventConsumer和FilterToConsumerBinding事件的创建。当创建新的EventFilterToConsumerBinding事件时,事件ID 5861会记录在Windows 10系统上。
Unix外壳配置修改
介绍:敌人可以通过执行由用户外壳触发的恶意命令来建立持久性。用户Unix外壳在整个会话的不同时间点根据事件执行多个配置脚本。例如,当用户打开命令行界面或远程登录(例如通过SSH)时,会启动登录shell。登录shell执行来自系统(/etc/
)和用户主目录(~/
)的脚本来配置环境。系统上的所有登录shell在启动时都使用/etc/profile
。这些配置脚本在其目录的权限级别运行,通常用于设置环境变量、创建别名和自定义用户的环境。当shell退出或终止时,将执行额外的shell脚本以确保shell正确退出。敌人可能试图通过将命令插入shell自动执行的脚本来建立持久性。以bash为例,它是大多数GNU/Linux系统的默认外壳,对手可能会在/etc/profile
和/etc/profile.d
文件中添加启动恶意二进制文件的命令。这些文件通常需要root权限才能修改,并且每次启动系统上的任何shell时都会执行这些文件。对于用户级权限,对手可以在~/.bash_profile
、~/.bash _login
或~/.profile
中插入恶意命令,这些命令是在用户打开命令行界面或远程连接时来源的。由于系统只执行所列顺序中的第一个现有文件,因此对手使用~/.bash_profile来确保执行。敌人还利用了~/.bashrc
文件,如果远程建立连接或打开额外的交互式shell(如命令行界面中的新选项卡),则会额外执行该文件。一些恶意软件的目标是终止程序以触发执行,对手可以在会话结束时使用~/.bash_logout
文件执行恶意命令。对于macOS,该技术的功能类似,但可能会利用zsh,这是macOS 10.15+的默认外壳。当Terminal.app打开时,应用程序将启动一个zsh登录shell和一个zsh-交互式shell。登录shell使用/etc/profile
、/etc/zshenv
、/etc/zprofile
和/etc/zlogin
配置系统环境。登录shell然后使用~/.zprofile
和~/.zlogin``配置用户环境。交互式shell使用~/.zshrc
来配置用户环境。退出后,将执行/etc/zlogout
和~/.zlogout
。对于遗留程序,macOS在启动时执行/etc/bashrc
。
预防措施:使这些文件不可变并且只能由某些管理员更改将限制对手轻松创建用户级持久性的能力。
检测:监视执行的命令和参数,这些命令和参数可能通过执行由用户外壳触发的恶意命令来建立持久性;监视新构建的文件,这些文件可能通过执行由用户外壳触发的恶意命令来建立持久性。对于大多数Linux和macOS系统,系统上可用的有效shell选项的文件路径列表位于/etc/shell文件中;监视/etc/profile和/etc/profile.d的更改,这些文件只能由系统管理员修改。MacOS用户可以利用Endpoint Security Framework文件事件监视这些特定文件;监视新执行的进程,这些进程可能通过执行由用户外壳触发的恶意命令来建立持久性。
陷阱
介绍:敌人可以通过执行由中断信号触发的恶意内容来建立持久性。trap命令允许程序和shell指定将在接收到中断信号时执行的命令。一种常见的情况是脚本允许优雅地终止和处理常见的键盘中断,如ctrl+c和ctrl+d。作为持久机制,当shell遇到特定中断时,对手可以使用它来注册要执行的代码。陷阱命令采用以下格式陷阱“命令列表”信号,当接收到“信号”时,将执行“命令列表“。
预防措施:
检测:监视执行的命令和自变量,这些命令和自变量可能通过执行由中断信号触发的恶意内容来建立持久性;监视新构建的文件,这些文件可能通过执行由中断信号触发的恶意内容来建立持久性;监视对文件所做的更改,这些更改可能通过执行由中断信号触发的恶意内容来建立持久性;监视新执行的进程,这些进程可能通过执行由中断信号触发的恶意内容来建立持久性。
LC_LOAD_DYLIB添加
介绍:攻击者可以通过执行由受污染二进制文件的执行触发的恶意内容来建立持久性。Mach-O二进制文件有一系列标头,用于在加载二进制文件时执行某些操作。Mach-O二进制文件中的LC_LOAD_DYLIB头告诉macOS和OSX在执行期间要加载哪些动态库(DYLIB)。只要对其余字段和依赖项进行了调整,就可以将它们临时添加到已编译的二进制文件中。有一些工具可用于执行这些更改。敌人可以修改Mach-O二进制头,以在每次执行二进制时加载并执行恶意dylib。尽管任何更改都会使二进制文件上的数字签名无效,因为二进制文件正在被修改,但这可以通过简单地从二进制文件中删除LC_CODE_SIGNATURE命令来补救,以便在加载时不检查签名。
预防措施:二进制文件也可以根据它们需要的动态库进行基线化,如果应用程序需要一个新的动态库,而该动态库没有作为更新的一部分,则应该进行调查;强制所有二进制文件由正确的Apple Developer ID签名;允许应用程序通过已知哈希。
检测:监视执行的命令和参数,这些命令和参数可能通过执行受污染二进制文件触发的恶意内容来建立持久性;对二进制文件的更改与应用程序更新或修补程序不一致也极为可疑;监视文件系统中应用程序二进制文件的更改和无效的校验和/签名;监视DLL/PE文件事件,特别是创建这些二进制文件以及将DLL加载到进程中。查找无法识别或未正常加载到进程中的DLL;监视进程中可能用于修改二进制标头的进程。
Netsh帮助程序DLL
介绍:敌人可以通过执行由Netsh Helper DLL触发的恶意内容来建立持久性。Netsh.exe(也称为Netshell)是一个命令行脚本实用程序,用于与系统的网络配置交互。它包含添加辅助DLL以扩展实用程序功能的功能。已注册netsh.exe帮助程序DLL的路径输入到位于HKLM\SOFTWARE\Microsoft\netsh的Windows注册表中。敌人可以使用netsh.exe助手DLL以持久的方式触发任意代码的执行。此执行将在执行netsh.exe的任何时候发生,这可以通过另一种持久性技术自动发生,或者如果作为其正常功能的一部分执行netshexe的系统上存在其他软件(例如:VPN)。
预防措施:
检测:监视执行的命令和参数,这些命令和参数可能通过执行由Netsh Helper DLL触发的恶意内容来建立持久性;监视DLL/PE文件事件,特别是创建这些二进制文件以及将DLL加载到进程中。查找无法识别或未正常加载到进程中的DLL;在大多数环境中,netsh.exe具有任何子进程可能是不常见的。监视进程执行情况,并调查netsh.exe派生的任何子进程是否存在恶意行为;监视HKLM\SOFTWARE\Microsoft\Netsh注册表项中与已知系统文件或良性软件不相关的任何新条目或可疑条目。
辅助功能
介绍:对手可以通过执行由可访问性特征触发的恶意内容来建立持久性和/或提升权限。Windows包含辅助功能,这些功能可以在用户登录之前使用组合键启动(例如:当用户在Windows登录屏幕上时)。对手可以在不登录系统的情况下修改这些程序的启动方式,以获得命令提示或后门。两个常见的辅助功能程序是C:\Windows\System32\sethc.exe,当按下shift键五次时启动;C:\Windows\Systems32\utilman.exe,当按Windows+U组合键时启动。sethc.exe程序通常被称为“粘性密钥”,被对手用于通过远程桌面登录屏幕进行未经验证的访问。根据Windows版本的不同,对手可能会以不同的方式利用这些功能。对手使用的常见方法包括替换注册表中的可访问性功能二进制文件或指向这些二进制文件的指针/引用。在较新版本的Windows中,对于x64系统,需要对替换的二进制文件进行数字签名,二进制文件必须位于%systemdir%\中,并且必须受到Windows文件或资源保护(WFP/WRP)的保护。图像文件执行选项注入调试器方法可能是一种潜在的解决方法,因为它不需要替换相应的可访问性功能二进制文件。例如,对于Windows XP及更高版本以及Windows Server 2003/R2及更高版上的简单二进制替换,程序(例如C:\Windows\System32\utilman.exe)可以替换为“cmd.exe”(或其他提供后门访问的程序)。随后,坐在键盘旁或通过远程桌面协议连接时,在登录屏幕上按下适当的组合键,将使用SYSTEM权限执行替换的文件。其他辅助功能也可以以类似的方式使用:屏幕键盘:C:\Windows\System32\osk.exe
;放大镜:C:\Windows\System32\Magnify.exe
;讲述人:C:\Windows\ System32\Narrator.exe
;显示切换器:C:\Windows\System32\DisplaySwitch.exe
;应用程序切换器:C:\Windows\System32\AtBroker.exe
预防措施:对手可以用替代二进制文件替换可访问性功能二进制文件来执行此技术。通过使用应用程序控制工具,如Windows Defender应用程序控制、AppLocker或软件限制策略(如适用),识别并阻止通过辅助功能功能执行的潜在恶意软件;如果可能,请使用远程桌面网关来管理网络中RDP的连接和安全配置;要远程使用此技术,对手必须将其与RDP结合使用。在创建会话并显示登录屏幕之前,请确保启用“网络级身份验证”以强制远程桌面会话进行身份验证。在Windows Vista及更高版本上,默认情况下会启用它。
检测:监视执行的命令和参数,这些命令和参数可能通过执行由可访问性功能触发的恶意内容来建立持久性和/或提升权限。命令行调用能够修改相关密钥注册表的工具也是可疑的。应该监视实用程序参数和二进制文件本身的更改;注意:事件ID 4104(来自Microsoft Windows Powershell/操作日志)捕获Powershell脚本块,这些脚本块可以被分析并用于检测辅助功能的滥用;监视新构建的文件,这些文件可能通过执行由可访问性功能触发的恶意内容来建立持久性和/或提升权限;监视对文件所做的更改,这些更改可能会通过执行由可访问性功能触发的恶意内容来建立持久性和/或提升权限。对可访问性实用程序二进制文件或与已知软件、补丁周期等不相关的二进制路径的更改是可疑的;监视新执行的进程,这些进程可能通过执行由可访问性功能触发的恶意内容来建立持久性和/或提升权限;对手可以使用可访问性功能(易于访问),如StickyKeys或Utilman,从登录屏幕启动命令外壳并获得SYSTEM访问权限。由于对手无法对机器进行物理访问,因此必须在远程桌面中运行此技术。为了防止对手在未经首次身份验证的情况下进入登录屏幕,必须启用网络级身份验证(NLA)。如果为其中一个可访问性功能设置了调试器,则它将拦截该功能的进程启动,并执行新的命令行。此分析查找直接从登录进程winlogon.exe启动的cmd.exe或powershell.exe的实例;使用易用性中心可以运行多个辅助功能程序;实现此技术的一个简单方法是注意,在默认的Windows配置中,system32文件夹的路径中没有空格。如果辅助功能程序使用调试器集运行,则Windows将启动调试器进程并将命令行附加到辅助功能程序。因此,在路径之前的命令行中会插入一个空格。在可访问性程序的名称之前的命令行中查找空格的任何实例将有助于确定何时设置调试器;Windows注册表位置HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options允许在执行过程中为应用程序设置参数。恶意行为者使用的一个功能是“调试器”选项。如果某个键启用了此值,则可以指定“调试”命令行。Windows将启动“调试”命令行,并将原始命令行作为参数传入。敌人可以为辅助功能应用程序设置调试器。分析将查找原始命令行作为调试器的参数。当在参数中检测到字符串“sethc.exe”、“utilman.exe”、“osk.exe”、《叙述者.exe》和“Magnify.exe”,但不是作为主要可执行文件时,很可能设置了调试器;注意:事件ID用于Sysmon(事件ID 1-进程创建)和Windows安全日志(事件ID 4688-已创建新进程)。分析示例查找任何创建的通用可访问性进程(如sethc.exe),但不进行其他筛选,这可能会导致误报。因此,我们建议通过包括额外的逻辑(例如,测试父进程的名称)来调整任何此类分析,以帮助减少误报;分析2可能取决于已知字符串用作日常环境中使用的其他应用程序的参数的可能性。尽管字符串“sethc.exe”不太可能被用作另一个应用程序的参数,但这仍然是可能的;分析1-从Winlogon启动的命令:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") AND ParentImage="winlogon.exe" AND Image="cmd.exe"AND (CommandLine="*sethc.exe"OR CommandLine="*utilman.exe"OR CommandLine="*osk.exe" OR CommandLine="*narrator.exe" OR CommandLine="*magnify.exe"
;分析2-可访问性应用程序的调试器:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") | where CommandLine match "$. *.*(sethcutilmanosknarratormagnify).exe"
;监视HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options中的注册表项。
AppCert DLL
介绍:对手可以通过执行加载到进程中的AppCert DLL触发的恶意内容来建立持久性和/或提升权限。在AppCertDLL注册表项HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\下指定的动态链接库(DLL)加载到调用广泛使用的应用程序编程接口(API)函数CreateProcess、CreateProcessAsUser、CreateProcessWithLoginW、CreateProcessWithTokenW或WinExec的每个进程中。与进程注入类似,通过在计算机上的单独进程的上下文中加载和运行恶意DLL,可以滥用此值来获得提升的权限。恶意AppCert DLL还可以通过被API活动连续触发来提供持久性。
预防措施:敌人安装新的AppCertDLL二进制文件来执行这项技术。通过使用应用程序控制工具,如Windows Defender应用程序控制、AppLocker或软件限制策略(如适用),识别并阻止通过AppCertDLL功能执行的潜在恶意软件。
检测:监视执行的命令和参数,这些命令和参数可能通过执行加载到进程中的AppCert DLL触发的恶意内容来建立持久性和/或提升权限;按进程监视DLL加载,特别是查找未识别或未正常加载到进程中的DLL。Sysinternals Autorun等工具可能会忽略AppCert DLL作为自动启动位置;监视和分析指示注册表编辑的应用程序编程接口(API)调用,如RegCreateKeyEx和RegSetValueEx;监视新执行的进程,这些进程可能通过执行加载到进程中的AppCert DLL触发的恶意内容来建立持久性和/或提升权限;监视AppCertDLL注册表值是否存在与已知软件、修补程序周期等不相关的修改。
AppInit DLL
介绍:对手可以通过执行加载到进程中的AppInit DLL触发的恶意内容来建立持久性和/或提升权限。在注册表项HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows或HKEY_LOCAL_MACHINE\SSoftware\Wow6432Node\Microsoft\Windows NT\CurrentVersion \Windows的AppInit_dll值中指定的动态链接库(dll)由user32.dll加载到加载user32.dll的每个进程中。在实践中,这几乎是每个程序,因为user32.dll是一个非常常见的库。与进程注入类似,这些值可能会被滥用,从而通过在计算机上单独进程的上下文中加载和运行恶意DLL来获得提升的权限。恶意AppInit DLL还可以通过被API活动连续触发来提供持久性。启用安全引导后,在Windows 8及更高版本中会禁用AppInit DLL功能。
预防措施:敌人可以安装新的AppInit DLL二进制文件来执行这项技术。通过使用应用程序控制工具,如Windows Defender应用程序控制、AppLocker或软件限制策略(如适用),识别并阻止通过AppInit DLL功能执行的潜在恶意软件;升级到Windows 8或更高版本并启用安全引导。
检测:监视执行的命令和参数,这些命令和参数可能通过执行加载到进程中的AppInit DLL触发的恶意内容来建立持久性和/或提升权限;监视加载user32.DLL的进程的DLL加载,并查找未识别或未正常加载到进程中的DLL;监视和分析指示注册表编辑的应用程序编程接口(API)调用,如RegCreateKeyEx和RegSetValueEx;监视新执行的进程,这些进程可能通过执行加载到进程中的AppInit DLL触发的恶意内容来建立持久性和/或提升权限;注意:Sysmon事件ID 1(进程创建)和Windows安全日志事件ID 4688(已创建新进程)可用于检测修改AppInit DLL注册表项的新reg.exe进程,因为注册表项被指定为命令行参数;监视AppInit_DLL注册表值中是否存在与已知软件、修补程序周期等不相关的修改。攻击者可能会通过执行加载到进程中的AppInit DLL触发的恶意内容来建立持久性和/或提升权限。在注册表项HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows或HKEY_LOCAL_MACHINE\SSoftware\Wow6432Node\Microsoft\Windows NT\CurrentVersion \Windows的AppInit_dll值中指定的动态链接库(dll)由user32.dll加载到加载user32.dll的每个进程中。这些值可能会被滥用,从而通过在单独进程的上下文中加载和运行恶意DLL来获得提升的权限。因此,本分析旨在寻找可能表明此类滥用的对这些注册表项的修改;分析1-AppInit DLL:source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode IN (12, 13, 14) TargetObject= "*\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\Appinit_Dlls*" OR TargetObject= "*\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\Appinit_Dlls*"
应用程序填隙
介绍:敌人可以通过执行由应用程序垫片触发的恶意内容来建立持久性和/或提升特权。创建Microsoft Windows应用程序兼容性基础结构/框架(Application Shim)是为了在操作系统代码库随时间变化时允许软件的向后兼容性。例如,应用程序填充功能允许开发人员对为Windows XP创建的应用程序进行修复(无需重写代码),使其能够与Windows 10一起使用。在该框架内,垫片被创建为程序(或者更具体地说,导入地址表)和Windows操作系统之间的缓冲区。执行程序时,会引用填充程序缓存来确定程序是否需要使用填充程序数据库(.sdb)。如果是这样,填充程序数据库将根据需要使用挂钩重定向代码,以便与操作系统通信。默认Windows安装程序(sdbinst.exe)当前安装的所有垫片的列表保存在:%WINDIR%\AppPatch\sysmain.sdb
和hklm\software\microsoft\Windows nt\currentversion\appcompatflags\installedsdb
中自定义数据库存储在:%WINDIR%\AppPatch\Custom
和%WINDIR%%\AppPatch\AppPatch64\Custom
和hklm\software\microsoft\Windows nt\currentversion \appcompatflages\Custom
中为了确保垫片的安全,Windows将它们设计为在用户模式下运行,因此它们无法修改内核,并且您必须具有管理员权限才能安装垫片。但是,某些垫片可用于绕过用户帐户控制(UAC和RedirectEXE)、将DLL注入进程(InjectDLL)、禁用数据执行防止(DisableNX)和结构异常处理(DisableSEH)以及截获内存地址(GetProcAddress)。利用这些垫片可能会让对手执行多种恶意行为,如提升权限、安装后门、禁用Windows Defender等防御。垫片也可能被滥用,通过不断被受影响的程序调用来建立持久性。
预防措施:微软发布了一个可选的补丁更新KB3045645,它将删除sdbinst.exe中的“自动提升”标志。这将防止使用应用程序填隙来绕过UAC;将UAC设置更改为“始终通知”将在请求UAC提升时为用户提供更多可见性,但是,由于UAC不断中断,此选项在用户中不受欢迎。
检测:监视sdbinst.exe的已执行命令和参数,以了解应用程序填充程序滥用的潜在迹象;监视对文件所做的更改,这些更改可能会通过执行由应用程序垫片触发的恶意内容来建立持久性和/或提升权限;监视加载user32.DLL的进程的DLL加载,并查找未识别或未正常加载到进程中的DLL;监视sdbinst.exe的新执行进程,以了解应用程序填充程序滥用的潜在迹象。有几个可用的公共工具可以检测当前可用的垫片:垫片过程扫描程序-检查每个运行进程的内存中是否有垫片标志、垫片检测器Lite-检测自定义垫片数据库的安装、垫片保护程序-监视注册表中是否有任何垫片安装、垫片扫描程序-在内存中查找活动垫片的取证工具、垫片缓存内存-从内存中提取垫片缓存的波动性插件(注意:垫片仅在重新启动后缓存);监视对windows注册表项和/或值的更改,这些更改可能会通过执行由应用程序垫片触发的恶意内容来建立持久性和/或提升权限。
图像文件执行选项注入
介绍:敌人可以通过执行由图像文件执行选项(IFEO)调试器触发的恶意内容来建立持久性和/或提升特权。IFEO使开发人员能够将调试器附加到应用程序。创建进程时,应用程序IFEO中的调试器将预先添加到应用程序的名称中,从而有效地在调试器下启动新进程(例如C:\dbg\ntsd.exe-g notepad.exe)。IFEO可以通过注册表直接设置,也可以通过GFlags工具在Global Flags中设置。IFEO表示为注册表中HKLM\SOFTWARE{\Wow6432Node}\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\下的调试器值,其中<executable>是附加调试器的二进制文件。IFEO还可以在指定程序静默退出时(即由其自身或第二个非内核模式进程提前终止)启动任意监视器程序。与调试器类似,可以通过GFlags和/或直接修改HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\中的IFEO和静默进程出口注册表值来启用静默出口监视。与辅助功能功能类似,在Windows Vista及更高版本以及Windows Server 2008及更高级别上,可以修改注册表项,该注册表项将“cmd.exe”或其他提供后门访问的程序配置为辅助功能程序(例如:utilman.exe)的“调试器”。修改注册表后,在键盘上或与远程桌面协议连接时,在登录屏幕上按下适当的组合键将导致“调试器”程序以SYSTEM权限执行。与进程注入类似,这些值也可能被滥用,通过在计算机上的单独进程的上下文中加载和运行恶意可执行文件来获得权限提升。安装IFEO机制也可以通过连续触发调用提供持久性。恶意软件还可能使用IFEO通过注册无效的调试器来破坏防御,这些调试器重定向并有效禁用各种系统和安全应用程序。
预防措施:
检测:监视执行的命令和自变量,这些命令和自变量可能通过执行由图像文件执行选项(IFEO)调试器触发的恶意内容来建立持久性和/或提升权限;监视GFlags工具的异常使用情况,以及在异常父进程和/或使用指示调试的创建标志(如DEBUG_PROCESS和DEBUG_ONLY_THIS_PROCESS)下生成的常见进程;监控与IFEOs相关的注册表值,以及静默过程退出监控,用于与已知软件、补丁周期等不相关的修改。
PowerShell配置文件
介绍:敌人可能会通过执行PowerShell配置文件触发的恶意内容来获得持久性并提升权限。PowerShell配置文件(profile.ps1)是在PowerShell启动时运行的脚本,可以用作自定义用户环境的登录脚本。PowerShell支持多个配置文件,具体取决于用户或主机程序。例如,PowerShell主机程序(如PowerShell控制台、PowerShell ISE或Visual Studio代码)可以有不同的配置文件。管理员还可以配置应用于本地计算机上的所有用户和主机程序的配置文件。敌人可以修改这些配置文件以包括任意命令、函数、模块和/或PowerShell驱动器,从而获得持久性。每次用户打开PowerShell会话时,都会执行修改后的脚本,除非在启动时使用-NoProfile标志。如果PowerShell配置文件中的脚本由具有更高权限的帐户(如域管理员)加载和执行,则对手也可以升级权限。
预防措施:仅强制执行已签名的PowerShell脚本。对配置文件进行签名以避免其被修改;使PowerShell配置文件不可变且仅可由某些管理员更改将限制对手轻松创建用户级持久性的能力;如果不需要,请避免使用PowerShell配置文件。远程执行PowerShell脚本时,请将-No Profile标志与一起使用,以防止执行本地配置文件和脚本。
检测:监视异常的PowerShell命令、PowerShell驱动器或模块的异常加载;应监控profile.ps1可以存储的位置是否有新的配置文件。配置文件位置示例包括:$PsHome\profile.ps1
、$PsHome \Microsoftoft.{HostProgram}_profile.ps1
、$Home\My Documents\Powers\Profile.ps1
、$Home\Mi Documents\Power\MMicrosoft.{HostProgram}_profile.ps1
;应监控profile.ps1可以存储的位置是否有修改。配置文件位置示例包括:$PsHome\profile.ps1
,$PsHome \Microsoftoft.{HostProgram}_profile.ps1
*$Home\My Documents\Powers\Profile.ps1
,$Home\Mi Documents\Power\MMicrosoft.{HostProgram}_profile.ps1
;监视新执行的进程,这些进程可能通过执行PowerShell配置文件触发的恶意内容来获得持久性并提升权限。
Emond
介绍:敌人可以通过执行事件监视程序守护程序(emond)触发的恶意内容来获得持久性并提升权限。Emond是一个Launch Daemon,它接受来自各种服务的事件,通过简单的规则引擎运行它们,并采取行动。位于/sbin/emon的emond二进制文件将从/etc/emond.d/rules/目录加载任何规则,并在发生明确定义的事件后执行操作。规则文件采用plist格式,定义名称、事件类型和要执行的操作。事件类型的一些示例包括系统启动和用户身份验证。操作示例包括运行系统命令或发送电子邮件。如果QueueDirectories路径/private/var/db/emondClients中没有文件,则emond服务将不会启动,该路径是在/System/Library/LaunchDaemons/com.apple.emond.plist的启动守护程序配置文件中指定的。当定义的事件(如系统启动或用户身份验证)发生时,对手可能会通过编写规则来执行命令,从而滥用此服务。当启动守护程序服务使用root权限执行emod服务时,敌人还可以将权限从管理员升级到root。
预防措施:请考虑通过删除Launch Daemon plist文件来禁用emod。
检测:监视执行的命令和参数,这些命令和参数可能通过执行由事件监视程序守护程序(emond)触发的恶意内容而获得持久性并提升权限;通过检查/etc/emond.d/rules/和/private/var/db/emondClients中创建的文件来监控emond规则的创建;通过检查/etc/emond.d/rules/和/private/var/db/emondClients中修改的文件来监控emond规则的创建;监视新执行的进程,这些进程可能通过执行由事件监视程序守护程序(emond)触发的恶意内容来获得持久性并提升权限。
组件对象模型劫持
介绍:攻击者可以通过执行由对组件对象模型(COM)对象的劫持引用触发的恶意内容来建立持久性。COM是Windows中的一个系统,通过操作系统实现软件组件之间的交互。对各种COM对象的引用存储在注册表中。敌人可以使用COM系统插入恶意代码,这些代码可以通过劫持COM引用和关系来代替合法软件执行,以此作为持久性的手段。劫持COM对象需要更改注册表以替换对合法系统组件的引用,这可能会导致该组件在执行时无法工作。当该系统组件通过正常的系统操作执行时,对手的代码将被执行。对手可能会劫持频繁使用的对象,以保持一致的持久性水平,但不太可能破坏系统内的显著功能,从而避免可能导致检测的系统不稳定。
预防措施:
检测:监视执行的命令和参数,这些命令和参数可能通过执行被劫持的组件对象模型(COM)对象引用触发的恶意内容来建立持久性;注意:事件ID 4104(来自Microsoft Windows Powershell/操作日志)捕获Powershell脚本块,这些脚本块可以被分析并用于检测COM注册表项的更改,包括HKCU\Software\Classes\CLSID*
;同样,如果收集并分析软件DLL加载,则任何可能与COM对象注册表修改相关的异常DLL加载都可能表明已执行COM劫持;监视新执行的进程,这些进程可能通过执行被劫持的组件对象模型(COM)对象引用触发的恶意内容来建立持久性;通过搜索已被替换的注册表引用以及通过注册表操作(例如:Reg)将已知二进制路径替换为未知路径或其他恶意内容,可以检测COM劫持。即使某些第三方应用程序定义了用户COM对象,HKEY_CURRENT_user\Software\Classes\CLSID\中对象的存在也可能是异常的,并且应该进行调查,因为用户对象将在HKEY_LOCAL_machine\Software\Classes\CLSID中的机器对象之前加载。现有COM对象的注册表项可能很少更改。当具有已知良好路径和二进制的条目被替换或更改为异常值以指向新位置中的未知二进制时,它可能表明存在可疑行为,应进行调查;分析的单组件对象模型劫持:source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode IN (12, 13, 14) TargetObject= "*\Software\Classes\CLSID*"
安装程序包
介绍:敌人可以通过使用安装程序触发恶意内容的执行来建立持久性并提升权限。安装程序包是特定于操作系统的,包含操作系统在系统上安装应用程序所需的资源。安装程序包可以包括在安装之前以及安装完成之后运行的脚本。安装程序脚本在执行时可能会继承提升的权限。开发人员经常使用这些脚本来准备安装环境、检查需求、下载依赖项以及在安装后删除文件。对手使用合法的应用程序,通过修改安装程序脚本来分发应用程序,以执行恶意内容。用户安装应用程序时,可能需要授予管理权限以允许安装。在合法应用程序的安装过程结束时,可以使用继承的提升权限执行macOS postinstall脚本等内容。敌人可以使用这些脚本执行恶意可执行文件或安装具有提升权限的其他恶意组件(如启动守护程序)。根据发行版的不同,Linux版本的包安装程序脚本有时被称为维护程序脚本或安装后脚本。这些脚本可以包括prest、postinst、prerm、postrm脚本,并在执行时以root身份运行。对于Windows,Microsoft安装程序服务使用.msi文件来管理应用程序的安装、更新和卸载。这些安装例程还可以包括执行可能被对手滥用的附加动作的指令。
预防措施:
检测:监视可能与滥用安装程序包有关的已执行命令和参数,包括由应用程序安装触发的恶意命令;监视与安装程序包关联的文件的创建,这些文件可能被滥用以进行恶意执行;使用可能与滥用安装程序包有关的参数监视进程,包括恶意的、可能由应用程序安装触发的提升进程。
10.利用特权升级
介绍:敌人可能会利用软件漏洞来提升特权。当对手利用程序、服务或操作系统软件或内核本身中的编程错误来执行对手控制的代码时,就会发生软件漏洞的利用。权限级别等安全结构通常会阻碍对信息的访问和某些技术的使用,因此对手可能需要执行权限升级,包括使用软件来规避这些限制。当最初获得对系统的访问权限时,对手可能在较低特权的进程中操作,这将阻止他们访问系统上的某些资源。漏洞可能存在,通常存在于通常以更高权限运行的操作系统组件和软件中,可以利用这些漏洞获得更高级别的系统访问权限。这可能使某人能够根据易受攻击的组件从无特权或用户级别的权限移动到SYSTEM或root权限。这也可以使对手能够从虚拟化环境(如虚拟机或容器内)转移到底层主机上。这可能是对手危害已正确配置并限制其他权限提升方法的端点系统的必要步骤。攻击者可能会将签名的易受攻击的驱动程序带到受损的机器上,以便利用该漏洞在内核模式下执行代码。这个过程有时被称为自带易受攻击的驱动程序(BYOVD)。敌人可能包括在初始访问期间交付文件的易受攻击的驱动程序,或通过入口工具传输或横向工具传输将其下载到受损系统。
预防措施:通过使用沙箱利用未发现或未修补的漏洞,使对手难以推进行动。其他类型的虚拟化和应用程序细分也可以减轻某些类型的利用带来的影响。这些系统中可能仍然存在其他漏洞和弱点的风险;考虑阻止已知易受攻击的驱动程序的执行,对手可能会利用这些驱动程序在内核模式下执行代码。在审核模式下验证驱动程序块规则,以确保在生产部署之前的稳定性;查找利用漏洞期间使用的行为的安全应用程序,如Windows Defender Exploit Guard(WDEG)和增强型缓解体验工具包(EMET),可用于缓解某些利用行为。控制流完整性检查是另一种可能识别和阻止软件利用的方法。其中许多保护取决于体系结构和目标应用程序二进制文件的兼容性,可能不适用于以权限提升为目标的软件组件;开发强大的网络威胁情报能力,以确定哪些类型和级别的威胁可能使用软件攻击,以及针对特定组织的0天;通过对内部企业端点和服务器使用补丁管理,定期更新软件。
检测:根据可用的工具,检测软件利用可能很困难。软件利用可能并不总是成功,或者可能导致被利用的进程变得不稳定或崩溃。还要查找端点系统上可能指示成功折衷的行为,例如进程的异常行为。这可能包括写入磁盘的可疑文件、进程注入试图隐藏执行的证据或发现的证据。考虑监控已知易受攻击的驱动程序的存在或加载(例如:Sysmon Event ID 6),对手可能会丢弃这些驱动程序并利用这些驱动程序在内核模式下执行代码。通常需要更高的权限来执行其他操作,例如操作系统凭据转储的某些方法。寻找可能表明对手获得更高特权的其他活动;监视可能利用软件漏洞试图提升权限的新执行进程。在获得对系统的初始访问权限后,威胁参与者试图提升权限,因为他们可能在权限较低的过程中操作,这不允许他们访问受保护的信息或执行需要更高权限的任务。在系统中升级权限的一种常见方法是从外部调用和利用spoolsv或connhost可执行文件,这两种文件都是合法的Windows应用程序。此查询搜索用户对这些可执行文件的调用,从而提醒我们任何潜在的恶意活动;注意:事件ID用于Sysmon(事件ID 1-进程创建)和Windows安全日志(事件ID 4688-已创建新进程)。该分析旨在寻找用户对spoosv.exe或conhost.exe的调用,从而提醒我们任何潜在的恶意活动。在系统中升级权限的一种常见方法是从外部调用和利用这些可执行文件,这两种文件都是合法的Windows应用程序;分析1-spoosv.exe或connhost.exe的异常子进程:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") (Image="C:\Windows\System32\spoolsv.exe" OR Image="C:\Windows\System32\conhost.exe") AND ParentImage= "C:\Windows\System32\cmd.exe")
11.劫持执行流程
DLL搜索顺序劫持
介绍:敌人可能会通过劫持用于加载DLL的搜索顺序来执行自己的恶意有效载荷。Windows系统使用一种通用方法来查找加载到程序中所需的DLL。劫持DLL加载可能是为了建立持久性以及提升特权和/或规避对文件执行的限制。对手可以通过多种方式劫持DLL加载。攻击者可能会在程序将请求的合法库的位置之前搜索的目录中植入特洛伊木马程序动态链接库文件(DLL),导致Windows在受害者程序调用恶意库时加载其恶意库。敌人还可以通过将与模糊指定的DLL同名的恶意DLL放置在Windows搜索的合法DLL之前的位置来执行DLL预加载,也称为二进制植入攻击。通常,此位置是程序的当前工作目录。当程序在加载DLL之前将其当前目录设置为远程位置(如Web共享)时,就会发生远程DLL预加载攻击。幻影DLL劫持是一种特定类型的DLL搜索顺序劫持,对手的目标是引用不存在的DLL文件。他们可以通过在缺失模块的位置植入正确名称来加载自己的恶意DLL。对手也可以通过DLL重定向直接修改搜索顺序,在启用后(在注册表中并创建重定向文件),可能会导致程序加载不同的DLL。如果搜索顺序易受攻击的程序被配置为以更高的特权级别运行,则加载的对手控制的DLL也将以更高级别执行。在这种情况下,根据程序的不同,可以使用该技术将权限从用户升级到管理员或SYSTEM,或从管理员升级到SYSTEM。成为路径劫持受害者的程序可能看起来行为正常,因为恶意DLL可能被配置为也加载它们要替换的合法DLL。
预防措施:使用能够检测企业内系统上DLL搜索顺序劫持机会的审核工具并进行更正。像PowerSploit框架这样的工具包包含PowerUp模块,这些模块可用于探索系统的DLL劫持弱点;使用Windows附带的程序sxstrace.exe以及手动检查来检查清单文件中的软件并排问题;敌人可能会使用新的DLL来执行这项技术。通过使用能够阻止合法软件加载的DLL的应用程序控制解决方案,识别并阻止通过搜索顺序劫持执行的潜在恶意软件;不允许加载远程DLL。默认情况下,它包含在Windows Server 2012+中,并可通过XP+和Server 2003+的修补程序获得;启用安全DLL搜索模式,强制搜索具有更大限制的目录(例如%SYSTEMROOT%)中的系统DLL,以便在本地目录DLL(例如用户的主目录)之前使用;安全DLL搜索模式可以通过组策略在“计算机配置”>“[策略]”>“管理模板”>“MSS(旧版):MSS:(SafeDllSearchMode)Enable Safe DLL Search Mode”中启用。相关的Windows注册表项位于HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\SafeDLLSearchMode
检测:监视新构建的与软件更新不相关的.manifest和.local重定向文件;监视对.manifest/.local重定向文件的更改,或用于移动、重命名、替换或修改DLL的文件系统。进程加载的DLL集中与已知软件、修补程序等不相关的更改(与过去的行为相比)是可疑的;监视加载到进程中的DLL,并检测具有相同文件名但路径异常的DLL。
DLL侧面加载
介绍:敌人可以通过侧加载DLL来执行自己的恶意有效载荷。与DLL搜索顺序劫持类似,侧加载涉及劫持程序加载的DLL。但是,与其只是在程序的搜索顺序中植入DLL,然后等待受害者应用程序被调用,对手可以通过植入然后调用执行其有效载荷的合法应用程序来直接侧加载其有效载荷。侧加载通过将受害应用程序和恶意负载并排放置,利用加载程序使用的DLL搜索顺序。对手可能会使用侧载作为掩盖他们在合法、可信且可能提升的系统或软件流程下执行的操作的手段。在交付和/或执行期间,可能不会标记用于侧加载有效载荷的良性可执行文件。对抗有效载荷也可以被加密/打包或以其他方式混淆,直到被加载到可信进程的存储器中。
预防措施:如果可能,请在清单文件中包含哈希值,以帮助防止恶意库的副加载;定期更新软件,以包括修复DLL端加载漏洞的修补程序。
检测:监视计算机系统上公用文件夹中的新建文件;监视对文件所做的更改,以发现对访问权限和属性的意外修改;监视DLL/PE文件事件,特别是创建这些二进制文件以及将DLL加载到进程中。查找无法识别或未正常加载到进程中的DLL;监控新构建的进程是否有异常活动(例如,不使用网络的进程开始使用网络)以及新文件/程序的引入。
Dylib劫持
介绍:攻击者可以通过在受害者应用程序运行时搜索的路径中放置具有预期名称的恶意动态库(dylib)来执行自己的有效载荷。动态加载程序将尝试根据搜索路径的顺序来查找dylib。dylib的路径可以以@rpath为前缀,这允许开发人员使用相对路径根据可执行文件的位置指定运行时使用的搜索路径阵列。此外,如果使用弱链接,例如LC_LOAD_weak_DYLIB函数,则即使不存在预期的DYLIB,应用程序仍将执行。弱链接使开发人员能够在添加新API时在多个macOS版本上运行应用程序。敌人可以通过在识别的路径中插入具有丢失dylib名称的恶意dylib来获得执行。dylib被加载到应用程序的地址空间中,允许恶意的dylib继承应用程序的特权级别和资源。根据应用程序,这可能导致权限提升和不受限制的网络访问。这种方法也可能逃避安全产品的检测,因为在合法过程下执行是被掩盖的。
预防措施:在运行应用程序的文件夹和标准dylib文件夹中,设置目录访问控制以防止文件写入应用程序的搜索路径。
检测:新建dylib监控器;监视文件系统是否移动、重命名、替换或修改dylib。进程加载的dylib集合中的变化(与过去的行为相比)与已知软件、补丁等不相关,这是可疑的。检查系统中是否有多个同名的dylib,并监控历史上哪些版本已加载到进程中;监视正在加载的动态库。运行路径相关库可以包括LC_LOAD_DYLIB、LC_LOAD_WAK_DYLIB和LC_RPATH。macOS加载程序识别的其他特殊关键字有@rpath、@loader_path和@executable_path。可以使用otool-l命令检查这些加载程序指令中的各个二进制文件或框架。目的See的Dylib劫持扫描仪可用于识别易受Dylib劫持影响的应用程序
可执行安装程序文件权限弱点
介绍:敌人可能会通过劫持安装程序使用的二进制文件来执行自己的恶意有效载荷。这些进程可以自动执行特定的二进制文件作为其功能的一部分,或者执行其他操作。如果包含目标二进制文件的文件系统目录上的权限或二进制文件本身的权限设置不正确,则目标二进制文件可能会被使用用户级权限的另一个二进制文件覆盖,并由原始进程执行。如果原始进程和线程在更高的权限级别下运行,那么替换的二进制文件也将在更高级别的权限下执行,其中可能包括SYSTEM。该技术的另一个变体可以通过利用可执行的自解压安装程序中常见的弱点来执行。在安装过程中,安装程序通常使用%TEMP%目录中的子目录来解压缩二进制文件,如DLL、EXE或其他有效负载。当安装程序创建子目录和文件时,他们通常不会设置适当的权限来限制写入访问,这允许执行放置在子目录中的不受信任的代码或覆盖安装过程中使用的二进制文件。此行为与DLL搜索顺序劫持有关,并可能利用它。作为在更高权限级别执行代码的一种手段,攻击者可能会使用此技术将合法二进制文件替换为恶意二进制文件。一些安装程序可能还需要提升的权限,这将导致在执行对手控制的代码时权限升级。此行为与绕过用户帐户控制有关。已经向软件供应商报告了现有常见安装程序中这种弱点的几个例子。如果执行进程被设置为在特定时间或特定事件(例如,系统启动)期间运行,那么该技术也可以用于持久性。
预防措施:使用能够检测企业内系统上文件系统权限滥用机会并加以纠正的审核工具。PowerSploit框架等工具包包含PowerUp模块,这些模块可用于探索系统中的服务文件系统权限弱点;关闭标准用户[HHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]的UAC权限提升,以自动拒绝提升请求,添加:"ConsentCompBehaviorUser"=dword:000000000
。考虑通过添加:"EnableInstallerDetection"=dword:000000001
为所有用户启用安装程序检测。这将提示输入安装密码,并记录尝试。要禁用安装程序检测,请改为添加:“EnableInstallerDetection”=dword:000000000。这可能会防止在UAC检测安装程序的过程中利用漏洞提升权限,但会允许安装过程在不被记录的情况下继续进行;限制用户帐户和组的权限,以便只有经过授权的管理员才能与服务更改和服务二进制目标路径位置进行交互。在可能的情况下,拒绝从用户目录(如文件下载目录和临时目录)执行。
检测:监视新构建的文件以匹配现有的服务可执行文件,它可以被检测到并与其他可疑行为相关联;监视软件更新过程中通常可能发生的二进制文件和服务可执行文件的更改;监视DLL/PE文件事件,特别是创建这些二进制文件以及将DLL加载到进程中。查找无法识别或未正常加载到进程中的DLL;监视新构建的进程以匹配现有的服务可执行文件;监视来自典型进程和服务的异常进程调用树,以及可能与发现或其他对手技术有关的其他命令的执行。
动态链接劫持
介绍:敌人可能会通过劫持动态链接器用于加载共享库的环境变量来执行自己的恶意有效载荷。在程序的执行准备阶段,动态链接器从环境变量和文件加载共享库的指定绝对路径,例如Linux上的LD_PRELOAD或macOS上的DYLD_INSERT_libraries。环境变量中指定的库将首先加载,优先于具有相同函数名的系统库。开发人员经常使用这些变量来调试二进制文件,而无需重新编译、消除映射符号的冲突,以及在不更改原始库的情况下实现自定义函数。在Linux和macOS上,劫持动态链接器变量可能会授予对受害进程的内存、系统/网络资源的访问权限,以及可能提升的权限。这种方法也可能逃避安全产品的检测,因为在合法过程下执行是被掩盖的。敌人可以使用export命令、setenv函数或putenv函数通过命令行设置环境变量。敌人还可以利用动态链接劫持在shell中导出变量,或者使用更高级别的语法(如Python的os.environ)以编程方式设置变量。在Linux上,对手可以将LD_PRELOAD设置为指向与受害者程序请求的合法库的名称匹配的恶意库,从而导致操作系统在执行受害者程序时加载对手的恶意代码。LD_PRELOAD可以通过环境变量或/etc/LD.so.PRELOAD文件进行设置。由LD_PRELOAD指定的库分别由dlopen()和mmap()加载并映射到内存中。在macOS上,这种行为在概念上与Linux上相同,只是在较低级别上如何实现macOS动态库(dyld)不同。敌人可以将DYLD_INSERT_LIBRARIES环境变量设置为指向包含受害者程序请求的合法库或函数名称的恶意库。
预防措施:敌人可能会使用新的有效载荷来执行这项技术。通过使用同样能够阻止合法软件加载的库的应用程序控制解决方案,识别并阻止通过劫持执行的潜在恶意软件;当macOS中启用系统完整性保护(SIP)时,执行受保护的二进制文件时会忽略上述环境变量。第三方应用程序还可以利用苹果的硬化运行时,确保这些环境变量受到强制限制。管理员可以通过设置setuid和/或setgid位、使用授权或在Mach-O二进制文件中有__RESTRICT段来向应用程序添加限制。
检测:监视与变量修改相关联的已执行命令和自变量,以及与加载共享库(如Linux上的LD_PRELOAD和macOS上的DYLD_INSERT_libraries)相关联的文件;监视添加到共享库绝对路径的新建文件,如Linux上的LD_PRELOAD和macOS上的DYLD_INSERT_libraries;监视与加载共享库相关的环境变量和文件的更改,如Linux上的LD_PRELOAD和macOS上的DYLD_INSERT_libraries;监视库元数据(如哈希),并将进程执行时加载的库与以前的执行进行比较,以检测与修补或更新无关的差异;监视新执行的进程是否有异常活动(例如,不使用网络的进程开始使用网络)。
Path环境变量的路径拦截
介绍:敌人可能会通过劫持用于加载库的环境变量来执行自己的恶意有效载荷。PATH环境变量包含一个目录列表(用户和系统),操作系统按顺序搜索这些目录,以搜索从脚本或命令行调用的二进制文件。敌人可以将恶意程序放在存储在PATH环境变量中的目录列表中的较早条目中,导致操作系统在按顺序搜索PATH列表时执行恶意二进制文件,而不是合法二进制文件。例如,在Windows上,如果对手将名为“net.exe”的恶意程序放置在C:\example路径中,默认情况下,该路径位于path环境变量中C:\Windows\system32\net.exe之前,则从命令行执行“net”时,将调用C:\example路径,而不是位于C:\Windows\systems32\net.exe的系统合法可执行文件。一些执行程序的方法依赖于PATH环境变量来确定在没有给定程序路径时搜索的位置,例如从命令和脚本解释器执行程序。敌人也可以直接修改指定要搜索的目录的$PATH
变量。对手可以修改$PATH
变量以指向他们有写访问权限的目录。当调用使用$PATH
变量的程序时,操作系统会搜索指定的目录并执行恶意二进制文件。在macOS上,这也可以通过修改$HOME
变量来执行。可以使用命令行、launchctl、Unix Shell Configuration Modification或修改/etc/paths.d文件夹内容来修改这些变量。
预防措施:在程序配置文件、脚本、path环境变量、服务和快捷方式中,通过在函数允许的情况下用引号包围path变量,查找并消除路径拦截弱点。请注意Windows执行或加载二进制文件时使用的搜索顺序,并在适当的情况下使用完全限定的路径;卸载软件时,请清理旧的Windows注册表项,以避免没有关联的合法二进制文件的注册表项。定期搜索、纠正或报告系统上的路径拦截弱点,这些弱点可能是使用自定义或可用工具引入的,这些工具报告使用不安全路径配置的软件;敌人可能需要将新的二进制文件放置在要通过这个弱点执行的位置。通过使用应用程序控制工具,如Windows Defender应用程序控制、AppLocker或软件限制策略(如适用),识别并阻止潜在的恶意软件执行路径拦截;确保设置了适当的权限和目录访问控制,以拒绝用户将文件写入顶级目录C:和系统目录(如C:\Windows\),从而减少恶意文件可能被放置执行的位置。要求所有可执行文件都放在受写保护的目录中。
检测:监视以部分目录命名的新构建文件,以及可以通过环境变量搜索公共进程的位置,或者不应为用户可写的位置。此外,还可以监视以Windows系统程序命名的程序或通常无路径执行的程序(如“findstr”、“net”和“python”)的文件创建。如果此活动发生在已知的管理活动、升级、安装或修补程序之外,则可能是可疑的;监视以部分目录命名的进程可执行路径的新执行进程;监视PATH环境变量注册表项的修改,如HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\environment\PATH。对手可以在可以执行程序的其他位置之前添加新目录或目录列表。
搜索顺序劫持的路径拦截
介绍:敌人可能会通过劫持用于加载其他程序的搜索顺序来执行自己的恶意有效载荷。由于某些程序不使用完整路径调用其他程序,因此对手可能会将自己的文件放在调用程序所在的目录中,导致操作系统应调用程序的要求启动恶意软件。当对手滥用Windows搜索未给定路径的程序的顺序时,就会发生搜索顺序劫持。与DLL搜索顺序劫持不同,搜索顺序因执行程序的方法而异。但是,Windows通常在搜索Windows系统目录之前先在启动程序的目录中进行搜索。发现程序容易被搜索顺序劫持的对手(即,未指定可执行文件路径的程序)可能会利用此漏洞,创建一个以不正确指定的程序命名的程序,并将其放在启动程序的目录中。例如,“example.exe”使用命令行参数net user运行“cmd.exe”。对手可能会将一个名为“net.exe”的程序放在与example.exe相同的目录中,运行“net.exe”而不是Windows系统实用程序net。此外,如果对手将名为“net.com”的程序放在与“net.exe”相同的目录中,则cmd.exe/C net user将执行“net.com“而不是“net.exe“,这是由于在PATHEXT下定义的可执行扩展名的顺序所致。搜索顺序劫持也是劫持DLL加载的常见做法,在DLL搜索顺序劫持中有介绍。
预防措施:在程序配置文件、脚本、path环境变量、服务和快捷方式中,通过在函数允许的情况下用引号包围path变量,查找并消除路径拦截弱点。请注意Windows执行或加载二进制文件时使用的搜索顺序,并在适当的情况下使用完全限定的路径;卸载软件时,请清理旧的Windows注册表项,以避免没有关联的合法二进制文件的注册表项。定期搜索、纠正或报告系统上的路径拦截弱点,这些弱点可能是使用自定义或可用工具引入的,这些工具报告使用不安全路径配置的软件;敌人可能需要将新的二进制文件放置在要通过这个弱点执行的位置。通过使用应用程序控制工具,如Windows Defender应用程序控制、AppLocker或软件限制策略(如适用),识别并阻止潜在的恶意软件执行路径拦截;确保设置了适当的权限和目录访问控制,以拒绝用户将文件写入顶级目录C:和系统目录(如C:\Windows\),从而减少恶意文件可能被放置执行的位置。要求所有可执行文件都放在受写保护的目录中。
检测:监视以部分目录命名的文件的创建,这些文件位于可以通过环境变量搜索公共进程的位置,或者不应由用户写入。此外,还可以监视以Windows系统程序命名的程序或通常无路径执行的程序(如“findstr”、“net”和“python”)的文件创建。如果此活动发生在已知的管理活动、升级、安装或修补程序之外,则可能是可疑的;监视程序元数据的修改,例如删除可执行文件的路径,因为这会使程序容易受到这种技术的攻击。此外,还可以监视文件的修改,例如使用Windows系统实用程序名称重命名程序;监视以部分目录命名的进程可执行路径的新执行进程。
未引用路径的路径拦截
介绍:敌人可能会通过劫持易受攻击的文件路径引用来执行自己的恶意负载。敌人可以通过将可执行文件放在路径内的更高级别目录中来利用缺少周围引号的路径,以便Windows选择对手的可执行文件来启动。如果路径有一个或多个空格且未被引号包围,则服务路径和快捷方式路径也可能容易受到路径拦截(例如,C:\safe-path with space \program.exe与“C:\safe-pathwithspace \program.exe”)。(存储在Windows注册表项中)对手可以将可执行文件放置在路径的更高级别目录中,Windows将解析该可执行文件而不是预期的可执行文件。例如,如果快捷方式中的路径为C:\program files\myapp.exe,则对手可能会在C:\program.exe中创建一个程序,该程序将代替预期程序运行。如果定期调用可执行文件,则此技术可用于持久性,如果截获的可执行文件由更高特权的进程启动,则可用于权限提升。
预防措施:在程序配置文件、脚本、path环境变量、服务和快捷方式中,通过在函数允许的情况下用引号包围path变量,查找并消除路径拦截弱点。请注意Windows执行或加载二进制文件时使用的搜索顺序,并在适当的情况下使用完全限定的路径;卸载软件时,请清理旧的Windows注册表项,以避免没有关联的合法二进制文件的注册表项。定期搜索、纠正或报告系统上的路径拦截弱点,这些弱点可能是使用自定义或可用工具引入的,这些工具报告使用不安全路径配置的软件;敌人可能需要将新的二进制文件放置在要通过这个弱点执行的位置。通过使用应用程序控制工具,如Windows Defender应用程序控制、AppLocker或软件限制策略(如适用),识别并阻止潜在的恶意软件执行路径拦截;确保设置了适当的权限和目录访问控制,以拒绝用户将文件写入顶级目录C:和系统目录(如C:\Windows\),从而减少恶意文件可能被放置执行的位置。要求所有可执行文件都放在受写保护的目录中。
检测:监视以部分目录命名的文件的创建,这些文件位于可以通过环境变量搜索公共进程的位置,或者不应由用户写入。此外,还可以监视以Windows系统程序命名的程序或通常无路径执行的程序(如“findstr”、“net”和“python”)的文件创建。如果此活动发生在已知的管理活动、升级、安装或修补程序之外,则可能是可疑的;监视对文件所做的更改,这些文件可能会通过劫持易受攻击的文件路径引用来执行自己的恶意有效负载;监视新执行的进程,这些进程可能会通过劫持易受攻击的文件路径引用来执行自己的恶意有效负载。
服务文件权限弱点
介绍:敌人可能会通过劫持服务使用的二进制文件来执行自己的恶意有效载荷。敌人可能会使用Windows服务权限中的缺陷来替换服务启动时执行的二进制文件。这些服务进程可以自动执行特定的二进制文件作为其功能的一部分,或者执行其他操作。如果包含目标二进制文件的文件系统目录上的权限或二进制文件本身的权限设置不正确,则目标二进制文件可能会被使用用户级权限的另一个二进制文件覆盖,并由原始进程执行。如果原始进程和线程在更高的权限级别下运行,那么替换的二进制文件也将在更高级别的权限下执行,其中可能包括SYSTEM。作为在更高权限级别执行代码的一种手段,攻击者可能会使用此技术将合法二进制文件替换为恶意二进制文件。如果执行进程被设置为在特定时间或特定事件(例如,系统启动)期间运行,那么该技术也可以用于持久性。
预防措施:使用能够检测企业内系统上文件系统权限滥用机会并加以纠正的审核工具。PowerSploit框架等工具包包含PowerUp模块,这些模块可用于探索系统中的服务文件系统权限弱点;关闭标准用户[HHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]的UAC权限提升,以自动拒绝提升请求,添加:"ConsentCompBehaviorUser"=dword:000000000
。考虑通过添加:"EnableInstallerDetection"=dword:000000001
为所有用户启用安装程序检测。这将提示输入安装密码,并记录尝试。要禁用安装程序检测,请改为添加:“EnableInstallerDetection”=dword:000000000。这可能会防止在UAC检测安装程序的过程中利用漏洞提升权限,但会允许安装过程在不被记录的情况下继续进行;限制用户帐户和组的权限,以便只有经过授权的管理员才能与服务更改和服务二进制目标路径位置进行交互。在可能的情况下,拒绝从用户目录(如文件下载目录和临时目录)执行。
检测:监视在定期软件更新或组织安排的更新期间未发生的二进制文件和服务可执行文件的创建。此行为还考虑被覆盖的文件;监视在定期软件更新或组织计划的更新期间未发生的二进制文件和服务可执行文件的修改。修改文件时会考虑重命名和移动目录等操作;监视新执行的进程,这些进程可能会通过劫持服务使用的二进制文件来执行自己的恶意有效负载;二进制文件和服务可执行文件的哈希可以用于检测历史数据的替换。
服务注册表权限弱点
介绍:敌人可能会通过劫持服务使用的注册表项来执行自己的恶意有效载荷。对手可能会利用与服务相关的注册表项权限中的缺陷,将最初指定的可执行文件重定向到他们控制的可执行程序,以便在服务启动时启动自己的代码。Windows将本地服务配置信息存储在注册表的HKLM\SYSTEM\CurrentControlSet\Services下。存储在服务注册表项下的信息可以通过服务控制器、sc.exe、PowerShell或Reg等工具进行操作,以修改服务的执行参数。对注册表项的访问通过访问控制列表和用户权限进行控制。如果用户和组的权限设置不正确,并且不允许访问服务的注册表项,对手可能会更改服务的binPath/ImagePath,以指向其控制下的不同可执行文件。当服务启动或重新启动时,对手控制的程序将执行,允许对手建立持久性和/或特权升级到服务设置为在其下执行的帐户上下文(本地/域帐户、SYSTEM、LocalService或NetworkService)。敌人还可能更改服务注册表树中的其他注册表项。例如,可以更改FailureCommand密钥,以便在服务出现故障或故意损坏时,在提升的上下文中执行服务。Performance键包含驱动程序服务的性能DLL的名称以及DLL中几个导出函数的名称。如果性能密钥尚未存在,并且对手控制的用户具有“创建子密钥”权限,则对手可能会在服务的注册表树中创建性能密钥以指向恶意DLL。对手还可以为其恶意服务添加存储驱动程序特定数据的Parameters密钥或其他自定义子密钥,以建立持久性或启用其他恶意活动。此外,如果对手使用svchost.exe启动其恶意服务,则可以使用HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\servicename\Parameters\ServiceDll识别服务的文件。
预防措施:确保为注册表配置单元设置了适当的权限,以防止用户修改可能导致权限提升的系统组件的密钥。
检测:监视命令和参数的执行情况,这些命令和参数可用于对手通过Windows Management Instrumentation和PowerShell等应用程序修改服务的注册表项和值。可能需要配置额外的日志记录以收集适当的数据;通过服务监控可疑程序的执行情况。当与历史数据进行比较时,这些过程可能会显示为以前从未见过的异常过程;对现有服务的修改不应频繁发生。如果服务二进制路径或故障参数更改为该服务不典型的值,并且与软件更新不相关,则可能是由于恶意活动;监视HKLM\SYSTEM\CurrentControlSet\services等服务使用的注册表项和值的修改,这些服务可能允许对手在服务启动时启动自己的代码。
COR_PROFILER
介绍:敌人可能会利用COR_PROFILER环境变量劫持加载的程序的执行流。NET CLR。COR_PROFILER是一个。NET Framework功能,允许开发人员指定一个非托管(或.NET外部)分析DLL加载到每个DLL中。NET进程,该进程加载公共语言运行时(CLR)。这些评测器旨在监视、排除故障和调试由执行的托管代码。NET CLR。COR_PROFILER环境变量可以在不同的范围(系统、用户或进程)进行设置,从而产生不同级别的影响。系统和用户范围的环境变量作用域在注册表中指定,组件对象模型(COM)对象可以在注册表中注册为探查器DLL。进程范围COR_PROFILER也可以在内存中创建,而无需修改注册表。从开始。NET Framework 4,只要在COR_PROFILER_PATH环境变量中指定了DLL的位置,就不需要注册分析DLL。敌人可能会滥用COR_PROFILER来建立在所有上下文中执行恶意DLL的持久性。NET在每次调用CLR时进行处理。COR_PROFILER还可以用于提升受害者的权限(例如:绕过用户帐户控制)。NET进程在更高的权限级别执行,以及提供的钩子和Impair Defenses。NET进程。
预防措施:通过使用AppLocker等能够审核和/或阻止未经批准的DLL的应用程序控制解决方案,识别并阻止潜在的恶意非托管COR_PROFILER分析DLL;确保为注册表配置单元设置了正确的权限,以防止用户修改与COR_PROFILER关联的密钥;限制用户帐户的权限,以便只有经过授权的管理员才能编辑系统环境变量。
检测:对于通过wmic.exe、setx.exe和Reg等命令行工具对注册表项(如COR_ENABLE_PROFILING、COR_PROFILER和COR_PROFILER_PATH)进行的可疑修改,应进行额外的审查。监视指示COR_PROFILEER变量更改的命令行参数可能有助于检测;监视与COR_PROFILER环境变量关联的DLL文件;监视可能滥用COR_PROFILER变量的新执行进程,如setx.exe,监视加载到中的新的可疑非托管分析DLL。NET进程,导致进程行为异常;为了检测COR_PROFILER变量的系统和用户作用域滥用,请监视注册表中对COR_ENABLE_PROFILING、COR_PROFILEER和COR_PROFILER_PATH的更改,这些更改对应于与已知开发人员工具无关的系统和使用者环境变量。
内核回调表
介绍:敌人可能会滥用进程的KernelCallbackTable来劫持其执行流,以便运行自己的有效负载。KernelCallbackTable可以在进程环境块(PEB)中找到,并且在加载user32.dll后被初始化为GUI进程可用的图形函数阵列。对手可能会使用KernelCallbackTable通过用恶意负载替换原始回调函数来劫持进程的执行流。修改回调函数可以通过涉及相关行为的各种方式实现,如反射代码加载或将进程注入另一个进程。指向KernelCallbackTable的内存地址的指针可以通过定位PEB(例如:通过对NtQueryInformationProcess()Native API函数的调用)获得。一旦找到指针,就可以复制KernelCallbackTable,并将表中的函数(例如,fnCOPYDATA)设置为恶意负载的地址(例如:通过WriteProcessMemory())。然后用表的新地址来更新PEB。一旦被篡改的函数被调用,恶意负载就会被触发。被篡改的函数通常使用Windows消息调用。在进程被劫持并执行恶意代码后,KernelCallbackTable也可能被恶意负载的其余部分恢复到其原始状态。使用KernelCallbackTable劫持执行流可能会逃避安全产品的检测,因为在合法进程下可以屏蔽执行。
预防措施:一些端点安全解决方案可以配置为基于常见的指示符序列(例如:特定API函数的执行)来阻止与进程注入/内存篡改相关的某些类型的行为。
检测:监视指示各种类型的代码注入的Windows API调用可能会生成大量数据,除非在特定情况下收集,否则可能不会直接用于防御。对于已知的错误调用序列,因为API函数的良性使用可能很常见,并且很难与恶意行为区分开来。可以将参数设置为ProcessBasicInformation的Windows API调用(如WriteProcessMemory()和NtQueryInformationProcess())用于此技术。
AppDomainManager
介绍:敌人可能会通过劫持来执行自己的恶意有效载荷。NET AppDomainManager加载程序集。这个NET框架使用AppDomainManager类在进程内创建和管理一个或多个独立的运行时环境(称为应用程序域),以承载的执行。NET应用程序。程序集(编译为作为.NET代码运行的.exe或.dll二进制文件)可以作为可执行代码加载到应用程序域中。被称为“AppDomainManager注入”,对手可以通过劫持方式执行任意代码。NET应用程序加载程序集。例如,恶意软件可能在目标进程内创建自定义应用程序域,以加载和执行任意程序集。或者,配置文件(.config)或定义的过程环境变量。NET运行时设置可能会被篡改,以指示其他良性操作。NET应用程序将恶意程序集(通过名称标识)加载到目标进程中。
预防措施:安装NET应用程序和相关软件。设置目录访问控制以防止文件写入的搜索路径。NET应用程序,既在运行应用程序的文件夹中,也在标准资源文件夹中。
检测:监视新构建的文件,尤其是未知的文件。NET程序集和用户可写文件夹路径中的配置文件;监视DLL/PE文件事件,特别是这些二进制文件的创建以及的加载。NET程序集转换为进程(可能并不总是创建标准映像加载事件);查找未识别或未正常加载到进程中的图像加载;监控新构建的进程是否有异常活动(例如,不使用网络的进程开始使用网络)以及意外负载。NET资源。
12.过程注入
动态链接库注入
介绍:敌人可能会将动态链接库(DLL)注入进程,以逃避基于进程的防御,并可能提升特权。DLL注入是一种在单独的实时进程的地址空间中执行任意代码的方法。DLL注入通常通过在通过调用新线程加载DLL之前将DLL的路径写入目标进程的虚拟地址空间来执行。写入可以使用本机Windows API调用(如VirtualAllocEx和WriteProcessMemory)执行,然后使用CreateRemoteThread(调用负责加载DLL的LoadLibrary API)调用。这种方法的变体,如反射DLL注入(将自映射DLL写入进程)和内存模块(写入进程时映射DLL),克服了地址重新定位问题以及调用执行的附加API(因为这些方法通过手动预形成LoadLibrary的功能来加载和执行内存中的文件)。这种方法的另一种变体,通常被称为模块踩踏/重载或DLL空区,可以用来隐藏进程中注入的代码。此方法包括将合法DLL加载到远程进程中,然后在目标进程中启动新线程之前手动覆盖模块的AddressOfEntryPoint。这种变体允许攻击者通过磁盘上的合法DLL文件来支持恶意注入代码的执行,从而隐藏恶意注入代码。在另一个进程的上下文中运行代码可以允许访问该进程的内存、系统/网络资源,以及可能提升的权限。通过DLL注入执行也可能逃避安全产品的检测,因为执行是在合法进程下屏蔽的。
预防措施:一些端点安全解决方案可以配置为基于注入过程中发生的常见行为序列来阻止某些类型的过程注入。
检测:监视DLL/PE文件事件,特别是创建这些二进制文件以及将DLL加载到进程中。查找无法识别或未正常加载到进程中的DLL。Sysmon Event ID 7(映像加载)可用于监视DLL加载到进程中。这是一个特别嘈杂的事件,可能会生成大量数据,因此我们建议对任何已知的良性过程和模块负载进行基线化和过滤,以帮助减少生成的事件数量;监视指示各种类型的代码注入的Windows API调用可能会生成大量数据,并且除非在已知错误调用序列的特定情况下收集,否则可能不会直接用于防御,因为API函数的良性使用可能很常见,并且很难与恶意行为区分开来。Windows API调用(如CreateRemoteThread)和可用于修改另一进程内内存的调用(如VirtualAllocEx/WriteProcessMemory)可用于此技术;搜索从LoadLibraryA或LoadLibraryW开始的远程线程创建。根据工具的不同,它可能会提供有关作为函数参数的DLL字符串的附加信息。如果有任何安全软件合法地注入DLL,则必须小心地将其列入白名单;Microsoft Windows允许进程在具有相同特权级别的其他进程中远程创建线程。此功能是通过Windows API CreateRemoteThread提供的。Windows和第三方软件都将此功能用于合法目的。例如,Windows进程csrss.exe在程序中创建线程,以向注册的回调例程发送信号。对手和基于主机的安全软件都使用此功能来注入DLL,但目的截然不同。对手可能会向程序中注入以逃避防御或绕过用户帐户控制,但安全程序可能会这样做,以增强对API调用的监控。DLL注入最常见的方法之一是通过Windows API LoadLibrary;这种行为可以通过在进程之间寻找线程创建,并解析入口点来确定函数名称来检测。如果函数是LoadLibraryA或LoadLibraryW,那么远程线程的意图显然是注入DLL。在这种情况下,必须检查源进程,以便在它既是预期进程又是可信进程时可以忽略它;监视正在查看的进程,这些进程可能会将动态链接库(DLL)注入到进程中,以逃避基于进程的防御并可能提升权限;通过对照合法模块的已知副本检查内存范围,监视与磁盘上DLL文件相比的进程内存不一致;监视对进程所做的更改,这些更改可能会将动态链接库(DLL)注入到进程中,以逃避基于进程的防御并可能提升权限。将恶意DLL注入进程是TTP的常见对手。尽管这样做的方法有很多,但mavinject.exe是一种常用的工具,因为它将许多必要的步骤组合成一个步骤,并且在Windows中可用。攻击者可能会重命名可执行文件,因此我们也使用公共参数“INJECTRUNNING”作为相关签名。将某些应用程序列入白名单可能是减少此分析的噪声所必需的;用Mavinject分析1-DLL注入:(source="WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="WinEventLog:Security" EventCode="4688") Image="C:\Windows\SysWOW64\mavinject.exe" OR Image="C:\Windows\System32\mavinject.exe" OR CommandLine="*/INJECTRUNNING*""
便携式可执行程序注入
介绍:敌人可能会将可移植可执行文件(PE)注入进程,以逃避基于进程的防御,并可能提升特权。PE注入是一种在单独的实时进程的地址空间中执行任意代码的方法。PE注入通常是通过在通过新线程调用目标进程之前将代码(可能没有磁盘上的文件)复制到目标进程的虚拟地址空间来执行的。写入可以使用本机Windows API调用(如VirtualAllocEx和WriteProcessMemory)执行,然后使用CreateRemoteThread或其他代码(例如:shellcode)调用。注入代码的位移确实引入了对重新映射内存引用功能的额外要求。在另一个进程的上下文中运行代码可以允许访问该进程的内存、系统/网络资源,以及可能提升的权限。通过PE注入执行也可能逃避安全产品的检测,因为在合法过程下执行是被掩盖的。
预防措施:一些端点安全解决方案可以配置为基于注入过程中发生的常见行为序列来阻止某些类型的过程注入。
检测:监视指示各种类型的代码注入的Windows API调用可能会生成大量数据,并且除非在已知错误调用序列的特定情况下收集,否则可能不会直接用于防御,因为API函数的良性使用可能很常见,并且很难与恶意行为区分开来。Windows API调用(如CreateRemoteThread)和可用于修改另一进程内内存的调用(如VirtualAllocEx/WriteProcessMemory)可用于此技术;监视正在查看的进程,这些进程可能会将可移植可执行文件(PE)注入到进程中,以逃避基于进程的防御,并可能提升权限;监视对进程所做的更改,这些更改可能会将可移植可执行文件(PE)注入进程,以逃避基于进程的防御,并可能提升权限。
线程执行劫持
介绍:敌人可能会将恶意代码注入被劫持的进程,以逃避基于进程的防御,并可能提升权限。线程执行劫持是一种在单独的实时进程的地址空间中执行任意代码的方法。线程执行劫持通常是通过挂起现有进程,然后取消映射/清空其内存来执行的,然后可以用恶意代码或DLL的路径替换内存。现有受害者进程的句柄首先使用本机Windows API调用(如OpenThread)创建。此时,进程可以挂起,然后写入,重新排列到注入的代码,并分别通过SuspendThread、VirtualAllocEx、WriteProcessMemory、SetThreadContext和ResumeThread恢复。这与进程Hollowing非常相似,但针对现有进程,而不是创建处于挂起状态的进程。在另一个进程的上下文中运行代码可以允许访问该进程的内存、系统/网络资源,以及可能提升的权限。通过线程执行劫持执行也可能逃避安全产品的检测,因为执行是在合法进程下屏蔽的。
预防措施:一些端点安全解决方案可以配置为基于注入过程中发生的常见行为序列来阻止某些类型的过程注入。
检测:监视指示各种类型的代码注入的Windows API调用可能会生成大量数据,并且除非在已知错误调用序列的特定情况下收集,否则可能不会直接用于防御,因为API函数的良性使用可能很常见,并且很难与恶意行为区分开来。Windows API调用,如CreateRemoteThread、SuspendThread/SetThreadContext/ResumeThread,以及可用于修改另一进程内内存的调用,如VirtualAllocEx/WriteProcessMemory,可用于此技术;监视正在查看的进程,这些进程可能会将恶意代码注入被劫持的进程,以逃避基于进程的防御,并可能提升权限;监视对进程所做的更改,这些更改可能会将恶意代码注入被劫持的进程,以逃避基于进程的防御,并可能提升权限。
异步过程调用
介绍:对手可能通过异步过程调用(APC)队列将恶意代码注入进程,以逃避基于进程的防御,并可能提升权限。APC注入是一种在单独的实时进程的地址空间中执行任意代码的方法。APC注入通常是通过将恶意代码附加到进程线程的APC队列来执行的。当线程进入可变状态时,将执行排队的APC函数。现有受害者进程的句柄首先使用本机Windows API调用(如OpenThread)创建。此时,QueueUserAPC可用于调用函数(例如指向恶意DLL的LoadLibrayA)。APC注入的一种变体,被称为“早鸟注入”,涉及创建一个挂起的进程,在该进程中,恶意代码可以通过APC在进程的入口点(以及潜在的后续反恶意软件挂钩)之前写入和执行。AtomBombing是另一种变体,它利用APC调用以前写入全局原子表的恶意代码。在另一个进程的上下文中运行代码可以允许访问该进程的内存、系统/网络资源,以及可能提升的权限。通过APC注入执行也可能逃避安全产品的检测,因为在合法过程下执行是被掩盖的。
预防措施:一些端点安全解决方案可以配置为基于注入过程中发生的常见行为序列来阻止某些类型的过程注入。
检测:监视指示各种类型的代码注入的Windows API调用可能会生成大量数据,并且除非在已知错误调用序列的特定情况下收集,否则可能不会直接用于防御,因为API函数的良性使用可能很常见,并且很难与恶意行为区分开来。Windows API调用(如SuspendThread/SetThreadContext/ResumeThread、QueueUserAPC/NtQueueApcThread)以及可用于修改另一进程内内存的调用(如VirtualAllocEx/WriteProcessMemory)可用于此技术;监视正在查看的进程,这些进程可能通过异步过程调用(APC)队列向进程中注入恶意代码,以逃避基于进程的防御并可能提升权限;监视对进程所做的更改,这些更改可能会通过异步过程调用(APC)队列将恶意代码注入进程,以逃避基于进程的防御并可能提升权限。
线程本地存储
介绍:攻击者可能通过线程本地存储(TLS)回调将恶意代码注入进程,以逃避基于进程的防御,并可能提升权限。TLS回调注入是一种在单独的实时进程的地址空间中执行任意代码的方法。TLS回调注入涉及在可移植可执行文件(PE)内部操纵指针,以便在到达代码的合法入口点之前将进程重定向到恶意代码。TLS回调通常由操作系统用于设置和/或清理线程使用的数据。操作TLS回调可以通过使用其他进程注入技术(如进程空区)分配和写入进程内存空间内的特定偏移量来执行。在另一个进程的上下文中运行代码可以允许访问该进程的内存、系统/网络资源,以及可能提升的权限。通过TLS回调注入执行也可能逃避安全产品的检测,因为执行是在合法进程下屏蔽的。
预防措施:一些端点安全解决方案可以配置为基于注入过程中发生的常见行为序列来阻止某些类型的过程注入。
检测:监视指示各种类型的代码注入的Windows API调用可能会生成大量数据,并且除非在已知错误调用序列的特定情况下收集,否则可能不会直接用于防御,因为API函数的良性使用可能很常见,并且很难与恶意行为区分开来。Windows API调用,如CreateRemoteThread、SuspendThread/SetThreadContext/ResumeThread,以及可用于修改另一进程内内存的调用,如VirtualAllocEx/WriteProcessMemory,可用于此技术;监视正在查看的进程,这些进程可能通过线程本地存储(TLS)回调将恶意代码注入进程,以逃避基于进程的防御并可能提升权限;监视对进程所做的更改,这些更改可能会通过线程本地存储(TLS)回调将恶意代码注入进程,以逃避基于进程的防御并可能提升权限。
Ptrace系统调用
介绍:对手可能通过ptrace(进程跟踪)系统调用将恶意代码注入进程,以逃避基于进程的防御,并可能提升权限。Ptrace系统调用注入是一种在单独的实时进程的地址空间中执行任意代码的方法。Ptrace系统调用注入涉及到附加和修改正在运行的进程。ptrace系统调用使调试进程能够观察和控制另一个进程(以及每个单独的线程),包括更改内存和寄存器值。Ptrace系统调用注入通常是通过将任意代码写入正在运行的进程(例如:malloc),然后用Ptrace_SETREGS调用该内存来设置包含要执行的下一条指令的寄存器来执行的。Ptrace系统调用注入也可以使用Ptrace_POKETEXT/Ptrace_POKEDATA来完成,它将数据复制到目标进程内存中的特定地址(例如:下一条指令的当前地址)。Ptrace系统调用注入可能不可能针对非子进程和/或具有更高权限的进程。在另一个进程的上下文中运行代码可以允许访问该进程的内存、系统/网络资源,以及可能提升的权限。通过ptrace系统调用注入执行也可能逃避安全产品的检测,因为执行是在合法进程下屏蔽的。
预防措施:一些端点安全解决方案可以配置为基于注入过程中发生的常见行为序列来阻止某些类型的过程注入;利用Yama(例如:/proc/sys/kernel/Yama/ptrace_scope),通过仅将ptrace的使用限制为特权用户,来减轻基于ptrace进程的注入。其他缓解控制包括部署提供高级访问控制和进程限制的安全内核模块,如SELinux、grsecurity和AppArmor。
检测:对特定于Linux的调用(如ptrace系统调用)进行监控,由于其特殊性,不应生成大量数据,并且可以是检测一些常见进程注入方法的非常有效的方法;监视正在查看的进程,这些进程可能通过ptrace(进程跟踪)系统调用将恶意代码注入进程,以逃避基于进程的防御并可能提升权限;监视对进程所做的更改,这些更改可能会通过ptrace(进程跟踪)系统调用将恶意代码注入进程,以逃避基于进程的防御并可能提升权限。
过程内存
介绍:敌人可能会通过/proc文件系统将恶意代码注入进程,以逃避基于进程的防御,并可能提升权限。过程内存注入是一种在单独的实时进程的地址空间中执行任意代码的方法。过程内存注入包括通过/Proc文件系统(/Proc/[pid])枚举进程的内存,然后使用可用的小工具/指令来构建面向返回的编程(ROP)负载。每个正在运行的进程都有自己的目录,其中包括内存映射。过程内存注入通常通过使用/Proc文件系统提供的内存映射覆盖目标进程的堆栈来执行。此信息可用于枚举偏移量(包括堆栈)和小工具(或程序中可用于构建恶意有效载荷的指令),否则会被进程内存保护(如地址空间布局随机化(ASLR))隐藏。一旦枚举,可以使用dd覆盖/proc/[pid]/maps中目标进程的内存映射。其他技术(如动态链接劫持)可以用于用更多可用的小工具填充目标进程。与进程Hollowing类似,进程内存注入可能针对子进程(例如睡眠的后台副本)。在另一个进程的上下文中运行代码可以允许访问该进程的内存、系统/网络资源,以及可能提升的权限。通过进程内存注入执行也可能逃避安全产品的检测,因为执行是在合法进程下屏蔽的。
预防措施:一些端点安全解决方案可以配置为基于注入过程中发生的常见行为序列来阻止某些类型的过程注入;限制对敏感文件(如/proc/[pid]/maps或/proc/[pid=mem)的权限。
检测:监视对/proc文件所做的更改,这些更改可能会通过/proc文件系统将恶意代码注入进程,以逃避基于进程的防御,并可能提升权限。在大多数情况下,用户不应该拥有修改这些内容的权限。
额外窗口内存注入
介绍:敌人可能通过额外窗口内存(EWM)将恶意代码注入进程,以逃避基于进程的防御,并可能提升权限。EWM注入是一种在单独的实时进程的地址空间中执行任意代码的方法。在创建窗口之前,基于Windows的图形进程必须规定或注册一个Windows类,该类规定外观和行为(通过Windows过程,这是处理数据输入/输出的函数)。新窗口类的注册可以包括请求将多达40个字节的EWM附加到该类的每个实例的分配内存中。该EWM旨在存储特定于该窗口的数据,并具有特定的应用程序编程接口(API)函数来设置和获取其值。尽管EWM很小,但它足够大,可以存储32位指针,并且通常用于指向windows过程。恶意软件可能会在攻击链的一部分中利用这个内存位置,攻击链包括将代码写入进程内存的共享部分,将指向代码的指针放在EWM中,然后通过将执行控制返回到进程EWM中的地址来调用执行。通过EWM注入授予的执行可以允许访问目标进程的内存以及可能提升的权限。将有效负载写入共享部分还可以避免使用高度监控的API调用,如WriteProcessMemory和CreateRemoteThread。更复杂的恶意软件样本还可能通过触发将重写目标进程的可执行部分内的恶意有效载荷的窗口过程和其他系统功能的组合,潜在地绕过诸如数据执行防止(DEP)之类的保护机制。在另一个进程的上下文中运行代码可以允许访问该进程的内存、系统/网络资源,以及可能提升的权限。通过EWM注入执行也可能逃避安全产品的检测,因为在合法过程下执行是被掩盖的。
预防措施:一些端点安全解决方案可以配置为基于注入过程中发生的常见行为序列来阻止某些类型的过程注入。
检测:监视与枚举和操作EWM相关的API调用,如GetWindowLong和SetWindowLong。与此技术相关的恶意软件也使用SendNotifyMessage来触发相关的窗口过程和最终的恶意注入。
工艺空心化
介绍:对手可能会将恶意代码注入暂停和清空的进程,以逃避基于进程的防御。进程空心化是一种在单独的活动进程的地址空间中执行任意代码的方法。进程空心化通常是通过创建处于挂起状态的进程,然后取消映射/空心化其内存来执行的,然后可以用恶意代码替换内存。受害者进程可以使用本机Windows API调用(如CreateProcess)创建,该调用包括挂起进程主线程的标志。在这一点上,可以使用API调用(如ZwUnmapViewOfSection或NtUnmapViewOfSection)取消映射进程,然后再分别写入、重新排列到注入的代码,并通过VirtualAllocEx、WriteProcessMemory、SetThreadContext和ResumeThread恢复进程。这与线程本地存储非常相似,但创建了一个新进程,而不是针对现有进程。这种行为可能不会导致特权提升,因为注入的进程是从注入进程派生的(因此继承了安全上下文)。然而,通过流程空心化执行也可能逃避安全产品的检测,因为在合法流程下执行是被掩盖的。
预防措施:一些端点安全解决方案可以配置为基于注入过程中发生的常见行为序列来阻止某些类型的过程注入。
检测:监视指示各种类型的代码注入的Windows API调用可能会生成大量数据,并且除非在已知错误调用序列的特定情况下收集,否则可能不会直接用于防御,因为API函数的良性使用可能很常见,并且很难与恶意行为区分开来。Windows API调用,如CreateRemoteThread、SuspendThread/SetThreadContext/ResumeThread,以及可用于修改另一进程内内存的调用,如VirtualAllocEx/WriteProcessMemory,可用于此技术;监视正在查看的进程,这些进程可能会将恶意代码注入挂起的和空心的进程,以逃避基于进程的防御;监视新执行的进程,这些进程可能会将恶意代码注入挂起的和空心的进程,以逃避基于进程的防御。敌人可能启动合法进程,然后利用其内存空间运行恶意代码。此分析查找过去以这种方式滥用的常见Windows进程;当进程为此目的启动时,它们可能没有我们所期望的标准父级。这份清单并不详尽,网络参与者有可能避免这种讨论。只有当Sysmon报告父进程时,这些签名才有效,如果父进程在Sysmon处理事件之前死亡,则情况可能并不总是如此;分析1-从不正常的父母开始的过程:(source="*WinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode="1") OR (source="*WinEventLog:Security" EventCode="4688") AND ParentImage!="?" AND ParentImage!="C:\Program Files\SplunkUniversalForwarder\bin\splunk-regmon.exe" AND ParentImage!="C:\Program Files\SplunkUniversalForwarder\bin\splunk-powershell.exe" AND((Image="C:\Windows\System32\smss.exe" AND (ParentImage!="C:\Windows\System32\smss.exe" AND ParentImage!="System")) OR(Image="C:\Windows\System32\csrss.exe" AND (ParentImage!="C:\Windows\System32\smss.exe" AND ParentImage!="C:\Windows\System32\svchost.exe")) OR(Image="C:\Windows\System32\wininit.exe" AND ParentImage!="C:\Windows\System32\smss.exe") OR(Image="C:\Windows\System32\winlogon.exe" AND ParentImage!="C:\Windows\System32\smss.exe") OR(Image="C:\Windows\System32\lsass.exe" and ParentImage!="C:\Windows\System32\wininit.exe") OR(Image="C:\Windows\System32\LogonUI.exe" AND (ParentImage!="C:\Windows\System32\winlogon.exe" AND ParentImage!="C:\Windows\System32\wininit.exe")) OR(Image="C:\Windows\System32\services.exe" AND ParentImage!="C:\Windows\System32\wininit.exe") OR(Image="C:\Windows\System32\spoolsv.exe" AND ParentImage!="C:\Windows\System32\services.exe") OR(Image="C:\Windows\System32\taskhost.exe" AND (ParentImage!="C:\Windows\System32\services.exe" AND ParentImage!="C:\Windows\System32\svchost.exe")) OR(Image="C:\Windows\System32\taskhostw.exe" AND (ParentImage!="C:\Windows\System32\services.exe" AND ParentImage!="C:\Windows\System32\svchost.exe")) OR(Image="C:\Windows\System32\userinit.exe" AND (ParentImage!="C:\Windows\System32\dwm.exe" AND ParentImage!="C:\Windows\System32\winlogon.exe")))
;监视对进程所做的更改,这些更改可能会将恶意代码注入挂起的和空心的进程,以逃避基于进程的防御。
处理Doppelgänging
介绍:对手可能通过进程复制将恶意代码注入进程,以逃避基于进程的防御,并可能提升特权。进程复制是一种在单独的实时进程的地址空间中执行任意代码的方法。Windows事务性NTFS(TxF)是在Vista中引入的一种执行安全文件操作的方法。为了确保数据的完整性,TxF在给定时间只允许一个事务处理句柄写入文件。在写句柄事务终止之前,所有其他句柄都与写入程序隔离,并且只能读取打开句柄时存在的文件的提交版本。为了避免损坏,如果系统或应用程序在写入事务期间出现故障,TxF会执行自动回滚。尽管已弃用,但自Windows 10起,TxF应用程序编程接口(API)仍处于启用状态。敌人可能会滥用TxF来执行进程注入的无文件变体。与进程Hollowing类似,进程复制涉及替换合法进程的内存,从而能够隐蔽地执行可能逃避防御和检测的恶意代码。进程复制使用TxF也避免了使用高度监控的API函数,如NtUnmapViewOfSection、VirtualProtectEx和SetThreadContext。Process Doppelgänging分4个步骤实现:Transact-使用合法的可执行文件创建TxF事务,然后用恶意代码覆盖文件。这些更改将是孤立的,并且仅在事务的上下文中可见。Load–创建一个共享内存段并加载恶意可执行文件。回滚–撤消对原始可执行文件的更改,有效地从文件系统中删除恶意代码。动画-从受污染的内存部分创建一个进程并开始执行。这种行为可能不会导致特权提升,因为注入的进程是从注入进程派生的(因此继承了安全上下文)。然而,通过流程重复执行可能会逃避安全产品的检测,因为在合法流程下执行是被掩盖的。
预防措施:一些端点安全解决方案可以配置为基于注入过程中发生的常见行为序列来阻止某些类型的过程注入。
检测:扫描PsSetCreateProcessNotifyRoutine期间报告的文件对象,无论何时创建或删除进程,该例程都会触发回调,特别是查找具有启用写入访问权限的文件对象。还要考虑将加载在内存中的文件对象与磁盘上的相应文件进行比较;监视和分析对CreateTransaction、CreateFileTransacted、RollbackTransaction和其他很少使用的指示TxF活动的函数的调用。Process Doppelgänging还通过调用NtCreateProcessEx和NtCreateThreadEx以及用于修改另一个进程(如WriteProcessMemory)内内存的API调用,调用Windows进程加载器的过时且未记录的实现。
VDSO劫持
介绍:敌人可能通过VDSO劫持将恶意代码注入进程,以逃避基于进程的防御,并可能提升权限。虚拟动态共享对象(vdso)劫持是一种在单独的实时进程的地址空间中执行任意代码的方法。VDSO劫持涉及将调用重定向到动态链接的共享库。内存保护可能会阻止通过Ptrace系统调用将可执行代码写入进程。然而,对手可能会劫持从vdso共享对象映射到进程中的系统调用接口代码存根,以执行系统调用来打开和映射恶意共享对象。然后,可以通过存储在进程全局偏移表(存储映射库函数的绝对地址)中的修补内存地址引用重定向进程的执行流来调用此代码。在另一个进程的上下文中运行代码可以允许访问该进程的内存、系统/网络资源,以及可能提升的权限。通过VDSO劫持执行也可能逃避安全产品的检测,因为在合法进程下执行是被屏蔽的。
预防措施:一些端点安全解决方案可以配置为基于注入过程中发生的常见行为序列来阻止某些类型的过程注入。
检测:监视库加载事件,特别是在加载到进程之后创建这些二进制文件的异常情况。查找未被识别或未正常加载到进程中的库;监视系统调用(如ptrace和mmap)的恶意使用情况,这些调用可用于连接、操作内存,然后重定向进程的执行路径。对特定于Linux的调用(如ptrace系统调用)进行监控,由于其特殊性,不应生成大量数据,并且可以是检测一些常见进程注入方法的非常有效的方法。
ListPlanting
介绍:敌人可能会滥用列表视图控件,将恶意代码注入被劫持的进程,以逃避基于进程的防御,并可能提升权限。ListPlanting是一种在单独的实时进程的地址空间中执行任意代码的方法。通过ListPlanting执行的代码也可能逃避安全产品的检测,因为执行是在合法流程下屏蔽的。列表视图控件是用于显示项目集合的用户界面窗口。有关应用程序列表视图设置的信息存储在进程内存中的SysListView32控件中。ListPlanting(一种传递“粉碎攻击”的消息形式)可以通过将代码复制到使用列表视图控件的进程的虚拟地址空间中,然后将该代码用作对所列项目进行排序的自定义回调来执行。敌对方必须首先将代码复制到目标进程的内存空间中,这可以通过各种方式执行,包括直接获得受害进程窗口的SysListView32子进程的句柄(通过Windows API调用,如FindWindow和/或EnumWindows)或其他进程注入方法。ListPlanting的某些变体可能会在目标进程中分配内存,但随后会使用窗口消息来复制有效负载,以避免使用高度监控的WriteProcessMemory函数。例如,对手可以使用PostMessage和/或SendMessage API函数来发送LVM_SETEMPOSITION和LVM_GETTEMPOSITIION消息,从而有效地将有效负载一次复制2个字节到分配的内存。最后,通过向进程窗口的SysListView32子级发送LVM_SORTITEMS消息来触发有效载荷,新分配的缓冲区中的有效载荷作为ListView_SORTITEMS回调传递并执行。
预防措施:一些端点安全解决方案可以配置为基于注入过程中发生的常见行为序列来阻止某些类型的过程注入。
检测:请考虑监视是否过度使用带有LVM_SETEMPOSITION和/或LVM_GETTEMPOSITIon参数的SendMessage和/或PostMessage API函数;监视指示各种类型的代码注入的Windows API调用可能会生成大量数据,并且除非在已知错误调用序列的特定情况下收集,否则可能不会直接用于防御,因为API函数的良性使用可能很常见,并且很难与恶意行为区分开来。Windows API调用(如FindWindow、FindWindowEx、EnumWindows、EnumChildWindows)以及可用于修改另一进程内内存的调用(如VirtualAllocEx/WriteProcessMemory)可能会被滥用于此技术;监视对进程所做的更改,这些更改可能会将代码注入进程,以逃避基于进程的防御,并可能提升权限。分析流程行为,以确定流程是否正在执行异常操作,例如打开网络连接、读取文件或其他可能与妥协后行为有关的可疑操作。
13.计划任务/作业
同4.8
14.有效账户
同3.10