CoolClient内核Rootkit分析:多阶段注入、IOCTL通信与隐匿机制"

admin 2026-10-17 08:54:16 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

CoolClient 内核 Rootkit 分析:多阶段注入、IOCTL 通信与隐匿机制

原创

Ti
Ti

TIPFactory情报工厂

2026年8月18日 11:55
江苏

在小说阅读器读本章

去阅读

CoolClient 已从带插件体系的用户态后门,演化为能够部署已签名内核驱动的多阶段攻击组件。新的 msagent.sys 不负责替代后门本体,而是通过 IOCTL 接收用户态配置,在内核中隐藏或保护进程、文件、目录和注册表对象,并过滤特定 C2 地址对应的网络信息。PlugX 仍承担入侵后的初始落点,CoolClient 则作为第二阶段后门接管持久化、注入和隐匿。

CoolClient 新变种引入内核驱动,隐匿能力从用户态扩展到 Windows 内核。

从 PlugX 到内核驱动的执行链

在针对缅甸目标的入侵记录中,攻击者先用 PlugX 下发 CoolClient 组件,并通过 wmic 为伪造的 Windows Defender 目录和侧载程序添加 Microsoft Defender 排除项:

wmic /Node:localhost /Namespace:\\\\Root\\Microsoft\\Windows\\Defender Path MSFT_MpPreference call Add ExclusionPath=\"$programfiles\\Microsoft\\Windows Defender\"
wmic /Node:localhost /Namespace:\\\\Root\\Microsoft\\Windows\\Defender Path MSFT_MpPreference call Add ExclusionPath=\"$programfiles\\Microsoft\\Windows Defender\\defender.exe\"

随后,攻击者把正常的 Sangfor 可执行文件 Sang.exe 重命名为 defender.exe,放入仿冒目录,用它侧载恶意 libngs.dll。启动持久化由一个名称高度仿真的计划任务完成:

schtasks /create /sc onstart /tn \"\\Microsoft\\Windows\\Windows Defender Advanced Threat Protection Service\" /tr \"\\\"$programfiles\\Microsoft\\Windows Defender\\defender.exe\\\"\" /ru \"system\" /F

整条链路由六个组件分工完成:

组件 作用
defender.exe / Sang.exe 被滥用的正常 Sangfor 程序,负责 DLL 侧载
libsrapc.dll Sangfor 程序正常运行所需的良性依赖
libngs.dll 第一阶段加载器,解密并内存加载下一阶段
loadcert.ini 加密 DLL,处理持久化、UAC bypass、进程注入和驱动部署
cert.ini 最终后门,负责 C2 通信和后门功能
time.ini CoolClient 配置文件

正常侧载程序、两级加密 DLL、配置文件、最终后门与 msagent.sys 的关系。

第一阶段:libngs.dll 解密并转入内存

libngs.dll 导出了大量无实际业务功能的函数。每个伪装导出只调用 OutputDebugStringA 输出函数名,随后执行 ExitProcess,目的是让导出表接近正常 DLL。真正的执行入口位于 DllMain(DllEntryPoint),其控制流被 flattening 和大量无条件跳转打乱。

伪装导出函数调用 OutputDebugStringA 后立即退出,恶意逻辑则隐藏在 DllMain。

还原控制流后,第一阶段的职责很集中:解析所需 Windows API、读取 loadcert.ini,再用由种子 0xA4 变换而来的 0x32 字节循环 XOR 密钥流解密。解密后的 DLL 不落地为新文件,而是直接装载到当前进程内存中。

第二阶段:持久化、注入与 UAC bypass

loadcert.ini 先检查当前模块是否运行在 synchost.exe 中,据此选择两条路径:原始侧载进程负责初始安装,注入后的 synchost.exe 负责驱动部署和最终后门加载。命令行参数进一步区分状态:install 执行初始设置,work 进入注入后的主要功能,passuac 承接提权后的执行。

在 install 路径中,样本写入以下 AutoRun 项,值名为 goopdate,使 Sang.exe 或 defender.exe 在用户登录时以 work 参数启动:

HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run

随后,loadcert.ini 使用以 0x4D 为基础的 0x32 字节循环 XOR 密钥流解密自身副本,将 DLL 写入新建的挂起 synchost.exe:分配内存、写入载荷、修改线程上下文、恢复线程,最后退出原进程。这里使用的进程名是 synchost.exe,不要与 Windows 的 svchost.exe 混淆。

