利用 WDAC 武器化:粉碎 EDR 的梦想

科技   2024-12-25 18:01   广东  

概念

Windows Defender 应用程序控制 (WDAC) 是一项随Windows 10+ 和 Windows Server 2016+ 引入并默认自动启用的技术,它允许组织对允许在其 Windows 计算机上运行的可执行代码进行细粒度控制。WDAC 配置适用于整个计算机并影响设备的所有用户。应用的 WDAC 配置广泛而严格,包括用户和内核模式应用程序、驱动程序、DLL 和脚本的规则。WDAC 为防御者提供了一个出色的工具来阻止潜在威胁在 Windows 端点上执行,但 WDAC 也可以用于攻击。

虽然 WDAC 通常用于防御,但它也可用于阻止遥测源和安全解决方案,例如端点检测和响应 (EDR) 传感器。这些传感器往往在内核空间中执行,并故意使自己难以停止或篡改。但是,由于 WDAC 可能会将策略应用于内核模式可执行文件和驱动程序,因此如果攻击者能够应用 WDAC 策略(可以使用远程管理权限完成),EDR 传感器就会面临风险。当在启动时应用策略时,EDR 传感器不再被允许运行,因此不会加载,从而允许攻击者在不受 EDR 约束的情况下运行。

简而言之,这是一种主要用于在 Active Directory 环境中规避防御和协助横向移动活动的技术。它利用特制的 WDAC 策略来阻止跨端点的防御解决方案,并允许攻击者轻松转向新主机,而无需承担 EDR 等安全解决方案的负担。从更大范围来看,如果攻击者能够编写组策略对象 (GPO),那么他们将能够在整个域中分发此策略,并系统地阻止域中所有端点上的大多数(如果不是全部)安全解决方案,从而可能允许部署后利用工具和/或勒索软件。

  • MITRE ATT&CK 技术:削弱防御 ( T1562 ) - https://attack.mitre.org/techniques/T1562/

  • 潜在影响:整个 Active Directory 林中的所有安全工具可能会被系统地远程停止

攻击技术

尽管这种攻击可能以多种方式执行,但仍有一个共同因素 - WDAC。由于 WDAC 策略默认拒绝,因此阻止许多 EDR 传感器加载非常简单。但是,对手的主要考虑是建立自己的访问权限,同时限制防御解决方案的访问权限。因此,WDAC 策略需要明确允许对手执行特权,以便从进攻角度来看有意义。这是制定专门的 WDAC 策略最有用的地方。使用自定义策略,对手可以停止 EDR 传感器,同时还允许自己执行权限。

此次攻击可能分三个阶段执行:

  1. 攻击者将 WDAC 策略放置在 Windows 代码完整性文件夹内的正确位置。C:\Windows\System32\CodeIntegrity

  2. 即使该策略在运行时刷新,它也不适用于正在运行的进程。因此,重新启动 EDR 传感器的最简单方法是重新启动机器。

  3. 一旦机器开始重启过程,WDAC 策略就会在任何 EDR 驱动程序之前应用,并在其执行之前将其停止。

制定 WDAC 政策

由于某些 EDR 供应商拥有Windows 硬件质量实验室 (WHQL)驱动程序,因此受攻击环境的上下文对于此技术的成功至关重要。这些驱动程序在 WDAC 策略中默认是允许的,并且将允许 WHQL 签名的 EDR 驱动程序加载,尽管它们的服务二进制文件被阻止。在测试期间发现,尽管 EDR 服务被成功阻止,但 EDR 的驱动程序被允许加载并继续显示活动。虽然从对抗的角度来看,最明显的解决方案可能是简单地禁止 WHQL 驱动程序,但这会造成端点无法启动的重大风险。毕竟,这种技术的目标最终是协助横向移动程序,如果设备从未启动,这将变得不可能。因此,专门阻止内核模式组件的更好方法是基于特定发布者或文件属性进行阻止。在测试期间发现,某些 EDR 供应商的驱动程序如果不允许运行,将不允许机器启动。这些驱动程序似乎没有发送任何网络流量,因此决定不单独根据发布者进行阻止,而是根据文件属性进行阻止。事实证明,这一做法非常成功,因为目标驱动程序和可执行文件无法在不中断设备的情况下加载。

