BlackSuit 在 Black Basta 内部分裂后持续进行社交工程攻击
执行摘要
自2024年12月下旬以来,与Black Basta勒索软件组织相关的社交工程攻击显著减少。这一间歇期还包括2025年2月泄露的Black Basta聊天日志,表明该组织内部存在冲突。尽管如此,Rapid7观察到持续的社交工程攻击。现有证据表明,BlackSuit附属组织要么采用了Black Basta的策略,要么吸收了该组织的成员。先前在社交工程攻击中分发的Java恶意软件家族的开发者现已被评估为可能的初始访问经纪人,可能为Black Basta和/或FIN7附属组织提供了历史访问权限。
概述
攻击的第一阶段保持不变。操作员会向目标用户发送大量电子邮件,每小时可达数千封。这通常是通过一次性将目标用户的电子邮件注册到许多不同的公开邮件列表来实现的,当每个服务发送欢迎电子邮件时,有效地创建了拒绝服务攻击。这种技术通常被称为电子邮件炸弹。
在电子邮件炸弹之后,策略在不同操作员之间有所分歧,尽管他们最终都会冒充目标组织帮助台成员联系受影响的用户。大多数操作员仍然通过Microsoft Teams使用默认的Azure/Entra租户(即电子邮件帐户以onmicrosoft[.]com结尾)或他们自己的自定义域来执行此步骤。然而,在极少数情况下,操作员,特别是那些与BlackSuit有关联的操作员,可能会放弃Microsoft Teams,转而使用伪造号码直接呼叫目标用户。这种策略如果成功,允许他们绕过否则会被记录的云日志记录。首次,Black Basta的领导人撰写的流程解释也可用于总结该过程,在向新附属解释攻击的背景下:
带有翻译的额外聊天日志可在Rapid7 GitHub仓库获取。
如果附属能够获得用户的信任,他们仍然主要尝试通过Quick Assist获得用户资产的访问权限,从而进入公司网络。Quick Assist是一个内置的Windows实用程序,允许用户轻松授予第三方对其计算机的远程访问权限。该实用程序已被广泛滥用进行社交工程攻击,这一趋势仍在继续。特别是BlackSuit附属还可能将用户引导到一个托管虚假Quick Assist登录页面的恶意域,以收集他们的凭据。
如果附属无法使Quick Assist工作,他们仍然会循环使用各种其他流行的远程访问工具(例如AnyDesk、ScreenConnect),如果仍然不起作用,他们可能会直接挂断用户电话并转向下一个目标。
Black Basta至少有一个用于此目的的呼叫模板/脚本:
完整脚本可在Rapid7 GitHub仓库获取。
快速获得对目标网络的可靠访问仍然是攻击早期的首要任务,通常通过窃取目标用户的凭据来实现。过去,这已经通过例如通过Microsoft Teams发送给目标用户的QR码或下载和执行创建虚假Windows身份验证提示的恶意软件来实现。
在某些情况下,进行初始呼叫的操作员还可能胁迫目标用户在仍在通话时提供MFA代码。历史上,操作员在建立远程访问后还会尝试窃取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的逻辑使用各种类型的垃圾代码、控制流混淆和字符串混淆进行混淆,以试图阻碍分析。
Java RAT和其他负载在存档中分发,链接最常通过pastebin[.]com链接发送给目标用户。在最近到2025年5月的情况下,Rapid7观察到存档仍然公开托管在可能受损的SharePoint实例上。存档和其中的负载命名以适合初始社交工程诱饵。例如,在最近的事件中,存档名为Email-Focus-Tool.zip,可能有助于在攻击期间防止目标用户怀疑。存档包含一个.jar文件(Java RAT)、包含在子文件夹中的所需JDK依赖项的副本,以及至少一个.lnk文件,旨在使恶意软件易于执行。
存档最常在执行前提取到暂存目录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关闭,这突出了使用某些云服务作为恶意软件流量代理的潜在不可靠性。
恶意软件启动时采取的第一个动作之一是检查用户注册表中是否存在现有配置,如果尚未存在,则包含在.jar负载中的文件config.json中的副本被写入那里。Rapid7分析的所有样本都没有删除调试消息,允许通过简单地在控制台窗口中执行.jar文件来查看它们,因为所有调试消息都写入stdout。
存储配置的注册表值名称和内容都是base64编码的(例如HKCU\SOFTWARE\FENokuuTCyVq\JJSUP0CEcUw9PENaNduhsA==),解码的配置内容使用AES-256-ECB加密。加密密钥源自存储在名为ek(加密密钥)的文件中的16字节字符串的种子,该文件包含在.jar存档中。注册表键名,一个随机字母字符串,是硬编码的,并以类似方式存储在文件r_path(注册表路径)中。恶意软件创建加密密钥种子字符串的SHA256哈希,然后使用SHA256哈希的前32字节作为AES-256-ECB密钥来加密和解密恶意软件的配置。Rapid7分析的每个样本都包含一个唯一的密钥种子,尽管特定样本通常(在相关存档中)分发给多个目标长达一段时间,通常大约几周。
在从注册表、本地资源或更新配置检查和加载配置后,RAT将建立至少一个PowerShell会话。
PowerShell控制台的stdin和stdout用于处理远程命令。发送到Java RAT的命令通过恶意软件在云驱动中创建两个特定文件通过各自的CSP代理。文件的名称都包含感染资产的UUID,在恶意软件启动时检索。主要通信文件有两个前缀,cf_和rf_,上下文上似乎分别代表创建文件和接收文件。这两个文件对应于PowerShell控制台的标准输出(stdin)和标准输入(stdin)。恶意软件以两种主要方式使用输入文件。如果cf_文件(stdin)以特定命令字符串开头,其后的内容将由恶意软件处理以执行恶意软件开发者实现的功能。
恶意软件开发者没有更新Google Drive的一个调试语句。
否则,内容将作为常规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”标题。代码审查表明它在任何其他重要方面都没有改变。收集器仍然强制活动窗口置顶,并且不会让用户关闭窗口而不输入密码或强制终止进程。
由于云服务凭据存储在恶意软件负载中,并且例如Google Drive默认存储每个创建文件的修订历史,因此可以查看发送到每个感染资产的整个命令历史,包括stdin和stdout。
这提供了威胁行为人在键盘操作和执行命令时看到的独特控制台视图。命令日志片段如下所示,识别信息已编辑。一旦访问建立,操作员几乎总是使用dir命令验证用户的名称,然后使用此信息执行loginform命令,因为恶意软件不会自行检索执行用户的名称。
|
|
在某些情况下,Rapid7观察到命令日志间隙大约为4到12天,从RAT成功执行和用户凭据被盗后开始。在某些情况下,SSH隧道也在活动停止前建立。这种行为表明威胁行为人可能不打算自己使用访问权限,而是将其出售给另一个专门从事完全破坏网络以实现各种目的(例如数据盗窃、勒索、勒索软件)的组织。Rapid7还观察到访问被用于测试新的恶意软件负载和功能,而不是在目标网络内推进破坏。
Qemu
在Rapid7处理的较少事件中,观察到操作员向用户发送Google Drive链接以下载包含QEMU(Quick Emulator)及其依赖项的zip存档,包括自定义的.qcow2(QEMU Copy-On-Write version 2)虚拟磁盘映像。映像包含一个Windows 7 Ultimate虚拟机(VM),配置为自动登录并执行启动ScreenConnect安装程序的RunOnce注册表键。在大多数情况下,虚假Quick Assist登录页面(凭据收集器)的链接也通过自毁链接服务如1ty[.]me与Google Drive zip存档链接一起通过代理交付给目标用户。
一旦以这种方式建立远程会话,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加载时,威胁行为人设置的bootlocal[.]sh脚本在TinyCore OS启动时执行,除非成功ping通他们的一个服务器,否则会睡眠。一旦ping成功,一个ELF文件123.out被执行,尝试连接到C2服务器。
在VM映像的命令日志.ash_history中,还存在一个wget命令,指示123.out文件最初从哪个外部服务器下载到VM。
在Rapid7观察到的替代tc.qcow2负载中,TinyCore VM启动脚本将无条件执行两个ELF文件nossl和ssl。这些ELF负载作为多线程socks代理功能,其中ssl副本使用OpenSSL库加密流量,而ssl以明文发送流量。在这两种情况下,ELF负载将注册信息发送到端口53上的C2代理服务器,该端口通常用于DNS。
调试符号留在文件内,显示原始变量名称。
如下所示,从Black Basta聊天泄露中,BlackSuit与该组织有联系,因此他们将典型的鱼叉式网络钓鱼攻击适应这些类型的社交工程攻击以进行初始访问并不令人惊讶。
恶意软件测试
在将Java RAT的功能主要迁移到Google Drive后,开发恶意软件的威胁行为人也开始包括他们用于在自己的实验室环境中测试恶意软件的服务帐户。最新版本的RAT现在还有screen命令,可以下载并在内存中执行新的Java类。威胁行为人首先在自己的实验室中测试这一点,然后在他们获得访问权限的感染设备中尝试,如下面的命令日志所示。尽管命令的名称和测试