概述
Bandook 恶意软件是一种远程访问木马,自 2007 年首次被发现以来一直在不断发展。多年来,它已被不同的威胁行为者用于各种活动。FortiGuard Labs 在去年 10 月发现了一种新的 Bandook 变体,该变体正在通过 PDF 文件分发。此 PDF 文件包含一个缩短的 URL,用于下载受密码保护的 .7z 文件。受害者使用 PDF 文件中的密码提取恶意软件后,恶意软件会将其有效负载注入 msinfo32.exe。在本文中,我们将简要介绍 Bandook 的行为,提供有关此新变体的修改元素的详细信息,并分享其 C2 通信机制的一些示例。
Loader
加载器组件解密资源表中的有效负载,并将其注入 msinfo32.exe。
在注入之前,会创建一个注册表项来控制有效负载的行为。密钥名称是 msinfo32.exe 的 PID,该值包含有效负载的控制代码。使用任何参数执行后,Bandook 会创建一个注册表项,其中包含另一个控制代码,该代码使其有效负载能够建立持久性,然后将有效负载注入 msinfo32.exe 的新进程。有两个注册表项,如图 1 所示。
图 1:Bandook 编写的注册表项
2021 年报告的一个变体需要四个控制代码,并创建了四个资源管理器 .exe 进程,并在一次执行中注入这些进程。这个新变体使用更少的控制代码,并更精确地划分任务。
有效载荷
图 2:有效负载的执行流程
图 2 是有效载荷的概述。注入后,有效负载会初始化注册表、标志、API 等键名称的字符串。在此之后,它使用注入的 msinfo32.exe 的 PID 查找注册表项,然后解码和分析键值以执行控制代码指定的任务。图 3 显示了键值与有效负载行为之间的关系。控制代码的作用与以前的变体相同,但使用字符串而不是数字。
图 3:键值、命令行和有效负载之间的关系
我们在 2023 年 10 月发现的变体有两个额外的控制代码,但其喷油器不会为它们创建注册表。一个要求有效负载加载 fcd.dll,该进程由另一个注入的进程下载并调用 fcd.dll 的 Init 函数。另一种机制建立持久性并执行 Bandook 的副本。
这些未使用的控制代码已从更新的变体中删除 (430b9e91a0936978757eb8c493d06cbd2869f4e332ae00be0b759f2f229ca8ce)。
在剩下的两个控制码中,“ACG”是攻击的主要控制码,而“GUM”则建立了持久化机制。
控制代码
当控制代码为“GUM”时,Bandook 将副本作为“SMC.exe”或“SMC.cpl”拖放到 appdata 文件夹中的 SMC 文件夹,并创建一个注册表项以自动执行副本。有三个注册表项可以运行 SMC.exe。
SoftwareMicrosoftWindowsCurrentVersionRun
Key name: SMC
Value: %APPDATA%SMCSMC.exe
SoftwareMicrosoftWindows NTCurrentVersionWinlogon
Key name: shell
Value: explorer.exe, %APPDATA%SMCSMC.exe
SoftwareMicrosoftWindows NTCurrentVersionWindows
Key name: Load
Value: short path of %APPDATA%SMCSMC.exe
SoftwareMicrosoftWindowsCurrentVersionRun
Key name: SMC
Value: %windir%System32controll.exe %APPDATA%SMCSMC.cpl
ACG控制代码
当控制代码为ACG时,负载可以下载其他模块的文件,包括fcd.dll、pcd.dll、可执行文件等。这是一个可选函数,基于有效负载初始化时设置的标志。必要时,也可以从 C2 服务器下载文件。如果下载了 fcd.dll,Bandook 将调用其函数并将注册表项的键名称作为参数传递。同样,许多注册表项存储其他操作中使用的信息。
一个操作可能分为几个部分,并且有必要将所有相关的命令和注册表项拼凑在一起。例如,C2 通信可以使用一个命令来写入注册表项,并使用一个单独的命令来读取它。
C2 通信
首先,Bandook 将受害者信息发送到其 C2 服务器:
图 4:受害者信息的流量捕获和 AES 解密数据
如果 C2 服务器可用,Bandook 会从服务器接收命令,包括 *DJDSR^、@0001、@0002 等。虽然最新变体中的字符串序列达到 @0155,但有些仅在向服务器发送结果时使用,而另一些则仅存在于其他模块中。如图 5 所示,有效负载不使用命令 @0133,尽管可以在 fcd.dll 中找到它。
图 5:@0133 可以在 fcd.dll 中找到
尽管有编号,但有效载荷仅支持 139 个操作。此外,一些特殊命令仅在特定条件下发送到服务器。由于大多数操作与以前的变体相同,因此我们将使用添加到最新变体中的新命令来关注 Bandook 和 C2 服务器之间的通信。
这些操作大致可分为文件操作、注册表操作、下载、信息窃取、文件执行、从 C2 调用 dll 中的函数、控制受害者的计算机、进程杀死和卸载恶意软件。
来自 C2 服务器的数据采用以下格式:
{Command}~!{Arg2}~!{Arg3}~!{Arg4}~!{Arg5}~!{Arg6}~!
第一个参数是命令,这是必需的。Arg2 到 Arg6 是可选的。
下面是需要多个命令的操作和具有复杂机制的操作的四个示例。
@0003, @0004
此操作与文件读取有关。如果 Arg3 为 R,则它会继续调用 Sleep 函数,直到 C2 服务器将 @0004 及其相关参数发送到 Bandook。@0004 命令给出一个值,用于确定从何处读取文件或不执行任何操作。
最后,Bandook 将 Arg2 指定的文件发送到 C2 服务器。
图 6:Bandook 从服务器接收 @0003 时的流程
@0006, @0007
此操作与文件写入有关。与 @0003 类似,@0006 等待 @0007。@0007 确定如何将数据从 C2 服务器写入本地文件。
图 7:Bandook 从服务器接收 @0007 时的流程。
@0126, @0127, @0128
此操作将执行 Python 文件。主命令是 @0128,它调用 ShellExecute 函数来运行带有参数 Arg2~Arg6 的 Python 文件 {Parent directory}Libdpx.pyc。{Parent directory} 存储在 HKCUSoftware 下的注册表项 pthma 中。@0126 检查 pthma 的值并将结果发送到服务器。@0127 如果 fcd.dll 在受害者的计算机中初始化,则将其 Arg2 写入 pthma。
此外,某些命令会向服务器发送特殊数据:
@0124
此操作监视受害者的屏幕并控制计算机。当Bandook收到此命令时,它会使用有效负载中硬编码的代码覆盖Firefox预.js的配置文件,并禁用Microsoft Edge中的保护机制:
在此之后,Bandook 创建一个虚拟桌面,并将其分配给一个新创建的线程 (Thread_Control),该线程与 C2 服务器建立新的通信。它首先将字符串 AVE_MARIA 发送到服务器,然后向服务器发送另一个包含数字 1 的数据包。
图 8:Bandook 发送的“AVE_MARIA”和号码
如果服务器响应,Bandook 会创建另一个线程以继续向服务器发送屏幕截图。此线程还发送两个数据包:字符串 AVE_MARIA 和数字 0。同时,Thread_Control从服务器接收坐标和控制代码。这些任务包括:
- 打开“运行”对话框
- 将用户数据从 Chrome 复制到另一个文件夹,然后使用新目录和配置打开另一个 Chrome 实例。它使用以下命令来帮助它运行得更快: cmd.exe /c start chrome.exe --no-sandbox --allow-no-sandbox-job --disable-3d-apis --disable-gpu --disable-d3d11 --user-data-dir={新文件夹}
- 将用户数据复制到另一个文件夹,然后使用复制的配置文件打开另一个 Firefox 实例
- 执行 Internet Explorer
- 终止 Microsoft Edge,启用其兼容模式,然后使用新目录和配置打开另一个 Edge 实例。它使用以下命令来帮助它运行得更快:
- C:Program Files (x86)MicrosoftEdgeApplicationmsedge.exe --no-sandbox --allow-no-sandbox-job --disable-3d-apis --disable-gpu --disable-d3d11 --user-data-dir={新文件夹}
- 访问指定窗口
此外,与 2021 年变体相比,还有三个新命令:
@0138
这会将加密的备份 URL 写入 HKCUSoftwareAkZhAyV0 下的注册表项 kPYXM。当当前 C2 服务器不可用时,Bandook 将对其进行解密并尝试访问 URL。解密数据的格式如下所示:
{URL}|{URL}|{URL}|
Bandook 将提取 URL,如果之前的 URL 不可用,则按顺序尝试这些 URL。
@0139
此命令要求 Bandook 解析来自 C2 指定的浏览器(包括 Chrome、Edge 和 Firefox)的 cookie,并将结果保存为 .zip 文件中的 Default.json。
@0140
在之前的变体中,缺少@0140。此命令要求 Bandook 使用 sub_13160400 建立持久性机制,当控制代码为 GUM 时也称为持久性机制,如图 9 所示。
图 9:新变体在控制代码和命令中使用相同的功能
结论
本文揭示了有关这种长期存在的恶意软件的 C2 机制及其最新变体中的新功能的新细节。在此恶意软件中可以找到大量用于 C2 通信的命令。但是,其有效负载执行的任务少于命令中的数量。这是因为多个命令用于单个操作,有些命令调用其他模块中的函数,有些命令仅用于响应服务器。
IOC
IP
77[.]91[.]100[.]237
45[.]67[.]34[.]219
MD5
8904ce99827280e447cb19cf226f814b24b0b4eec18dd758e7fb93476b7bf8b8
d3e7b5be903eb9a596b9b2b78e5dd28390c6aadb8bdd4ea1ba3d896d99fa0057
3169171e671315e18949b2ff334db83f81a3962b8389253561c813f01974670b
e87c338d926cc32c966fce2e968cf6a20c088dc6aedf0467224725ce36c9a525
2e7998a8df9491dad978dee76c63cb1493945b9cf198d856a395ba0fae5c265a
430b9e91a0936978757eb8c493d06cbd2869f4e332ae00be0b759f2f229ca8ce
cd78f0f4869d986cf129a6c108264a3517dbcf16ecfc7c88ff3654a6c9be2bca
参考链接:https://www.fortinet.com/blog/threat-research/bandook-persistent-threat-that-keeps-evolving
图片来源网络目标可联系删除