如前所述,从对抗的角度来看,专门的 WDAC 策略对于此攻击至关重要。为了阻止没有WHQL驱动程序的 EDR,此策略必须至少满足以下要求:

  1. 处于强制模式

  2. 允许通用路径,以便可执行文件(即可后利用功能)可以暂存执行

第一个要求很容易实现——只需关闭审计模式即可。对于第二个要求,选择任意位置来存储潜在的后开发能力材料就足够了。

另一个重要的考虑因素是兼容性。确保 WDAC 策略能够在尽可能多的端点上运行非常重要。因此,该策略应使用单一策略格式,以最大限度地提高兼容性。在此示例中,我将允许在 中执行应用程序C:\Users\Public。要创建此策略,我将使用App Control Policy Wizard。首先,选择Policy Creator

如前所述,单一策略格是兼容性的最佳选择。

此策略应具有足够的限制性,以确保 EDR 不会运行。因此,请选择Default Windows Mode。

现在,根据前面提到的必要要求配置策略。首先,禁用审核模式并启用设置Disable Runtime Filepath Rules以允许在策略中将文件路径列入白名单。

单击该Add Custom选项并确保:

  1. 范围仅设置为用户模式(路径规则不能应用于内核模式代码)

  2. 操作设置为允许

  3. 规则类型是Path

  4. Reference File设置为Folder选项,并指向C:\Users\Public\*

确保规则已正确添加。根据经验,我通常会将策略与推荐的阻止规则合并。尽管这不是必需的。

现在,该策略应该生成并出现在当前用户的文档文件夹中。

除了编译后的策略外,还会生成策略配置的 XML 表示。虽然 XML 文件很有用,因为它可以在以后进行编辑以使其更加通用,但攻击中使用的编译后的策略本身就是文件SiPolicy.p7b。

寻找攻击向量

创建 WDAC 策略后,就该找到使用它的方法了。主要有三种攻击类型:

  1. 本地计算机

  2. 远程计算机

  3. 完整域名

对于单台机器(本地/远程),部署 WDAC 策略所需要的只是写权限C:\Windows\System32\CodeIntegrity\,这默认要求您具有管理权限。

对于 WDAC 的全域部署,用户需要能够为域创建组策略对象 (GPO),并将策略暂存到所有域计算机都可以读取的位置。此暂存位置通常由 SMB 共享(如域控制器上的 SYSVOL 共享)组成,但并非必须如此。因此,攻击者可以对策略位置进行极富创意的设置 - 它必须是 UNC 路径或域中的本地计算机帐户 ( LOCAL SYSTEM) 可以访问的本地有效路径。

本地计算机

在本地机器上使用此攻击是前面提到的所有方法中最简单的。要应用 WDAC 策略,SiPolicy.p7b需要将策略 ( ) 移动到适当的位置 ( C:\Windows\System32\CodeIntegrity\)。


cp .\SiPolicy.p7b C:\Windows\System32\CodeIntegrity\

为了确认,请检查 EDR 服务的状态:

接下来,重新启动机器并检查 EDR 服务是否仍在运行:

现在 EDR 已被禁用,禁用 Windows Defender 并开始将其他工具放到 WDAC 策略列入白名单的位置的磁盘上(在此示例中C:\Users\Public\*)就很简单了。

远程计算机

远程部署虽然与本地计算机上的部署非常相似,但有一个细微的差别:WDAC 策略的移动和重新启动是远程进行的。这可能通过多种方式实现,但最方便的方式是通过 Windows 内置的 SMB 共享。值得庆幸的是,由于实施 WDAC 配置的唯一操作是将策略移动到 CodeIntegrity 文件夹中,因此可以通过内置C$ADMIN$共享以管理员权限完成此操作。

