part1
点击上方蓝字关注我们
往期推荐
将二进制空间安全设为"星标⭐️"
第一时间收到文章更新
摘要
MiniFilter 驱动程序是 Windows 操作系统中的一种文件系统过滤驱动程序,用于监控和操作文件系统 I/O 请求。MiniFilter 驱动程序通常被开发用于安全、数据加密、数据保护、文件系统监控等领域。在测试Sysmon时,发现MiniFilter驱动程序可能被滥用以阻止加载EDR 驱动程序, 其原理是阻止内核回调使EDR遥测失效。
攻击原理分析
在MiniFilter驱动程序中, Altitude是用于定义过滤器驱动程序在过滤器堆栈中相对于其他过滤器驱动程序的位置的数值标识符。Altitude 决定了 MiniFilter 驱动程序拦截 I/O 请求的优先级,值越高的过滤器位于堆栈的更高层,值越低的过滤器则位于更低层。Altitude 允许多个 MiniFilter 驱动程序按照特定顺序对同一个 I/O 操作进行处理。
而该EDR致盲技术的核心就是利用了MiniFilter 的加载顺序以及每个MiniFilter的Altitude, 通过将EDR驱动程序的Altitude分配给在目标筛选器之前加载的另一个 MiniFilter, 可以防止 EDR 驱动程序向筛选器管理器注册。如下图:
MDE
通过测试发现, 微软的MDE在之前已经实施了一些安全措施, 当尝试修改Sysmon驱动程序的Altitude以匹配MDE驱动程序(WdFilter)的Altitude以防止其加载时, regedit进程被终止了, 并引发告警, 如图:
桌面上弹出警报后观察到的行为之一是,当返回 Sysmon 驱动程序注册表时,Altitude条目已被删除,如下面的屏幕截图所示。这会有效地禁用Sysmon, 除非手动恢复Altitude条目。
虽然Sysmon的驱动没办法匹配, 但不妨碍咱们测试其它的MiniFilter 驱动程序, 包括系统上已有的默认驱动程序, 例如:FileInfo。换一个MiniFilter驱动进行同样的尝试, 发现更改居然没有被阻止, 成功将与 MDE (328010) 相同的Altitude分配给Sysmon 驱动程序, 如图:
重新启动后,使用 Altitude (328010) 加载 FileInfo 驱动程序,从而阻止加载 WdFilter。卸载管理实时文件系统保护的 WdFilter 后,管理员可以禁用实时保护并运行 Mimikatz 等恶意工具,而不会被阻止。如图:
如果需要卸载处理与安全策略实施或网络流量监控相关的功能的MsSecFlt驱动程序 (385600),可以使用系统上已存在的其他 MiniFilter驱动程序, 例如npsvctrig。
某些EDR厂商采取的措施
一些EDR厂商使用其Altitude 检测到其他驱动程序, 并在使用的Altitude中包含一个点(".")后跟五位数字, MiniFilter 支持这种格式,即 XXXXX.YYYYY。YYYYY 部分是动态分配的,每次加载时都会发生变化。这可以有效防止攻击者为其他 MiniFilter 驱动程序分配相同的 Altitude。如图:
有些EDR厂商则通过调整MiniFilter驱动程序的加载顺序来缓解此问题, 确保其驱动程序在 Sysmon 驱动程序之前加载。根据安全研究人员Patrik Jokela (Insta)的发现,不仅可以修改Altitude, 还可以更改其他几个在确定驱动程序加载顺序方面发挥关键作用的注册表值,从而绕过此缓解措施。下面将围绕该技术进行探索。
影响驱动器加载的关键因素
除了Altitude之外, 以下这些是可能影响 MiniFilter 加载顺序的关键注册表值。
-
Group - 确定 MiniFilter 驱动程序属于哪个加载顺序组。MiniFilter 驱动程序通常分配给特定组,如 FSFilter(文件系统筛选器)子组(例如,FSFilter 活动监视器、FSFilter Top 等)。组内的加载顺序取决于 GroupOrderList 中指定的顺序。
-
Start - 定义了驱动程序或服务何时加载。它可以具有 0 (BOOT_START)、1 (SYSTEM_START) 等值。
-
Type - 定义了服务类型(例如,内核驱动程序或用户模式驱动程序)。
-
Tag - 这是一个数值,可在组内提供更精细的控制,以指定驱动程序的准确加载顺序。
优化设置
-
Group:REG_SZ:FSFilter Infrastructure
该组用于FltMgr (过滤器管理器),它应该是在任何 MiniFilter 驱动程序之前加载的组。许多 MiniFilter 驱动程序将其列为依赖项 (DependOnService),以确保它在它们之前加载。将自己的 MiniFilter 驱动程序包含在该组中可确保其在早期阶段加载。
-
Start:REG_DWORD:0(BOOT_START)
该值必须设置为 0 (BOOT_START);否则,即使它位于 FSFilter 基础结构组中,它也可能会在其他具有 BOOT_START 设置的 MiniFilter 驱动程序之后加载。
-
Type:REG_DWORD:1(SERVICE_KERNEL_DRIVER) or 2 (SERVICE_FILE_SYSTEM_DRIVER)
可以将其设置为 1 (SERVICE_KERNEL_DRIVER) 或 2 (SERVICE_FILE_SYSTEM_DRIVER),因为两者都适用于内核模式驱动程序。但不能设置为 3 或 4,因为其表示的是用户模式驱动程序,而MiniFilter 是内核模式驱动程序。
-
Tag:REG_DWORD:2 或 Not required
标记适用于指定组,在本例中为 FSFilter 基础结构。由于 FltMgr 已分配了 Tag : 1,因此 FltMgr 将首先加载,然后再加载其他驱动程序。
POC:更改Sysmon驱动程序的加载顺序
下面将尝试如何修改 Sysmon 驱动程序注册表设置,以确保 Sysmon 更早加载并有效防止 WdFilter 加载。
首先,修改Sysmon 的Altitude以匹配 WdFilter 的Altitude,并且没有对驱动程序注册表值进行其他更改。将 Sysmon 驱动程序Altitude更改为 328010,如下所示:
如下图所示,WdFilter是在Sysmon之前加载的:
Sysmon 驱动程序已配置为“Start”设置为 0, “Type ”设置为 1。这里为该组创建了一个注册表项,其 REG_SZ 值为“FSFilter Infrastructure”。未创建标签,因为它不是必需的。下面的屏幕截图显示了更新的 Sysmon 驱动程序注册表设置以及它如何阻止加载 WdFilter。
总结
该漏洞仍然影响一些供应商,包括MDE。仅仅监视和阻止 Sysmon 滥用或更改 EDR MiniFilter 驱动程序的加载顺序是不够的。上述 EDR 供应商实施的缓解措施可以为该 MiniFilter 问题提供可行的解决方案。SOC 团队应继续监控所有 MiniFilter(而不仅仅是 Sysmon)中与 Altitude 相关的可疑注册表更改,并及时做出响应。
往期推荐
点个在看你最好看
原文始发于微信公众号(二进制空间安全):一种新的EDR致盲技术
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论