BlackSuit利用Java RAT和QEMU技术升级社会工程攻击

本文详细分析了BlackSuit组织如何利用Java远程访问工具(RAT)、QEMU虚拟化技术及云服务进行社会工程攻击,包括恶意代码混淆、动态配置更新和凭证窃取等技术细节,并提供了缓解建议和MITRE ATT&CK技术映射。

BlackSuit 利用社会工程攻击升级技术手段 | Rapid7 博客

执行摘要

自2024年12月下旬以来,与Black Basta勒索软件组织相关的社会工程攻击显著减少。这一间歇期还包括2025年2月泄露的Black Basta聊天日志,表明该组织内部存在冲突。尽管如此,Rapid7观察到持续的社会工程攻击。现有证据表明,BlackSuit附属组织要么采纳了Black Basta的策略,要么吸收了该组织的成员。一个先前识别的Java恶意软件家族的开发者(在社会工程攻击期间分发)现已被评估为可能的初始访问经纪人,可能为Black Basta和/或FIN7附属组织提供了历史访问权限。

图1. Rapid7观察到的确认恶意聊天请求(2月12日至5月7日)。

概述

攻击的第一阶段保持不变。操作员会向目标用户发送大量电子邮件,每小时可达数千封。这通常是通过将目标用户的电子邮件一次性注册到许多不同的公开邮件列表中来完成的,从而在每个服务发送欢迎邮件时有效地创建拒绝服务攻击。这种技术通常被称为电子邮件炸弹。

在电子邮件炸弹之后,策略会根据操作员的不同而有所分化,尽管他们最终都会冒充目标组织帮助台成员联系受影响的用户。大多数操作员仍然通过Microsoft Teams使用默认的Azure/Entra租户(即电子邮件帐户以onmicrosoft[.]com结尾)或他们自己的自定义域来执行此步骤。然而,在极少数情况下,操作员(尤其是与BlackSuit相关的操作员)可能会放弃Microsoft Teams,转而使用伪造号码直接呼叫目标用户。这种策略如果成功,可以绕过否则会被记录的云日志记录。首次,Black Basta领导人对该过程的解释也可用于总结该过程,以向新附属组织解释攻击:

图2. Black Basta领导人解释社会工程攻击。带有翻译的其他聊天日志可在Rapid7 GitHub存储库中找到。

如果附属组织能够获得用户的信任,他们仍将主要通过Quick Assist尝试获取用户资产(从而进入企业网络)的访问权限。Quick Assist是一个内置的Windows实用程序,允许用户轻松将远程访问权限授予第三方。该实用程序已被广泛滥用于社会工程攻击,这一趋势仍在继续。特别是BlackSuit附属组织还可能将用户引导至托管虚假Quick Assist登录页面的恶意域,以收集其凭据。

图3. 虚假Quick Assist登录页面,用作凭据收集器。

如果附属组织无法使Quick Assist工作,他们仍会尝试各种其他流行的远程访问工具(例如AnyDesk、ScreenConnect),如果仍然无效,他们可能会直接挂断电话并转向下一个目标。

图4. Black Basta的一名操作员讨论其关于远程访问工具的策略。

Black Basta至少有一个用于此目的的呼叫模板/脚本:

图5. Black Basta操作员使用的呼叫脚本。完整脚本可在Rapid7 GitHub存储库中找到。

快速获得对目标网络的可靠访问仍然是攻击早期的首要任务,通常通过窃取目标用户的凭据来实现。过去,这曾通过例如通过Microsoft Teams发送QR码或下载并执行创建虚假Windows身份验证提示的恶意软件来实现。

图6. Black Basta的一名操作员讨论使用QR码进行凭据收集。

在某些情况下,进行初始呼叫的操作员还可能胁迫目标用户在仍在通话时提供MFA代码。历史上,操作员在建立远程访问后还会尝试窃取VPN配置文件,如果受感染的用户帐户未被修复,这可以允许他们直接验证到网络。

图7. Black Basta的一名操作员讨论使用窃取的凭据直接验证到目标环境的VPN。

在附属组织成功获得访问权限后,他们通常会在受感染系统上传输并执行恶意软件。具体的恶意软件因操作员而异,通常标志着访问权限从呼叫者转移到组织内专门从事他们所谓的“渗透测试”的操作员。为了促进访问,呼叫的操作员通常与“渗透测试员”协调以增加成功的机会。在攻击的这一阶段,呼叫用户的附属组织已经以修复垃圾邮件问题为借口挂断电话,而“渗透测试员”则开始枚举环境。Rapid7观察到常见尝试的AS-REP和Kerberoasting攻击,以及Active Directory证书服务(ADCS)滥用和其他类型的暴力密码攻击。