下面是从 Linux 机器直接从上传策略的简单示例。

smbmap -u Administrator -p P@ssw0rd -H 192.168.4.4 --upload "/home/kali/SiPolicy.p7b" "ADMIN\$/System32/CodeIntegrity/SiPolicy.p7b"

将 WDAC 策略放到正确的位置后,重新启动机器:

smbmap -u Administrator -p P@ssw0rd -H 192.168.4.4 -x "shutdown /r /t 0"

此外,还创建了一个专门的工具来执行此攻击。Krueger是一个由Logan Goins用 C# 编写的自定义工具,专门用于在内存中运行,作为后漏洞利用横向移动活动的一部分。下面的示例使用inlineExecute-Assembly(由@anthemtotheego创建)在内存中执行 .NET 程序集。

inlineExecute-Assembly --dotnetassembly C:\Tools\Krueger.exe --assemblyargs --host ms01

完整域名

虽然在单个主机上使用这种攻击技术已经很具影响力,但如果攻击者能够获得对 Active Directory 域的管理访问权限,其威力将大大增强。一旦获得域管理员、企业管理员或可能创建 GPO 的组的权限,攻击者就可以将恶意组策略分发到域中的计算机。这会给组织带来大量威胁,但就这种攻击技术而言,只需应用 WDAC 策略并重新启动计算机,就可以在相对较短的时间内停止每个端点上的每个 EDR 传感器。此攻击的执行流程如下所示:

1.获得管理访问权限

2.将 WDAC 策略放在每个域计算机都可以访问的位置

3.创建一个 GPO:

  • 应用 WDAC 策略

  • (可选)关闭 Windows Defender 和 Windows Defender 防火墙

  • 尽快安排重启

4.等待机器重新启动

5.EDR 和 Defender 在域中的任何 Windows 计算机上都不再处于活动状态

Krueger 

如前所述,Krueger 是此技术的 .NET 后漏洞利用概念验证 (PoC)。Krueger 主要用于通过远程禁用 EDR 来协助 Active Directory 网络中的横向移动活动,旨在使用inlineExecute-Assembly或内存中运行execute-assembly。凭借对远程目标设备的管理权限,Krueger 在编译时将嵌入在 .NET 程序集中的特制恶意 WDAC 策略写入目标设备上的 CodeIntegrity 目录中,并在运行时引用以供使用。将策略直接从内存中读取到目标设备上后,将从 Krueger 调用该win32api函数InitiateSystemShutDownEx以触发远程目标设备的重新启动。设备完全重新启动后,将应用 WDAC 策略,从而阻止启动用户和内核模式 EDR 保护。最后,攻击者可以使用其他工具以及他们之前获得的管理访问权限来横向移动到目标。

该工具可在此处获得。https://github.com/logangoins/Krueger

检测

虽然可以检测到,但由于此攻击执行速度极快,强烈建议采取缓解措施。话虽如此,要检测 WDAC 策略在端点上的位置,最好在文件系统的特定位置查找特殊命名的文件(见下表)。如前所述,出于兼容性原因,单一策略格式是最好的,但对手并不局限于此。如果组织使用较新版本的 Windows 操作系统,则多种策略格式可以实现相同的结果。

Policy FormatFile System LocationPolicy File Name Format
SingleC:\Windows\System32\CodeIntegrity\SiPolicy.p7b
MultipleC:\Windows\System32\CodeIntegrity\CiPolicies\Active\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}.cip

不幸的是,检测策略是否被放置在这些敏感位置并不是检测这种攻击的最佳方法。虽然这些位置中的策略确实是攻击的特征,但策略出现在这些位置并不一定是恶意的。因此,应采取措施主动扫描 WDAC 策略以确定其完整性,其中包括调查其中的字符串和特定字节。

