技术细节
初始访问
感染始于包含恶意存档的网络钓鱼电子邮件。该存档通常受密码保护,密码包含在电子邮件正文中。存档内是可执行文件。在某些情况下,可执行文件的图标伪装成办公文档图标,文件名包含诸如.doc<多个空格>.exe的双扩展名。然而,存档中也经常遇到没有图标或双扩展名的恶意可执行文件。这些文件通常具有很长的名称,在查看存档时无法完整显示,因此它们的扩展名对用户是隐藏的。
文件执行后,系统被感染。但是,在相同文件名的存档中往往存在不同的植入程序,攻击者的行为也因案例而异。
植入程序
Tomiris C/C++ ReverseShell 该植入程序是一个反向Shell,等待操作员的命令(在我们观察到的大多数情况下,感染是人为操作的)。快速环境检查后,攻击者通常会发出下载另一个后门——AdaptixC2的命令。AdaptixC2是一个用于后期利用的模块化框架,源代码可在GitHub上获取。攻击者使用bitsadmin、curl、PowerShell和certutil等内置OS实用程序下载AdaptixC2。
Tomiris Rust Downloader 这是一个之前未记录的用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。值得注意的是,只有发现的文件路径被发送到Discord;木马不传输实际文件。
发送请求后,木马在临时目录中创建两个脚本:script.vbs和script.ps1。在将script.ps1放到磁盘之前,Rust Downloader从硬编码的片段创建一个URL并将其添加到脚本中。然后它使用cscript实用程序执行script.vbs,后者又通过PowerShell运行script.ps1。script.ps1脚本在无限循环中运行,延迟一分钟。它尝试从下载器提供的URL下载ZIP存档,将其解压缩到%TEMP%\rfolder,并执行所有解压的.exe扩展名文件。
Tomiris Python Discord ReverseShell 该木马用Python编写,并使用PyInstaller编译成可执行文件。主脚本也用PyArmor进行了混淆。我们能够去除混淆并恢复原始脚本代码。该木马基于实现通过Discord通信的“discord”Python包,并使用该信使作为C2通道。其代码包含用于与Discord C2服务器通信的URL和身份验证令牌。在功能上,该木马充当反向Shell,接收来自C2的文本命令,在受感染系统上执行它们,并将执行结果发送回C2。
Tomiris Python FileGrabber 如前所述,此木马通过Tomiris Python Discord ReverseShell安装在系统中。攻击者通过执行以下控制台命令来完成此操作。该木马用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 ReverseShell的命令。
Tomiris Python Telegram ReverseShell 该木马用Python编写,并使用PyInstaller编译成可执行文件。主脚本也用PyArmor进行了混淆。我们设法去除了混淆并恢复了原始脚本代码。该木马使用Telegram与C2服务器通信,代码中包含身份验证令牌和“chat_id”,用于连接到机器人并接收要执行的命令。在功能上,它是一个反向Shell,能够接收来自C2的文本命令,在受感染系统上执行它们,并将执行结果发送回C2。
其他用作第一阶段感染程序的植入程序 以下是也在钓鱼存档中分发的几种植入程序。不幸的是,我们无法追踪涉及这些植入程序的进一步操作,因此只能提供它们的描述。
Tomiris C# Telegram ReverseShell 另一个使用Telegram接收命令的反向Shell。这次是用C#编写的,并使用以下凭据进行操作。
JLORAT 恶意行为者使用的最古老的植入程序之一,自2022年首次识别以来几乎没有变化。它能够截取屏幕截图、执行控制台命令以及将文件从受感染系统上传到C2。当前版本的木马仅缺少下载命令。
Tomiris Rust ReverseShell 此木马是用Rust编程语言编写的简单反向Shell。与攻击者使用的其他反向Shell不同,它使用PowerShell作为Shell而不是cmd.exe。
Tomiris Go ReverseShell 此木马是用Go编写的简单反向Shell。我们能够恢复源代码。它与62.113.114.209的443端口建立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# ReverseShell 用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通信和多语言植入程序,突显了需要高级检测策略(例如行为分析和网络流量检查)来有效识别和缓解此类威胁。
入侵指标
Distopia Backdoor B8FE3A0AD6B64F370DB2EA1E743C84BB
Tomiris Python Discord ReverseShell 091FBACD889FA390DC76BB24C2013B59
Tomiris Python FileGrabber C0F81B33A80E5E4E96E503DBC401CBEE
Tomiris Python Telegram ReverseShell 42E165AB4C3495FADE8220F4E6F5F696
Tomiris C# Telegram ReverseShell 2FBA6F91ADA8D05199AD94AFFD5E5A18
Tomiris C/C++ ReverseShell 0F955D7844E146F2BD756C9CA8711263 078BE0065D0277935CDCF7E3E9DB4679 33ED1534BBC8BD51E7E2CF01CADC9646
Tomiris Rust Downloader 1083B668459BEACBC097B3D4A103623F
JLORAT C73C545C32E5D1F72B74AB0087AE1720
Tomiris Rust ReverseShell 9A9B1BA210AC2EBFE190D1C63EC707FA
Tomiris C++ ReverseSocks (基于GitHub Neosama/Reverse-SOCKS5) 2ED5EBC15B377C5A03F75E07DC5F1E08
Tomiris PowerShell Telegram Backdoor C75665E77FFB3692C2400C3C8DD8276B
Tomiris C# ReverseShell DF95695A3A93895C1E87A76B4A8A9812
Tomiris Go ReverseShell 087743415E1F6CC961E9D2BB6DFD6D51
Tomiris Go ReverseSocks (基于GitHub Acebond/ReverseSocks5) 83267C4E942C7B86154ACD3C58EAF26C
AdaptixC2 CD46316AEBC41E36790686F1EC1C39F0 1241455DA8AADC1D828F89476F7183B7 F1DCA0C280E86C39873D8B6AF40F7588
Havoc 4EDC02724A72AFC3CF78710542DB1E6E
域名/IP/URL Distopia Backdoor hxxps://discord[.]com/api/webhooks/1357597727164338349/ikaFqukFoCcbdfQIYXE91j-dGB-8YsTNeSrXnAclYx39Hjf2cIPQalTlAxP9-2791UCZ
Tomiris Python Discord ReverseShell hxxps://discord[.]com/api/webhooks/1370623818858762291/p1DC3l8XyGviRFAR50de6tKYP0CCr1hTAes9B9ljbd-J-dY7bddi31BCV90niZ3bxIMu hxxps://discord[.]com/api/webhooks/1388018607283376231/YYJe-lnt4HyvasKlhoOJECh9yjOtbllL_nalKBMUKUB3xsk7Mj74cU5IfBDYBYX-E78G hxxps://discord[.]com/api/webhooks/1386588127791157298/FSOtFTIJaNRT01RVXk5fFsU_sjp_8E0k2QK3t5BUcAcMFR_SHMOEYyLhFUvkY3ndk8-w hxxps://discord[.]com/api/webhooks/1369277038321467503/KqfsoVzebWNNGqFXePMxqi0pta2445WZxYNsY9EsYv1u_iyXAfYL3GGG76bCKy3-a75 hxxps://discord[.]com/api/webhooks/1396726652565848135/OFds8Do2qH-C_V0ckaF1AJJAqQJuKq-YZVrO1t7cWuvAp7LNfqI7piZlyCcS1qvwpXTZ
Tomiris Python FileGrabber hxxp://62.113.115[.]89/homepage/infile.php
Tomiris Python Telegram ReverseShell hxxps://api.telegram[.]org/bot7562800307:AAHVB7Ctr-K52J-egBlEdVoRHvJcYr-0nLQ/
Tomiris C# Telegram ReverseShell hxxps://api.telegram[.]org/bot7804558453:AAFR2OjF7ktvyfygleIneu_8WDaaSkduV7k/
Tomiris C/C++ ReverseShell 77.232.39[.]47 109.172.85[.]63 109.172.85[.]95 185.173.37[.]67 185.231.155[.]111 195.2.81[.]99
Tomiris Rust Downloader hxxps://discordapp[.]com/api/webhooks/1392383639450423359/TmFw-WY-u3D3HihXqVOOinL73OKqXvi69IBNh_rr15STd3FtffSP2BjAH59ZviWKWJRX hxxps://discordapp[.]com/api/webhooks/1363764458815623370/IMErckdJLreUbvxcUA8c8SCfhmnsnivtwYSf7nDJF-bWZcFcSE2VhXdlSgVbheSzhGYE hxxps://discordapp[.]com/api/webhooks/1355019191127904457/xCYi5fx_Y2-ddUE0CdHfiKmgrAC-Cp9oi-Qo3aFG318P5i-GNRfMZiNFOxFrQkZJNJsR hxxp://82.115.223[.]218/ hxxp://172.86.75[.]102/ hxxp://193.149.129[.]113/
JLORAT hxxp://82.115.223[.]210:9942/bot_auth hxxp://88.214.26[.]37:9942/bot_auth hxxp://141.98.82[.]198:9942/bot_auth
Tomiris Rust ReverseShell 185.209.30[.]41
Tomiris C++ ReverseSocks (基于GitHub “Neosama/Reverse-SOCKS5”) 185.231.154[.]84
Tomiris PowerShell Telegram Backdoor hxxps://api.telegram[.]org/bot8044543455:AAG3Pt4fvf6tJj4Umz2TzJTtTZD7ZUArT8E/ hxxps://api.telegram[.]org/bot7864956192:AAEjExTWgNAMEmGBI2EsSs46AhO7Bw8STcY/ hxxps://api.telegram[.]org/bot8039791391:AAHcE2qYmeRZ5P29G6mFAylVJl8qH_ZVBh8/ hxxps://api.telegram[.]org/bot7157076145:AAG79qKudRCPu28blyitJZptX_4z_LlxOS0/ hxxps://api.telegram[.]org/bot7649829843:AAH_ogPjAfuv-oQ5_Y-s8YmlWR73Gbid5h0/
Tomiris C# ReverseShell 206.188.196[.]191 188.127.225[.]191 188.127.251[.]146 94.198.52[.]200 188.127.227[.]226 185.244.180[.]169 91.219.148[.]93
Tomiris Go ReverseShell 62.113.114[.]209 195.2.78[.]133
Tomiris Go ReverseSocks (基于GitHub “Acebond/ReverseSocks5”) 192.165.32[.]78 188.127.231[.]136
AdaptixC2 77.232.42[.]107 94.198.52[.]210 96.9.124[.]207 192.153.57[.]189 64.7.199[.]193
Havoc 78.128.112[.]209
恶意URL (列表过长,此处省略,内容与原文提供的恶意URL列表完全一致)