技术分析

在获得初始访问权限后,下载到受感染系统并执行的后续恶意软件负载因操作员而异。

Java RAT

Rapid7处理的大量社会工程事件导致Java RAT被下载并执行。这一策略首次由Rapid7在2024年10月观察到,并于2024年12月首次报告与负载identity.jar相关。Rapid7观察到的Java RAT的第一个样本仅使用Microsoft OneDrive和可选的代理服务器(例如SOCKS5)进行更直接的C2连接。配置以明文形式留下,并且不包含任何动态更新或加密配置的功能,主要通过PowerShell会话命令仅作为RAT运行。

在过去的6个多月中,Java恶意软件负载的开发继续添加/更改了许多功能。Java恶意软件现在滥用Google和Microsoft提供的基于云的文件托管服务,通过各自的云服务提供商(CSP)服务器代理命令。随着时间的推移,恶意软件开发者已从直接代理连接(即配置选项留空或不存在)转向OneDrive和Google Sheets,最近又转向仅使用Google Drive。RAT的逻辑使用各种类型的垃圾代码、控制流混淆和字符串混淆进行混淆,以试图阻碍分析。

图8. Java RAT中的混淆逻辑,三个简单语句变成数十行和缩进。

Java RAT和其他负载在存档中分发,其链接最常通过pastebin[.]com链接发送给目标用户。在2025年5月的最新案例中,Rapid7观察到存档仍在可能受损的SharePoint实例上公开托管。存档及其中的负载命名以符合初始社会工程诱饵。例如,在最近的事件中,存档名为Email-Focus-Tool.zip,可能有助于在攻击期间防止目标用户怀疑。存档包含一个.jar文件(Java RAT)、包含在子文件夹中的所需JDK依赖项的副本,以及至少一个.lnk文件,旨在使恶意软件易于执行。

图9. 威胁参与者交付的存档内容和一个包含枚举命令输出的log.txt文件。

存档最常在执行前提取到暂存目录C:\ProgramData\。在至少一个案例中,Rapid7还观察到发起攻击的操作员将系统枚举数据输出到同一目录中的纯文本文件,这是Black Basta过去常用的技术。历史上,这是他们在攻击初期分享的信息,以评估网络和他们可能必须处理的防御类型。例如,如上所示,最初访问受感染资产的操作员生成了一个命令提示符,并将ipconfig /all和tasklist命令的输出重定向到文件log.txt。

最新版本的Java RAT能够使用Google Sheets动态更新存储的C2配置,其中包括Google电子表格ID(SSID)、代理服务器IPv4地址、应用程序凭据(OneDrive)和/或服务帐户凭据(Google Drive)。Rapid7观察到至少一个以这种方式使用的Google电子表格已被Google删除,这突出了使用某些云服务作为恶意软件流量代理的潜在不可靠性。

图10. 恶意软件用于动态配置更新的Google电子表格被Google删除。

恶意软件启动时采取的首批操作之一是检查用户注册表中是否存在现有配置,如果尚未存在,则包含在.jar负载中的文件config.json中的副本将被写入那里。Rapid7分析的所有样本均未删除调试消息,只需在控制台窗口中执行.jar文件即可查看,因为所有调试消息都写入stdout。

图11. 通过控制台执行Java RAT后的调试语句输出。

存储配置的注册表值名称和内容均进行base64编码(例如HKCU\SOFTWARE\FENokuuTCyVq\JJSUP0CEcUw9PENaNduhsA==),解码的配置内容使用AES-256-ECB加密。加密密钥源自存储在名为ek(加密密钥)的文件中的16字节字符串种子,该文件包含在.jar存档中。注册表键名(随机字母字符串)是硬编码的,并以类似方式存储在文件r_path(注册表路径)中。恶意软件创建加密密钥种子字符串的SHA256哈希,然后使用SHA256哈希的前32字节作为AES-256-ECB密钥来加密和解密恶意软件的配置。Rapid7分析的每个样本都包含一个唯一的密钥种子,尽管特定样本通常(在相关存档中)分发给多个目标持续一段时间,通常大约几周。

在从注册表、本地资源或更新配置检查和加载配置后,RAT将建立至少一个PowerShell会话。

图12. Java RAT的示例进程树。