例如,基本 WDAC 策略仅允许运行 Windows 二进制文件和 WHQL 签名驱动程序,这将阻止所有不符合这些要求的程序。因此,不使用 WHQL 签名驱动程序的 EDR 供应商将被此策略阻止,尽管该策略从未明确提及与供应商有关的任何内容。这给潜在检测带来了很大困难,因为需要构建检测程序才能发现未提及供应商的情况。

另一方面,有些 EDR 供应商使用 WHQL 签名的驱动程序,因此需要 WDAC 策略专门阻止该供应商的驱动程序。值得庆幸的是,这一要求使检测变得容易得多,因为某些 EDR 供应商的提及可能会被标记。虽然编译后的 WDAC 策略的格式不可公开访问,但检测潜在恶意策略的最简单方法可能就是观察其中包含的字符串。如下面的屏幕截图所示,从 WDAC 策略中转储字符串可提供策略中引用的所有可执行文件、驱动程序和文件属性,但出于安全原因,引用的文件属性已被删除。

虽然仅基于字符串创建检测可以检测到恶意策略,但这样做会产生大量误报。因此,能够检测编译策略中的字节变得至关重要。在分析了编译的 WDAC 策略的转储后,我们对编译的 WDAC 策略的结构做出了一些关键观察。


字节偏移描述字节
0x00-0x04将文件标记为已编译的 WDAC 策略0x07 00 00 00 0E
0x25禁用运行时文件路径规则(允许在策略中使用文件路径)0x20关闭
0x28打开
0x26控制强制/审计模式0x8C强制执行
0x8D审核
0xE0-0xE7还需要更多的研究,但这似乎控制了这种攻击技术正常运行所必需的允许/阻止规则0xFF FF FF FF FF FF FF FF阻止
0x00 00 00 00 00 00 00 00允许

YARA 规则检测 Krueger 的使用情况以及提及特定文件属性的编译 WDAC 策略。这些 YARA 规则在对抗恶意策略的同时,也存在尚未解决的误报。因此,使用这些规则时请自担风险。有关已进行的检测,请转到Krueger 的 Github 存储库。https://github.com/logangoins/Krueger

不幸的是,这里的关键点是检测“恶意”策略并不容易。如果组织在其环境中未使用 WDAC,则可能仅针对尝试在上表提到的位置添加/编辑/删除策略而构建检测。此外,针对此攻击的检测不太可能为防御者提供太多早期预警,因为在端点上实施策略后,只需重新启动即可停止 EDR。再次,强烈建议努力减轻潜在攻击。

减轻

简而言之,有两种可以使用的缓解技术:

通过组策略强制实施 WDAC 策略

遵循最小特权原则 - 将权限限制为代码完整性文件夹、SMB 共享和组策略修改

虽然及时发现这种攻击以减少影响很困难,但缓解措施并不困难。首先,通过组策略强制实施远程 WDAC 策略将消除攻击者将策略推送到各个端点所带来的威胁。当 GPO 强制实施 WDAC 策略时,即使 WDAC 策略的本地副本被覆盖,计算机也会从通过 GPO 定义的位置提取策略并覆盖“恶意”策略,然后才能生效。如果组织未在其端点上使用 WDAC,则一种既能维持环境中的使用和功能又能提供针对此攻击的保护的方法是通过 GPO 部署处于审核模式的 WDAC策略。

有一些较小的缓解措施可以帮助减少此攻击造成的影响。确保禁用本地管理帐户和/或通过防御解决方案(例如 Microsoft 的本地管理员密码解决方案 (LAPS))强制执行安全密码,可以降低本地管理帐户被入侵并用于执行恶意操作的可能性。此外,最好限制能够修改域中的组策略并远程访问 SMB 共享的用户。遵循最小特权原则是限制此攻击风险的有效方法。



感谢您抽出

.

.

来阅读本文

点它,分享点赞在看都在这里

Ots安全
持续发展共享方向:威胁情报、漏洞情报、恶意分析、渗透技术(工具)等,不会回复任何私信,感谢关注。
 最新文章