HoneyMyte APT进化:利用内核级Rootkit隐藏恶意软件

卡巴斯基研究发现HoneyMyte APT组织在2025年活动中使用了签名内核驱动rootkit,保护其ToneShell后门免受检测。该rootkit通过文件过滤驱动、注册表回调和进程保护等多种机制隐藏自身和恶意进程,展示了攻击技术的显著演进。

攻击概述

在2025年年中,我们在亚洲的计算机系统上发现了一个恶意驱动程序文件。该驱动程序文件使用一个旧的、被盗或泄露的数字证书签名,并在受感染的机器上注册为微型过滤器驱动程序。其最终目标是将一个后门木马注入系统进程,并为恶意文件、用户模式进程和注册表项提供保护。

我们的分析表明,该驱动程序注入的最终有效载荷是ToneShell后门的一个新样本,它会连接到攻击者的服务器,提供反向Shell以及其他功能。ToneShell后门是一种已知专门由HoneyMyte(又称Mustang Panda或Bronze President)APT组织使用的工具,常用于针对政府组织的网络间谍活动,尤其是在东南亚和东亚地区。

此活动中使用的ToneShell后门命令与控制服务器于2024年9月通过NameCheap服务注册,我们怀疑攻击本身始于2025年2月。通过遥测数据,我们观察到新的ToneShell后门频繁用于针对东南亚和东亚政府组织的网络间谍活动,其中缅甸和泰国是重点目标。

值得注意的是,几乎所有受感染的受害者此前都曾感染过其他HoneyMyte工具,包括ToneDisk USB蠕虫、PlugX以及旧版本的ToneShell。虽然初始入侵媒介尚不清楚,但怀疑攻击者利用先前已受感染的机器来部署恶意驱动程序。

被盗用的数字证书

该驱动程序文件使用了广州金特尔科技有限公司的数字证书进行签名,序列号为08 01 CC 11 EB 4D 1D 33 1E 3D 54 0C 55 A4 9F 7F。该证书自2012年8月起生效,有效期至2015年。

我们还发现了其他使用同一证书签名的恶意文件,但它们与本文描述的攻击没有显示出任何关联。因此,我们认为其他威胁行为者也在使用该证书签署他们的恶意工具。下图显示了该证书的详细信息。

恶意驱动程序的技术细节

在受害者机器上,该驱动程序的文件名为ProjectConfiguration.sys。为驱动程序服务创建的注册表项使用相同的名称ProjectConfiguration

该恶意驱动程序包含两个用户模式Shellcode,它们被嵌入到驱动程序二进制文件的.data节中。这些Shellcode作为独立的用户模式线程执行。其rootkit功能既保护驱动程序自身的模块,也保护被注入后门代码的用户模式进程,防止系统上任何进程的访问。

API地址解析

为了混淆驱动程序模块的实际行为,攻击者使用哈希值动态解析所需的API地址。

恶意驱动程序首先通过调用ZwQuerySystemInformation并将SystemInformationClass设置为SYSTEM_MODULE_INFORMATION,来检索ntoskrnl.exefltmgr.sys的基地址。然后,它遍历该系统信息,按名称搜索所需的DLL,并记录每个模块的ImageBaseAddress

一旦获取了库的基地址,驱动程序便使用一个简单的哈希算法,从ntoskrnl.exefltmgr.sys中动态解析所需的API地址。

哈希算法如下所示。注释中提供的两个种子值变体分别用于Shellcode和攻击的最终有效载荷。

驱动程序文件的保护

恶意驱动程序使用FltRegisterFilter向过滤器管理器注册自身,并设置一个前置操作回调。此回调会检查针对IRP_MJ_SET_INFORMATION的I/O请求,并在检测到特定的FileInformationClass值时触发恶意处理程序。然后,该处理程序检查目标文件对象是否与该驱动程序关联;如果是,它会通过将IOStatus设置为STATUS_ACCESS_DENIED来强制操作失败。相关的FileInformationClass值包括:

  • FileRenameInformation
  • FileDispositionInformation
  • FileRenameInformationBypassAccessCheck
  • FileDispositionInformationEx
  • FileRenameInformationEx
  • FileRenameInformationExBypassAccessCheck

