BlackSuit升级社会工程攻击技术分析
执行摘要
自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月首次报告了与payload 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控制台的标准输出(stdout)和标准输入(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
命令,因为恶意软件不会自行检索执行用户的名称。
|
|
在某些情况下,Rapid7观察到命令日志存在大约4到12天的间隔,从RAT成功执行且用户凭据被盗后开始。在某些情况下,在活动停止之前还会建立SSH隧道。这种行为表明威胁行为者可能不打算自己使用该访问权限,而是将其出售给另一个专门从事完全入侵网络以实现各种目的(例如,数据盗窃、勒索、勒索软件)的组织。Rapid7还观察到访问权限被用于测试新的恶意软件载荷和功能,而不是在目标网络内推进入侵。
Qemu
在Rapid7处理的少量事件中,观察到操作员向用户发送Google Drive链接以下载包含QEMU(快速模拟器)及其依赖项的zip存档,包括自定义的.qcow2(QEMU写时复制版本2)虚拟磁盘映像。该映像包含一个Windows 7 Ultimate虚拟机(VM),配置为自动登录并执行RunOnce注册表键,该键启动ScreenConnect安装程序。在大多数情况下,虚假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)库和几个相关的函数导入作为依赖项,这些依赖项可用于访问或操作屏幕,但似乎尚未完全实现。
图24. Rust可执行文件testapp.exe
生成的测试消息框。
随后,screen
命令在受入侵环境中成功使用了多次,但出于不同的原因。在一种情况下,操作员仅将其用作检查受感染主机外部IP地址的方法。下面的命令日志显示威胁行为者首次记录测试screen
命令,使用带有嵌入Rust PE的载荷,在其实验室内部,就在开始新的垃圾邮件/社会工程攻击运行(在此期间他们会分发多个恶意软件副本)之前。
|
|
然而,在受入侵环境中,仅观察到该功能用作外部IP检查实用程序,根据以下命令日志。
|
|
图25. Java Screenshot类的一个版本实现检索受感染主机的外部IP地址并将其保存到名为info.txt
的文件中的功能。
Rapid7观察到威胁行为者使用的至少另一个Rust恶意软件载荷updater.exe
,它似乎是SSH实用程序的自定义加载器,包含PDB名称rust_serverless_killer.pdb
。由于社会工程攻击促成的许多入侵导致建立了SSH反向隧道以提供访问权限,该加载器可能试图通过混淆相关元数据来逃避针对SSH命令的检测。然而,被加载的SSH可执行文件具有相同的功能,因此必须传递的命令行参数保持不变。
威胁行为者在其测试实验室内测试了Java RAT的各种功能。这包括该组织历史上会上传、解压缩和执行(通过内置的send
和extract
命令实现)的压缩python RAT,或者分发它来代替Java RAT。python RAT具有与Java RAT类似的命令菜单。python RAT先前也被Gdata分析过,结果相似,他们将其称为Anubis(可能基于源代码)并将该恶意软件归因于FIN7组织。
图26. python RAT源将解密的payload标记为“Anubis”。
|
|
上面可以看到在威胁行为者测试实验室中执行的几个命令,其中基于python的payload通过Java RAT传递。在Rapid7处理的几个过去事件中,包含python恶意软件的初始payload存档的名称为Cloud_Email_Switch.zip
,脚本名为conf.py
,该脚本通过已剥离元数据的pythonw.exe
副本执行。威胁行为者现在似乎已主要转向使用Java RAT而不是python版本,尽管Java payload保留了上传、提取和执行python脚本的功能。
命令 | 功能 |
---|---|
killexit |
立即终止进程。 |
ip |
创建一个针对Google DNS服务器(8.8.8[.]8)的UDP套接字并连接它以检索机器的本地IP地址。 |
cd |
将工作目录更改为C2指定的目录。 |
gt |
窃取指定的文件或目录。读取内容并直接发送到C2。如果目标是目录,脚本将首先将其归档为zip文件。 |
up |
将C2发送的文件上传到受感染主机的指定文件路径。 |
env |
如果C2指定’list’命令,RAT返回所有现有的环境变量。否则返回C2选择的特定变量。 |
!cf! |
使用C2发送的配置数据在用户注册表中创建/更新键(通过硬编码字符串命名)。允许动态更新恶意软件的配置。 |
!tcf! |
通过创建TCP套接字尝试连接到新配置中提供的C2地址,测试当前C2提供的新地址。将结果返回给当前C2。不更新配置。 |
default |
如果不存在上述命令之一,则创建子控制台进程(cmd.exe)来执行从C2接收的内容并返回stdout。 |
表2. python RAT的命令键。
在威胁行为者在其测试实验室运行的命令输出中,我们还可以看到其Downloads目录的列表。输出显示他们可能至少从2024-09-21
开始开发Rust恶意软件。测试实验室很可能也是他们编译testapp.exe
的环境,因为Rust可执行文件包含cargo引用,其中包括用户的名称,例如:C:\Users\User\.cargo\registry\src\<truncated>
。相比之下,前面提到的Rust SSH加载器updater.exe
引用了用户lucak
。
图27. 恶意软件开发人员测试实验室中某个资产上的Downloads目录列表。
最后,在设置测试环境时,威胁行为者从一个看似是个人Gmail帐户:palomo************[@]gmail[.]com
对几个Google Drive文件进行了更改。这些更改是可见的,因为许多版本的Java RAT分发时都包含了威胁行为者测试实验室Google Drive服务帐户凭据。
缓解指南
Rapid7建议采取以下预防措施以限制暴露于此类攻击:
- 限制外部用户通过Microsoft Teams联系用户的能力,尽可能做到最大程度。例如,可以通过阻止所有外部域或创建白名单/黑名单来实现。Microsoft Teams默认允许所有外部请求。更多信息,请参阅此参考。
- 在环境中标准化远程管理工具。对于未经批准的工具,阻止已知的哈希和域以防止使用。例如,可以通过Windows AppLocker或端点保护解决方案完成哈希阻止。
- 提供有关社会工程活动的用户意识培训。让用户熟悉官方的帮助台和支持程序,使他们能够发现并报告可疑请求。
- 标准化VPN访问。如果没有业务用例,应在防火墙级别阻止来自已知低成本VPN解决方案的流量。
- 在整个环境中要求多因素认证(MFA)。单因素认证助长了大量入侵事件。例如,如果攻击者窃取了用户的凭据并获取了网络的VPN配置,VPN上没有MFA会让他们轻松访问环境。
- 定期更新软件和固件。像Black Basta这样的勒索软件组织已知会购买漏洞以获取初始访问权限。
Rapid7客户
InsightIDR、托管检测和响应(MDR)以及托管威胁Complete(MTC)客户通过Rapid7广泛的检测规则库拥有现有的检测覆盖范围。Rapid7建议在所有适用主机上安装Insight代理,以确保对可疑进程的可见性和适当的检测覆盖范围。以下是非详尽的已部署检测列表,这些检测将提醒与此活动相关的行为:
- 可疑聊天请求 - 潜在社会工程尝试
- 初始访问 - 聊天请求后启动的潜在社会工程会话
- 攻击者技术 - 向HKCU注册表键添加Base64字符串
- 可疑进程 - LNK通过JAR执行PowerShell
- 可疑进程 - QEMU从暂存目录加载磁盘
- 凭据访问 - 窃取或伪造Kerberos票证
- 异常检测 - 失败的AS-REP烘烤攻击
- 未经批准的应用程序 - 远程管理和监控(RMM)工具
MITRE ATT&CK技术
战术 | 技术 | 程序 |
---|---|---|
侦察 | T1591: 收集受害者组织信息 | 操作员利用公开可用信息识别目标联系方式和财务信息。 |
资源开发 | T1587.001: 开发能力:恶意软件 | 威胁行为者正在积极开发新的恶意软件进行分发。 |
影响 | T1498: 网络拒绝服务 | 威胁行为者用垃圾邮件淹没电子邮件保护解决方案。 |
影响 | T1486: 数据加密以造成影响 | 威胁行为者在入侵网络后要么部署勒索软件,要么将访问权限出售给勒索软件组织。 |
初始访问 | T1566.004: 网络钓鱼:鱼叉式语音钓鱼 | 威胁行为者呼叫受影响的用户,冒充目标组织IT团队成员以获取远程访问权限。 |
防御规避 | T1140: 反混淆/解码文件或信息 | 威胁行为者使用密码将一些zip存档payload解密到受感染的主机上。 |
防御规避 | T1055.002: 进程注入:可移植可执行文件注入 | 威胁行为者执行的一些payload利用本地PE注入。 |
防御规避 | T1620: 反射代码加载 | 威胁行为者执行的一些payload加载并执行shellcode。 |
凭据访问 | T1649: 窃取或伪造身份证书 | 威胁行为者滥用了ADCS服务以获取证书。 |
凭据访问 | T1056.001: 输入捕获:键盘记录 | 威胁行为者运行可以收割用户凭据的可执行文件。 |
凭据访问 | T1558.003: 窃取或伪造Kerberos票证:Kerberoasting | 威胁行为者在获得初始访问权限后执行了Kerberoasting。 |
凭据访问 | T1558.004: 窃取或伪造Kerberos票证:AS-REP烘烤 | 威胁行为者在获得初始访问权限后执行了AS-REP烘烤攻击。 |
发现 | T1033: 系统所有者/用户发现 | 威胁行为者在获得访问权限后枚举环境中的资产和用户信息。 |
命令和控制 | T1572: 协议隧道 | 威胁行为者使用SSH反向隧道来提供/代理远程访问。 |
命令和控制 | T1219: 远程访问软件 | 威胁行为者使用了QuickAssist、AnyDesk、ScreenConnect、TeamViewer、Level等来促进远程访问。 |
入侵指标(IOCs)
所有入侵指标可在Rapid7 GitHub仓库获取。