Seth GoodwinDaniel Stepanic

位与字节:分析新发现的后门程序 BITSLOTH

Elastic 安全实验室发现了一个新颖的 Windows 后门程序,它利用后台智能传输服务 (BITS) 进行 C2 通信。在最近一次追踪为 REF8747 的活动组的活动中发现了此恶意软件。

阅读时长 19 分钟恶意软件分析
BITS and Bytes: Analyzing BITSLOTH, a newly identified backdoor

BITSLOTH 概览

BITSLOTH 是一种新发现的 Windows 后门程序,它利用后台智能传输服务 (BITS) 作为其命令和控制机制。BITSLOTH 在今年夏季初拉丁美洲地区的入侵事件中被发现。据我们所知,此恶意软件尚未公开记录,虽然尚不清楚幕后黑手是谁,但根据 VirusTotal 上上传的不同版本的跟踪情况来看,该恶意软件已经开发了数年。

截至本文发布之时,后门程序的最新版本拥有 35 个处理程序函数,包括键盘记录和屏幕截图功能。此外,BITSLOTH 还包含许多用于发现、枚举和命令行执行的不同功能。根据这些功能,我们评估此工具旨在从受害者收集数据。

关键要点

  • BITSLOTH 是一种新发现的 Windows 后门程序
  • BITSLOTH 使用内置的 Microsoft 功能,即后台智能传输服务 (BITS) 进行命令和控制通信
  • BITSLOTH 拥有众多命令处理程序,用于发现/枚举、执行和收集目的
  • 该后门程序包含日志记录功能和字符串,与作者为母语为中文的人员一致

发现

我们的团队在 6 月 25 日的 REF8747 事件中观察到 BITSLOTH 安装在一个服务器环境中,这是一个针对南美某国外交部的入侵事件。入侵事件可追溯到受感染端点上的 PSEXEC 执行。攻击者在大多数操作中使用了大量公开可用的工具,除了 BITSLOTH 之外。

其中一种主要的执行机制是通过一个名为 RINGQ 的 shellcode 加载项目。与 DONUTLOADER 类似,RINGQ 将转换任何 Windows 可执行文件并生成自定义 shellcode,将其放入一个文件 (main.txt) 中。此 shellcode 将在内存中解密并执行。此技术用于绕过依赖于哈希黑名单或某些反恶意软件产品中静态签名的防御措施。

我们观察到 RINGQ 被用来加载 IOX 端口转发器。注意:下图中的密钥是“whoami”的十六进制转换。

此外,攻击者还使用了 STOWAWAY 实用程序通过 HTTP 将加密流量代理到他们的 C2 服务器。代理工具、隧道程序和重定向程序在入侵过程中通常用于隐藏负责入侵的对手。这些工具为对手提供了各种功能,包括绕过内部网络控制、提供终端界面、加密功能以及文件传输选项。

在获得初始访问权限后,攻击者横向移动并在 ProgramData 目录中以 DLL 的形式放置了 BITSLOTH (flengine.dll)。然后,攻击者执行了音乐制作程序 FL Studio (fl.exe)。根据观察到的与自注入警报相关的调用堆栈,我们确认威胁参与者使用了使用签名版本的 FL Studio 的传统旁加载技术。

  c:\windows\syswow64\ntdll.dll!0x770841AC
  c:\windows\syswow64\ntdll.dll!0x7709D287
  c:\windows\syswow64\kernelbase.dll!0x76ED435F
  c:\windows\syswow64\kernelbase.dll!0x76ED42EF
  Unbacked!0x14EAB23
  Unbacked!0x14EA8B6
  c:\programdata\pl studio\flengine.dll!0x74AD2F2E
  c:\programdata\pl studio\fl.exe!0xDB3985
  c:\programdata\pl studio\fl.exe!0xDB3E5E
  c:\programdata\pl studio\fl.exe!0xDB4D3F
  c:\windows\syswow64\kernel32.dll!0x76B267F9
  c:\windows\syswow64\ntdll.dll!0x77077F4D
  c:\windows\syswow64\ntdll.dll!0x77077F1B

此调用堆栈与进程注入警报一起生成,并使研究人员能够提取一个设置了读/写/执行 (RWX) 页面保护的内存中 DLL。

