Xloader 是一个接棒 Formbook 的、旨在信息窃密的恶意软件。自从 2016 年来,Formbook 就一直通过黑客论坛进行贩售。2020 年 10 月,Formbook 正式升级为 Xloader,引入了一些重大的功能改进,尤其是 C&C 加密通信。

在 Formbook 时代,攻击者随恶意软件一同出售的还有控制面板。2017 年,Formbook 控制面板的源代码被泄露后,攻击者就转向了不同的商业模式。在 Xloader 时代,攻击者不再出售全套基础设施,而是出租给用户。

Xloader 的主要功能包括:

  • 通过浏览器或其他应用程序窃取凭据

  • 记录用户击键

  • 屏幕截图

  • 下载并执行其他二进制文件

  • 远程命令执行

Xloader 是跨平台的,支持 Windows 与 MacOS,本文针对 Windows 平台的 Xloader 开展分析。

技术分析

Xloader 和 Formbook 都使用 HTTP 与 C&C 服务器通信。在利用 GET 请求进行“注册”后,发起 POST 请求传输屏幕截图、窃取信息等。GET 和 POST 请求中的数据都被加密,如下所示:

C&C 通信

C&C 服务器

Xloader 样本中包含多种结构的加密数据和混淆分析的代码块,这些代码块通过汇编指令构造函数序言 push ebpmov ebp, esp 混淆反汇编程序和分析人员。

PUSHEBP 代码块

这些结构被分析人员称为 PUSHEBP 代码块,且使用基于 RC4+编码+自定义虚拟机进行加密保护。

其中一个 PUSHEBP 代码块包含加密字符串和虚假 C&C 列表,提供的 C&C 域名都是合法域名,攻击者通过这样的手段来误导恶意软件研究人员和自动恶意软件分析系统。真正的 C&C 服务器地址存储在另一处,并且使用更为复杂的方案进行加密,解密真实 C&C 服务器的代码如下所示:

解密代码