PowerShell控制台的stdin和stdout用于处理远程命令。发送到Java RAT的命令通过恶意软件在云驱动器中创建两个特定文件通过各自的CSP代理。文件的名称都包含受感染资产的UUID,该UUID在恶意软件启动时检索。主要通信文件有两个前缀,cf_和rf_,上下文上分别代表创建文件和接收文件。这两个文件对应于PowerShell控制台的标准输出(stdin)和标准输入(stdin)。恶意软件以两种主要方式使用输入文件。如果cf_文件(stdin)以特定命令字符串开头,其后的内容将由恶意软件处理以执行恶意软件开发者实现的功能。

图13. Java RAT使用的if-else命令处理链中的loginform命令逻辑。恶意软件开发者未更新Google Drive的调试语句之一。

否则,内容将作为常规PowerShell命令执行。

图14. if-else链中的默认情况通过PowerShell执行命令字符串。

图15. 同一类中的’execute()‘函数通过jPowerShell将命令字符串作为PowerShell命令执行。

命令 功能
send 从操作员的机器发送文件到受感染机器。
recive 从受感染机器上传文件到相关云驱动器。命令字符串包含开发者的拼写错误。
extract 提取指定的文件存档。
loginform 向用户呈现虚假登录提示。输入的凭据在本地验证,如果正确,则通过云驱动器上传到操作员的机器。用户名必须由操作员指定。
newconfig 用从Google Sheets检索的配置替换现有配置。
checkconfig 使用SSID检查Google Sheets以查看是否有更新可用。
startsocks5 使用python启动Socks5代理隧道。
steal 尝试解密和窃取存储的浏览器数据库信息(例如凭据)。
screen 给定提供的URL,在内存中下载并执行Java类。

表1. Java RAT的命令键。

先前看到的凭据收集负载identity.jar现已集成到Java RAT中,并且不是将输入的凭据写入工作目录中的随机命名文件,而是将其发送到已指定给受感染主机的云驱动器C2文件。此功能由操作员通过云驱动器文件向RAT发送loginform(Java类缩写为“Lf”)命令来执行。在反编译和去混淆模块组成的Java代码后,可以清理、重新编译并作为独立程序执行。这使我们能够看到模块对目标用户的外观相同,包括虚假的“Windows Security”标题。代码审查表明它在其他任何重要方面都没有改变。收集器仍然强制活动窗口置顶,并且不会让用户关闭窗口,除非输入密码或强制终止进程。

图16. Java RAT使用的凭据收集窗口。

由于云服务凭据存储在恶意软件负载中,并且例如Google Drive默认存储每个创建文件的修订历史,因此可以查看发送到每个受感染资产的整个命令历史,包括stdin和stdout。

这提供了威胁参与者在动手操作和执行命令时看到的独特控制台视图。命令日志片段如下所示,识别信息已编辑。一旦访问建立,操作员几乎总是使用dir命令验证用户的名称,然后使用此信息执行loginform命令,因为恶意软件不会自行检索执行用户的名称。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
受感染主机GUID:4C4C4544-0038-4610-8036-B6C04F394733
2025-04-24T16:53:34.038Z: dir c:\users\
2025-04-24T16:54:47.967Z: loginform <用户名> 3
2025-04-24T18:40:36.584Z: net time
2025-04-24T18:42:54.426Z: whoami
2025-04-24T18:43:48.284Z: net user <用户名> /domain
2025-04-24T18:48:35.089Z: hostname
2025-04-24T18:49:57.182Z: net group "Domain Computers" /domain
2025-04-24T18:50:56.578Z: net time
2025-04-24T19:17:14.259Z: ipconfig /all
2025-04-24T19:19:44.442Z: hostname

受感染主机GUID:594045B3-008B-4106-8FF4-B850DF6C76D0
2025-04-24T17:20:09.896Z: dir c:\users\
2025-04-24T17:20:58.179Z: loginform <用户名> 3
2025-04-24T17:36:52.542Z: wmic qfe list brief
2025-04-24T17:40:13.454Z: net time
2025-04-24T17:41:26.860Z: ping -n 2 <域控制器主机名>
2025-04-24T17:49:08.598Z: net group "Domain Computers" /domain > c:\users\public\001.txt

在某些情况下,Rapid7观察到命令日志间隙大约为4到12天,从RAT成功执行且用户凭据被窃取后开始。在某些情况下,在活动停止之前还建立了SSH隧道。这种行为表明威胁参与者可能不打算自己使用访问权限,而是将其出售给另一个专门从事完全破坏网络以实现各种目的(例如数据盗窃、勒索、勒索软件)的组织。Rapid7还观察到访问被用于测试新的恶意软件负载和功能,而不是在目标网络内推进破坏。

