LÂY NHIỄM BAN ĐẦU
Hiện tại, chưa có bằng chứng rõ ràng về cách thức phát tán bot Tsundere. Tuy nhiên, trong một trường hợp được ghi nhận, bot đã được cài đặt thông qua công cụ Giám sát và Quản lý từ xa (RMM), công cụ này tải xuống một tệp có tên pdf.msi từ một trang web bị xâm nhập. Trong các trường hợp khác, tên mẫu cho thấy bot đang được phân phối bằng cách lạm dụng sự hấp dẫn của các trò chơi Windows phổ biến, đặc biệt là game bắn súng góc nhìn thứ nhất. Các mẫu được tìm thấy trên thực tế có tên như “valorant”, “cs2” hoặc “r6x”, dường như là những nỗ lực nhằm lợi dụng sự phổ biến của các trò chơi này trong cộng đồng vi phạm bản quyền.
CHÈN MÃ ĐỘC HẠI
Theo các nhà nghiên cứu, có hai định dạng riêng biệt để phát tán mã độc: thông qua trình cài đặt MSI và tập lệnh PowerShell. Mã độc được bảng điều khiển C2 tự động tạo ra (được mô tả trong phần cơ sở hạ tầng).
Trình cài đặt MSI
Trình cài đặt MSI thường ngụy trang thành trình cài đặt giả mạo cho các trò chơi phổ biến và phần mềm khác để dụ dỗ nạn nhân mới. Đáng chú ý, tại thời điểm nghiên cứu, tỷ lệ phát hiện của nó rất thấp. Trình cài đặt này chứa danh sách dữ liệu và tệp JavaScript được cập nhật với mỗi bản build mới, cũng như các tệp thực thi Node.js cần thiết để chạy các tập lệnh này. Sau đây là danh sách các tệp có trong mẫu: nodejs/B4jHWzJnlABB2B7; nodejs/UYE20NBBzyFhqAQ[.]js; nodejs/79juqlY2mETeQOc; nodejs/thoJahgqObmWWA2; nodejs/node[.]exe; nodejs/npm[.]cmd và nodejs/npx[.]cmd.
Trong đó, ba tệp cuối cùng trong danh sách là các tệp Node.js hợp lệ. Chúng được cài đặt cùng với các mẫu độc hại trong thư mục AppData\Local\nodejs của người dùng. Khi kiểm tra bảng CustomAction, các nhà nghiên cứu phát hiện quá trình Windows Installer thực thi phần mềm độc hại và cài đặt bot Tsundere.
Thao tác này sẽ thực thi mã Node.js tạo ra một tiến trình Node.js mới, chạy mã JavaScript của trình tải (trong trường hợp này là B4jHWzJnlABB2B7). Tiến trình con sẽ chạy ở chế độ nền và ẩn khỏi người dùng.
Tập lệnh tải
Tập lệnh tải (loader script) chịu trách nhiệm đảm bảo giải mã và thực thi chính xác tập lệnh bot chính, xử lý việc giải nén và cấu hình npm. Mặc dù mã tải, tương tự như mã cho các tệp JavaScript khác (được mã hóa), nhưng vẫn có thể giải mã bằng các công cụ mã nguồn mở. Sau khi được thực thi, tập lệnh sẽ cố gắng định vị tập lệnh giải nén và cấu hình cho bot Tsundere, giải mã chúng bằng thuật toán mã hóa AES-256 CBC với khóa và giá trị nonce dành riêng cho bản build, sau đó lưu các tệp đã giải mã dưới các tên tệp khác nhau.
Tệp cấu hình là một tệp JSON định nghĩa cấu trúc thư mục và tệp, cũng như nội dung tệp, mà phần mềm độc hại sẽ tạo lại. Tác giả phần mềm độc hại gọi tệp này là “config”, nhưng mục đích chính của nó là đóng gói và triển khai trình quản lý gói Node.js (npm) mà không cần cài đặt hoặc tải xuống thủ công. Tập lệnh giải nén chịu trách nhiệm tạo lại cấu trúc này, bao gồm thư node_modulesmục chứa tất cả các thư viện và các gói cần thiết để phần mềm độc hại có thể thực thi.
Sau khi thiết lập xong môi trường, mã độc tiến hành cài đặt ba gói vào thư mục node_modules bằng npm:
- ws: Thư viện WebSocket network.
- ethers: Thư viện để giao tiếp với Ethereum.
- pm2: Công cụ quản lý quy trình Node.js.

