Xloader 是一种信息窃取恶意软件,是 Formbook 的迭代版本,自 2016 年初以来一直在黑客论坛上被出售。2020 年 10 月,Formbook 更名为 Xloader,并进行了一些重大改进,特别是与命令和控制(C2)网络加密相关的改进。随着Xloader的到来,恶意软件的开发者也停止了出售面板的代码和恶意软件的可执行文件。当出售Formbook时,一个基于web的命令和控制(C2)面板被提供给客户,以便他们可以自行管理自己的僵尸网络。 2017 年,Formbook 的面板源被泄露,随后,Xloader 背后的攻击者转向了不同的商业模式。Xloader C2基础设施不是传播一个功能齐全的犯罪软件套件,而是出租给客户。这种“恶意软件即服务”(MaaS)的商业模式可能更有利可图,并使窃取变得更加困难。
Xloader的功能包括:
从网络浏览器和其他应用程序窃取凭证;
捕获按键信息;
截屏;
窃取存储的密码;
下载并执行其他二进制文件;
执行命令;
之前的文章已经分析了 Formbook 和 Xloader 混淆的各个方面。在这篇文章中,我们对 Xloader 的 C2 网络加密和通信协议进行了详细的分析。请注意,Xloader 是跨平台的,能够在 Microsoft Windows 和 MacOS 上运行。此分析专门针对 Windows 版本的 Xloader。
技术分析
Xloader 和 Formbook 使用 HTTP 与 C2 服务器通信。 HTTP GET 查询作为一种注册形式发送。之后,恶意软件向 C2 发出 HTTP POST 请求,以窃取屏幕截图、被盗数据等信息。在这两种情况下,GET 参数和 POST 数据共享相似的格式并被加密,如下图所示,我们将解释以下部分中的加密算法。
Xloader C2 通信捕获
诱饵和真实的C2服务器
在整个Xloader恶意软件有多个结构的加密块的数据和代码,这些块旨在通过使用函数序言 push ebp 和 mov ebp, esp 的汇编指令来混淆恶意软件分析人员和反汇编程序,如下图所示。我们将这些结构命名为 PUSHEBP 加密块。这些块使用基于 RC4 的算法结合编码层和自定义虚拟机 (VM) 进行解密。
Xloader PUSHEBP 加密块
其中一个 PUSHEBP 块包含加密字符串和诱饵 C2 列表,这些诱饵是合法域,被添加以误导恶意软件研究人员和自动恶意软件分析系统。真正的 C2 服务器是单独存储的,并使用另一种更复杂的方案进行加密。负责解密真实 C2 服务器的伪代码如下图所示。
Xloader C2 解密算法
在上图中,RC4_based_Decryptor 函数由 RC4 加密(使用 0x14 字节密钥)和另外两个编码层组成,如下所示:
附加的编码层由简单的减法运算组成:
VM_Decryptor 函数是 Xloader 使用的另一种算法,它实现了一个自定义虚拟机 (VM)。下面的Python代码行重现了Xloader为解密真实的C2而执行的步骤。
解密后,C2 URL 的格式类似于 www.domain.tld/botnet_id/
C2通信发生在诱饵域和真实的C2服务器上,包括发送从受害者那里窃取的数据。因此,有一种可能,备份C2可以隐藏在诱饵C2域中,并在主C2域被删除时用作备用通信通道。
Formbook 通信加密
在FormBook中,HTTP GET参数(和POST数据)是通过四个步骤加密的:
1.使用真实 C2 的域和路径,通过以下方式计算 RC4 密钥:Reverse_DWORDs(SHA1(
2.结果被用作 一个RC4 密钥来加密数据;
3.数据经过 RC4 加密后,还会使用 Base64 进行额外编码;
4.通过 HTTP POST 请求发送的数据使用表 1 中所示的字符替换进行格式化。
Formbook C2 字符替换
因此,Formbook C2通信可以很容易地通过逆向过程解密,因为C2域和路径是已知的。
Xloader 通信加密的具体细节
XLoader 中的网络加密更为复杂,该过程中添加了一个额外的 RC4 层,其中包含一个复杂的算法,该算法使用以下步骤来推导加密密钥:
1.为了加密HTTP网络数据,Xloader首先计算一个我们称之为Key0Comm的密钥,如下图所示。
Xloader KeyComm0 推导
正如我们在上图中看到的,PUSHEBP 块 7 是使用 Xloader VM 解密的。一旦解密,这个块的长度为0x15字节。第一个0x14字节用作RC4密钥,最后一个字节用于根据switch语句选择并解密另一个PUSHEBP块(在4、5、6、8、9和10块中)。因此导出的参数 Key0Comm 如下:
Key0Comm = RC4_based_Decryptor(decPushebpBlock7Key[:0x14], decSwitchBasedPushebpBlock)
然而,即使在相同版本的Xloader上,PUSHEBP 块的顺序以及开关和块编号之间的关联也会从一个样本更改为另一个样本(即此函数的代码是随机的)。下图显示了此函数在两个不同 Xloader v2.5 示例之间的比较。
Xloader KeyComm0函数映射到一个块
下图显示了这些 switch 语句如何映射到这些示例中的不同块 ID。
Xloader 块 ID 映射示例
为了对 C2 通信执行加密,必须知道映射这些块的特定样本表,以导出加密密钥 Key0Comm。
2.接下来,使用与Formbook相同的算法计算我们称为Key1Comm的另一个密钥:Key1Comm = Reverse_DWORDs(SHA1(
3.最后,我们需要计算最后一个密钥,使用 Xloader 自定义的基于 RC4 的解密算法如下:
Key2Comm = RC4based_Decryptor(Key0Comm, Key1Comm)
拥有所有这三个 RC4 密钥,我们可以加密和解密 Xloader C2 通信。 使用拥有两层标准 RC4的密钥 Key2Comm 和 Key1Comm 对数据包进行加密,如下所示:
Xloader 还进一步应用了前面描述的用于 POST 查询的 Base64 和字符替换
总结
Xloader 是一个成熟的恶意软件家族,拥有许多误导研究人员和阻碍恶意软件分析的技术,包括多层加密和自定义虚拟机。尽管开发者放弃了 Formbook 分支以专注于重新命名的 Xloader,但这两种恶意软件今天仍然非常活跃。Formbook仍然被使用泄露的面板源代码和自我管理 C2 的攻击者使用,而原始开发者继续将 Xloader 作为 MaaS 出售,支持和租用服务器基础设施。毫不奇怪,它一直是近年来最活跃的威胁之一。
本文翻译自:https://www.zscaler.com/blogs/security-research/analysis-xloaders-c2-network-encryption如若转载,请注明原文地址