服务安装前,样本还会检查 360sd.exe、zhudongfangyu.exe 和 360desktopservice64.exe 是否运行。若能够完全访问 Service Control Manager 且未发现这些进程,它会从 time.ini 读取服务配置,重建 media_updaten 服务并以 work 参数启动侧载程序。

服务安装路径会先检查三个 360 Total Security 相关进程。

提权路径结合了本地 RPC 进程创建、调试对象复用与 PPID spoofing。样本连接 ncalrpc 端点 201ef99a-7fa0-444c-9399-19ba84f12a1a,通过 NdrAsyncClientCall 启动 winver.exe,再用 NtQueryInformationProcess 取得调试对象、调用 NtRemoveProcessDebug 脱离调试并终止该进程。

接下来,同一 RPC 机制用于启动 computerdefaults.exe。样本通过 DbgUiSetThreadDebugObject 绑定先前取得的调试对象,等待进程创建事件,再以 NtDuplicateObject 获取全访问句柄。最后,CreateProcessW 配合 PROC_THREAD_ATTRIBUTE_PARENT_PROCESS 创建 Sang.exe passuac,让提权后的实例呈现为由可信 Windows 进程派生。

本地 RPC 认证绑定是调试对象复用与 PPID spoofing 提权链的起点。

驱动部署与用户态通信

进入注入后的 synchost.exe 后,loadcert.ini 解密 time.ini,检查是否能够完全访问 SCM 且拥有 SeTcbPrivilege。满足条件时,它从自身提取 LZMA 压缩的驱动,解压为 msagent.sys,重建同名驱动服务并将其加载到内核。权限不足时,驱动阶段会被跳过,但 cert.ini 仍可继续注入新的 synchost.exe。

用户态组件完成驱动加载后,只在常规执行中发送三类 DeviceIoControl 请求:

IOCTL 常规执行中的用途
0x222120 把当前 CoolClient 进程登记为可信进程
0x2221E0 把 time.ini 中的 C2 IPv4 地址交给驱动
0x2220F0 登记需要隐藏或保护的文件系统与注册表路径

可信进程标记使 CoolClient 可以绕过驱动对其他进程施加的访问限制。路径登记则覆盖安装目录及 \\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services\\media_updaten。样本还会把安装目录追加到 HKLM\\SYSTEM\\RNG\\Wid_H1deF5Dirs,供内核过滤逻辑使用。

cert.ini 的最终注入会枚举 WinStation 会话,选择交互式用户会话,复制访问令牌并更新 session ID,再通过 CreateProcessAsUserA 创建挂起的 synchost.exe。解密后的最终后门沿用内存分配、线程上下文修改与 ResumeThread 流程进入目标进程。

msagent.sys:配置驱动的内核 Rootkit

驱动包含以下 PDB 路径:

E:\\work\\南京实验室\\2024项目\\张雪杰云南m\\研发\\FTool\\Tool\\x64\\Release\\FTool.pdb

驱动内嵌 PDB 路径包含开发目录字符串,但这些字符串无法直接指向已知组织或开发者。

驱动使用颁发给 Nanjing Ranyi Technology Co., Ltd. 的证书签名,序列号为 3E 62 DC 5D 8D 61 2A 26 33 E7 6B DF D6 07 19 DD,证书有效期为 2013 年 8 月至 2014 年 9 月。同一证书还签过约 2013 年编译的其他恶意驱动,但现有证据不能把那些旧样本与本次 CoolClient 活动直接关联。

驱动从 \\REGISTRY\\MACHINE\\SYSTEM\\RNG 读取配置。Hid_State=1 启用 Rootkit 功能,Hid_StealthMode=0 控制附加隐匿分支;多个 REG_MULTI_SZ 值分别定义隐藏目录、隐藏文件、隐藏注册表键和值,以及忽略、保护或隐藏的进程映像。

SYSTEM\\RNG 下的配置被转换为内部查找结构,供文件、注册表、进程与 IOCTL 逻辑共享。

进程隐藏与内核回调

为了跨 Windows 版本定位进程链表,驱动不只依赖硬编码偏移。它会先验证若干候选偏移,失败后线性扫描 EPROCESS,寻找符合结构特征的 ActiveProcessLinks。定位成功后,IOCTL 0x22219C 和 0x2221A0 分别负责从活动进程链表摘除与重新链接进程节点。

驱动验证候选 ActiveProcessLinks 布局,以适配不同 Windows 版本的 EPROCESS。

