
安全公司Praetorian近期公开了一款名为Swarmer的工具。这款工具能让权限不高的攻击者实现一种极其隐蔽的Windows注册表持久化,从而成功绕开端点检测与响应(EDR)系统的监控。
自2025年2月开始活动以来,Swarmer巧妙地利用了Windows的强制用户配置文件功能以及一些冷门的离线注册表API。它直接修改NTUSER注册表单元,整个过程完全避开了标准的注册表操作钩子,因此不会被轻易发现。
传统的持久化方法,比如在HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下添加启动项,很容易被检测。因为EDR工具可以拦截RegSetValue这类API,记录下修改行为并发出警报。Swarmer的核心思路,就是绕过这个监控层。
它依赖的“强制用户配置文件”是Windows的一项老功能,原本用于在企业环境中统一部署用户配置。在这个机制下,用户登录时,其个人目录%USERPROFILE%下的标准NTUSER.DAT文件会被一个名为NTUSER.MAN的文件覆盖。关键是,低权限用户可以通过复制并重命名NTUSER.DAT来手动创建这个NTUSER.MAN文件。
但问题来了:要编辑一个已经加载到系统中的注册表单元,通常还是得调用标准API,这又会触发警报。Swarmer的解决方案是使用微软官方的Offreg.dll库。这个库本就是为系统安装或取证分析时离线操作注册表单元而设计的。
通过调用ORCreateHive、OROpenHive、ORCreateKey、ORSetValue和ORSaveHive等函数,Swarmer可以在完全不触动Reg*系列API的情况下,构建并修改一个注册表Hive文件。这样一来,像Process Monitor、ETW(Windows事件跟踪)以及大多数依赖API钩子进行行为分析的EDR产品,都难以察觉它的动作。
集群作业流程与实施
Swarmer的工作流程设计得非常高效,主要分为几个步骤:
- 使用
reg export命令导出当前用户的HKCU注册表配置单元。为了不留磁盘痕迹,也可以使用TrustedSec的reg_query Beacon对象文件(BOF)来完成导出。
- 修改导出的
.reg文件内容,例如在其中添加自定义的运行键(Run Key)条目。
- 运行Swarmer工具处理修改后的文件:
- 基本命令:
swarmer.exe exported.reg NTUSER.MAN
- 或使用启动项标志:
swarmer.exe --startup-key "Updater" --startup-value "C:\Path\To\payload.exe" exported.reg NTUSER.MAN
- 将生成的
NTUSER.MAN文件放置到目标用户的%USERPROFILE%目录下。
对于直接从C2(命令与控制)植入体操作的情况,可以解析BOF的输出结果,一步到位:
swarmer.exe --bof --startup-key "Updater" --startup-value "C:\Path\To\payload.exe" bof_output.txt NTUSER.MAN
Swarmer本身使用C#编写,便于通过P/Invoke调用本地API,并且支持离线环境使用。它不仅可以作为独立的EXE程序运行,还能以PowerShell模块的形式加载,为红队操作提供了灵活性:
Import-Module '.\swarmer.dll'
Convert-RegToHive -InputPath '.\exported.reg' -OutputPath '.\NTUSER.MAN'
工具在开发中还采用了一个变通方法,修复了ORCreateHive函数可能产生无效Hive输出文件的问题:先通过RegLoadAppKeyW API创建一个基础的Hive(非管理员权限也可操作),然后再用Offreg库的函数去填充它。

这种方法凸显了在安全对抗中,利用操作系统合法功能和底层API实现绕过的最新趋势。对于防御方而言,监控这类非常规的注册表操作路径,并深入理解强制用户配置文件的潜在风险,变得尤为重要。想了解更多前沿的攻防技术和实战案例,可以关注云栈社区的网络安全板块,那里有持续更新的深度分析与讨论。
|