BITSLOTH 概述

在我们的分析过程中,我们发现了几个较旧的 BITSLOTH 样本,这些样本展示了自 2021 年 12 月以来的开发记录。在此项目中,恶意软件开发人员选择了值得注意的术语——将 BITSLOTH 称为 Slaver 组件,并将命令和控制服务器称为 Master 组件。以下是与 BITSLOTH 链接的其中一个 PDB 文件路径的示例,它描述了这一点

BITSLOTH 没有对控制流进行任何混淆,也没有任何类型的字符串加密。

较旧和较新的样本都包含用于日志记录和调试目的的字符串。例如,在启动时,在只读部分 (.rdata) 中引用了一个字符串。

此简体中文宽字符字符串翻译为:注意:已经有程序正在运行,请勿再次运行…

BITSLOTH 中包含的这些小片段有助于阐明功能的开发和优先级,以及看起来像是操作员指令的内容。在最新版本中,开发人员添加了一个新的计划组件来控制 BITSLOTH 应该在受害者环境中运行的具体时间。这是我们在其他现代恶意软件家族(例如 EAGERBEE)中观察到的一个功能。

BITSLOTH 代码分析

BITSLOTH 是一款具有多种不同功能的后门程序,包括

  • 运行和执行命令
  • 上传和下载文件
  • 执行枚举和发现
  • 通过键盘记录和屏幕截图收集敏感数据

互斥体

BITSLOTH 在每个样本中使用硬编码的互斥体 (Global\d5ffff77ff77adad657658) 以确保一次只运行一个实例。

通信

BITSLOTH 采用了传统的客户端/服务器架构,开发人员将客户端称为 Slaver 组件,并将命令和控制服务器 (C2) 称为 Master 组件。开发人员在每个样本中使用前置字符串 (rrrr_url) 嵌入 C2 服务器的 IP/端口。此字符串本身充当识别 C2 配置的密钥,在内存中运行时使用,在更新 C2 服务器时使用。

以下是我们团队观察到的几个样本中的配置,威胁参与者配置了内部和外部 IP 范围。

rrrr_url216.238.121[.]132:8443
rrrr_url192.168.1[.]125:8443 
rrrr_url192.168.1[.]124:8443
rrrr_url45.116.13[.]178:443

BITSLOTH 的一个主要特征是使用 后台智能传输服务 (BITS) 进行 C2 通信。虽然此功能旨在促进两台机器之间文件的网络传输,但它已被 滥用 于多个国家支持的组织,并且仍在针对组织进行隐蔽操作。这种媒介对对手很有吸引力,因为许多组织仍然难以监控 BITS 网络流量并检测异常 BITS 作业。

Windows 具有一个称为后台智能传输服务 (BITS) 的系统管理功能,它可以启用将文件下载和上传到 HTTP Web 服务器或 SMB 共享。BITS 服务在文件传输过程中使用多个功能,例如暂停/恢复传输、处理网络中断等功能。BITS 流量通常与软件更新相关联,因此被错误地认为是可信的。许多组织缺乏对 BITS 网络流量的可见性,使其成为一个有吸引力的目标。

BITS API 通过 Windows 的 组件对象模型 (COM) 使用 IBackgroundCopyManager 接口 公开。此接口提供了创建新作业、枚举传输队列中现有作业以及从传输队列访问特定作业的功能。

初始化后,BITSLOTH 会取消受害者计算机上与以下显示名称匹配的任何现有 BITS 作业

  • WU 客户端下载
  • WU 客户端上传
  • WU 客户端上传 R

开发人员使用这些名称进行融合,并将不同的 BITS 传输作业与其各自的 BITS 作业类型 关联起来。通过取消任何现有作业,这允许恶意软件的执行从干净状态开始运行。

以下是与 BITS 作业类型匹配的 Microsoft 定义

  • BG_JOB_TYPE_DOWNLOAD - 指定作业将文件下载到客户端。
  • BG_JOB_TYPE_UPLOAD - 指定作业将文件上传到服务器。
  • BG_JOB_TYPE_UPLOAD_REPLY - 指定作业将文件上传到服务器,并从服务器应用程序接收回复文件。