配置项被装入 AVL 树后,驱动注册三组回调:

  • • ObRegisterCallbacks 拦截进程与线程句柄操作;
  • • PsSetCreateProcessNotifyRoutineEx 跟踪进程创建和退出;
  • • PsSetLoadImageNotifyRoutine 跟踪模块加载。

对象回调使用 altitude 1203。当目标是受保护的 CoolClient synchost.exe 时,驱动削减请求方得到的访问权限,从而阻止终止进程、注入代码等操作。进程与映像回调则持续维护忽略、保护和隐藏列表;初始化完成后还会枚举一次现有进程,补齐驱动加载前已经运行的对象。

三类内核回调共同维护受保护进程及其模块状态。

文件与注册表过滤

文件保护由 MiniFilter 完成。驱动读取 Wid_H1deF5Dirs 和 Wid_H1deF5Files,在 HKLM\\SYSTEM\\CurrentControlSet\\Services\\msagent\\Instances 下创建实例配置。为避免 filter altitude 冲突,它会递增 altitude 并重试,直到 FltRegisterFilter 成功。

驱动递增 filter altitude,直到文件系统 MiniFilter 注册成功。

MiniFilter 将访问路径与内部列表比较,对命中项拒绝访问。IOCTL 0x2220F0、0x2220F4 和 0x2220F8 分别用于添加、删除和清空保护路径。

注册表保护通过 altitude 320000 的 CmRegisterCallbackEx 回调实现。枚举操作返回前,受保护键和值会从结果中被移除;直接打开、修改或删除命中对象时,回调返回 STATUS_ACCESS_DENIED。通过 0x222120 登记的可信进程不受这些限制。

CmRegisterCallbackEx 回调对枚举结果做过滤,并拒绝非可信进程直接操作受保护对象。

33 个 IOCTL 暴露的能力边界

驱动实现了 33 个 IOCTL handler,但不能把 handler 存在等同于本次样本已经调用。常规执行只确认 0x222120、0x2221E0 和 0x2220F0 三个请求。其余 handler 暴露的能力包括:

  • • 通过 NtCreateThreadEx 向目标进程注入 shellcode;
  • • 从 PsLoadedModuleList 摘除内核模块;
  • • 隐藏、恢复进程及其模块;
  • • 终止进程、移除 PPL 保护;
  • • 枚举、禁用或恢复内核通知回调;
  • • 手工加载第二个内核驱动;
  • • 向任意内核地址写入数据;
  • • 添加或删除需要过滤的 C2 IPv4 地址。

其中,0x222138 会定位 PsLoadedModuleList 中的目标模块,通过更新 Flink 和 Blink 把节点摘除,使标准内核模块枚举不再显示该模块。

驱动运行时解析非导出的 PsLoadedModuleList,为内核模块隐藏做准备。

Nsiproxy Hook 隐藏 C2 地址

0x2221E0 登记的 C2 IPv4 地址会进入网络过滤列表。驱动通过 ObReferenceObjectByName 获取 \\Driver\\Nsiproxy,保存原处理函数并替换其中一个 handler。返回网络信息时,自定义逻辑删除与已登记 C2 地址匹配的记录,再把结果交给用户态。

Nsiproxy Hook 在网络信息返回用户态前删除与 C2 地址匹配的条目。

这意味着依赖 Nsiproxy 返回数据的常规用户态网络检查工具可能看到不完整结果。调查疑似感染主机时,应把磁盘与注册表离线采集、内核内存分析、EDR 内核遥测和网络侧流量记录结合起来,避免只依据本机标准枚举作出结论。

检测与排查要点

行为链比单个文件名更稳定,可优先关联以下信号:

  • • 使用 wmic 修改 MSFT_MpPreference,为仿冒 Windows Defender 目录或 defender.exe 添加排除项;
  • • 名为 Windows Defender Advanced Threat Protection Service 的计划任务在开机时以 SYSTEM 启动非标准路径程序;
  • • 正常 Sangfor 可执行文件从伪造目录侧载 libngs.dll;
  • • goopdate AutoRun 值、media_updaten 用户态服务和 msagent 驱动服务同时出现;
  • • Sang.exe、winver.exe、computerdefaults.exe 与 synchost.exe 形成异常的 RPC、调试对象和父子进程关系;
  • • HKLM\\SYSTEM\\RNG 下出现 Wid_H1deF5Dirs、Wid_H1deRegKeys、Hid_ProtectedImages 等配置;
  • • msagent.sys 注册 MiniFilter、对象回调、进程回调、映像回调和注册表回调,并修改 Nsiproxy handler。

