引言
Matanbuchus 是一种用 C++ 编写的恶意下载器,自 2020 年起以恶意软件即服务(MaaS)的形式提供。在此期间,Matanbuchus 经历了多个发展阶段。2025年7月,Matanbuchus 3.0 版本在野外被发现。Matanbuchus 为威胁行为者提供了部署额外有效负载以及通过 shell 命令进行手动键盘操作(hands-on-keyboard activity)的选项。尽管其结构简单,但近期 Matanbuchus 与勒索软件活动关联密切。
Matanbuchus 包含两个核心组件:一个下载器模块和一个主模块。在本博文中,Zscaler ThreatLabz 研究了 Matanbuchus 的关键特性,包括混淆方法、持久化机制和网络通信。
关键要点
- Matanbuchus 是一个后门恶意软件家族,首次发现于 2020 年,主要用于下载和执行第二阶段的恶意负载。
- Matanbuchus 使用其专用的加载器来下载和执行主模块。
- Matanbuchus 自首次发布以来经历了重大变化。在 3.0 版本中,恶意软件开发人员增加了协议缓冲区(Protobuf)用于序列化网络通信数据。
- Matanbuchus 实施了多种混淆技术以规避检测,例如添加垃圾代码、加密字符串以及通过哈希值动态解析 Windows API 函数。
- 额外的反分析功能包括一个硬编码的过期日期,以防止 Matanbuchus 无限期运行,以及通过下载的 shellcode 创建计划任务来建立持久性。
- ThreatLabz 观察到的 Matanbuchus 部署与手动操作的勒索软件活动一致。
- ThreatLabz 观察到多个 Matanbuchus 活动分发 Rhadamanthys 信息窃取程序和 NetSupport RAT。
技术分析
Matanbuchus 利用两个主要模块:一个下载器模块和一个主模块。在以下部分中,我们将分析在攻击中观察到的初始感染向量以及 Matanbuchus 的两个模块。
初始感染向量 威胁行为者执行了以下手动操作来部署 Matanbuchus:
- 威胁行为者使用 QuickAssist(可能与社会工程结合)获取对受害者系统的访问权限。
- 威胁行为者使用命令行从
gpa-cro[.]com下载并执行恶意的 Microsoft Installer(MSI)包。 - 下载的有效负载包含一个名为
HRUpdate.exe的可执行文件,该文件通过 DLL 侧加载(sideloads)一个恶意 DLL。该恶意 DLL 有效负载就是 Matanbuchus 下载器模块。 - 恶意 DLL 下载器从以下地址下载主模块:
hxxps://mechiraz[.]com/cart/checkout/files/update_info.aspx
ThreatLabz 以中等置信度评估,威胁行为者的行为旨在向受害者的组织部署勒索软件。
混淆 Matanbuchus 下载器和主模块都使用以下混淆方法:
- Matanbuchus 存储两个数组用于在运行时解密字符串。第一个数组包含加密的字符串,而第二个数组存储每个字符串的信息,包括该字符串在第一个数组中的索引和字符串的大小。Matanbuchus 使用 ChaCha20 流密码进行解密,对所有字符串使用共享密钥和 nonce(随机数)。这些内容存储为第一个数组的前 44 个字节。
- Matanbuchus 通过使用 MurmurHash 算法动态解析所有必需的 Windows API 函数。
- Matanbuchus 在其代码库中嵌入了多个垃圾指令块以阻碍分析,如下图所示。 图1:Matanbuchus 主模块代码中的垃圾指令示例。
下载器模块 反分析 下载器和主模块共享大部分相同的反分析功能;但是,下载器包含一个额外的功能:长运行循环。这些“忙碌”循环会在初始执行后延迟下载器的功能数分钟,使其能够通过设置较低分析超时值的沙箱来规避行为分析。 下图展示了其中一个长运行忙碌循环。 图2:Matanbuchus 下载器模块中的垃圾代码和长运行忙碌循环示例。
网络通信
下载器模块包含一个嵌入的加密 shellcode,用于下载和执行主模块。下载器利用已知明文攻击技术,通过暴力破解来解密 shellcode。Matanbuchus 启动一个循环,从整数值 99999999 开始。该整数被转换为一个 8 字节的字符串,并前置到一个 24 字节的硬编码值,以创建一个 32 字节的 ChaCha20 密钥。然后,Matanbuchus 尝试使用该 ChaCha20 密钥和一个硬编码的 12 字节 nonce 来解密 shellcode。Matanbuchus 将结果与以下 21 个字节进行比较,如果解密正确,这些字节对应于 shellcode 的前 21 个字节。
显示的 21 字节已知明文字符串如下:
E9 A0 00 00 00 55 89 E5 6A 33 E8 00 00 00 00 83 04 24 05 CB 48
分析人员说明:ChaCha20 nonce 字段被设置为硬编码数组 01 02 03 04 05 06 07 08 09 10 11 12,同时暴力破解 shellcode 数据。
如果前 21 个字节不匹配这些值,则整数值减一并重复循环。
解密的 shellcode 通过向硬编码的命令与控制(C2)服务器发送 HTTPS GET 请求来下载主模块,并使用 ChaCha20 流密码算法解密接收到的有效负载。下面的 Python 脚本代表了用于解析和解密下载的有效负载的方法。
|
|
主模块
持久化
Matanbuchus 通过执行在注册过程(稍后描述)完成后从 C2 服务器检索到的 shellcode 来向受感染主机添加持久性。具体来说,Matanbuchus 生成一个新的文件路径并将该值传递给 shellcode。该 shellcode 创建一个名为 Update Tracker Task 的新计划任务,其文件路径格式如下:
%WINDIR%\\SysWOW64\\msiexec.exe -z %Matanbuchus_path%
Matanbuchus 通过以下步骤生成随机文件路径:
- 首先,Matanbuchus 在 Windows
APPDATA文件夹下创建一个新目录。目录名称来源于磁盘的卷序列号,如下面的 Python 代码所示。1 2volume_serial_number = -1 directory_name = f"{volume_serial_number:x}{volume_serial_number >> 2:x}" - 然后,Matanbuchus 生成一个新的随机文件名,为一个 12 字符的小写字母字符串。
- 最后,Matanbuchus 使用新生成的随机文件名将其自身复制到新创建的目录中。
分析人员说明:Matanbuchus 创建一个唯一的、每主机互斥量(mutex)以确保单一执行。互斥量名称与持久化目录的名称匹配,并在前面加上字符串
sync。
配置 Matanbuchus 的主模块包含一个嵌入的配置 blob,以加密格式存储。执行时,Matanbuchus 使用 ChaCha20 解密配置 blob。配置 blob 的前 44 字节包括解密密钥,后跟 nonce。 解密的配置 blob 存储以下信息:
- 一个 C2 URL 以及一个布尔值,指示网络协议是 HTTP(假)还是 HTTPS(真)。
- 一个以 UUID 格式存储的活动 ID。
- 一个过期日期。 值得注意的是,Matanbuchus 仅在执行时检查过期日期,而不是在任何其他阶段。因此,如果系统在过期日期后未重新启动,受感染主机可能仍会与 C2 服务器通信。
网络通信 Matanbuchus 遵循与许多其他恶意软件家族类似的网络通信模式。Matanbuchus 首先将受感染主机注册到 C2 服务器,然后向服务器请求一组任务。如果有任何任务可用,Matanbuchus 会执行它们并报告任何结果。 网络通信模式如下图所示。 图3:Matanbuchus 网络通信模式。 Matanbuchus 支持三种主要的请求类型。每种请求类型都被分配一个唯一的 ID,该 ID 在序列化为 Protobuf 数据结构后出现在每个数据包的开头。这些请求 ID 值列在下表中。
| 请求类型 | ID |
|---|---|
| 注册僵尸主机 | 1 |
| 获取任务 | 2 |
| 报告任务结果 | 3 |
表1:Matanbuchus 请求 ID。
Matanbuchus 使用 HTTP(S) 进行网络通信,其有效负载包含加密的 Protobuf。Matanbuchus 通过生成一个随机的密钥和 nonce 来加密每个 Protobuf,该密钥和 nonce 会前置到数据包数据中。下面的结构体代表了 Matanbuchus 创建的网络数据包的布局。
|
|
网络数据包数据由具有各种消息类型的 Protobuf 组成。 在向 C2 服务器请求任何任务之前,Matanbuchus 通过收集并发送以下信息来注册受感染主机。
- 主机名和用户名。
- Windows 版本。
- Windows 域名。
- 已安装的安全产品列表,包括:
- Windows Defender
- CrowdStrike Falcon
- SentinelOne
- Sophos EDR
- Trellix
- Cortex XDR
- Bitdefender GravityZone EDR
- 布尔值,指示受感染主机是否为 Windows 服务器。
- 布尔值,指示受感染用户是否具有管理员权限。
- 布尔值,指示 Windows 架构(32/64位)。
- 活动和僵尸主机 ID。 一旦注册过程完成,就会采取以下操作。
- Matanbuchus 通过在
HKEY_CURRENT_USER\SOFTWARE\%volume_serial_number_based_ID%下创建一个带有僵尸主机 ID 的注册表项,将受感染主机标记为已注册。Matanbuchus 在每次执行时检查此注册表路径,以验证主机是否需要注册。 - Matanbuchus 添加上文描述的持久化。 注册完成后,Matanbuchus 开始向 C2 服务器请求任务。Matanbuchus 支持的网络命令如下表所述。 分析人员说明:Matanbuchus 将数据包中发现的网络命令 ID 映射到二进制代码中嵌入的内部 ID。为清晰起见,下表中列出了两种 ID 类型。
| 网络命令 ID | 内部 ID | 描述 |
|---|---|---|
| 1 | 0 | 从外部 URL 下载并执行 EXE 有效负载。有效负载可以通过以下方式之一执行: 1. 写入磁盘文件并执行。 2. 将有效负载注入远程进程。不伪造父进程 ID。 3. 如前所述注入有效负载,但伪造新创建进程的父进程 ID。 此外,Matanbuchus 可以直接在内存中执行 .NET 有效负载。 |
| 2 | 1 | 从外部 URL 下载并执行 DLL 有效负载。有效负载可以通过以下方式之一执行: 1. 使用 rundll32 执行 DLL 有效负载。2. 使用 regsvr32 执行 DLL 有效负载。3. 在当前进程的新线程中执行 DLL 有效负载。 4. 将 DLL 有效负载注入 msiexec 的新进程实例。Matanbuchus 不是直接将有效负载写入远程进程,而是加密 DLL 有效负载并向远程进程注入一个 shellcode。然后,该 shellcode 创建一个命名管道(PIPE)并使用它来传输和解密远程进程中的 DLL 有效负载。管道名称格式为 \\\.\\pipe\\dll-%hex_encoded_PID_of_remote_process%。 |
| 3 | 2 | 从外部 URL 下载并执行 MSI 安装包。MSI 文件被写入磁盘并从磁盘执行。 |
| 4 | 3 | 执行 shellcode。根据传递的参数,shellcode 以下列方式之一执行: 1. 在当前 Matanbuchus 进程的新线程中执行。 2. 将下载的 shellcode 注入 msiexec 的新进程实例。 |
| 5 | 5 | 收集受感染主机上正在运行的进程。列表仅包括进程名称。 |
| 6 | 5 | 收集受感染主机上安装的 Windows 服务。列表包括服务的显示名称。 |
| 7 | 5 | 收集受感染主机上安装的软件应用程序列表。列表包括识别出的应用程序的显示名称。 |
| 8 | 5 | 收集有关受感染主机上安装的 Windows 累积更新的信息。列表包括每个识别出的更新的名称,例如 KB5066791。 |
| 9 | 6 | 使用 CMD 执行系统 shell 命令。 |
| 10 | 6 | 使用 PowerShell 执行系统 shell 命令。 |
| 11 | 6 | 使用 WMI 执行系统 shell 命令。 |
| 12 | 3 | 类似于网络命令 ID 4,但如果指定了线程执行类型,则 shellcode 在当前运行的线程上下文中执行。 |
| 13 | 7 | 终止 Matanbuchus 进程。 |
| 14 | 4 | 从远程 URL 下载并解压缩 ZIP 存档。Matanbuchus 运行任何解压后的可执行文件。 |
表2:Matanbuchus 网络命令。
分析人员说明:逆向工程得到的 Matanbuchus Protobuf 结构可在此处获取。 值得注意的是,从外部 URL 下载的有效负载可能已被加密。Matanbuchus 通过读取传入的 Protobuf 消息中的布尔标志来确定是否需要解密。有效负载解密例程也使用 ChaCha20,类似于下载器模块。 最后一步,Matanbuchus 报告每个网络命令的结果,包括命令生成的任何输出。每个任务报告数据包都包含僵尸主机 ID、任务 ID 和任何命令输出。如果任务失败,Matanbuchus 不会向 C2 服务器报告该任务。
结论 总而言之,Matanbuchus 是一个具有后门功能的恶意下载器。在过去几年中,Matanbuchus 不断发展以逃避检测。此外,Matanbuchus 似乎被不同动机的不同威胁行为者广泛使用。最值得注意的是,Matanbuchus 似乎吸引了可能与勒索软件活动有关的威胁行为者的注意。
Zscaler 防护覆盖
Zscaler 的多层云安全平台可在不同级别检测与 Matanbuchus 相关的指标。下图描绘了 Zscaler 云沙箱,显示了 Matanbuchus 的检测详细信息。
图4:针对 Matanbuchus 下载器的 Zscaler 云沙箱报告。
除了沙箱检测,Zscaler 的多层云安全平台还通过以下威胁名称在不同级别检测与 Matanbuchus 相关的指标:
Win32.Backdoor.Matanbuchus
危害指标 (IOCs)
| SHA256 | 描述 |
|---|---|
| 92a2e2a124a106af33993828fb0d4cdffd9dac8790169774d672c30747769455 | Matanbuchus MSI 安装包。 |
| 6246801035e053df2053b2dc28f4e76e3595fb62fdd02b5a50d9a2ed3796b153 | 用于侧加载下载器模块的合法可执行文件(HRUpdate.exe)。 |
| 3ac90c071d143c3240974618d395fa3c5228904c8bf0a89a49f8c01cd7777421 | Matanbuchus 下载器模块。 |
| 77a53dc757fdf381d3906ab256b74ad3cdb7628261c58a62bcc9c6ca605307ba | Matanbuchus 主模块。 |
| gpa-cro[.]com | 恶意 MSI 文件的 URL。 |
| mechiraz[.]com | Matanbuchus C2 服务器。 |