Krueger 使用WDAC终止EDR进程

Krueger 使用WDAC终止EDR进程

攻击原理

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 )
  • 潜在影响:整个 Active Directory 林中的所有安全工具可能会被系统地远程停止

Krueger 简介

Krueger 是一种概念验证 (PoC) .NET 后利用工具,用于远程终止端点检测和响应 (EDR),这是横向移动程序的一部分。

Krueger 通过利用 Windows Defender 应用程序控制 (WDAC) 来完成此任务,WDAC 是 Microsoft 创建的内置应用程序控制实用程序,能够在用户和内核模式级别阻止代码。利用对目标远程设备的管理权限的 Krueger,攻击者可以快速将 WDAC 策略放入磁盘并执行远程重启,从而阻止 EDR 服务在系统启动时启动。

Krueger 还可以使用execute-assemblyinlineExecute-Assembly@anthemtotheego )等工具从内存中运行。此外,为了防止在从内存执行 Krueger 时需要从磁盘加载 WDAC 策略,Krueger 在编译时插入了 .NET 程序集内的嵌入式 WDAC 策略,该策略可以从内存中读取并在运行时写入目标。

攻击流程

Domain Controller
Workstations
Malicious WDAC Policy

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

此攻击的执行流程如下所示:

  1. 获得管理访问权限
  2. 将 WDAC 策略放在每个域计算机都可以访问的位置
  3. 创建一个 GPO:
    • 应用 WDAC 策略
    • (可选)关闭 Windows Defender 和 Windows Defender 防火墙
    • 尽快安排重启
  4. 等待机器重新启动
  5. EDR 和 Defender 在域中的任何 Windows 计算机上都不再处于活动状态

POC

https://github.com/logangoins/Krueger

使用方法

inlineExecute-Assembly --dotnetassembly C:\Tools\Krueger.exe --assemblyargs --host ms01
Krueger 使用WDAC终止EDR进程

有关此技术的更多信息,请访问我们的博客:beierle.win/2024-12-19-Weaponizing-WDAC-Killing-the-Dreams-of-EDR/

防御方法

有两种可用的缓解技术:

  1. 通过组策略强制实施 WDAC 策略
  2. 遵循最小特权原则 – 将权限限制为代码完整性文件夹、SMB 共享和组策略修改

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

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

检测方法

yara规则:

import "pe"

rule KRUEGER {
	meta :
		description = "Identifies a Krueger binary"
		author = "Jonathan Beierle"
		reference = "https://github.com/logangoins/Krueger"
	strings:
		$policydst1 = "\\C$\\Windows\\System32\\CodeIntegrity\\SiPolicy.p7b"
		$policydst2 = "ADMIN$\\System32\\CodeIntegrity\\SiPolicy.p7b"

		/* Strings and bytes used to identify an embedded WDAC policy */
		$wdac1 = { 0E 37 44 A2 C9 44 06 4C B5 51 F6 01 6E 56 30 76 }  /* Bytes used for several section headers in WDAC policies */
		$wdac2 = "_?r"
		$wdac3 = "PTbS^}"
		$wdac4 = "TJ-"

		$s1 = "Krueger.exe"
		$s2 = "Krueger.SiPolicy.p7b"
	condition:
		pe.imphash() == "f34d5f2d4577ed6d9ceec516c1f5a744" or
		(
			(  /* Test for embedded WDAC policy */
				all of ($wdac*) and
				#wdac1 >= 3
			) and 
			any of ($s*) or
			any of ($policydst*)
		)
}

private rule ENFORCED_BLOCKING_WDAC_POLICY {
	meta:
		description = "Identifies if a file is a compiled WDAC policy that enforces blocking rule(s)"
		author = "Jonathan Beierle"
	strings:
		$filesignature = { 07 00 00 00 0E }
		$blockbytes = { FF FF FF FF FF FF FF FF }
		$enforcebyte = { 8C }
	condition:
		$filesignature at 0x00 and ($blockbytes at 0xE0 or $blockbytes at 0xF8) and $enforcebyte at 0x26
}

rule BLOCK_WINDOWS_DEFENDER {
	meta:
		description = "Identifies if a compiled WDAC policy references Windows Defender details in a potentially malicious manner"
		author = "Jonathan Beierle"
	strings:
		/* Executables that may be blocked */
		$blockexe1 = "MsSense.exe" fullword wide
		$blockexe2 = "MsMpEng.exe" fullword wide
		$blockexe3 = "MsDefenderCoreService.exe" fullword wide

		/* Executables descriptions that may be blocked */
		$blockattr1 = "Windows Defender Advanced Threat Protection Service Executable" fullword wide
		$blockattr2 = "Antimalware Service Executable" fullword wide
		$blockattr3 = "Antimalware Core Service" fullword wide
	condition:
		ENFORCED_BLOCKING_WDAC_POLICY and any of ($blockexe*,$blockattr*)
}

rule BLOCK_CROWDSTRIKE {
	meta:
		description = "Identifies if a compiled WDAC policy references CrowdStrike Falcon details in a potentially malicious manner"
		author = "Jonathan Beierle"
	strings:
		$blockexe1 = "CSFalconService.exe" fullword wide
		$blockdriver1 = "CSAgent.sys" fullword wide
		$blockattr1 = "CrowdStrike Falcon Sensor" fullword wide
	condition:
		ENFORCED_BLOCKING_WDAC_POLICY and any of ($blockexe*,$blockdriver1,$blockattr*)
}

转载请注明出处及链接

Leave a Reply

您的邮箱地址不会被公开。 必填项已用 * 标注