样本哈希:

2d7c8780e97409770a9d4f31c66c9d63  msagent.sys
9460E150E1981D5C165043520C5C12FE  msagent.sys
9717F005C5FB98E08D2AD983D88F94EE  libngs.dll
F518D8E5FE70D9090F6280C68A95998F  libngs.dll
EB79558B037669792652A816E2C669DE  ctxmui.dll

C2 域名:

cloudtroe.giize[.]com
employers.theworkpc[.]com
freeread.casacam[.]net
us.lenovoappstore[.]com
sundanish.freeddns[.]org
torinarlabs.webredirect[.]org
news.dursamjbataar[.]org
video.dursamjbataar[.]org
black-popular[.]com
whatismybestthing[.]com

样本分析还记录了多组可疑安装目录,包括 C:\\Program Files\\microsoft\\windows defender\\、C:\\ProgramData\\symantecdir\\、C:\\Windows\\identitycrl\\production\\、C:\\Users\\<user>\\AppData\\Roaming\\dsassistant\\ 和 C:\\programdata\\msdn\\。目录名本身不足以定性,应与侧载组件、服务、注册表配置及驱动行为联合判断。

结论

CoolClient 的变化不只是“增加一个驱动”。用户态后门负责部署、配置和选择目标,内核驱动则把同一份隐藏策略同时施加到进程、文件系统、注册表和网络枚举结果。三类常规 IOCTL 把用户态攻击链与内核隐匿面连接起来,而 33 个 handler 显示该驱动还具备更广的攻击能力,只是这些能力没有在已分析样本的常规执行中全部触发。

归因也需要分层处理:PlugX→CoolClient 的部署顺序、既有 CoolClient 执行特征以及受害区域共同支持 HoneyMyte 关联;PDB 中的中文路径和旧签名证书只能作为开发环境与样本聚类线索,不能单独用于组织或个人归因。


CoolClient内核Rootkit分析:多阶段注入、IOCTL通信与隐匿机制" 网络安全文章

CoolClient内核Rootkit分析:多阶段注入、IOCTL通信与隐匿机制"

CoolClient已从用户态后门演化为多阶段内核Rootkit,通过已签名驱动msagent.sys实现进程、文件、注册表隐藏及C2地址过滤。攻击链始于PlugX下发,经DLL侧载、UACbypass、服务安装最终加载驱动。驱动暴露33个IOCTL,常规执行仅使用三个用于登记可信进程、C2地址和保护路径。检测应关联wmic修改Defender排除项、synchost.exe进程及NsiproxyHook等行为信号。
一个条件竞争漏洞,让我用TurboIntruder刷爆登录接口|赏金技巧" 网络安全文章

一个条件竞争漏洞,让我用TurboIntruder刷爆登录接口|赏金技巧"

本文介绍利用条件竞争漏洞绕过登录接口的失败次数锁定机制。通过并行发送大量登录请求,在服务器更新失败计数器之前完成多次尝试,从而突破三次锁定限制。作者使用TurboIntruder工具配合单数据包攻击脚本实现并发爆破,并成功获取目标账户密码。该技术展示了看似严密的限制在并发面前可能存在的破绽,为渗透测试提供了一种绕过登录限速的实战技巧。
OpenAI如何给AI安全智能体逐级放权" 网络安全文章

OpenAI如何给AI安全智能体逐级放权"

OpenAI联合创始人GregBrockman发布文章,提出AI安全工具应渐进授权,从只读分析开始,逐步增加权限,并设置正确性、操作安全和治理三类验收门槛。企业应选择低风险场景,在一个月内建立最小安全闭环,确保速度不成为新事故来源。
2026KCTF|第四题《未时·车流困城》设计思路及解析" 网络安全文章

2026KCTF|第四题《未时·车流困城》设计思路及解析"

该赛题将算法求解与逆向对抗深度绑定,采用x86/x64混合架构、heaven’sgate、VEH异常驱动、反调试、完整性校验、自定义编码、多项式约束等机制形成多层验证链。关键发现是反调试结果参与算法运算,错误路径也能得到自洽结果。可操作建议是通过原始程序验证,区分真实与诱饵路径,恢复完整数据流。
评论:0   参与:  0