RC4_based_Decryptor 函数由 RC4 加密算法(0x14 字节密钥)和另外两层编码组成,如下所示:

    def decrypt_PUSHEBP_encrypted_function_block(self, rc4_key, encdata): encdata = self.decrypt_PUSHEBP_backward_forward_sub_layers(encdata) encdata = self.rc4(encdata, rc4_key) encdata = self.decrypt_PUSHEBP_backward_forward_sub_layers(encdata)return encdata

    编码就是简单的减法运算:

      def decrypt_PUSHEBP_backward_forward_sub_layers(self, encdata): encdata = list(encdata) lencdata = len(encdata)

      p1 = lencdata -2 counter = lencdata -1while True: encdata[p1] =chr(0xff&(ord(encdata[p1]) -ord(encdata[p1 +1]))) p1 -=1 counter -=1 if not counter: break p1 =0 counter = lencdata -1while True: encdata[p1] =chr(0xff&(ord(encdata[p1]) -ord(encdata[p1 +1]))) p1 +=1 counter -=1ifnot counter:breakreturn"".join(encdata)

      VM_Decryptor 函数实现了自定义虚拟机,以下代码为 Xloader 解密真实 C&C 服务器的步骤:

        # 获取加密字符串b1 = GetPUSHEBPBlock(1)enc_strings_block = VM_Decryptor(b1)

        # 获取 RC4 Key1b8 = GetPUSHEBPBlock(8)key_rc4_1 = VM_Decryptor(b8)

        # 获取 RC4 Key2b2 = GetPUSHEBPBlock(2)key_rc4_2 = VM_Decryptor(b2)

        # 获取加密数据块b11 = GetPUSHEBPBlock(11)enc_real_c2 = VM_Decryptor(b11)

        # 第一层解密enc_real_c2 = RC4_based_Decryptor(enc_real_c2, SHA1(enc_strings_block))

        # 第二层解密enc_real_c2 = RC4_based_Decryptor(enc_real_c2, key_rc4_1)dec_real_c2 = RC4_based_Decryptor(enc_real_c2, key_rc4_2)

        # 验证是否正确b_ok = is_www(dec_real_c2)

        解密后,C&C 服务器 URL 的格式类似于 www.domain.tld/botnet_id/

        C&C 通信会同时向虚假服务器和真实服务器发送,备用的 C&C 服务器可能隐藏在虚假服务器列表中,作为主 C&C 服务器被封堵的备用信道。

        FormBook 加密通信

        在 FormBook 中,加密分为四步:

          ① 使用真实的 C&C 域名和路径,通过 Reverse_DWORDs(SHA1(//)) 计算 RC4 加密密钥② 使用加密密钥加密数据③ 将加密后的数据进行 base64 编码④ 进行字符替换后再发送 POST 请求

          原始字符替换字符
          +-
          /_
          =.
          +~
          /(
          =)
          +空格

          在已知 C&C 域名和路径的情况下,FormBook 的 C&C 加密通信可以轻松解密。

          Xloader 加密通信

          Xloader 的加密通信更为复杂,增加了一层 RC4 加密。导出加密密钥如下所示:

          ① Xloader 首先计算 Key0Comm 密钥

          Key0Comm 密钥生成

          如上所示,PUSHEBP 7 使用 Xloader VM 进行解密。解密后,前 0x14 个字节用作 RC4 密钥,最后一个字节用于根据 switch 语句选择另一个 PUSHEBP 代码块。导出的参数 Key0Comm 为:

            Key0Comm = RC4_based_Decryptor(decPushebpBlock7Key[:0x14], decSwitchBasedPushebpBlock)

            但 PUSHEBP 代码块的顺序、Switch 语句的对应关系在不同的样本中是不相同的。这意味着,这段函数的代码是随机的。下图显示了两个不同的样本的差异:

            样本比较

            Switch 语句映射关系

            ② 接下来,使用与 FormBook 相同的算法计算 Key1Comm 密钥:Key1Comm = Reverse_DWORDs(SHA1(//))

            ③ 最后,使用 Xlader 自定义的算法计算 Key2Comm 密钥:Key2Comm = RC4based_Decryptor(Key0Comm, Key1Comm)

            得到这三个 RC4 密钥,就可以解密 Xloader 的 C&C 加密通信。Xloader 通过 Key2Comm 和 Key1Comm 密钥使用两层标准 RC4 加密算法对数据包进行加密:

              Key0Comm = <…from>

              c2 ="www.pc6888.com"c2path ="htbn"

              get1="xPeDUfwp=X/0PTsm65bsB0xA5p5tU+UuBoyxUJvYd1eRdC0qFrd+bv9rqN9yTTECZJTYp88Jb6QhjuA=="

              Key1Comm = Reverse_DWORDs(SHA1(f"{c2}/{path}/"))fake_var, encrypted_params = get1.split("=", 1)sdec0 = b64_trans(encrypted_params)sdec1 = base64.b64decode(sdec0)Key2Comm = RC4_based_Decryptor(Key0Comm, Key1Comm)sdec2 = rc4(sdec1, Key2Comm) # 标准 RC4 加密层sdec3 = rc4(sdec2, Key1Comm)print(sdec3)

              当然,Xloader 也会使用 base64 编码与字符替换。

              结论

              Xloader 是一个非常成熟的恶意软件家族,攻击者加入了非常多误导研究人员或阻碍分析的技术,如多层加密和自定义虚拟机等。攻击者虽然已经转向 Xloader,但仍然有攻击者使用泄露的控制面板控制 FormBook 发起攻击。

              IOC

                c60a64f8910005f98f6cd8c5787e4fe8c6580751a43bdbbd6a14af1ef6999b8f2c78fa1d90fe76c14f0a642af43c560875054e342bbb144aa9ff8f0fdbb0670ff3c3c0c49c037e7efa2fbef61995c1dc97cfe2887281ba4b687bdd6aa0a44e0aefd1897cf1232815bb1f1fbe8496804186d7c48c6bfa05b2dea6bd3bb0b67ed0http://www.finetipster.com/pvxz/http://www.go2payme.com/snec/http://www.pochi-owarai.com/hr8n/http://www.hosotructiep.online/bsz6/

                声明:本文来自威胁棱镜,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。