取消任何现有作业后,会检索 MAC 地址和操作系统信息并将其放入全局变量中。创建一个新的线程,配置自动启动功能。在此线程中,使用名称 (Microsoft Windows) 创建一个新的 BITS 下载作业。

此下载作业将目标 URL 设置为 http://updater.microsoft[.]com/index.aspx。虽然此域名不可路由,但 BITSLOTH 使用一个看似良性的域名作为掩护来伪装此 BITS 作业,然后使用 **SetNotifyCmdLine** 在传输状态更改时执行恶意软件。

有趣的是,这个独特的工具标记使我们能够转向其他样本,这些样本表明该家族已经存在几年了。

此时,恶意软件已通过名为 Microsoft Windows 的 BITS 作业配置了持久性。以下是此作业配置的屏幕截图,显示通知命令行设置为 BITSLOTH 位置 (C:\ProgramData\Media\setup_wm.exe)

一旦 BITSLOTH 激活,它将开始使用 WU Client Download 作业向 C2 服务器请求指令。此请求 URL 是通过将 MAC 地址与硬编码字符串 (wu.htm) 组合生成的。以下是一个 URL 示例

https://192.168.182.130/00-0C-29-0E-29-87/wu.htm

响应此请求,恶意软件将从 C2 服务器接收一个 12 字节的结构,其中包含作业的唯一 ID、处理程序的命令 ID 和响应令牌。在这些文件传输交换过程中,受害者机器上的临时文件用作占位符来保存来回传输的数据,BITSLOTH 使用以字符 (wm) 开头并附加随机字符的文件名。

命令功能

BITSLOTH 使用一个包含 35 个函数的命令处理程序来处理应在受害者机器上采取的特定操作。恶意软件可以选择配置为 HTTP 或 HTTPS,并使用硬编码的单字节 XOR (0x2) 来混淆来自 C2 服务器的传入指令。包含收集到的受害者数据的传出请求本身没有额外的保护,并以明文发送。

为了快速行动,我们的团队利用了 SafeBreach Labs 发布的 BITS 服务器的有用 Python 实现。通过将 C2 IP 设置为虚拟机内的环回地址,这使我们能够深入了解网络流量。

所有处理程序都以类似的方式执行主要功能,然后将从处理程序返回的数据写入本地临时文件。然后,这些临时文件映射到名为 WU Client Upload 的 BITS 上传作业。每个处理程序都使用自己的字符串格式来创建唯一的目标 URL。URL 末尾的每个文件名都使用单个字母来表示从主机收集的数据类型,例如 P.bin 表示进程或 S.bin 表示服务。

http://192.168.182.130/00-0C-29-0E-29-87/IF/P.bin

以下是一个屏幕截图示例,显示了进程枚举处理程序的字符串格式以及如何将此数据链接到 BITS 上传作业。

还可以通过直接查看 BITS 上传作业来观察与泄露数据的链接。在下面的屏幕截图中,我们可以看到上传的目标 URL(C2 服务器)和与作业链接的临时文件 (wm9F0C.tmp)。

如果查看临时文件,我们可以看到从受害者主机收集的进程信息。

创建上传作业后不久,数据就会通过包含捕获数据的 BITS_POST 请求通过网络发送。

命令处理表

