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 服务器。代理工具、隧道器和重定向器通常在入侵期间使用,以隐藏入侵的责任人。这些工具为对手提供了各种功能,包括绕过内部网络控制、提供终端接口、加密功能以及文件传输选项的能力。
在初始访问之后,攻击者横向移动,并将 BITSLOTH 以 DLL 的形式 (flengine.dll
) 放置在 ProgramData 目录中。然后,攻击者执行了音乐制作程序 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
组件。开发人员在每个样本中嵌入 C2 服务器的 IP/端口,并使用前置字符串 (rrrr_url
)。此字符串充当识别内存中运行的 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 服务
- 通过 EnumWindows 和回调函数枚举所有顶级 Windows
- 通过 Windows 实用程序(如
systeminfo
和msinfo32
)检索系统信息
在许多处理程序中,区域设置版本配置为 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 能够根据操作员提供的参数截取屏幕截图。此函数的输入使用分隔符(||
),其中操作员提供捕获间隔的秒数和捕获计数。图像存储为 BMP 文件,硬编码名称为 ciakfjoab
,并使用 .ZIP
存档通过 DEFLATE 算法进行压缩。然后,这些带有时间戳的压缩存档将发送到 C2 服务器。
该处理程序利用常见的屏幕截图 API,如 Gdi32.dll
中的 CreateCompatibleBitmap 和 BitBlt。
对于记录击键,BITSLOTH 通过使用 GetAsyncKeyState/GetKeyState 监视按键来使用传统技术。该处理程序有一个参数,用于指定执行键盘记录的秒数。此数据也压缩在 .ZIP
文件中,并发送到 C2 服务器。
执行/维护
BITSLOTH 在维护和文件执行方面具有多种能力,以及标准的后门功能,例如
- 通过 ShellExecuteW 单独执行文件的能力
- Windows 终端功能,可以通过管道执行命令和读取数据
- 创建目录、执行重启、关闭计算机、终止进程
- 在 C2 服务器之间执行文件上传和下载
- 修改 BITSLOTH 配置,例如通信模式、更新 C2 URL、关闭键盘记录/屏幕截图功能
BITSLOTH 支点
BITSLOTH 似乎正在被积极部署。我们发现了另一个 BITSLOTH C2 服务器(15.235.132[.]67
),它使用相同的端口(8443
)和我们入侵中使用的相同的SSL 证书。
虽然尚不清楚谁是 BITSLOTH 背后的主使,但在 2021 年 12 月 12 日发生了大量的 VirusTotal 上传活动。在 24 小时内,一个提交者(1fcc35ea
)上传了大约 67 个文件,我们怀疑与该项目相关的人员正在验证检测结果、进行修改并将不同版本的 BITSLOTH 上传到 VirusTotal。其中一个样本使用 VMProtect 打包,其他一些样本的功能被剥离,还有一些上传的是调试版本等等。
从那时起已经过去很长时间了,但看到这个恶意软件家族最近出现在一次入侵事件中,还是很有意思的。不管这个恶意软件背后的目标是什么,这个家族在这么多年里一直没有被发现,令人惊讶。
参考 8747,通过 MITRE ATT&CK
Elastic 使用 MITRE ATT&CK 框架来记录高级持续性威胁针对企业网络使用的常见战术、技术和规程。
[h4] 战术 战术代表了技术或子技术背后的原因。它是攻击者的战术目标:执行动作的原因。
技术
技术代表了攻击者如何通过执行动作来实现战术目标。
检测 REF8747
检测
在分析此入侵集的过程中观察到以下检测规则和行为预防事件
YARA 签名
- Windows.Hacktool.Mimikatz
- Windows.Trojan.BITSloth
- Windows.Hacktool.Iox
- Windows.Hacktool.Rubeus
- Windows.Hacktool.Certify
- Windows.Hacktool.RingQ
- Windows.Hacktool.GodPotato
- Multi.Hacktool.Stowaway
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 包提供。
本研究讨论了以下可观察对象。
可观察对象 | 类型 | 名称 | 参考 |
---|---|---|---|
4a4356faad620bf12ff53bcfac62e12eb67783bd22e66bf00a19a4c404bf45df | SHA-256 | s.dll | BITSLOTH |
dfb76bcf5a3e29225559ebbdae8bdd24f69262492eca2f99f7a9525628006d88 | SHA-256 | 125.exe | BITSLOTH |
4fb6dd11e723209d12b2d503a9fcf94d8fed6084aceca390ac0b7e7da1874f50 | SHA-256 | setup_wm.exe | BITSLOTH |
0944b17a4330e1c97600f62717d6bae7e4a4260604043f2390a14c8d76ef1507 | SHA-256 | 1242.exe | BITSLOTH |
0f9c0d9b77678d7360e492e00a7fa00af9b78331dc926b0747b07299b4e64afd | SHA-256 | setup_wm.exe | BITSLOTH (VMProtect) |
216.238.121[.]132 | ipv4-addr | BITSLOTH C2 服务器 | |
45.116.13[.]178 | ipv4-addr | BITSLOTH C2 服务器 | |
15.235.132[.]67 | ipv4-addr | BITSLOTH C2 服务器 | |
http ://updater.microsoft.com/index.aspx | BITSLOTH 文件指示器 | ||
updater.microsoft.com | BITSLOTH 文件指示器 |
参考
以下内容在上述研究中被引用
- https://github.com/SafeBreach-Labs/SimpleBITSServer/tree/master
- https://github.com/T4y1oR/RingQ
- https://github.com/EddieIvan01/iox
- https://github.com/ph4ntonn/Stowaway/
关于 Elastic Security Labs
Elastic Security Labs 是 Elastic Security 的威胁情报部门,致力于在威胁领域创造积极的改变。Elastic Security Labs 提供关于新兴威胁的公开研究,分析战略、运营和战术上的攻击者目标,然后将该研究与 Elastic Security 的内置检测和响应能力相结合。
在 Twitter 上关注 Elastic Security Labs @elasticseclabs,并在 www.elastic.co/security-labs/ 上查看我们的研究。