这些类别对应于文件删除和文件重命名操作。通过监控它们,驱动程序可以防止自身被删除或重命名——这是安全工具在尝试隔离它时可能会采取的操作。

注册表键的保护

驱动程序还构建了一个受保护的注册表路径和参数名称的全局列表。该列表包含以下条目:

  • ProjectConfiguration
  • ProjectConfiguration\Instances
  • ProjectConfiguration Instance

为了保护这些注册表键,恶意软件设置了一个RegistryCallback例程,并通过CmRegisterCallbackEx注册它。为此,它必须分配一个“海拔(altitude)”值。微软管理微型过滤器的海拔分配,将它们分组到具有预定义海拔范围的“加载顺序组”中。具有低数值海拔的过滤器驱动程序会在比具有高海拔的过滤器更低的I/O堆栈中加载。该恶意软件使用硬编码的起始点330024,并创建格式为330024.%l的海拔字符串,其中%l的范围从0到10,000。

然后,恶意软件开始尝试使用第一个生成的海拔值注册回调。如果注册失败并返回STATUS_FLT_INSTANCE_ALTITUDE_COLLISION(意味着该海拔已被占用),它会递增该值并重试。此过程重复进行,直到成功找到未使用的海拔。

该回调监控四个特定的注册表操作。每当这些操作中的一个针对其受保护列表中的键时,它会返回0xC0000022STATUS_ACCESS_DENIED)来阻止该操作。监控的操作包括:

  • RegNtPreCreateKey
  • RegNtPreOpenKey
  • RegNtPreCreateKeyEx
  • RegNtPreOpenKeyEx

微软将海拔范围320000–329999分配给“FSFilter Anti-Virus”加载顺序组。恶意软件选择的海拔超出了此范围。由于海拔较低的过滤器位于I/O堆栈的更深处,恶意驱动程序可以在合法的低海拔过滤器(如反病毒组件)之前拦截文件操作,从而规避安全检查。

最后,该恶意软件篡改了分配给WdFilter(一个关键的微软 Defender 驱动程序)的海拔值。它定位了包含该驱动程序海拔的注册表项,并将其更改为0,从而有效阻止WdFilter被加载到I/O堆栈中。

用户模式进程的保护

恶意软件设置了一个用于存储受保护进程ID(PID)的列表。它最初有32个空槽,在执行过程中根据需要填充。同时初始化一个状态标志并设置为1,表示列表初始为空。

接下来,恶意软件使用ObRegisterCallbacks注册两个回调函数,以拦截与进程相关的操作。这些回调适用于OB_OPERATION_HANDLE_CREATEOB_OPERATION_HANDLE_DUPLICATE,并且都使用恶意的前置操作例程。

该例程检查操作中涉及的进程的PID是否出现在受保护列表中。如果是,它将OperationInformation结构中的DesiredAccess字段设置为0,从而有效拒绝对该进程的任何访问。

恶意软件还通过调用PsSetCreateProcessNotifyRoutine注册回调例程。这些回调在系统上每个进程创建和删除时触发。该恶意软件的回调例程检查被删除进程的父进程ID(PPID)是否存在于受保护列表中;如果存在,恶意软件会从列表中移除该PPID。这最终会解除对注入了后门的进程的rootkit保护,一旦该后门履行完其职责。

有效载荷注入

该驱动程序释放两个用户模式有效载荷。

第一个有效载荷启动一个svchost进程并注入一小段引起延迟的Shellcode。这个新svchost实例的PID被写入一个文件供后续使用。

第二个有效载荷是最终组件——ToneShell后门——随后被注入到同一个svchost进程中。

注入工作流程

  1. 恶意驱动程序通过遍历PID并检查每个进程是否存在以及是否在SeLocalSystemSid下运行,来搜索一个高权限目标进程。一旦找到,它会使用随机的事件名、文件名和填充字节来定制第一个有效载荷,然后创建一个命名事件,并通过将当前线程附加到该进程、分配内存和启动新线程来注入该有效载荷。
  2. 注入后,它等待有效载荷发出事件信号,从生成的文件中读取新创建的svchost进程的PID,并将其添加到其受保护进程列表中。
  3. 然后,它类似地使用随机事件名和随机填充字节定制第二个有效载荷(ToneShell),创建命名事件,并通过附加到进程、分配内存和启动新线程来注入该有效载荷。
  4. 一旦ToneShell后门执行完毕,它会发出事件信号。随后,恶意软件将svchost的PID从受保护列表中移除,等待10秒,然后尝试终止该进程。