Hình 1. Tập lệnh tải cài đặt bộ công cụ cần thiết cho việc duy trì và thực thi Tsundere
Gói pm2 được cài đặt để đảm bảo bot Tsundere luôn hoạt động và được sử dụng để khởi chạy bot. Ngoài ra, pm2 còn giúp duy trì tính ổn định trên hệ thống bằng cách ghi vào registry và tự cấu hình để khởi động lại quy trình khi đăng nhập.
Trình lây nhiễm PowerShell
Phiên bản PowerShell của trình lây nhiễm hoạt động theo cách nhỏ gọn và đơn giản hơn. Thay vì sử dụng tệp cấu hình và giải nén - như đã thực hiện với MSI, trình lây nhiễm tải xuống tệp ZIP node-v18.17.0-win-x64.zip từ trang web chính thức của Node.js nodejs[.]org và giải nén tệp đó vào thư mục AppData\Local\NodeJS, cuối cùng triển khai Node.js trên thiết bị mục tiêu. Sau đó, trình lây nhiễm sử dụng thuật toán AES-256-CBC để giải mã hai biến lớn được mã hóa thập lục phân, tương ứng với tập lệnh bot và tập lệnh lưu trữ.
Các tệp đã giải mã này, cùng với một tệp package.json được ghi vào đĩa. Tệp này thông tin về gói Node.js độc hại, cũng như các thư viện cần thiết để cài đặt, bao gồm các gói ws và ethers. Cuối cùng, trình lây nhiễm chạy cả hai tập lệnh, bắt đầu bằng tập lệnh lưu trữ, tiếp theo là tập lệnh bot.

Hình 2. Trình lây nhiễm PowerShell tạo một tệp gói với các phụ thuộc
Tính bền bỉ đạt được thông qua cùng một cơ chế được quan sát thấy trong trình cài đặt MSI: Tập lệnh tạo một giá trị trong khóa registry HKCU:\Software\Microsoft\Windows\CurrentVersion\Run trỏ đến chính nó. Sau đó, ghi đè lên chính nó bằng một tập lệnh mới được giải mã Base64. Tập lệnh mới này chịu trách nhiệm đảm bảo bot được thực thi mỗi lần đăng nhập khi tạo ra một phiên bản bot mới.
BOT TSUNDERE
Bây giờ chúng ta sẽ đi sâu vào bot Tsundere, kiểm tra khả năng giao tiếp với máy chủ C2 và chức năng chính của phần mềm độc hại này.
Truy xuất địa chỉ C2
Hợp đồng Web3, còn được gọi là hợp đồng thông minh, được triển khai trên blockchain thông qua các giao dịch từ ví. Các hợp đồng này có thể lưu trữ dữ liệu trong các biến, được sửa đổi bởi các hàm định nghĩa trong hợp đồng. Trong trường hợp này, botnet Tsundere sử dụng blockchain Ethereum, trong đó một phương thức có tên setString(string _str) được định nghĩa để sửa đổi biến trạng thái param1, cho phép nó lưu trữ một chuỗi. Chuỗi này được quản trị viên botnet Tsundere sử dụng để lưu trữ các máy chủ WebSocket C2 mới, có thể luân chuyển tùy ý và không thể thay đổi sau khi được ghi vào blockchain Ethereum.
Botnet Tsundere dựa trên hai điểm tham chiếu hằng số trên blockchain Ethereum:
- Ví: 0x73625B6cdFECC81A4899D221C732E1f73e504a32.
- Hợp đồng: 0xa1b40044EBc2794f207D45143Bd82a1B86156c6b.
Để thay đổi máy chủ C2, botnet Tsundere thực hiện một giao dịch để cập nhật biến trạng thái thông qua một địa chỉ mới. Dưới đây là giao dịch được thực hiện vào ngày 19/8/2025, với giá trị 0 ETH, giao dịch này sẽ cập nhật địa chỉ.