命令 ID描述
0通过 **WTSEnumerateProcessesW** 收集正在运行的进程
1通过 **EnumServicesStatusW** 获取 Windows 服务
2通过 systeminfo 命令检索系统信息
3通过 **EnumWindows** 检索所有顶级 Windows
5收集文件列表
6从 C2 服务器下载文件
7将文件上传到 C2 服务器
10终止自身
11将通信模式设置为 HTTPS
12将通信模式设置为 HTTP
13删除持久性
14重新配置持久性
15取消 BITS 下载作业 (WU Client Download)
16删除持久性并删除自身
17线程配置
18处理程序 #2 的副本
19基于文件路径删除文件
20基于文件路径删除文件夹
21使用 stdin/stdout 重定向启动终端 shell
22重置终端处理程序(#21)
23运行 Windows tree 命令
24更新 BITSLOTH,删除旧版本
25通过 **ExitWindowsEx** 关闭机器
26通过 **ExitWindowsEx** 重启机器
27通过 **ExitWindowsEx** 将用户注销出机器
28基于进程标识符 (PID) 终止进程
29通过 msinfo32 命令检索其他信息
30通过 **ShellExecuteW** 执行单个文件
34通过 **CreateDirectoryW** 创建新目录
41将数据上传到 C2 服务器
42通过 **capGetDriverDescriptionW** 检查捕获驱动程序
43拍摄受害者机器桌面的屏幕截图
44记录受害者机器的击键
45停止录制屏幕截图图像
46停止键盘记录功能

后门功能

BITSLOTH 包含广泛的入侵后功能,供攻击者在受害者环境中操作。我们将重点关注更重要的功能,并将它们分组到不同的类别中。

发现/枚举

一部分 BITSLOTH 处理程序专注于从受害者机器检索和枚举数据。这包括

  • 通过 **WTSEnumerateProcessesW** 检索进程信息
  • 通过 **EnumServicesStatusW** 收集 Windows 服务
  • 使用回调函数枚举所有顶级 Windows,通过 **EnumWindows**
  • 通过 Windows 实用程序(如 systeminfomsinfo32)检索系统信息

在许多处理程序中,区域设置版本配置为 chs (简体中文)。

BITSLOTH 有几个自定义枚举函数,用于检索文件列表和执行目录树搜索。文件列表处理程序从操作员处获取自定义参数以定位感兴趣的特定文件夹位置

  • **GET_DESKDOP** → **CSIDL_DESKTOPDIRECTORY**(桌面)
  • **GET_BITBUCKET** -> **CSIDL_BITBUCKET**(回收站)
  • **GET_PERSONAl** -> **CSIDL_MYDOCUMENTS**(我的文档)

BITSLOTH 还可以通过使用 Windows tree 实用程序收集机器上的所有文件的完整目录/文件列表。此处理程序循环遍历每个驱动器字母的字母表,其中数据随后保存在名为 aghzyxklg 的临时文件中。

然后压缩树数据并以 .ZIP 扩展名发送到 C2 服务器。以下是被收集数据的示例。这些数据可以帮助确定敏感文件或提供有关目标环境的更多上下文。

收集

在收集方面,有一些处理程序用于主动收集信息。这些都集中在从桌面上捕获屏幕截图和执行键盘记录功能。

BITSLOTH 实现了一个用于识别捕获录制设备的轻量级函数,这似乎是一种使用 Windows API(**capGetDriverDescriptionW**)检查摄像头的技术。

BITSLOTH 能够根据操作员提供的参数拍摄屏幕截图。此函数的输入使用分隔符 (||),其中操作员提供捕获间隔的秒数和捕获次数。图像以硬编码名称 ciakfjoab 存储为 BMP 文件,并使用 DEFLATE 算法使用 .ZIP 存档进行压缩。然后将这些带时间戳的压缩存档发送到 C2 服务器。

处理程序利用来自 Gdi32.dll 的 **CreateCompatibleBitmap** 和 **BitBlt** 等常用屏幕截图 API。

为了记录击键,BITSLOTH 使用传统技术通过使用 **GetAsyncKeyState**/**GetKeyState** 监控按键。处理程序有一个参数用于执行键盘记录的秒数。此数据也压缩在 .ZIP 文件中并发送到 C2 服务器。

执行/维护

BITSLOTH 具有围绕维护和文件执行的多种功能,以及诸如以下的标准后门功能:

  • 能够通过**ShellExecuteW**独立执行文件
  • Windows 终端功能,用于执行命令并通过管道读取数据
  • 创建目录、执行重启、关闭机器、终止进程
  • 在 C2 服务器之间执行文件上传和下载
  • 修改 BITSLOTH 配置,例如通信模式、更新 C2 URL、关闭键盘记录/截屏功能

BITSLOTH 枢纽

BITSLOTH 似乎正在积极部署。我们使用相同的端口(8443)和相同的SSL 证书(在我们入侵中使用)识别了另一个 BITSLOTH C2 服务器(15.235.132[.]67)。

虽然目前尚不清楚谁在幕后操纵 BITSLOTH,但在 2021 年 12 月 12 日,VirusTotal 上出现了大量的上传活动。在一个提交者(1fcc35ea)的 24 小时内,大约有 67 次上传,我们怀疑与该项目相关的人员正在验证检测、进行修改并将不同版本的 BITSLOTH 上传到 VirusTotal。一个样本使用 VMProtect 打包,其他样本的功能被剥离,一些上传是调试版本,等等。

从那时起已经过去了很长时间,但有趣的是,这个家族在最近的一次入侵中出现了。无论此恶意软件背后的目标是什么,令人惊讶的是,这个家族多年来一直未被发现。

通过 MITRE ATT&CK 参考 8747

Elastic 使用MITRE ATT&CK 框架记录高级持续性威胁针对企业网络使用的常见战术、技术和流程。

[h4] 战术 战术代表技术或子技术的“为什么”。它是对手的战术目标:执行操作的原因。

技术

技术代表对手如何通过执行操作来实现战术目标。

检测 REF8747

检测

在分析此入侵集的过程中,观察到以下检测规则和行为预防事件

YARA 签名

YARA

Elastic Security 创建了 YARA 规则来识别此活动。以下是识别 BITSLOTH 的 YARA 规则

rule Windows_Trojan_BITSLOTH_05fc3a0a {
    meta:
        author = "Elastic Security"
        creation_date = "2024-07-16"
        last_modified = "2024-07-18"
        os = "Windows"
        arch = "x86"
        threat_name = "Windows.Trojan.BITSLOTH"
  	 license = "Elastic License v2"

    strings:
        $str_1 = "/%s/index.htm?RspID=%d" wide fullword
        $str_2 = "/%s/%08x.rpl" wide fullword
        $str_3 = "/%s/wu.htm" wide fullword
        $str_4 = "GET_DESKDOP" wide fullword
        $str_5 = "http://updater.microsoft.com/index.aspx" wide fullword
        $str_6 = "[U] update error..." wide fullword
        $str_7 = "RMC_KERNEL ..." wide fullword
        $seq_global_protocol_check = { 81 3D ?? ?? ?? ?? F9 03 00 00 B9 AC 0F 00 00 0F 46 C1 }
        $seq_exit_windows = { 59 85 C0 0F 84 ?? ?? ?? ?? E9 ?? ?? ?? ?? 6A 02 EB ?? 56 EB }
    condition:
        2 of them
}

观察结果

所有可观察对象也可以以 ECS 和 STIX 格式的组合 zip 包形式下载

本研究中讨论了以下可观察对象。

可观察对象类型名称参考
4a4356faad620bf12ff53bcfac62e12eb67783bd22e66bf00a19a4c404bf45dfSHA-256s.dllBITSLOTH
dfb76bcf5a3e29225559ebbdae8bdd24f69262492eca2f99f7a9525628006d88SHA-256125.exeBITSLOTH
4fb6dd11e723209d12b2d503a9fcf94d8fed6084aceca390ac0b7e7da1874f50SHA-256setup_wm.exeBITSLOTH
0944b17a4330e1c97600f62717d6bae7e4a4260604043f2390a14c8d76ef1507SHA-2561242.exeBITSLOTH
0f9c0d9b77678d7360e492e00a7fa00af9b78331dc926b0747b07299b4e64afdSHA-256setup_wm.exeBITSLOTH (VMProtect)
216.238.121[.]132ipv4-addrBITSLOTH C2 服务器
45.116.13[.]178ipv4-addrBITSLOTH C2 服务器
15.235.132[.]67ipv4-addrBITSLOTH C2 服务器
http ://updater.microsoft.com/index.aspxBITSLOTH 文件指示器
updater.microsoft.comBITSLOTH 文件指示器

参考

以下是在上述研究中参考的内容

关于 Elastic Security Labs

Elastic Security Labs 是 Elastic Security 的威胁情报部门,致力于在威胁环境中创造积极的改变。Elastic Security Labs 发布有关新兴威胁的公开研究,并分析对手的战略、运营和战术目标,然后将这些研究与 Elastic Security 的内置检测和响应功能相集成。

在 Twitter 上关注 Elastic Security Labs @elasticseclabs,并在www.elastic.co/security-labs/查看我们的研究。