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

admin 2026-08-23 05:15:31 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: CoolClient已从用户态后门演化为多阶段内核Rootkit,通过已签名驱动msagent.sys实现进程、文件、注册表隐藏及C2地址过滤。攻击链始于PlugX下发,经DLL侧载、UACbypass、服务安装最终加载驱动。驱动暴露33个IOCTL,常规执行仅使用三个用于登记可信进程、C2地址和保护路径。检测应关联wmic修改Defender排除项、synchost.exe进程及NsiproxyHook等行为信号。 综合评分: 85 文章分类: 恶意软件,渗透测试,红队,内网渗透,安全工具


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.exeSang.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。真正的执行入口位于 DllMainDllEntryPoint),其控制流被 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.exezhudongfangyu.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 0x2220F00x2220F4 和 0x2220F8 分别用于添加、删除和清空保护路径。

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

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

33 个 IOCTL 暴露的能力边界

驱动实现了 33 个 IOCTL handler,但不能把 handler 存在等同于本次样本已经调用。常规执行只确认 0x2221200x2221E0 和 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.exewinver.execomputerdefaults.exe 与 synchost.exe 形成异常的 RPC、调试对象和父子进程关系;
  • • HKLM\SYSTEM\RNG 下出现 Wid_H1deF5DirsWid_H1deRegKeysHid_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 中的中文路径和旧签名证书只能作为开发环境与样本聚类线索,不能单独用于组织或个人归因。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:TIPFactory情报工厂 Ti Ti《CoolClient 内核 Rootkit 分析:多阶段注入、IOCTL 通信与隐匿机制》

评论:0   参与:  0