Hình 3. Hợp đồng thông minh chứa botnet Tsundere WebSocket C2
Biến trạng thái có độ dài cố định là 32 byte và một chuỗi 24 byte được lưu trữ bên trong. Khi chuỗi này chuyển đổi từ hệ thập lục phân sang ASCII, nó sẽ hiển thị địa chỉ máy chủ WebSocket C2 mới: ws[:]//185[.]28[.]119[.]179:1234.
Để lấy địa chỉ C2, bot liên hệ với nhiều điểm cuối công khai cung cấp API gọi thủ tục từ xa (RPC), cho phép chúng tương tác với các nút blockchain Ethereum. Khi bắt đầu tập lệnh, bot gọi một hàm có tên fetchAndUpdateIP, lặp qua danh sách các nhà cung cấp RPC. Với mỗi nhà cung cấp, nó kiểm tra các giao dịch liên kết với địa chỉ hợp đồng và chủ sở hữu ví, sau đó lấy chuỗi từ biến trạng thái chứa địa chỉ WebSocket.

Hình 4. Lấy địa chỉ C2 từ hợp đồng thông minh
Bot Tsundere xác minh địa chỉ C2 bắt đầu bằng ws://hoặc wss://để đảm bảo đó là URL WebSocket hợp lệ, sau đó đặt chuỗi kết quả thu được làm URL máy chủ. Tuy nhiên, trước khi sử dụng URL mới này, bot sẽ kiểm tra ngôn ngữ hệ thống bằng cách lấy tên máy để tránh lây nhiễm cho các hệ thống trong vùng CIS. Nếu hệ thống không nằm trong vùng CIS, bot sẽ thiết lập kết nối đến máy chủ thông qua WebSocket, thiết lập các trình xử lý cần thiết để nhận, gửi và quản lý trạng thái kết nối, chẳng hạn như lỗi và socket đã đóng.

Hình 5. Trình xử lý bot để giao tiếp
Giao tiếp và liên lạc
Luồng giao tiếp giữa máy khách (bot Tsundere) và máy chủ (WebSocket C2) như sau:
1. Bot Tsundere thiết lập kết nối WebSocket với địa chỉ C2 đã thu thập được.
2. Khóa AES được truyền ngay sau khi kết nối được thiết lập.
3. Bot gửi một chuỗi rỗng để xác nhận đã nhận được khóa.
4. Sau đó, máy chủ sẽ gửi một giá trị nonce (IV), cho phép sử dụng giao tiếp được mã hóa từ thời điểm đó trở đi. Mã hóa là bắt buộc cho tất cả các giao tiếp tiếp theo.
5. Bot sẽ truyền thông tin hệ điều hành của máy bị lây nhiễm, bao gồm địa chỉ MAC, bộ nhớ, thông tin GPU và các chi tiết khác. Thông tin này cũng được sử dụng để tạo mã định danh duy nhất (UUID).
6. Máy chủ C2 phản hồi bằng một đối tượng JSON, xác nhận kết nối và sự hiện diện của bot.
7. Khi kết nối được thiết lập, máy khách và máy chủ có thể trao đổi thông tin một cách tự do: Để duy trì kết nối, thông điệp duy trì kết nối được gửi mỗi phút bằng tin nhắn ping/pong. Bot gửi phản hồi được mã hóa như một phần của thông điệp ping/pong, đảm bảo liên lạc liên tục.

