文章总结: Elastic披露DragonBreathAPT利用RoningLoader攻击中文用户,通过木马化安装程序分发gh0stRAT变种。攻击链滥用PPL机制禁用Defender,利用签名驱动及自定义WDAC策略专门针对360和火绒。报告详细剖析多阶段防御规避技术,提供YARA规则及行为检测建议,建议企业监控ClipUp异常调用及驱动加载行为。
综合评分: 88
文章分类: 恶意软件,威胁情报,免杀,逆向分析,红队
PPL 滥用新路径
aeverj
aeverj
红队工坊
2026年1月27日 06:03
北京
翻译自 RONINGLOADER: DragonBreath’s New Path to PPL Abuse
引言
Elastic 安全实验室近期发现了一场正在进行的攻击活动。该活动通过伪装成谷歌浏览器、微软 Teams 等正规软件的木马化 NSIS 安装程序,分发一款经过改造的 gh0st 远程访问木马(Remote Access Trojan, RAT)变种。我们将这次攻击归因于 DragonBreath APT(APT-Q-27)组织。整个感染链采用多阶段投递机制,并运用了多种规避检测的手段——其中大量冗余设计专门针对中国市场上流行的终端安全产品。这些技术包括:携带一个合法签名的内核驱动、部署自定义 WDAC(Windows Defender Application Control)https://learn.microsoft.com/en-us/hololens/windows-defender-application-control-wdac 策略,以及通过滥用 PPL(Protected Process Light,受保护进程轻量级)机制来篡改 Microsoft Defender 可执行文件。
这次攻击主要针对中文用户群体。与 2022-2023 年间记录的早期 DragonBreath 相关活动相比,本次攻击在适应性方面展现出明显的演进。我们希望通过这份报告,提高业界对该恶意软件开始采用的新技术的认知,并揭示这款我们命名为 RoningLoader 的独特加载器。
核心发现
- 该恶意软件滥用受保护进程轻量级(PPL)机制来禁用 Windows Defender
- 攻击者利用一个有效的签名内核驱动来终止进程
- 部署自定义的未签名 WDAC 策略,阻止 360 安全卫士和火绒安全的可执行文件
- 通过幽灵 DLL(Phantom DLL)和线程池(Thread Pool)载荷注入技术,进一步终止杀毒软件进程
- 最终载荷有小幅更新,与 DragonBreath 组织存在关联
发现经过
2025 年 8 月,一篇研究文章 https://www.zerosalarium.com/2025/08/countering-edrs-with-backing-of-ppl-protection.html 详细披露了一种滥用受保护进程轻量级(PPL)机制来禁用终端安全工具的方法。在该披露发布后,我们据此制定了一条行为检测规则——”通过 ClipUp 执行的潜在规避行为” https://github.com/elastic/protections-artifacts/blob/main/behavior/rules/windows/defense_evasion_potential_evasion_via_clipup_execution.toml。随后,通过对遥测数据进行威胁狩猎,我们发现了一个正在运用该技术的活跃攻击活动。
RONINGLOADER 代码分析
初始感染向量 https://www.virustotal.com/gui/file/da2c58308e860e57df4c46465fd1cfc68d41e8699b4871e9a9be3c434283d50b/detection 是一个 Windows 安装程序包(MSI)。MSI 执行后充当投放器,释放出两个内嵌的 Nullsoft 脚本安装系统(NSIS)https://nsis.sourceforge.io/Main_Page 安装程序。NSIS 本身是一个合法的开源 Windows 安装程序制作工具,但由于其易用性,经常被攻击者滥用来打包和分发恶意软件,正如我们在 GULOADER https://www.elastic.co/security-labs/getting-gooey-with-guloader-downloader 中所见。在本次活动中,我们观察到这些恶意安装程序以各种主题进行伪装,冒充谷歌浏览器、微软 Teams 或其他可信应用程序,诱骗用户执行。
两个嵌套的 NSIS 安装程序中,一个是良性的,用于安装正规软件;另一个则是恶意的,负责部署整条攻击链。
RONINGLOADER 执行流程
攻击链利用一个名为 ollama.sys 的签名驱动程序来终止杀毒软件进程。该驱动的签名方为”昆明无奇电子商务有限公司”,证书有效期为 2025 年 2 月 3 日至 2026 年 2 月 3 日。通过在 VirusTotal 上关联搜索,我们发现了另外 71 个使用相同证书签名的二进制文件。其中,我们识别出伪装成”慕讯公益加速器”(一款在中国用户中流行的游戏加速 VPN 软件)的 AgentTesla 木马投放器,样本最早可追溯至 2025 年 4 月。值得注意的是,不同样本的签名技术存在差异。一些早期样本(如 inject.sys``https://www.virustotal.com/gui/file/507e41a0831a8f3a81f2cd6be76ea4d757f463524f6c93bba15d47984f9e29c1/details)包含 HookSignTool https://github.com/Jemmy1228/HookSigntool 的特征痕迹,包括字符串 JemmyLoveJenny;而 2025 年 10 月的 ollama.sys 样本则没有这类痕迹,使用的是标准签名流程——但两者的证书有效期却完全相同。
将 ollama.sys 的 PDB 路径特征 D:\VS_Project\加解密\MyDriver1\x64\Release\MyDriver1.pdb 与其他样本进行比对,我们发现了来自不同提交样本的其他特征:
D:\cpp\origin\ConsoleApplication2\x64\Release\ConsoleApplication2.pdbD:\a_work\1\s\artifacts\obj\coreclr\windows.x86.Release\Corehost.Static\singlefilehost.pdbC:\Users\0\Desktop\EAMap\x64\Release\ttt.pdbh:\projects\netfilter3\bin\Release\Win32\nfregdrv.pdb
由于使用该证书签名的二进制文件种类繁多、提交数量庞大,我们怀疑该证书可能已经泄露,但目前这仍是推测。
驱动程序的数字签名
第一阶段
我们的分析从初始二进制文件入手,其 SHA256 哈希值为:da2c58308e860e57df4c46465fd1cfc68d41e8699b4871e9a9be3c434283d50b。解压后可发现两个嵌入的可执行文件:良性安装程序 letsvpnlatest.exe 和恶意安装程序 Snieoatwtregoable.exe。
恶意安装程序 Snieoatwtregoable.exe 会在 C:\Program Files\Snieoatwtregoable\ 创建一个新目录,并在该文件夹内释放两个文件:一个名为 Snieoatwtregoable.dll 的 DLL(动态链接库)和一个加密文件 tp.png。
释放到磁盘上的文件
恶意活动的核心位于 Snieoatwtregoable.dll 中,该 DLL 仅导出一个函数:DllRegisterServer。当该函数被调用时,它会从磁盘读取 tp.png 文件的内容,然后使用一个包含循环右移(ROR)和异或(XOR)运算的简单算法对数据进行解密。
XOR 解密例程
解密后的内容是一段 shellcode(外壳代码),用于在内存中反射式加载并执行一个 PE(Portable Executable,可移植可执行文件)。恶意软件首先使用 NtAllocateVirtualMemory API 在自身进程中分配一块新的内存区域,然后通过调用 NtCreateThreadEx 创建一个新线程来执行这段 shellcode。
恶意软件试图通过加载一个全新的 ntdll.dll 来移除任何用户态钩子(userland hooks),然后使用 GetProcAddress 配合 API 名称来解析函数地址。
加载全新的 NTDLL
恶意软件尝试连接本地 5555 端口,但这并没有实际用途——因为连接结果不会影响后续行为。我们推测这可能是死代码或开发阶段遗留的测试代码。
死代码
第二阶段 – tp.png
RONINGLOADER 首先使用 GetTokenInformation API 检查自身是否具有管理员权限。如果没有,它会尝试通过 runas 命令启动一个新的提权实例,然后终止原进程。
使用 RunAs 命令提升权限
有趣的是,恶意软件会尝试使用 User-Agent "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" 访问硬编码的 URL http://www.baidu.com/。但这似乎也是死代码,可能是某个已移除的功能或为未来版本预留的占位代码。其设计目的是提取并记录该 URL 返回的 HTTP 响应头中的日期信息。
随后,恶意软件会扫描当前运行的进程列表,查找特定的杀毒软件。它会将进程名与一个硬编码列表进行比对,如果找到匹配项,就将对应的布尔标志设置为”True”。
扫描特定进程
以下是二进制文件中硬编码的进程名及其对应的安全产品列表:
| 进程名 | 安全产品 |
| — | — |
| MsMpEng.exe | Microsoft Defender 杀毒软件 |
| kxemain.exe | 金山毒霸 |
| kxetray.exe | 金山毒霸 |
| kxecenter.exe | 金山毒霸 |
| QQPCTray.exe | 腾讯电脑管家 |
| QQPCRTP.exe | 腾讯电脑管家 |
| QMToolWidget.exe | 腾讯电脑管家 |
| HipsTray.exe | 奇虎 360 安全卫士 |
| HipsDaemon.exe | 奇虎 360 安全卫士 |
| HipsMain.exe | 奇虎 360 安全卫士 |
| 360tray.exe | 奇虎 360 安全卫士 |
通过注入远程进程终止杀毒软件进程
接下来,恶意软件会终止这些进程。有趣的是,针对奇虎 360 安全卫士产品,它采用了与其他杀毒软件不同的处理方式。
首先,它通过修改防火墙规则来阻断所有网络通信。然后调用一个函数,将 shellcode 注入到卷影复制服务(VSS,Volume Shadow Copy Service)关联的进程 vssvc.exe 中。
它首先为自己授予高完整性级别的 SeDebugPrivilege 令牌。
为自身授予 SeDebugPrivilege 权限
然后,如果卷影复制服务(VSS)https://learn.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service 尚未运行,它会启动该服务,并获取其关联进程(vssvc.exe)的 PID(进程 ID)。
启动 VSS 服务
接下来,恶意软件使用 NtCreateSection 创建两个独立的内存节区(Section),然后将这些节区的视图映射到 vssvc.exe 进程的内存空间中。第一个节区包含一个完整的 PE 文件——这是一个设备名为 \\.\Ollama 的内核驱动。第二个节区包含待执行的 shellcode。
将节区视图映射到远程进程
RONINGLOADER 在此处采用的进程注入方式,与恶意软件其他位置使用的注入方法有所不同。该技术利用线程池(Thread Pool)在远程进程中通过文件写入触发器来远程执行代码。这种技术由 SafeBreach https://www.safebreach.com/blog/process-injection-using-windows-thread-pools/ 于 2023 年记录,存在多种变体。
通过线程池任务进行注入
一旦执行,shellcode 首先会动态解析其运行所需的 Windows API 地址。这是 RONINGLOADER 中唯一使用混淆技术的部分——它使用 Fowler–Noll–Vo 哈希 https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function(FNV)算法通过哈希值而非名称来查找函数。
FNV 算法指令
它首先获取 CreateFileW、WriteFile 和 CloseHandle 的地址,将驱动程序写入磁盘的硬编码路径 C:\windows\system32\drivers\1912763.temp。
然后执行以下操作:
- 创建一个名为
xererre1的服务来加载写入磁盘的驱动 - 对于
360Safe.exe、360Tray.exe和ZhuDongFangYu.exe(这些都是奇虎 360 软件的关联进程),分别调用两个函数:一个用于按名称查找进程的 PID,另一个用于按 PID 终止进程 - 然后停止并删除
xererre1服务
终止奇虎 360 软件进程的函数调用
为了终止进程,恶意软件使用了内核驱动。对驱动的分析显示,它只注册了一个功能:处理一个 IOCTL(I/O 控制代码)ID(0x222000),该代码接收 PID 作为参数,首先通过 ZwOpenProcess 打开进程,然后使用 ZwTerminateProcess 内核 API 终止进程。
内核驱动通过 PID 终止进程
终止杀毒软件进程
回到主执行流程,恶意软件进入一个循环,确认 360tray.exe 已被终止——这是由注入 VSS 服务的 shellcode 处理的。只有在验证该进程不再运行后,它才会继续执行。确认后,系统会立即恢复防火墙设置。这很可能是一种防御措施,旨在切断该软件的通信渠道,阻止它向后端服务上传最终的活动日志或安全警报。
然后,它直接从主进程终止其他安全产品的进程。值得注意的是,它没有试图隐藏这些操作——放弃了之前的 API 哈希技术,直接调用所需的函数。
终止其他安全产品的函数调用
RONINGLOADER 采用一套一致且可重复的流程来终止目标进程:
- 首先,将恶意驱动写入磁盘,这次写入临时路径
C:\Users\analysis\AppData\Local\Temp\ollama.sys - 创建一个临时服务(
ollama)将ollama.sys加载到内核 - 然后按名称获取目标进程的 PID,并向驱动发送包含 PID 的请求来执行终止操作
- 终止命令发送后立即删除服务
写入驱动、创建服务、启动服务
按 PID 终止进程并随后删除服务
针对 Microsoft Defender,恶意软件尝试使用上述相同方法终止 MsMpEng.exe 进程。我们注意到作者的一个代码缺陷:对于 Microsoft Defender,代码没有检查 Defender 是否已在运行,而是直接搜索 MsMpEng.exe 进程。这意味着如果该进程未运行,恶意软件会将 0 作为 PID 发送给驱动。
终止 Microsoft Defender 进程
恶意软件还有更多冗余代码用于终止安全产品进程。它还会将另一段 shellcode 注入 svchost.exe,类似于注入 vssvc.exe 的方式,但目标进程列表不同,如下图所示。
终止安全进程的冗余代码
这种注入技术同样使用线程池,但注入的代码通过事件触发执行。
使用事件作为触发器的线程池注入
进程终止完成后,恶意软件创建 4 个文件夹:
C:\ProgramData\lnkC:\ProgramData\<当前日期>C:\Users\Public\Downloads\<当前日期>C:\ProgramData\Roning
创建文件夹用于释放文件
内嵌压缩包
然后,恶意软件将三个 .txt 文件写入 C:\Users\Public\Downloads\<当前日期>。尽管扩展名是 .txt,但这些并非文本文件,而是采用特定格式构建的容器文件,可能改编自其他代码库。
这种自定义文件结构组织如下:
- 魔术字节: 文件以签名
4B 44 01 00开头用于识别 - 文件计数: 紧随其后的是一个值,表示容器内封装的文件数量
- 文件元数据: 然后是一个描述每个存储文件信息的头部区段
- 压缩数据: 最后,每个嵌入文件以 ZLIB 压缩数据块存储
以下是 hjk.txt 压缩包的文件格式示例,它包含 2 个文件:1.bat 和 fhq.bat。
这种压缩包格式适用于当前阶段的另外两个嵌入文件:
agg.txt,包含 3 个文件 –Enpug.bin、goldendays.dll和trustinstaller.binkill.txt,包含 1 个文件 –1.dll
hjk.txt 的压缩包格式
绕过 UAC 和杀毒软件网络通信的批处理脚本
1.bat 是一个简单的批处理脚本,通过将注册表值 EnableLUA 设置为 0 来禁用用户账户控制(UAC)。
1.bat 内容
fhq.bat 是另一个批处理脚本,针对 C:\ProgramData\lnk\123.txt 中定义的程序以及奇虎 360 安全软件(360Safe.exe),通过创建防火墙规则来阻止其入站和出站连接。它还会禁用所有配置文件中的防火墙通知。
fhq.bat 内容
通过幽灵 DLL 终止杀毒软件进程
部署的 DLL 1.dll 被复制到 C:\Windows\System32\Wow64\Wow64Log.dll,以便被任何 WOW64 进程侧加载——因为 Wow64Log.dll 是一个”幽灵 DLL” https://hijacklibs.net/entries/microsoft/built-in/wow64log.html,默认情况下在 Windows 机器上并不存在。它的任务具有冗余性,本质上是尝试使用标准 Windows API(TerminateProcess)终止一系列进程。
Wow64Log.dll DllMain 代码
ClipUp 方式终止 MS Defender
然后,恶意软件尝试使用 Zero Salarium https://www.zerosalarium.com/2025/08/countering-edrs-with-backing-of-ppl-protection.html 于 2025 年 8 月记录的 PPL 滥用技术。该文章的概念验证代码仅针对 Microsoft Defender。注意,所有系统命令都是通过 cmd.exe 配合 ShellExecuteW API 执行的:
- 它在
C:\ProgramData\Microsoft\Windows Defender\Platform\*下搜索 Microsoft Defender 的安装文件夹,只选择修改日期最新的目录(表示当前使用的版本) - 创建文件夹
C:\ProgramData\roming,并使用mklink创建一个指向找到的目录的目录链接,命令如下:cmd.exe /c mklink /D "C:\ProgramData\roming" "C:\ProgramData\Microsoft\Windows Defender\Platform\4.18.25050.5-0" - 然后使用以下参数运行
C:\Windows\System32\ClipUp.exe:-ppl C:\ProgramData\roming\MsMpEng.exe,这会用垃圾数据覆盖MsMpEng.exe,从而有效地禁用 EDR(终端检测与响应),即使重启后也是如此
作者似乎复制了 EDR-Freeze https://github.com/TwoSevenOneT/EDR-Freeze/blob/ceffd5ea7b813b356c77d469561dbb5ee45aeb24/PPLHelp.cpp#L43 的代码来启动 ClipUp.exe。
CiPolicies
恶意软件直接针对 Windows Defender 应用程序控制(WDAC),将策略文件写入路径 C:\\Windows\\System32\\CodeIntegrity\\CiPolicies\\Active\\{31351756-3F24-4963-8380-4E7602335AAE}.cip。
将策略写入磁盘
这个恶意策略以”拒绝列表”模式运行,允许大多数应用程序运行,同时明确阻止两家流行的中国杀毒软件厂商:
- 奇虎 360 安全卫士,通过阻止
360rp.exe和360sd.exe - 火绒安全,通过阻止
ARPProte.exe - 通过证书 TBS 哈希
A229D2722BC6091D73B1D979B81088C977CB028A6F7CBF264BB81D5CC8F099F87D7C296E48BF09D7EBE275F5498661A4阻止所有由火绒安全(北京火绒网络科技有限公司)签名的可执行文件
一个关键组件是 Enabled:Unsigned System Integrity Policy 规则,它允许在没有有效数字签名的情况下加载该策略。
Truncated...
<Rule>
<Option>Enabled:Inherit Default Policy</Option>
</Rule>
<Rule>
<Option>Enabled:Unsigned System Integrity Policy</Option>
</Rule>
<Rule>
<Option>Enabled:Advanced Boot Options Menu</Option>
</Rule>
<Rule>
<Option>Enabled:Update Policy No Reboot</Option>
</Rule>
</Rules>
<EKUs />
<FileRules>
<Allow ID="ID_ALLOW_A_019A298478CE7BF4902DE08CA2D17630" FileName="*" />
<Allow ID="ID_ALLOW_A_019A298478CE7AB089C369772F34B39B" FileName="*" />
<Deny ID="ID_DENY_A_019A298478CE7DBA9913BFC227DACD14" FileName="360rp.exe" InternalName="360rp.exe" FileDescription="360杀毒 实时监控" ProductName="360杀毒" />
<Deny ID="ID_DENY_A_019A298478CE763C85C9F42EC8669750" FileName="360sd.exe" InternalName="360sd.exe" FileDescription="360杀毒 主程序" ProductName="360杀毒" />
<FileAttrib ID="ID_FILEATTRIB_A_019A298478CE766B9C39FB9CE6805A11" FileName="ARPProte.exe" MinimumFileVersion="6.0.0.0" />
</FileRules>
<Signers>
<Signer ID="ID_SIGNER_A_019A298478CE7608908CAE58FD9C3D8E" Name="">
<CertRoot Type="TBS" Value="A229D2722BC6091D73B1D979B81088C977CB028A6F7CBF264BB81D5CC8F099F87D7C296E48BF09D7EBE275F5498661A4" />
<CertPublisher Value="北京火绒网络科技有限公司" />
<FileAttribRef RuleID="ID_FILEATTRIB_A_019A298478CE766B9C39FB9CE6805A11" />
</Signer>
<Signer ID="ID_SIGNER_A_019A298478CE77F7B523D1581F518639" Name="">
<CertRoot Type="TBS" Value="A229D2722BC6091D73B1D979B81088C977CB028A6F7CBF264BB81D5CC8F099F87D7C296E48BF09D7EBE275F5498661A4" />
<CertPublisher Value="北京火绒网络科技有限公司" />
</Signer>
</Signers>
...Truncated
第三阶段 – goldendays.dll
在上一阶段,RONINGLOADER 创建了一个名为 MicrosoftSoftware2ShadowCop4yProvider 的新服务,使用以下命令运行下一阶段的执行:regsvr32.exe /S "C:\ProgramData\Roning\goldendays.dll。
创建 MicrosoftSoftware2ShadowCop4yProvider 服务
该组件的主要目标是将下一个载荷注入一个合法的高权限系统进程中,以此来掩盖其活动。
为此,RONINGLOADER 首先识别一个合适的目标进程。它有一个硬编码的服务名称列表,会依次尝试启动:
- TrustedInstaller(
TrustedInstaller.exe) - MicrosoftEdgeElevationService(
elevation_service.exe)
恶意软件遍历此列表,尝试启动每个服务。一旦某个服务成功启动,或发现其已在运行,恶意软件就会保存其进程 ID(PID)用于后续的注入阶段。
启动 TrustedInstaller 和 MicrosoftEdgeElevationService 服务
接下来,恶意软件通过在 C:\Windows\ 目录中创建一个随机命名的批处理文件(例如 C:\Windows\KPeYvogsPm.bat)来建立持久化。该脚本内部运行一个具有以下逻辑的无限循环:
- 检查捕获的可信服务 PID(例如
TrustedInstaller.exe的 PID4016)是否仍在运行 - 如果服务未运行,脚本会重新启动之前创建的恶意服务(
MicrosoftSoftware2ShadowCop4yProvider),确保恶意软件组件保持活跃 - 如果服务进程正在运行,脚本休眠 10 秒后再次检查
批处理文件内容
最后,恶意软件读取 C:\ProgramData\Roning\trustinstaller.bin 的内容。使用之前获取的可信服务 PID,将此载荷注入目标进程(TrustedInstaller.exe 或 elevation_service.exe)。注入方法很直接:使用 VirtualAllocEx 执行远程虚拟内存分配,使用 WriteProcessMemory 写入内容,然后使用 CreateRemoteThread 创建远程线程来执行。
远程进程注入
第三阶段 – trustinstaller.bin
包含在 trustinstaller.bin 中的第三阶段负责将最终载荷注入一个合法进程。它首先枚举正在运行的进程,并通过将进程名与硬编码的潜在目标进程列表进行匹配来搜索目标。
用于注入载荷的进程选项列表
找到目标后,它会将 shellcode 注入 C:\ProgramData\Roning\Enpug.bin——这是最终载荷。它使用 NtCreateSection 创建一个节区,使用 NtMapViewOfSection 在远程进程中映射视图,并将载荷写入其中。然后使用 CreateRemoteThread 创建远程线程。
在远程进程中映射节区视图
第四阶段 – 最终载荷
自 Sophos https://news.sophos.com/en-us/2023/05/03/doubled-dll-sideloading-dragon-breath/ 于 2023 年发现 DragonBreath 活动以及奇安信 https://ti.qianxin.com/blog/articles/operation-dragon-breath-%28apt-q-27%29-dimensionality-reduction-blow-to-the-gambling-industry/ 于 2022 年中期发布的报告以来,最终载荷 https://www.virustotal.com/gui/file/3dd470e85fe77cd847ca59d1d08ec8ccebe9bd73fd2cf074c29d87ca2fd24e33/detection 没有经历重大变化。它仍然是开源 gh0st https://github.com/sin5678/gh0st RAT 的修改版本。
在较新的攻击活动中,执行一开始就会创建一个值为 Global\DHGGlobalMutex 的互斥锁(Mutex)。在主 C2(命令与控制)通信循环之外,可以观察到死代码创建一个名为 MyUniqueMutexName 的互斥锁并随后立即销毁。
死代码中的互斥锁值 MyUniqueMutexName
C2 域名和端口仍然是硬编码的,但现在经过 XOR 加密。C2 通道通过原始 TCP 套接字运行,双向消息都经过加密。
C2 域名和端口 XOR 解码
受害者信标数据
植入体与 C2 服务器建立连接,并以随机间隔重复向 C2 发送信标,通过 Sleep(<随机值> * 1000) 实现。以下是植入体在信标间隔期间返回给 C2 服务器的数据结构:
struct BeaconData { // +0x000 uint32_t message_type; // 示例信标 ID - 0xC8 (200) // +0x004 uint32_t local_ip; // 受害者 IP 的 inet_addr() // +0x008 char hostname[50]; // 计算机名或注册表"Remark"值 // +0x03A char windows_version[?]; // 操作系统版本信息 // +0x0D8 char cpu_name[64]; // 处理器名称 // +0x118 uint32_t entry_rdx; // +0x11C char time_value[64]; // 植入体安装时间或注册表"Time"值 // +0x15C char victim_tag[39]; // 命令 6 缓冲区(自定义受害者标签) // +0x183 uint8_t is_wow64; // 如果是 64 位 Windows 上的 32 位程序则为 1 // +0x184 char av_processes_found[128]; // 发现的杀毒软件进程 // +0x204 char uptime[12]; // 系统运行时间 char padding[52]; // +0x244 char crypto_wallet_track[64]; // "狐狸系列"(MetaMask)或注册表"ZU"(加密货币相关追踪) // +0x284 uint8_t is_admin; // 如果以管理员权限运行则为 1 // +0x285 char data[?]; // +0x305 uint8_t telegram_installed; // 如果安装了 Telegram 则为 1 // +0x306 uint8_t telegram_running; // 如果 Telegram.exe 正在运行则为 1 // +0x307 // (填充至 0x308 字节)};
C2 命令
从 C2 服务器发送到植入体的请求消息遵循以下结构:
struct C2_to_implant_msg { uint32_t total_message_len; uint32_t RC4_key; char encrypted_command_id; uint8_t encrypted_command_args;};
植入体通过以下公式解密 C2 消息:
RC4_decrypt(ASCII(decimal(RC4_key)), encrypted_command_id || command)
以下是可用命令列表,大部分与 2 年前保持相同:
| 命令 ID | 描述 |
| — | — |
| 0 | 通过提供的 EXIT_WINDOWS_FLAGS 调用 ExitWindowsEx |
| 1 | 优雅地终止植入体 |
| 2 | 将注册表键 Enable 设置为 False 以持久性地终止并禁用植入体 |
| 3 | 设置注册表键 Remark 用于自定义受害者重命名(默认值:主机名) |
| 4 | 设置注册表键 ZU 用于 MetaMask / 加密货币相关标记 |
| 5 | 清除 Windows 事件日志(应用程序、安全、系统) |
| 6 | 在客户端发送信标时设置额外的自定义标签 |
| 7 | 通过提供的 URL 下载并执行文件 |
| 9 | ShellExecute (可见窗口) |
| 10 | ShellExecute (隐藏窗口) |
| 112 | 获取剪贴板数据 |
| 113 | 设置剪贴板数据 |
| 125 | 使用命令参数执行 cmd.exe 的 ShellExecute(隐藏窗口) |
| 126 | 通过释放到磁盘或反射式加载并执行 PluginMe 导出来执行载荷 |
| 128 | 第一个选项 – 使用提供的 C2 域名、端口和信标间隔打开新会话。第二个选项 – 设置注册表键 CopyC 以永久更新 C2 域名和端口。通过 Base64Encode(XOR(C2_domain_and_port, 0x5)) 加密存储。 |
| 241 | 检查 Telegram 是否已安装和/或正在运行 |
| 243 | 配置剪贴板劫持器 |
| 101 , 127, 236, [...] | 使用 WTS 会话令牌模拟将自定义 shellcode 注入 svchost.exe,回退到通过 CreateRemoteThread 使用 CREATE_SUSPENDED 进程注入 |
分析师注:有多个命令 ID 指向相同的命令。当观察到这种情况时,我们使用省略号标识。
系统日志记录器
除了 C2 命令外,植入体还实现了击键、剪贴板和活动窗口记录器。捕获的数据写入 %ProgramData%\microsoft.dotnet.common.log,可通过注册表键 HKEY_CURRENT_USER\offlinekey\open 启用或禁用(1 启用,0 禁用)。日志文件实现自动轮转,当超过 50 MB 时自动删除以避免因磁盘使用过多而被检测。
下面的代码片段展示了实现日志轮转并配置 DirectInput8 接口来获取键盘设备进行事件捕获的初始化例程,以及键盘事件检索逻辑。
日志轮转和键盘记录器初始化
键盘事件检索
然后恶意软件进入一个监控循环,捕获三类信息。
- 首先,使用
OpenClipboard和GetClipboardData监控剪贴板,记录文本内容的任何变化,前缀为[剪切板:]。 - 其次,通过
GetForegroundWindow跟踪窗口焦点变化,当用户切换应用程序时,分别使用前缀[标题:]和[时间:]记录活动窗口标题和时间戳。 - 第三,从
DirectInput8设备检索缓冲的键盘事件(每次轮询最多 60 个事件),并通过字符映射表将其转换为可读文本,结果前面加上前缀[内容:]。
microsoft.dotnet.common.log 中的示例捕获内容
剪贴板劫持器
恶意软件还实现了一个剪贴板劫持器,通过 C2 命令 ID 243 远程配置。它监控剪贴板变化,并对捕获的文本执行搜索和替换操作,用替换值替换攻击者定义的字符串。配置参数存储在注册表 HKEY_CURRENT_USER\offlinekey 下,键名包括 clipboard(启用/禁用功能)、charac(搜索字符串)、characLen(搜索长度)和 newcharac(替换字符串)。
通过 C2 命令设置剪贴板劫持器
它注册一个名为 ClipboardListener_Class_Toggle 的窗口类,并创建一个标题为 ClipboardMonitor 的隐藏窗口来接收剪贴板更改通知。窗口过程处理 WM_CLIPBOARDUPDATE(0x31D)消息,通过 GetClipboardSequenceNumber 验证剪贴板序列号以检测真实更改,然后调用核心操作例程,通过 EmptyClipboard 和 SetClipboardData 交换剪贴板内容。
ClipboardMonitor 设置,负责实际的剪贴板交换
恶意软件与 MITRE ATT&CK
Elastic 使用 MITRE ATT&CK https://attack.mitre.org/ 框架来记录高级持续性威胁针对企业网络使用的常见战术、技术和程序。
战术
战术代表技术或子技术的”为什么”。它是对手的战术目标:执行某个动作的原因。
- 执行
https://attack.mitre.org/tactics/TA0002/ - 持久化
https://attack.mitre.org/tactics/TA0003/ - 权限提升
https://attack.mitre.org/tactics/TA0004/ - 防御规避
https://attack.mitre.org/tactics/TA0005/ - 凭证访问
https://attack.mitre.org/tactics/TA0006/ - 发现
https://attack.mitre.org/tactics/TA0007/ - 收集
https://attack.mitre.org/tactics/TA0009/ - 命令与控制
https://attack.mitre.org/tactics/TA0011/
技术
请在微信客户端打开
技术代表对手如何通过执行动作来实现战术目标。
- 命令和脚本解释器:Windows 命令 Shell
https://attack.mitre.org/techniques/T1059/003/ - 系统服务:服务执行
https://attack.mitre.org/techniques/T1569/002/ - 创建或修改系统进程:Windows 服务
https://attack.mitre.org/techniques/T1543/003/ - 滥用权限提升控制机制:绕过用户账户控制
https://attack.mitre.org/techniques/T1548/002/ - 访问令牌操纵
https://attack.mitre.org/techniques/T1134/ - 削弱防御:禁用或修改工具
https://attack.mitre.org/techniques/T1562/001/ - 削弱防御:禁用或修改系统防火墙
https://attack.mitre.org/techniques/T1562/004/ - 指示器移除:清除 Windows 事件日志
https://attack.mitre.org/techniques/T1070/001/ - 劫持执行流:DLL 侧加载
https://attack.mitre.org/techniques/T1574/002/ - 进程注入
https://attack.mitre.org/techniques/T1055/ - 伪装:匹配合法名称或位置
https://attack.mitre.org/techniques/T1036/005/ - 修改注册表
https://attack.mitre.org/techniques/T1112/ - 颠覆信任控制:代码签名策略修改
https://attack.mitre.org/techniques/T1553/006/ - 输入捕获:键盘记录
https://attack.mitre.org/techniques/T1056/001/ - 剪贴板数据
https://attack.mitre.org/techniques/T1115/ - 进程发现
https://attack.mitre.org/techniques/T1057/ - 系统信息发现
https://attack.mitre.org/techniques/T1082/ - 系统所有者/用户发现
https://attack.mitre.org/techniques/T1033/ - 软件发现:安全软件发现
https://attack.mitre.org/techniques/T1518/001/ - 非应用层协议
https://attack.mitre.org/techniques/T1095/ - 加密通道:对称加密
https://attack.mitre.org/techniques/T1573/001/
缓解措施
检测
- 通过 ClipUp 执行的潜在规避行为
https://github.com/elastic/protections-artifacts/blob/main/behavior/rules/windows/defense_evasion_potential_evasion_via_clipup_execution.toml - 可疑的远程内存分配
https://github.com/elastic/protections-artifacts/blob/main/behavior/rules/windows/defense_evasion_suspicious_remote_memory_allocation.toml - 潜在的挂起进程代码注入
https://github.com/elastic/protections-artifacts/blob/main/behavior/rules/windows/defense_evasion_potential_suspended_process_code_injection.toml - 向可信目标进程的远程内存写入
https://github.com/elastic/protections-artifacts/blob/main/behavior/rules/windows/defense_evasion_remote_memory_write_to_trusted_target_process.toml - 低信誉模块的远程进程内存写入
https://github.com/elastic/protections-artifacts/blob/main/behavior/rules/windows/defense_evasion_remote_process_memory_write_by_low_reputation_module.toml - 向非子进程的进程内存写入
https://github.com/elastic/protections-artifacts/blob/main/behavior/rules/windows/defense_evasion_process_memory_write_to_a_non_child_process.toml - 来自未签名模块的无后备 Shellcode
https://github.com/elastic/protections-artifacts/blob/main/behavior/rules/windows/defense_evasion_unbacked_shellcode_from_unsigned_module.toml - 通过 WOW64 日志记录器 DLL 侧加载的 UAC 绕过尝试
https://github.com/elastic/protections-artifacts/blob/main/behavior/rules/windows/privilege_escalation_uac_bypass_attempt_via_wow64_logger_dll_side_loading.toml - 来自无后备内存的网络连接 API
https://github.com/elastic/protections-artifacts/blob/main/behavior/rules/windows/command_and_control_network_connect_api_from_unbacked_memory.toml - Rundll32 或 Regsvr32 从无后备内存加载 DLL
https://github.com/elastic/protections-artifacts/blob/main/behavior/rules/windows/defense_evasion_rundll32_or_regsvr32_loaded_a_dll_from_unbacked_memory.toml - 从可疑无后备内存加载的网络模块
https://github.com/elastic/protections-artifacts/blob/main/behavior/rules/windows/defense_evasion_network_module_loaded_from_suspicious_unbacked_memory.toml
YARA
Elastic Security 创建了 YARA 规则来识别此活动。以下是用于识别 RONINGLOADER 和最终植入体的 YARA 规则:
- Windows.Trojan.RoningLoader
https://github.com/elastic/protections-artifacts/blob/main/yara/rules/Windows_Trojan_RoningLoader.yar - Windows.Trojan.DragonBreath
https://github.com/elastic/protections-artifacts/blob/main/yara/rules/Windows_Trojan_DragonBreath.yar
观测指标
以下是本研究中讨论的可观测指标。
| 可观测值 | 类型 | 名称 | 参考 |
| — | — | — | — |
| da2c58308e860e57df4c46465fd1cfc68d41e8699b4871e9a9be3c434283d50b | SHA-256 | klklznuah.msi | 初始 MSI 安装程序 |
| 82794015e2b40cc6e02d3c1d50241465c0cf2c2e4f0a7a2a8f880edaee203724 | SHA-256 | Snieoatwtregoable.exe | 从初始安装程序解包的恶意安装程序 |
| c65170be2bf4f0bd71b9044592c063eaa82f3d43fcbd8a81e30a959bcaad8ae5 | SHA-256 | Snieoatwtregoable.dll | 第一阶段 – 第二阶段的加载器 |
| 2515b546125d20013237aeadec5873e6438ada611347035358059a77a32c54f5 | SHA-256 | ollama.sys | 第二阶段 – 用于终止进程的驱动 |
| 1613a913d0384cbb958e9a8d6b00fffaf77c27d348ebc7886d6c563a6f22f2b7 | SHA-256 | tp.png | 第二阶段 – 加密的核心载荷 |
| 395f835731d25803a791db984062dd5cfdcade6f95cc5d0f68d359af32f6258d | SHA-256 | 1.bat | 第二阶段 – UAC 绕过脚本 |
| 1c1528b546aa29be6614707cbe408cb4b46e8ed05bf3fe6b388b9f22a4ee37e2 | SHA-256 | fhq.bat | 第二阶段 – 阻止杀毒软件网络通信的脚本 |
| 4d5beb8efd4ade583c8ff730609f142550e8ed14c251bae1097c35a756ed39e6 | SHA-256 | 1.dll | 第二阶段 – 杀毒软件进程终止 |
| 96f401b80d3319f8285fa2bb7f0d66ca9055d349c044b78c27e339bcfb07cdf0 | SHA-256 | {31351756-3F24-4963-8380-4E7602335AAE}.cip | 第二阶段 – WDAC 策略 |
| 33b494eaaa6d7ed75eec74f8c8c866b6c42f59ca72b8517b3d4752c3313e617c | SHA-256 | goldendays.dll | 第三阶段 – 入口点 |
| fc63f5dfc93f2358f4cba18cbdf99578fff5dac4cdd2de193a21f6041a0e01bc | SHA-256 | trustinstaller.bin | 第三阶段 – Enpug.bin 的加载器 |
| fd4dd9904549c6655465331921a28330ad2b9ff1c99eb993edf2252001f1d107 | SHA-256 | Enpug.bin | 第三阶段 – 最终载荷的加载器 |
| 3dd470e85fe77cd847ca59d1d08ec8ccebe9bd73fd2cf074c29d87ca2fd24e33 | SHA-256 | 6uf9i.exe | 第四阶段 – 最终载荷 |
| qaqkongtiao[.]com | 域名 | | 第四阶段 – 最终载荷 C2 |
参考资料
以下是上述研究中引用的资料:
https://nsis.sourceforge.io/Main_Pagehttps://learn.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-servicehttps://github.com/Jemmy1228/HookSigntoolhttps://www.safebreach.com/blog/process-injection-using-windows-thread-pools/https://hijacklibs.net/entries/microsoft/built-in/wow64log.htmlhttps://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_functionhttps://www.zerosalarium.com/2025/08/countering-edrs-with-backing-of-ppl-protection.htmlhttps://github.com/TwoSevenOneT/EDR-Freeze/blob/ceffd5ea7b813b356c77d469561dbb5ee45aeb24/PPLHelp.cpp#L43https://news.sophos.com/en-us/2023/05/03/doubled-dll-sideloading-dragon-breath/https://ti.qianxin.com/blog/articles/operation-dragon-breath-%28apt-q-27%29-dimensionality-reduction-blow-to-the-gambling-industry/https://github.com/sin5678/gh0st
如果你对网络安全、红队攻防技术充满热情,渴望学习更多实战技巧,例如渗透测试、自动化脚本编写、免杀技术等, 欢迎关注我的公众号
在这里,我会持续分享更多高质量的技术文章,与你一同探索网络安全的奥秘,提升实战技能! 让我们一起在队攻防的道路上,不断精进,突破边界!
免责声明: 本文仅供安全技术研究与学习交流之用。 严禁将本文所提及的技术用于任何非法用途,包括但不限于未经授权的渗透测试、网络攻击、恶意代码传播等。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:红队工坊 aeverj
aeverj《PPL 滥用新路径》