Qemu

在Rapid7处理的较少事件中,观察到操作员向用户发送Google Drive链接以下载包含QEMU(快速模拟器)及其依赖项的zip存档,包括自定义的.qcow2(QEMU写时复制版本2)虚拟磁盘映像。该映像包含一个Windows 7 Ultimate虚拟机(VM),配置为自动登录并执行启动ScreenConnect安装程序的RunOnce注册表键。在大多数情况下,虚假Quick Assist登录页面(凭据收集器)的链接也通过自毁链接服务(如1ty[.]me)与Google Drive zip存档链接一起通过代理交付给目标用户。

图17. .qcow2映像中留下的证据,包括ScreenConnect安装程序、注册表命令和QDoor恶意软件。

一旦以这种方式建立远程会话,VM还包含QDoor的副本,这是一种作为C2代理的Rust恶意软件,允许威胁参与者通过代理将C2流量隧道传输到VM,位于目标用户环境中的受感染机器上。在Rapid7处理的所有案例中,QEMU可执行文件被重命名(例如w.exe/svvhost.exe),并且作为VM的模拟器,它是受感染主机上所有由VM内运行的进程产生的网络连接的来源。QDoor恶意软件已被ConnectWise归因于BlackSuit勒索软件组织。

在更近期的案例中,Rapid7观察到BlackSuit附属组织分发一个更小(64MB vs. 8.6GB)的.qcow2映像,其中包含TinyCore Linux。当映像由QEMU加载时,TinyCore OS启动时执行的bootlocal[.]sh脚本已由威胁参与者设置为休眠,除非成功ping通其服务器之一。一旦ping成功,一个ELF文件123.out被执行,尝试连接到C2服务器。

图18. TinyCore VM中bootlocal[.]sh的内容。

在VM映像的命令日志.ash_history中,还存在一个wget命令,指示123.out文件最初从哪个外部服务器下载到VM。

图19. TinyCore VM中.ash_history命令日志的一部分。

在Rapid7观察到的另一个tc.qcow2负载中,TinyCore VM启动脚本将无条件执行两个ELF文件nossl和ssl。这些ELF负载作为多线程socks代理运行,其中ssl副本使用OpenSSL库加密流量,而ssl以明文发送流量。在这两种情况下,ELF负载都向端口53上的C2代理服务器发送注册信息,该端口通常用于DNS。

图20. ELF nossl通过设置C2 IPv4地址开始执行。文件中留下了调试符号,显示原始变量名称。

图21. nossl从TinyCore VM内部发送到C2代理服务器的注册字符串。

如下所示,从Black Basta聊天泄露中,BlackSuit与该组织有联系,因此他们将其典型的鱼叉式网络钓鱼攻击适应于这些类型的社会工程攻击以获取初始访问权限并不令人惊讶。

图22. Black Basta的一名操作员(@tinker)与Black Basta领导人(@usernamegg)讨论他们与BlackSuit勒索软件组织成员的联系。

恶意软件测试

在将Java RAT的功能主要迁移到Google Drive后,开发恶意软件的威胁参与者还开始包括他们用于在自己实验室环境中测试恶意软件的服务帐户。最新版本的RAT现在还有screen命令,可以在内存中下载并执行新的Java类。威胁参与者首先在自己的实验室中测试此功能,然后在他们获得访问权限的受感染设备中尝试,如下面的命令日志所示。尽管命令名称和测试负载的Java类名称(Screenshot)不同,但负载具有不同的功能,但通常旨在动态地向RAT添加新功能。观察到的第一个测试负载加载Java类Screenshot,然后通过硬编码URL下载shellcode blob,并使用WINAPI调用VirtualAllocEx、WriteProcessMemory和CreateRemoteThread将其注入到新的java.exe进程中。

图23. 动态加载的Java Screenshot类的一个版本实现的注入逻辑。

分析的测试shellcode负载然后使用NTAPI调用为嵌入的Rust PE执行本地PE注入,出于测试目的,似乎仅生成确认消息框。Rust PE的原始文件名为testapp.exe,PDB名为testapp.pdb,最初编译于2025-04-10T15:45:28Z。值得注意的是,Rust PE确实有Windows图形设备接口(GDI)库和几个相关函数导入作为依赖项,可用于访问或操作屏幕,但

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计