简介
Elastic Security Labs 最近发现了一个通过伪装成合法软件(如 Google Chrome 和 Microsoft Teams)的木马化 NSIS 安装程序传播 gh0st RAT 修改变种的活动,该变种归属于 Dragon Breath APT (APT-Q-27)。感染链采用多级传输机制,利用各种规避技术,并有许多冗余,目的是使中国市场上流行的终端安全产品失效。其中包括使用合法签名的驱动程序、部署自定义WDAC策略,以及通过滥用 PPL 来篡改 Microsoft Defender 二进制文件。
该活动主要针对讲中文的用户,与 2022-2023 年记录的早期龙息相关活动相比,在适应性方面有了明显的发展。通过本报告,我们希望提高人们对这种恶意软件开始实施的新技术的认识,并揭示一种我们命名为 RoningLoader 的独特加载器。
关键要点
- 该恶意软件滥用 "受保护进程灯"(PPL)来禁用 Windows Defender
- 威胁行为者利用有效、签名的内核驱动程序杀死进程
- 应用自定义未签名 WDAC 策略阻止 360 Total Security 和 Huorong 可执行文件
- 通过线程池注入幻影 DLL 和有效载荷,以进一步终止杀毒软件进程
- 最终有效载荷略有更新,与 "龙呼吸 "有关
发现
2025 年 8 月,有人发表研究报告,详细介绍了一种滥用 "受保护进程灯"(PPL)来禁用端点安全工具的方法。根据这一披露,我们制定了一条行为规则,即 "通过 ClipUp 执行进行潜在规避",并在对遥测数据进行威胁猎取后,确定了一个采用该技术的实时活动。
RONINGLOADER 代码分析
最初的感染载体是使用Nullsoft Scriptable Install System (NSIS) 创建的木马安装程序。NSIS 是一种用于创建 Windows 安装程序的合法开源工具,但它经常被威胁行为者滥用来打包和分发恶意软件,如GULOADER 中的情况。在这次活动中,我们观察到恶意安装程序以各种主题发布,伪装成合法软件(如 Google Chrome、Microsoft Teams 或其他可信应用程序),诱使用户执行它们。
执行时,主 NSIS 安装程序将作为滴管运行,其中包含两个附加的嵌入式 NSIS 安装程序。其中一个嵌套安装程序是良性的,负责安装合法软件,而第二个嵌套安装程序则是恶意的,负责部署攻击链。
攻击链利用名为ollama.sys 的签名驱动程序终止杀毒软件进程。该驱动程序的签名者名称为Kunming Wuqi E-commerce Co., Ltd. ,证书有效期为 2 月3,2025, 至 2 月3,2026 。转到 VirusTotal 发现 71 额外的签名二进制文件。其中,我们发现了伪装成慕讯公益加速器 (MuXunAccelerator) 的 AgentTesla 程序,这是一款深受中国用户欢迎的游戏专用 VPN 软件,其样本可追溯到 2025 年 4 月。值得注意的是,不同样本的签名技术各不相同。一些早期的样本,如 inject.sys包含 HookSignTool人工痕迹,包括字符串JemmyLoveJenny ,而 10 月份的 2025 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
由于二进制文件种类繁多,提交数量巨大,我们怀疑证书可能已经泄露,但目前这只是猜测。
阶段 1
我们的分析从初始二进制文件开始,其 SHA256 哈希值标识为:da2c58308e860e57df4c46465fd1cfc68d41e8699b4871e9a9be3c434283d50b 。解压缩后会发现两个嵌入式可执行文件:良性安装程序letsvpnlatest.exe 和恶意安装程序Snieoatwtregoable.exe 。
恶意安装程序Snieoatwtregoable.exe 在C:\Program Files\Snieoatwtregoable\ 创建了一个新目录。在这个文件夹中,它丢弃了两个文件:一个名为Snieoatwtregoable.dll 的 DLL 和一个加密文件tp.png 。
恶意活动的核心在于Snieoatwtregoable.dll ,它只输出一个函数:DllRegisterServer 。调用该函数时,它会从磁盘读取tp.png 文件的内容,然后使用一种涉及右旋 (ROR) 和 XOR 运算的简单算法对这些数据进行解密。
解密后的内容是 shellcode,可在内存中反射性地加载和执行 PE 文件。恶意软件首先使用NtAllocateVirtualMemory API 在自己的进程中分配一个新的内存区域,然后通过调用NtCreateThreadEx 创建一个新线程来执行 shellcode。
恶意软件通过加载一个全新的ntdll.dll ,然后使用带有 API 名称的GetProcAddress 来解析地址,试图移除任何用户态钩子。
恶意软件尝试连接5555 端口上的 localhost,但没有达到任何实际目的,因为结果并不重要;据推测,这很可能是死代码或生产前的剩余代码
舞台 2 - tp.png
RONINGLOADER 首先使用GetTokenInformation API 检查自己是否拥有管理权限。如果没有,它就会在终止原始进程之前,使用runas 命令启动一个新的、已提升权限的实例,试图提升自己的权限。
有趣的是,恶意软件试图与一个硬编码的 URL http://www.baidu.com/用户代理“Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko” 进行通信,但这似乎是死代码,很可能是由于功能被删除或未来版本的占位符代码所致。它旨在从 URL 中提取并记录 HTTP 响应头日期。
然后,恶意软件会扫描运行进程列表,查找特定的防病毒解决方案。它根据硬编码的进程名称列表进行检查,如果发现任何进程名称,则将相应的布尔标志设置为"True" 。
以下是二进制文件中的进程和相关安全产品硬编码表:
| 过程名称 | 安全产品 |
|---|---|
MsMpEng.exe | 微软卫士杀毒软件 |
kxemain.exe | 金山网络安全软件 |
kxetray.exe | 金山网络安全软件 |
kxecenter.exe | 金山网络安全软件 |
QQPCTray.exe | 腾讯电脑管家 |
QQPCRTP.exe | 腾讯电脑管家 |
QMToolWidget.exe | 腾讯电脑管家 |
HipsTray.exe | 奇虎 360 全面安全 |
HipsDaemon.exe | 奇虎 360 全面安全 |
HipsMain.exe | 奇虎 360 全面安全 |
360tray.exe | 奇虎 360 全面安全 |
通过注入的远程进程终止 AV 进程
接下来,恶意软件会杀死这些进程。有趣的是,奇虎 360 Total Security 产品采用了与其他产品不同的方法。
首先,它通过更改防火墙来阻止所有网络通信。然后,它调用一个函数,将 shellcode 注入与卷影复制 (VSS) 服务相关联的进程 (vssvc.exe)。
它首先向自己授予高完整性SeDebugPrivilege 令牌。
然后,如果VSS(卷阴影复制服务)尚未运行,它会启动它,并获取其相关进程(vssvc.exe)的 PID。
接下来,恶意软件使用NtCreateSection 创建两个独立的内存区。然后,它会将这些部分的视图映射到 vssvc.exe 进程的内存空间中。第一部分包含一个完整的可移植可执行文件(PE),这是一个设备名为\\.\Ollama 的驱动程序。第二部分包含用于执行的 shellcode。
与恶意软件中使用的其他注入方法相比,RONINGLOADER 采用了一种不同的方法进行进程注入。这种技术利用线程池,通过远程进程中的文件写入触发器远程执行代码。SafeBreach在 2023 中记录了这一技术的不同变种。
一旦执行,shellcode 就会开始动态解析其运行所需的 Windows API 地址。这是 RONINGLOADER 中唯一采用混淆技术的部分,它使用Fowler-Noll-Vo 哈希算法(FNV)通过哈希值而不是名称查找函数。
它首先获取CreateFileW 、WriteFile 和CloseHandle 的地址,将驱动程序写入磁盘的硬编码路径C:\windows\system32\drivers\1912763.temp 。
然后执行以下操作
- 创建名为
xererre1的服务,将驱动程序下载到磁盘中 - 对于与奇虎 360 软件相关联的下列每个进程(
360Safe.exe、360Tray.exe和ZhuDongFangYu.exe),它都会调用 2 函数:一个函数用于根据名称查找进程的 PID,另一个函数用于根据 PID 杀死进程 - 然后停止并删除服务
xererre1
要杀死一个进程,恶意软件会使用驱动程序。对该驱动程序的分析表明,它只注册了 1 功能:它处理一个以 PID 为参数的 IOCTL ID (0x222000),并首先通过ZwOpenProcess 打开进程,然后通过ZwTerminateProcess 内核 API 终止进程。
AV 进程终止
回到主执行流程,恶意软件进入一个循环,以确认360tray.exe 终止,由注入 VSS 服务的 shellcode 处理。只有在确认进程不再运行后,才会继续运行。确认后,系统会立即恢复防火墙设置。这一行动很可能是一种防御措施,目的是切断软件的通信渠道,防止其向后台服务上传最终活动日志或安全警报。
然后,它会直接从主进程中终止其他安全进程。值得注意的是,它并没有试图隐藏这些操作,而是放弃了之前的 API 哈希技术,直接调用必要的函数。
RONINGLOADER 遵循一致、可重复的程序来终止目标进程:
- 首先,它会将恶意驱动程序写入磁盘,这次是写入临时路径
C:\Users\analysis\AppData\Local\Temp\ollama.sys. - 创建临时服务 (
ollama) 将ollama.sys载入内核 - 然后,恶意软件通过名称获取目标进程的 PID,并向其驱动程序发送包含 PID 的请求,以执行终止操作。
- 发送 kill 命令后,服务会立即被删除。
关于 Microsoft Defender,该恶意软件试图使用上述相同方法杀死MsMpEng.exe 进程。我们注意到作者的一个代码错误:对于 Microsoft Defender,代码没有检查 Defender 是否已经运行,而是直接搜索MsMpEng.exe 进程。这意味着,如果进程没有运行,恶意软件会将 0 作为 PID 发送给驱动程序。
恶意软件有更多的冗余代码来杀死安全解决方案进程。它还在 svchost.exe 中注入了另一个 shellcode、vssvc.exe类似,但进程列表不同,如下图所示。
注入技术也使用线程池,但注入的代码是由事件触发的。
进程终止后,恶意软件会创建 4 文件夹
C:\ProgramData\lnkC:\ProgramData\<current_date>C:\Users\Public\Downloads\<current_date>C:\ProgramData\Roning
嵌入式档案
然后,恶意软件将三个.txt 文件写入C:\Users\Public\Downloads\<current_date> 。尽管有扩展名,但它们并不是文本文件,而是采用特定格式构建的容器,很可能是从其他代码库改编而来。
该自定义文件结构的组织如下
- 神奇字节:文件以签名
4B 44 01 00开始,以便识别。 - 文件数:紧随其后的数值表示容器中封装的文件数量。
- 文件元数据:然后用标题部分描述每个存储文件的信息。
- 压缩数据:最后,每个嵌入文件都存储在一个 ZLIB 压缩数据块中。
以下是hjk.txt archive 的文件格式示例,其中包含 2 文件:1.bat 和fhq.bat 。
这种存档格式适用于 2 当前阶段的其他嵌入文件:
agg.txt,其中包含 3 文件 -Enpug.bin,goldendays.dll, 和trustinstaller.binkill.txt其中包含 1 文件1.dll
绕过 UAC 和 AV 网络的批处理脚本
1.bat 是一个简单的批脚本,可通过将EnableLUA 注册表值设置为 0 来禁用用户帐户控制(UAC)。
fhq.bat 是另一个批脚本,目标是C:\ProgramData\lnk\123.txt 中定义的程序和奇虎 360 安全软件(360Safe.exe)。创建防火墙规则,阻止与它们的入站和出站连接。它还会禁用所有配置文件中的防火墙通知。
通过 Phantom DLL 终止 AV 进程
已部署的动态链接库1.dll 会被复制到C:\Windows\System32\Wow64\Wow64Log.dll ,供任何 WOW64 进程侧载,因为Wow64Log.dll 是一个幽灵动态链接库,默认情况下不会出现在 Windows 机器上。它的任务是多余的,本质上是试图使用标准 Windows API(TerminateProcess )杀死进程列表。
ClipUp MS Defender 杀手
然后,恶意软件试图使用Zero Salarium在 2025 年 8 月记录的 PPL 滥用技术。文章中的 PoC 仅针对 Microsoft Defender。请注意,所有执行的系统命令都是通过cmd.exe 与ShellExecuteW 应用程序接口连接的
- 它在
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的代码来启动ClipUp.exe 。
CiPolicies
该恶意软件直接针对 Windows Defender 应用程序控制 (WDAC),将策略文件写入路径C:\\Windows\\System32\\CodeIntegrity\\CiPolicies\\Active\\{31351756-3F24-4963-8380-4E7602335AAE}.cip 。
恶意策略以 "拒绝列表 "模式运行,允许大多数应用程序运行,同时明确阻止两家流行的中国杀毒软件供应商:
- 奇虎 360 Total Security 通过阻止
360rp.exe和360sd.exe - 霍荣安保公司通过封锁
ARPProte.exe - 由 Huorong Security (
北京火绒网络科技有限公司) 通过证书 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
阶段 3 - goldendays.dll
在上一阶段,RONINGLOADER 创建了一个名为MicrosoftSoftware2ShadowCop4yProvider 的新服务,通过以下命令运行下一阶段的执行:regsvr32.exe /S "C:\ProgramData\Roning\goldendays.dll.
该组件的主要目标是将下一个有效载荷注入一个合法、高权限的系统进程,以伪装其活动。
为此,RONINGLOADER 首先要确定一个合适的目标流程。它有一个由两个服务名称组成的硬编码列表,会尝试按顺序启动:
- TrustedInstaller (
TrustedInstaller.exe) - MicrosoftEdgeElevationService (
elevation_service.exe)
恶意软件会遍历该列表,尝试启动每项服务。一旦成功启动服务,或者发现服务已经在运行,恶意软件就会保存其进程 ID(PID),以便在注入阶段使用。
接下来,恶意软件通过在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 创建一个远程线程来执行。
阶段 3 - trustinstaller.bin
第三阶段包含在trustinstaller.bin 中,负责将最终有效载荷注入合法进程。它首先会枚举运行中的进程,并通过将进程名称与硬编码的潜在进程列表进行匹配来搜索目标。
发现后,它会将 shellcode 注入C:\ProgramData\Roning\Enpug.bin ,这是最终的有效载荷。它将用NtCreateSection 创建一个部分,用NtMapViewOfSection 在远程进程中映射该部分的视图,并将有效载荷写入其中。然后,它会创建一个远程线程,CreateRemoteThread 。
阶段 4 - 最终有效载荷
自 Sophos 在 发现 "龙息"(DragonBreath)活动和 2023 QianXin 在 2022 年年中 发布报告 以来, 最终有效载荷 并未发生重大变化。它仍然是开源gh0stRAT 的修改版。
在最近的运动中,在执行开始时会创建一个值为Global\DHGGlobalMutex 的互斥器。在主 C2 通信循环之外,我们观察到死代码创建了一个名为MyUniqueMutexName 的互斥器,随后立即将其销毁。
C2 域和端口仍为硬编码,但现在已进行 XOR 加密。C2 信道通过原始 TCP 套接字运行,信息双向加密。
受害者信标数据
植入体与 C2 服务器进行签到,并以随机间隔反复向 C2 发出信标,通过Sleep(<random_amount> * 1000) 实现。以下是植入程序在信标间隔期间向 C2 服务器返回数据的结构:
struct BeaconData {
// +0x000
uint32_t message_type; // Example Beacon ID - 0xC8 (200)
// +0x004
uint32_t local_ip; // inet_addr() of victim's IP
// +0x008
char hostname[50]; // Computer name or registry "Remark"
// +0x03A
char windows_version[?]; // OS version info
// +0x0D8
char cpu_name[64]; // Processor name
// +0x118
uint32_t entry_rdx;
// +0x11C
char time_value[64]; // Implant installed time or registry "Time" value
// +0x15C
char victim_tag[39]; // Command 6 buffer (Custom victim tag)
// +0x183
uint8_t is_wow64; // 1 if 32-bit on 64-bit Windows
// +0x184
char av_processes_found[128]; // Antivirus processes found
// +0x204
char uptime[12]; // System uptime
char padding[52];
// +0x244
char crypto_wallet_track[64]; // "狐狸系列" (MetaMask) or registry "ZU" (crypto related tracking)
// +0x284
uint8_t is_admin; // 1 if running with admin rights
// +0x285
char data[?];
// +0x305
uint8_t telegram_installed; // 1 if Telegram installed
// +0x306
uint8_t telegram_running; // 1 if Telegram.exe running
// +0x307
// (padding to 0x308 bytes)
};
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 | ExitWindowsEx 通过提供的 EXIT_WINDOWS_FLAGS |
1 | 优雅地终止植入 |
2 | 将注册表项Enable 设置为 "假",以持续终止& 禁用植入程序 |
3 | 为自定义受害者重命名设置注册表项Remark (默认值:主机名) |
4 | 为元掩码/密码相关标记设置注册表密钥ZU |
5 | 清除 Windows 事件日志(应用程序、安全、系统) |
6 | 在客户端信标时设置额外的自定义标记 |
7 | 通过提供的 URL 下载并执行文件 |
9 | ShellExecute (可见窗口) |
10 | ShellExecute (隐藏窗口) |
112 | 获取剪贴板数据 |
113 | 设置剪贴板数据 |
125 | ShellExecute cmd.exe 带命令参数(隐藏窗口) |
126 | 通过投放到磁盘执行有效载荷,或反射加载并执行PluginMe 导出 |
128 | 第一个选项 - 使用提供的 C2 域、端口和信标间隔打开一个新会话。第二种方法 - 设置注册表项CopyC ,永久更新 C2 域和端口。通过Base64Encode(XOR(C2_domain_and_port, 0x5)) 加密存储。 |
241 | 检查 Telegram 是否已安装和/或正在运行 |
243 | 配置剪贴板劫持程序 |
101, 127, 236, [...] | 使用 WTS 会话令牌冒充将自定义 shellcode 注入svchost.exe ,并通过以下方式退回到CREATE_SUSPENDED 进程注入CreateRemoteThread |
分析员注意:有多个命令 ID 指向同一命令。我们用省略号标明观察到这种情况的时间。
系统记录仪
除 C2 命令外,该植入程序还实施了按键、剪贴板和活动窗口记录器。捕获的数据被写入%ProgramData%\microsoft.dotnet.common.log ,可通过HKEY_CURRENT_USER\offlinekey\open 的注册表键值启用或禁用(1 启用,0 禁用)。日志文件会自动轮换,当超过 50 MB 时就会删除,以避免因磁盘使用过多而被发现。
下面的代码片段演示了初始化例程,该例程实现了日志旋转,并配置了 DirectInput8 接口以获取键盘设备进行事件捕获,随后是键盘事件检索逻辑。
然后,恶意软件进入监控循环,捕捉三类信息。
- 首先,它会使用
OpenClipboard和GetClipboardData监控剪贴板,并使用前缀[剪切板:]记录文本内容的任何更改。 - 其次,它通过
GetForegroundWindow跟踪窗口焦点变化,在用户切换应用程序时记录活动窗口标题和时间戳,前缀分别为[标题:]和[时间:]。 - 第三,它从
DirectInput8设备检索缓冲键盘事件(每次轮询最多可检索 60 个事件),并通过字符映射表将其转换为可读文本,同时在结果前加上前缀[内容:]。
剪贴板劫持程序
该恶意软件还通过 C2 命令 ID 243 远程配置了剪贴板劫持程序。它能监控剪贴板的变化,并对捕获的文本执行搜索和替换操作,用替换值替换攻击者定义的字符串。配置参数存储在注册表HKEY_CURRENT_USER\offlinekey 下,键值为clipboard (启用/禁用功能)、charac (搜索字符串)、characLen (搜索长度)和newcharac (替换字符串)。
它注册了一个名为ClipboardListener_Class_Toggle 的窗口类,并创建了一个名为ClipboardMonitor 的隐藏窗口,用于接收剪贴板更改通知。窗口程序在处理WM_CLIPBOARDUPDATE (0x31D) 消息时,会通过GetClipboardSequenceNumber 验证剪贴板序列号,以检测是否发生了真正的更改,然后调用核心操作例程,通过EmptyClipboard 和SetClipboardData 交换剪贴板内容。
恶意软件和 MITRE ATT&CK
Elastic 使用MITRE ATT&CK框架来记录高级持续性威胁针对企业网络使用的常见策略、技术和程序。
战术
策略代表了技术或子技术的原因。 这是对手的战术目标:采取行动的原因。
技术
技术代表对手如何通过采取行动来实现战术目标。
- 命令和脚本解释器:Windows 命令 Shell
- 系统服务:服务执行
- 创建或修改系统进程:Windows 服务
- 滥用提升控制机制:绕过用户帐户控制
- Access Token Manipulation
- 削弱防御能力:禁用或修改工具
- 削弱防御:禁用或修改系统防火墙
- 指标删除:清除 Windows 事件日志
- 劫持执行流程:DLL 侧加载
- 进程注入
- 伪装:匹配合法名称或位置
- Modify Registry
- 颠覆信任控制:修改代码签名策略
- 输入捕获:键盘记录
- 剪贴板数据
- 流程发现
- 系统信息发现
- System Owner/User Discovery
- 软件发现:安全软件发现
- Non-Application Layer Protocol
- 加密通道:对称密码
缓解措施
检测
- 通过 ClipUp 执行的潜在规避方法
- 可疑的远程内存分配
- 潜在的悬浮程序代码注入
- 远程内存写入可信目标进程
- 低信誉模块远程写入进程内存
- 进程内存写入非子进程
- 未签名模块中的未备份 Shellcode
- 通过 WOW64 日志 DLL 侧加载尝试绕过 UAC
- 未备份内存的网络连接 API
- Rundll32 or Regsvr32 Loaded a DLL from Unbacked Memory
- 从可疑的未备份内存加载网络模块
雅拉
Elastic Security 创建了 YARA 规则来识别这种活动。以下是识别 RONINGLOADER 和最终植入物的 YARA 规则:
观察结果
本研究讨论了以下可观察的结果。
| 可观测 | 类型 | 名称 | 参考 |
|---|---|---|---|
da2c58308e860e57df4c46465fd1cfc68d41e8699b4871e9a9be3c434283d50b | SHA-256 | klklznuah.msi | 初始 NSIS 安装程序 |
82794015e2b40cc6e02d3c1d50241465c0cf2c2e4f0a7a2a8f880edaee203724 | SHA-256 | Snieoatwtregoable.exe | 从初始安装程序解压恶意安装程序 |
c65170be2bf4f0bd71b9044592c063eaa82f3d43fcbd8a81e30a959bcaad8ae5 | SHA-256 | Snieoatwtregoable.dll | 1 - 第 2 级装载机 |
2515b546125d20013237aeadec5873e6438ada611347035358059a77a32c54f5 | SHA-256 | ollama.sys | 阶段 2 - 进程终止的驱动因素 |
1613a913d0384cbb958e9a8d6b00fffaf77c27d348ebc7886d6c563a6f22f2b7 | SHA-256 | tp.png | 2 - 加密核心有效载荷 |
395f835731d25803a791db984062dd5cfdcade6f95cc5d0f68d359af32f6258d | SHA-256 | 1.bat | 2 - UAC 绕过脚本 |
1c1528b546aa29be6614707cbe408cb4b46e8ed05bf3fe6b388b9f22a4ee37e2 | SHA-256 | fhq.bat | 阶段 2 - 阻止 AV 进程联网的脚本 |
4d5beb8efd4ade583c8ff730609f142550e8ed14c251bae1097c35a756ed39e6 | SHA-256 | 1.dll | 2 - AV 流程终止 |
96f401b80d3319f8285fa2bb7f0d66ca9055d349c044b78c27e339bcfb07cdf0 | SHA-256 | {31351756-3F24-4963-8380-4E7602335AAE}.cip | 阶段 2 - WDAC 政策 |
33b494eaaa6d7ed75eec74f8c8c866b6c42f59ca72b8517b3d4752c3313e617c | SHA-256 | goldendays.dll | 阶段 3 - 入口点 |
fc63f5dfc93f2358f4cba18cbdf99578fff5dac4cdd2de193a21f6041a0e01bc | SHA-256 | trustinstaller.bin | 阶段 3 - 装载机 Enpug.bin |
fd4dd9904549c6655465331921a28330ad2b9ff1c99eb993edf2252001f1d107 | SHA-256 | Enpug.bin | 阶段 3 - 最后有效载荷的装载机 |
3dd470e85fe77cd847ca59d1d08ec8ccebe9bd73fd2cf074c29d87ca2fd24e33 | SHA-256 | 6uf9i.exe | 4 - 最终有效载荷 |
qaqkongtiao[.]com | 域名 | 4 - 最终有效载荷 C2 |
参考资料
上述研究参考了以下内容:
- https://nsis.sourceforge.io/Main_Page
- https://learn.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service
- https://github.com/Jemmy1228/HookSigntool
- https://www.safebreach.com/blog/process-injection-using-windows-thread-pools/
- https://hijacklibs.net/entries/microsoft/built-in/wow64log.html
- https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function
- https://www.zerosalarium.com/2025/08/countering-edrs-with-backing-of-ppl-protection.html
- https://github.com/TwoSevenOneT/EDR-Freeze/blob/ceffd5ea7b813b356c77d469561dbb5ee45aeb24/PPLHelp.cpp#L43
- https://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