ToneShell 后门

攻击的最后阶段部署了ToneShell,这是一个此前与HoneyMyte APT组织的活动相关联的后门。值得注意的是,这是我们第一次看到ToneShell通过内核模式加载器进行分发,这使其免受用户模式监控,并受益于驱动程序的rootkit功能,从而将其活动隐藏于安全工具之外。

早期的ToneShell变体使用CoCreateGuid生成一个16字节的GUID作为主机标识符。相比之下,此版本检查名为C:\ProgramData\MicrosoftOneDrive.tlb的文件,验证其内部的4字节标记。如果文件不存在或标记无效,则后门会使用系统特定值(计算机名、系统运行时间和伪随机数生成器)派生一个新的伪随机4字节标识符,然后创建文件并写入该标记。这成为受感染主机的唯一ID。

我们分析的样本联系了以下两个命令与控制服务器:

  • avocadomechanism[.]com
  • potherbreference[.]com

ToneShell通过原始TCP在443端口与其C2进行通信,同时使用伪造的TLS报头伪装流量。此版本模仿TLS 1.3记录的前几个字节(0x17 0x03 0x04),而不是之前使用的TLS 1.2模式。在这个三字节标记之后,每个数据包包含一个长度字段和一个加密的有效载荷。

数据包结构

  • 报头(3字节):伪造的TLS标记
  • 大小(2字节):有效载荷长度
  • 有效载荷:使用滚动XOR密钥加密

该后门支持一系列远程操作,包括文件上传/下载、远程Shell功能和会话控制。命令集包括:

命令ID 描述
0x1 为传入数据创建临时文件
0x2 / 0x3 下载文件
0x4 取消下载
0x7 通过管道建立远程Shell
0x8 接收操作员命令
0x9 终止Shell
0xA / 0xB 上传文件
0xC 取消上传
0xD 关闭连接

结论

我们高度确信,本报告中描述的活动与HoneyMyte威胁行为者有关。这一结论得到了最终阶段有效载荷ToneShell后门的使用,以及在受影响系统上发现的、长期与HoneyMyte关联的其他工具(如PlugX和ToneDisk USB蠕虫)的支持。

HoneyMyte在2025年的活动显示出明显向使用内核模式注入器部署ToneShell的演进,提升了隐蔽性和持久性。在此活动中,我们观察到一种新的ToneShell变体通过内核模式驱动程序交付,该驱动程序从其嵌入的有效载荷中直接携带并注入后门。为了进一步隐藏其活动,该驱动程序首先部署一个小的用户模式组件来处理最终的注入步骤。它还使用了多种混淆技术、回调例程和通知机制来隐藏其API使用并跟踪进程和注册表活动,最终加强了后门的防御能力。

由于Shellcode完全在内存中执行,因此内存取证对于发现和分析此入侵至关重要。检测注入的Shellcode是ToneShell存在于受感染主机上的关键指标。

建议

为了保护自己免受此威胁,组织应采取以下措施:

  1. 实施稳健的网络安全措施,如防火墙和入侵检测系统。
  2. 使用先进的威胁检测工具,例如端点检测和响应(EDR)解决方案。
  3. 为员工提供定期的安全意识培训。
  4. 定期进行安全审计和漏洞评估,以识别和修复潜在的漏洞。
  5. 考虑实施安全信息和事件管理(SIEM)系统,以监控和分析安全相关数据。

遵循这些建议,组织可以降低被HoneyMyte APT组织及其他类似威胁入侵的风险。

入侵指标

更多的入侵指标及其更新,可供我们的APT情报报告服务的客户获取。如果您有兴趣,请联系 intelreports@kaspersky.com

1
2
3
4
5
36f121046192b7cac3e4bec491e8f1b5        AppvVStram_.sys
fe091e41ba6450bcf6a61a2023fe6c83         AppvVStram_.sys
abe44ad128f765c14d895ee1c8bad777        ProjectConfiguration.sys
avocadomechanism[.]com                   ToneShell C2
potherbreference[.]com                   ToneShell C2
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计