翻译:https://blog-en.itochuci.co.jp/entry/2024/05/23/090000
引言
本文探讨了我们观察到的一次攻击活动中名为“BloodAlchemy”的恶意软件分析。
2023年10月,Elastic Security Lab将BloodAlchemy命名为一种新型RAT(远程访问木马)[1]。然而,我们的调查揭示出,BloodAlchemy并非完全新型的恶意软件,而是Deed RAT的一个演化版本,后者是ShadowPad的后继者。
恶意软件组织历史
首先来看ShadowPad。ShadowPad是一个在APT(高级持续威胁)活动中使用的臭名昭著的恶意软件家族。它首次于2017年7月在一个软件供应链攻击中被报告[2]。当时,ShadowPad嵌入在了NetSarang提供的企业网络服务器管理软件的一个代码库中[3]。
在2019年初期,普遍认为只有APT41在使用ShadowPad[4]。但自2020年以来,许多安全研究人员报告称可能有多个APT组织使用了该恶意软件。
接下来看Deed RAT,据信它是自至少2017年以来活跃的威胁组织Space Pirates所使用的一种RAT。根据其实现方式推测得出此结论。 此外, Positive Technologies的安全团队指出, Deed RAT与 ShadowPad显示出高度代码相似性。
现在让我们深入了解本次讨论的核心—— BloodAlchemy. Elastic Security Lab分析表明,这种木马具备多项特征:利用合法二进制文件加载恶意的DLLs、多种运行模式、持久机制以及在与命令和控制(C&C)服务器通信时导入各种通信协议的具体功能等。这些特点表明 Blood Alchemy是 Deed Rat的新变种且仍由攻击者积极开发之中。
ShadowPad、Deed RAT 和 BloodAlchemy 的公开信息如下:
图1. 关于ShadowPad、Deed RAT和BloodAlchemy的公开信息 |
图1来源引用
[1] ShadowPad在企业网络中
[2] ShadowHammer行动:一个备受瞩目的供应链攻击
[3] 现实世界中的网络间谍技术:2019年下半年针对日本的敌对行动
[5] ShadowPad: the Masterpiece of Privately Sold Malware in Chinese Espionage
[6] StealthyTrident行动:企业软件遭受攻击
[7] 2020年日本APT威胁态势
[8] RedHotel: A Prolific, Chinese State-Sponsored Group Operating at a Global Scale
[10] Attacks on industrial control systems using ShadowPad
[11] Redfly: Espionage Actors Continue to Target Critical Infrastructure
[12] Space Pirates: a look into the group's unconventional techniques, new attack vectors, and tools
上面很多文章对我国进行了污蔑,国内安全研究员应该多输出一点外文文章啊。
BloodAlchemy分析
感染途径和感染流程
在我们分析的案例中,攻击者在劫持VPN设备上的维护供应商帐户后,使用一组文件来进行BloodAlchemy感染,作为BloodAlchemy的感染途径。图2显示了感染流程。
图2. BloodAlchemy的感染流程 |
恶意文件夹包括三个文件:BrDifxapi.exe
、BrLogAPI.dll
和 DIFX
。这些文件被存储在目录 C:\windows\
下。此外,为了持久性,创建了一个计划任务(C:\Windows\System32\Tasks\Dell\BrDifxapi)
。
图 3. 受感染的文件夹 |
恶意DLL分析
BrDifxapi.exe
一旦通过持久性进程在受感染的主机上执行,它就会利用 DLL 侧面加载在同一文件夹中加载恶意 DLL 文件BrLogAPI.dll
。 然后,恶意 DLL 加载同一文件夹中的文件DIFX
,从加载的数据中解密 shellcode,并在内存中执行 shellcode。DIFX分析结果显示,解密Shellcode使用的算法为AES128(CBC模式),密钥为文件的前16字节。
图4 BrLogAPI.dll中shellcode的解密过程 |
图 5. DIFX 数据(上图)和解密的 Shellcode(下图) |
解析shellcode
解密后的Shellcode包含了加密和压缩形式的BloodAlchemy。这种自定义解密过程基于FNV-1a哈希算法和lznt1压缩技术。
图 6. FNV-1a 哈希算法处理 |
什么是 FNV-1a 哈希算法?
一种哈希算法,基于 Glenn Fowler 和 Phong Vo 于 1991 年作为审稿人评论提交给 IEEE POSIX P1003.2 委员会的想法,后来由 Noll 进行了改进。 FNV 是 Fowler-Noll-Vo 的缩写,其中列出了其创建者的名字。
它广泛用于各种应用程序,包括 DNS 服务器、X(以前称为 Twitter)服务、数据库索引哈希、主要 Web 搜索/索引引擎、网络新闻历史文件的 Message-ID 搜索功能以及反垃圾邮件过滤器。
FNV非加密哈希算法
图7. 使用lznt1算法的恢复过程 |
LZNT1压缩算法是什么?
一种可以通过调用名为 RtlDecompressBuffer 的 Windows API 轻松使用的压缩算法。
LZNT1 算法详细信息 | Microsoft Learn
我们发现,恢复的 BloodAlchemy 有效载荷具有独特的数据格式,该格式与 PE 格式非常相似,但有所不同。以下是自定义格式的数据结构。
偏移量 | 描述 | 数据 |
---|---|---|
0x00 | 幻数 | 45AB 45AB |
0x04 | 插件ID | 0x10 |
0x08 | 入口点 | 0x698c |
0x0c | 原始基地 | 0x400000 |
0x10 | 绝对偏移量 | 0 |
0x14 | 虚拟分配的大小 | 0x17000 |
0x18 | 原始数据大小 | 0x16fab |
0x1c | 未知 | 0x163bc |
0x20 | 代码基数? | 0x1000 |
0x24 | 第1节:虚拟地址 | 0x0 |
0x28 | 第1节:原始数据地址 | 0x50 |
0x2c | 第1节:原始数据的大小 | 0x10fa0 |
0x30 | 第2节:虚拟地址 | 0x11000 |
0x34 | ETC.. |
Shellcode 配备了一个功能来恢复 BloodAlchemy 本身,解释这种独特的格式,以便将其作为最终有效负载扩展到内存中,然后继续进入 EntryPoint(图 8)。
图 8.解析专有格式并扩展有效负载 BloodAlchemy 的代码 |
解析有效负载(BloodAlchemy)
结构
BloodAlchemy 具有其他恶意软件中不常见的几个特征。其中之一是运行模式值。当将处理从上述 Shellcode 转移到 Payload 的 EntryPoint 时,会使用指定的六个参数来调用它。第一个参数设置为运行模式值。
BloodAlchemy 的行为根据为此运行模式设置的值而有很大差异。每种运行模式的值及其行为如下。
运行模式 | 与运行模式对应的行为 |
---|---|
0 | 与C2通信并调用后门功能、创建指定进程并注入代码、向指定进程注入代码、反调试、反沙箱、持久化、 |
1 | 与C2通信并调用后门功能 |
2 | 创建用于与 C2 和后门功能通信的线程 |
3 | 与C2和后门功能通信,向指定进程注入代码,抗调试,抗沙箱,持久化 |
4 | 创建指定进程并注入代码 |
5 | 创建命名管道 |
6 | 恶意软件安装 |
我们还发现 BloodAlchemy 加载了恶意软件配置。该恶意软件配置以加密状态嵌入上述 shellcode 中,并在 BloodAlchemy 处理过程中单独解密和使用(图 9)。此外,如果目录C:\ProgramData\Store
下存在文件名为 {a-zA-Z} 的 15 个字符组成的文件,则该文件将作为恶意软件配置加载。使用的解密算法与上述有效负载相同。
图 9. 解密和加载恶意软件配置的代码 |
加载的恶意软件配置会对恶意软件的重要数据进行加密,例如运行模式下设置的操作行为的值、C2服务器的URL以及存储在状态中的执行代码注入时指定的进程名称。它还包括一个偏移值,用于指示某些配置中嵌入的数据的位置,例如 ShadowPad 的恶意软件配置。
图 10. 显示加密数据的偏移值及其在恶意软件配置中的位置 |
对于恶意软件特别重要的数据,例如 MUTEX 值和 C2,以基本加密格式存储在恶意软件配置中。每个都按照加密数据大小、1 字节密钥和加密数据的顺序存储在以下数据结构中。
偏移量 | 描述 | 数据 |
---|---|---|
0x00 | 数据大小 | 0x25 |
0x01 | 一个字节密钥 | 0x41 |
0x02 | 加密数据 | 1E 9D 09 19 7A D0 9D 9D … |
解密是通过使用存储的 1 字节密钥的独特算法来执行的。如果你用Python实现解密过程,代码将如下所示。
python脚本 |
如果使用上面的Python脚本解密并注释解密的数据,它将如下所示。
图 11. 恶意软件配置的偏移解析和解密示例 |
此外,类似的加密还用于恶意软件配置以外的数据,例如对恶意软件重要的数据(例如特定文件夹),并且可以使用上述脚本进行解密。
图 12. 解密恶意软件配置以外的数据的示例 |
功能
如上所述,BloodAlchemy 是一个相当特殊的样本,其行为根据运行模式而变化,并且某些功能也由恶意软件配置的值控制。 BloodAlchemy的主要功能是与C2服务器进行通信,并通过实施的后门命令充当RAT。
让我们深入了解 BloodAlchemy 中实现的一些功能。
持久化
有效负载还包括持久性功能。如果 run_mode 为 0 或 3,则可执行文件路径不是持久化路径,并且恶意软件配置中的 0x34 值不为 0,则根据下面的 persistence_flag 值(1 到 4)设置持久化的设置。
- 1:服务 + 启动 +taskschd(COM 对象)
- 2:服务
- 3:启动
- 4:taskschd(COM 对象)
图 13. 有效负载中包含的持久性功能 |
上述持久性机制旨在根据感染环境在以下目录之一中创建恶意软件文件夹 test.exe、BrLogAPI.dll 和 DIFX。
- %AUTOPATH%\Test\
- %LocalAppData%\Programs\Test\
- %ProgramFiles%\Test\
- %ProgramFiles(x86)%\Test\
反沙箱
有效负载还包括反沙箱功能。仅当 run_mode 为 0、可执行路径不是持久路径且恶意软件配置中 0x1c 的值为 1 时,此功能才有效。检查进程名称、文件和 DNS 结果。根据确认的进程名称,我们假设这是为了避开Trellix的沙箱功能。
图 14. Payload 中包含的反沙箱功能 |
进程注入
有效负载包含进程注入功能。
如果run_mode为0或3,并且恶意软件配置中0x54的值为1,则上述shellcode将被注入到配置中从0x58到0x64设置的以下进程中。
- %windir%\system32\SearchIndexer.exe
- %windir%\system32\wininit.exe
- %windir%\system32\taskhost.exe
- %windir%\system32\svchost.exe
为了将注入的 shellcode 设置为异步过程调用 (APC) 的队列,使用了 QueueUserAPC() 函数。这种技术被称为 Early Bird Injection。
什么是异步过程调用 (APC)?
在特定线程上下文中异步运行的函数。每个线程都有自己的 APC 队列,应用程序通过调用 QueueUserAPC() 函数将 APC 排队。这将导致 APC 函数执行和软件中断发生在下一个调度线程上。
异步过程调用 | Microsoft Learn
图 15. 有效负载中的进程注入和调用 QueueUserAPC() 函数的功能 |
作为有效载荷的相关特性,如果 run_mode 为 0 或 4 并且配置中的 0x68 值为 1,它将创建从 0x6c 到 0x74 指定的以下进程,并尝试使用 QueueUserAPC() 将 shellcode 注入这些进程。
- %windir%\system32\wininit.exe
- %windir%\system32\taskeng.exe
- %windir%\system32\taskhost.exe
- %windir%\system32\svchost.exe
创建与每个通信协议相关的虚拟函数表(VFT)
BloodAlchemy 最多可容纳 10 个 C2 目的地。然而,有趣的是,在我们观察到的样本中,只有一个 C2 信息。根据 C2 信息,提取通信协议,并设置要在恶意软件中使用的协议 ID。根据此协议 ID,导入通信所需的功能,并创建虚拟功能表 (VFT)。
虚拟函数表 (VFT)
存储指向类内虚函数的指针的表。如果一个类有一个或多个虚函数,编译器会为该类创建一个虚函数表。每个类实例都有一个指向该表的指针。
虚拟函数表 | Microsoft Learn
图 16. 在恶意软件中创建一个 VFT,以根据协议 ID 处理相应的协议 |
后门命令
有效负载包含 15 个后门命令。每个命令ID执行的操作如下。
命令 ID | 描述 |
---|---|
0x1101 | 更新配置 |
0x1102 | 获取当前配置 |
0x1201 | 更新测试.exe |
0x1202 | 更新 BrLogAPI.dll |
0x1203 | 更新 DIFX |
0x1204 | 卸载并终止 |
0x1205 | 启动 persistence_dir\test.exe |
0x1301 | 未知 |
0x1302 | 加载接收到的有效载荷并将其存储到注册表值中 |
0x1303 | 删除注册表值 |
0x1304 | 未知 |
0x1401 | 获取代理信息 |
0x1402 | 更新代理信息 |
0x1501 | 收集受害者信息 |
0x1502 | 回显 0x1502 |
图 17. 根据后门命令 ID 处理分支 |
代码与 Deed RAT 的相似之处
根据BloodAlchemy的分析结果,我们发现BloodAlchemy和Deed RAT之间有一些相似之处。以下是我们判断代码相似度特别高的一些示例。
我们已经确认 BloodAlchemy 和 Deed RAT 具有非常相似的负载头部的独特数据结构。虽然magic number和plugin id等值存在差异,但是两种结构体都是基于PE header设计的,根据其各自的值将负载映射到内存中。
图 18. Deed RAT 和 BloodAlchemy 的自定义数据结构比较 |
我们还发现了 DLL 和 Shellcode 加载过程之间的相似之处,除了上面的示例之外,我们还在有效负载中发现了许多其他相似之处。
- 进入点后的异常处理
- 为每个插件加载启动函数
- 插件名称
- 插件信息
- 恶意软件配置的结构(加密数据的偏移量)
- 用于持久化的目录名和文件名
图 19. 入口点之后的异常处理比较 |
基于这些比较,我们得出结论,BloodAlchemy 很可能是 Deed RAT 的变种。
总结
在本文中,我们解释了 BloodAlchemy 的分析结果。BloodAlchemy 和 Deed RAT 的起源都是 ShadowPad,鉴于 ShadowPad 曾在众多 APT 活动中被使用,因此特别关注该恶意软件的使用趋势至关重要。
附录
[1]:披露 BLOODALCHEMY 后门 https://www.elastic.co/security-labs/disclosing-the-bloodalchemy-backdoor ↩
[2]:企业网络中的 ShadowPad https://securelist.com/ShadowPad-in-corporate-networks/81432/ ↩
[3]: ShadowPad https://attack.mitre.org/software/S0596/ ↩
[4]:太空海盗:深入了解该组织的非常规技术、新攻击媒介和工具 https://www.ptsecurity.com/ww-en/analytics/pt-esc-threat-intelligence/space-pirates-a-look-into-the-group-s-unconventional-techniques-new-attack-vectors-and-tools/ ↩