Hình 6. Quá trình giao tiếp Tsundere với C2 thông qua WebSocket
Các kết nối không được xác thực thông qua bất kỳ phương tiện bổ sung nào, khiến máy khách giả mạo có thể thiết lập kết nối. Như đã đề cập trước đó, máy khách gửi một thông điệp ping được mã hóa đến máy chủ C2 mỗi phút và máy chủ C2 sẽ trả về một thông điệp pong. Việc trao đổi ping-pong này đóng vai trò là cơ chế để bảng điều khiển C2 duy trì danh sách các bot đang hoạt động.
Bot Tsundere được thiết kế để cho phép máy chủ C2 gửi mã JavaScript động. Khi máy chủ C2 gửi thông điệp đến ID=1bot, thông điệp sẽ được đánh giá như một hàm mới và sau đó thực thi. Kết quả của thao tác này được gửi lại cho máy chủ thông qua một hàm tùy chỉnh có tên là serverSend, có nhiệm vụ truyền kết quả dưới dạng đối tượng JSON, được mã hóa để giao tiếp an toàn.

Hình 7. Mã đánh giá bot Tsundere sau khi nhận được các chức năng từ C2
Khả năng đánh giá mã khiến bot Tsundere trở nên tương đối đơn giản, nhưng nó cũng mang lại sự linh hoạt, cho phép quản trị viên botnet điều chỉnh phù hợp với nhiều hành động khác nhau.
Tuy nhiên, trong thời gian quan sát, Kaspersky không nhận được bất kỳ lệnh hoặc chức năng nào khác từ máy chủ C2, có thể là do bot mới kết nối cần được các tác nhân đe dọa khác yêu cầu thông qua bảng điều khiển botnet trước khi có thể sử dụng.
Bot Tsundere sử dụng WebSocket làm giao thức chính để thiết lập kết nối với máy chủ C2. Như đã được đề cập, phần mềm độc hại đang giao tiếp với máy chủ WebSocket tại địa chỉ 185[.]28[.]119[.]179 và các thử nghiệm của các nhà nghiên cứu cho thấy nó đang phản hồi tích cực với các kết nối bot.
Bảng điều khiển
Phải nhấn mạnh rằng, không mạng botnet nào hoàn thiện nếu thiếu một bảng điều khiển. Mạng botnet Tsundere có cả thị trường và bảng điều khiển, được tích hợp vào cùng một giao diện người dùng.
.png)
Hình 8. Đăng nhập bảng điều khiển botnet Tsundere
Điểm đáng chú ý của bảng điều khiển Tsundere, được gọi là “Tsundere Netto” (phiên bản 2.4.4), là nó có hệ thống đăng ký mở. Bất kỳ người dùng nào truy cập vào biểu mẫu đăng nhập đều có thể đăng ký và truy cập vào bảng điều khiển, bao gồm nhiều tab khác nhau:
- Bot: Bảng điều khiển hiển thị số lượng bot do người dùng kiểm soát.
- Settings: Cài đặt người dùng và chức năng quản trị.
- Build: Nếu người dùng có giấy phép đang hoạt động, họ có thể tạo bot mới bằng hai phương pháp đã đề cập trước đó (MSI hoặc PowerShell).
- Market: Đây là khía cạnh thú vị nhất của bảng điều khiển, vì nó cho phép người dùng quảng bá bot cá nhân của họ, cung cấp nhiều dịch vụ và chức năng khác nhau cho các tác nhân đe dọa khác. Mỗi bản build có thể tạo ra một bot thực hiện một tập hợp các hành động cụ thể, sau đó có thể cung cấp cho người khác.
- Monero wallet: Một dịch vụ ví cho phép người dùng gửi tiền hoặc rút tiền.
- Socks proxy: Tính năng cho phép người dùng sử dụng bot của họ làm proxy cho lưu lượng truy cập của chính người dùng đó.

