对Bandook恶意软件新变体的一次分析
概述
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
图片来源网络目标可联系删除