Hình 9. Hệ thống bảng bảng điều khiển botnet Tsundere và thị trường cung cấp
Mỗi bản build tạo ra một ID duy nhất và gửi đến máy chủ C2 khi bị lây nhiễm. ID này có thể ược liên kết với người dùng đã tạo ra nó. Theo nghiên cứu và phân tích về các URL khác được tìm thấy trong thực tế, các bản build được tạo thông qua bảng điều khiển và có thể được tải xuống qua URL: hxxps://idk.1f2e[REDACTED]07a4[.]net/api/builds/{BUILD-ID}.msi.
Tại thời điểm hiện tại, bảng điều khiển thường có từ 90 đến 115 bot được kết nối với máy chủ C2 tại bất kỳ thời điểm nào.
TÁC NHÂN ĐE DỌA
Dựa trên văn bản tìm thấy trong các bản vá, các nhà nghiên cứu nhận định rằng tác nhân đe dọa đứng sau botnet Tsundere có khả năng đến từ Nga. Việc sử dụng tiếng Nga trong các bản vá này phù hợp với các cuộc tấn công trước đây được cho là do cùng một tác nhân đe dọa thực hiện.

Hình 10. Tiếng Nga được sử dụng trong toàn bộ mã
Hơn nữa, phân tích của các nhà nghiên cứu cho thấy mối liên hệ giữa botnet Tsundere và 123 Stealer, một phần mềm đánh cắp dữ liệu dựa trên C++ có sẵn trên thị trường ngầm với giá 120 USD mỗi tháng. Mối liên hệ này dựa trên thực tế là cả hai bảng điều khiển đều dùng chung một máy chủ. Đáng chú ý, tên miền chính đóng vai trò là giao diện người dùng cho bảng điều khiển 123 Stealer, trong khi tên miền phụ “idk.” được sử dụng cho bảng điều khiển botnet Tsundere.
.png)
Hình 11. Bảng điều khiển 123 Stealer C2 chia sẻ cơ sở hạ tầng của Tsundere và giới thiệu tác giả của nó
Bằng cách xem xét các bằng chứng hiện có, các nhà nghiên cứu có thể liên kết cả hai mối đe dọa với một tác nhân đe dọa nói tiếng Nga được gọi là “koneko”. Các tin tặc này trước đây đã hoạt động trên một diễn đàn dark web, nơi chúng quảng bá 123 Stealer, cũng như các phần mềm độc hại khác, bao gồm cả một backdoor.
Mặc dù phân tích của các nhà nghiên cứu về backdoor cho thấy nó không liên quan trực tiếp đến Tsundere, nhưng có những điểm tương đồng với botnet Tsundere ở chỗ nó được viết bằng Node.js và sử dụng PowerShell hoặc MSI làm trình lây nhiễm. Trước khi diễn đàn dark web bị tịch thu và đóng cửa, hồ sơ của koneko có tiêu đề “node malware senior”, cho thấy thêm chuyên môn của chúng về phần mềm độc hại dựa trên Node.js.
KẾT LUẬN
Botnet Tsundere đại diện cho một nỗ lực mới của một tác nhân đe dọa được cho là nhằm cải tiến bộ công cụ của chúng. Bot dựa trên Node.js này là một sự phát triển của một cuộc tấn công được phát hiện vào tháng 10 năm ngoái, giờ đây nó có một chiến lược mới và thậm chí là một mô hình kinh doanh mới. Việc lây nhiễm có thể xảy ra thông qua các tệp MSI và PowerShell, mang lại sự linh hoạt trong việc ngụy trang trình cài đặt, sử dụng phishing làm điểm xâm nhập hoặc tích hợp với các cơ chế tấn công khác, khiến nó trở thành một mối đe dọa thậm chí còn đáng sợ hơn.
Ngoài ra, botnet này còn tận dụng một kỹ thuật đang ngày càng phổ biến, sử dụng các hợp đồng web3, còn được gọi là hợp đồng thông minh, để lưu trữ các địa chỉ C2, giúp tăng cường khả năng phục hồi của cơ sở hạ tầng botnet. Tác giả có thể của botnet (koneko), cũng tham gia vào việc rao bán các mối đe dọa khác, chẳng hạn như 123 Stealer, điều này cho thấy mối đe dọa này có thể sẽ leo thang thay vì giảm bớt trong những tháng tới. Do đó, việc theo dõi chặt chẽ mối đe dọa này và cảnh giác với các mối đe dọa liên quan có thể xuất hiện trong tương lai gần là điều cần thiết.
