Nimbus RAT: Tin tặc lợi dụng Microsoft Teams và Google Drive để phát tán mã độc Java RAT

Nimbus RAT: 20 Phút Từ Cuộc Gọi Teams Giả IT Đến Java RAT Chạy Qua Google Drive
282 email đổ vào hộp thư trong 90 phút, tốc độ đỉnh điểm 26 email mỗi phút. 45 phút sau, một tài khoản Teams bên ngoài liên hệ, tự xưng là IT helpdesk, ngỏ ý giúp xử lý đống spam. Nạn nhân mở Quick Assist theo hướng dẫn. Chưa đầy 20 phút sau cuộc gọi đầu tiên, một Java RAT đã chạy trên máy, âm thầm trao đổi lệnh qua Google Drive như thể đó là traffic Google Workspace bình thường.
Sơ đồ tổng quan luồng tấn công, từ email bombing đến thực thi Nimbus RAT
Tổng quát
Các chuyên gia bảo mật gần đây phát hiện chiến dịch mà Threat actor sử dụng vishing qua Microsoft Teams để lừa nạn nhân cấp quyền remote access qua Quick Assist, sau đó triển khai một Java RAT mà TRU đặt tên là Nimbus RAT.
Điểm đặc biệt nguy hiểm: toàn bộ kill chain dựa hoàn toàn vào các platform được doanh nghiệp tin tưởng và hiếm khi bị chặn, Microsoft Teams để tiếp cận ban đầu, SharePoint/OneDrive để chứa payload, Quick Assist để remote access, Pastebin để truyền hướng dẫn, và Google Drive/Google Sheets làm C2 channel. Mỗi thành phần riêng lẻ đều là dịch vụ hợp pháp, không có domain giả mạo, không có certificate đáng ngờ.
Quy mô không nhỏ. TRU phân tích dữ liệu telemetry 12 tháng và xác định 1.540 sự kiện tương tự trên 172 khách hàng riêng biệt, với mức tăng đột biến gần 8 lần so với baseline chỉ trong tháng 2/2026. Đây là một initial access vector đã được chuẩn hóa và đang được nhiều nhóm vận hành cùng lúc.
Nimbus RAT có nguồn gốc từ malware family mà Rapid7 từng ghi nhận liên quan đến hoạt động của affiliate BlackSuit, sau khi Black Basta xảy ra xung đột nội bộ đầu năm 2025. Đây là dấu hiệu cho thấy initial access từ chiến dịch này thường dẫn đến ransomware.
Hành động ưu tiên ngay lập tức: Vô hiệu hóa khả năng nhận tin nhắn từ external trial tenant (*.onmicrosoft.com) trong Microsoft Teams admin center. Theo dữ liệu của TRU, riêng control này chặn được 65% các tin nhắn Teams độc hại quan sát được.
Bối Cảnh: Từ Black Basta Đến Nimbus RAT
Kỹ thuật email bombing kết hợp Teams vishing và Quick Assist không phải phát sinh ngẫu nhiên trong campaign này. Nó có một lịch sử rõ ràng, và lịch sử đó cho biết campaign hiện tại sẽ đi đến đâu nếu không bị chặn sớm.
Tháng 4/2024, Rapid7 lần đầu ghi nhận một campaign social engineering gắn với Black Basta ransomware: nạn nhân bị spam hàng nghìn email mỗi giờ, sau đó nhận được liên hệ giả danh IT support. Microsoft sau đó xác nhận và đặt tên nhóm là Storm-1811, ghi nhận nhóm này dùng Quick Assist để triển khai Qakbot, Cobalt Strike, và cuối cùng là Black Basta ransomware.
Tháng 2/2025, chat log nội bộ của Black Basta bị leak, cho thấy mâu thuẫn nội bộ nghiêm trọng. Hoạt động social engineering gắn trực tiếp với Black Basta giảm rõ rệt sau đó. Nhưng Rapid7 ghi nhận pattern không biến mất, nó chuyển sang các affiliate của BlackSuit, những người dường như đã tiếp nhận playbook hoặc hấp thụ thành viên cũ của Black Basta. Cùng thời điểm, Rapid7 phát hiện phiên bản nâng cấp của Java RAT từng dùng trong các chiến dịch Black Basta, với C2 đã được migrate sang Google Drive và bổ sung khả năng tải và thực thi Java class mới trong memory.
Đến tháng 4/2026, ReliaQuest công bố báo cáo về một nhóm nhỏ cựu affiliate Black Basta đang chạy chiến dịch intrusion quy mô lớn, nhắm vào hơn 100 nhân sự cấp cao tại nhiều tổ chức từ tháng 5/2025, sử dụng đúng combo email bombing và Teams helpdesk impersonation.
Nimbus RAT, theo phân tích của TRU, chính là thế hệ tiếp theo của Java RAT mà Rapid7 đã mô tả. Việc malware family này tiếp tục được phát triển và mở rộng capability (đặc biệt là in-memory second-stage execution qua lệnh jc/jcb) cho thấy đội ngũ phát triển vẫn hoạt động tích cực, và initial access broker đứng sau campaign này có khả năng tiếp tục bán access cho các nhóm ransomware.
Thông Tin Chiến Dịch
| Thuộc tính | Chi tiết |
|---|---|
| Tên malware | Nimbus RAT (đặt tên bởi eSentire TRU) |
| Tên nội bộ malware | BackupBOX |
| Liên kết | Tiền nhiệm là Java RAT trong chiến dịch BlackSuit/Black Basta (Rapid7, 2025) |
| Thời gian phát hiện | Đầu tháng 4/2026 (incident cụ thể: 06/04/2026) |
| Loại tấn công | Initial Access Broker / Vishing / RAT, khả năng dẫn đến ransomware |
| Target sector | Pháp lý (legal industry), quy mô rộng hơn theo dữ liệu telemetry |
| Target region | Toàn cầu (172 khách hàng riêng biệt trong dataset của eSentire) |
| Công cụ chính | Microsoft Teams (vishing), Quick Assist (remote access), Pastebin (hướng dẫn), Nimbus RAT (Java) |
| C2 infrastructure | Google Drive / Google Sheets (Service Account và OAuth2 User), dự phòng Direct TLS socket |
| Đóng gói payload | InboxCorePro.zip chứa InboxCorePro.jar, InboxCorePro.reg, bundled OpenJDK 25.0.1 |
| Second-stage tool | InboxSetupPro (exfil qua OneDrive, target Signal Desktop và Outlook OST) |
| Nguồn phát hiện | eSentire Threat Response Unit (TRU) |
Quy Mô Chiến Dịch Trên Toàn Bộ Dataset
Trước khi đi vào incident cụ thể, cần nhìn vào bức tranh tổng thể mà TRU dựng lên từ 12 tháng telemetry, vì nó giải thích tại sao một incident đơn lẻ lại đáng được viết thành báo cáo dài.
Xu hướng volume tin nhắn Teams ngoại bộ đáng ngờ từ tháng 5/2025 đến tháng 5/2026
Dataset gồm 1.540 sự kiện tin nhắn Teams ngoại bộ đáng ngờ trên 172 môi trường khách hàng, trải dài từ tháng 5/2025 đến tháng 5/2026. Volume khá ổn định suốt nửa cuối 2025, rồi tăng vọt từ tháng 12/2025. Giai đoạn từ tháng 12/2025 đến tháng 3/2026 chiếm khoảng 57% tổng volume cả năm, riêng tháng 2/2026 ghi nhận 408 sự kiện, gần 8 lần baseline trung bình hàng tháng. Thời điểm này trùng với các báo cáo công khai về hoạt động Storm-1811 và 3AM ransomware tiếp tục khai thác vector Teams.
Ba đặc điểm về infrastructure đáng chú ý cho việc viết detection rule:
Thứ nhất, 49% (758/1.540) sender account dùng username mô phỏng IT/helpdesk, với các pattern phổ biến là helpdesk, helpdeskmanager, itsupport, it_assistance, admin, cloudsupport, service. Federation Brand Name hiển thị trên Teams cũng theo cùng pattern: IT Support, ITProtectionDepartment, infratechopsdesk, operationshelpcenter.
Thứ hai, 65% (995/1.540) sự kiện xuất phát từ domain *.onmicrosoft.com, tức trial tenant của Microsoft, không cần mua domain hay setup DNS. TRU xác định 235 tenant riêng biệt loại này, một số theo naming pattern lặp lại như infratechopsdesk, advcloudopshelp, helpsupportinfra, hoặc dạng auto-generate teams00XXXX. Tenant có volume cao nhất xuất hiện ở 10 khách hàng khác nhau, một mức độ tái sử dụng cho thấy đây là shared infrastructure của một nhóm actor.
Thứ ba, với các domain không thuộc onmicrosoft.com, có một cluster domain .top đăng ký qua PDR Ltd/PublicDomainRegistry, phần lớn được dùng để gửi tin nhắn Teams trong 24-72 giờ sau khi đăng ký. 37% các domain này có tuổi đời dưới 7 ngày tại thời điểm tấn công. Naming theo theme IT/security: system-clean[.]top, helpdock[.]top, info-secure[.]top, serviceprohub[.]top, và một family "scan" gồm scanseq[.]top, scan-security[.]top, updt-scansecurity[.]top.
Về hạ tầng gửi, 80% (1.229/1.540) sự kiện đến từ hosting/datacenter ASN thay vì IP space của Microsoft hoặc ISP doanh nghiệp thông thường. Các ASN lặp lại nhiều lần gồm NKtelecom INC (US), WorkTitans B.V. (DE), GLOBAL CONNECTIVITY SOLUTIONS LLP (DE), GTHost (US), M247 Europe SRL, NovoServe B.V. (NL). 66 IP nguồn xuất hiện ở 2 khách hàng trở lên, 6 IP trong số đó xuất hiện ở 10 khách hàng trở lên. 221 sự kiện được flag dùng VPN, 74 sự kiện dùng Tor.
Một biến thể đáng lo ngại hơn: một phần nhỏ hoạt động xuất phát từ tenant hợp pháp đã bị compromise (trường học, doanh nghiệp nhỏ, NGO). Với biến thể này, sender tenant có lịch sử đăng ký nhiều năm, domain thật, và Teams external-user banner không có gì đáng ngờ về mặt visual.
Timeline Sự Kiện (Incident 06/04/2026)
| Thời điểm (UTC) | Sự kiện | Nguồn telemetry |
|---|---|---|
| 16:00 - 17:30 | Email bombing đỉnh điểm: 282 email trong 90 phút, 26 email/phút, từ 116 domain và 98 IP gửi khác nhau | M365 mail-flow logs |
| ~17:45 | Tài khoản Teams ngoại bộ liên hệ nạn nhân, mạo danh helpdesk | EDR / Teams session log |
| 17:48 | Nạn nhân mở QuickAssist.exe | EDR, parent process explorer.exe |
| 17:52 | Threat actor chạy net time /domain qua cmd.exe để recon |
EDR |
| 17:53 | Nạn nhân truy cập pastebin[.]com/G6jA0PLU | Browser history |
| 17:54 - 17:56 | Tải InboxCorePro.zip từ OneDrive cá nhân của tài khoản bị compromise trên tenant <redacted>-my.sharepoint.com |
Download history |
| 17:59:28 | regedit.exe import InboxCorePro.reg | EDR |
| 17:59:32 | javaw.exe thực thi InboxCorePro.jar, Nimbus RAT bắt đầu hoạt động | EDR |
| 18:04 | Threat actor quay lại qua phiên Quick Assist thứ hai | EDR |
| 18:04+ | eSentire MDR cô lập host | MDR response log |
Tổng thời gian từ email bombing đến RAT chạy: dưới 4 giờ. Từ lần liên hệ Teams đầu tiên đến khi RAT thực thi: dưới 20 phút.
Kill Chain Chi Tiết
Giai Đoạn 1: Email Bombing Để Tạo Pretext
Cái gì: nạn nhân nhận 282 email trong 90 phút, đỉnh điểm 26 email/phút, từ 116 domain gửi và 98 IP khác nhau. Subject line bằng tiếng Anh, Đức, Hà Lan, Tây Ban Nha, Nhật, Pháp, Ba Lan. Nội dung mô phỏng dịch vụ subscription hợp pháp, nền tảng e-commerce, government portal, và luồng xác nhận tài khoản SaaS. Các email này không bị spoof và không độc hại, chúng là email transactional thật được sinh ra khi attacker tự nhập email của nạn nhân vào hàng trăm form đăng ký công khai.
Tại sao: mục tiêu của giai đoạn này hoàn toàn operational, không phải technical. Một hộp thư bị tràn ngập tạo ra frustration thật và một pretext hoàn toàn hợp lý để nạn nhân chấp nhận "hỗ trợ" khi có ai đó liên hệ đề nghị giúp xử lý.
Hệ quả: vì email không độc hại theo nghĩa truyền thống (không chứa link, attachment, hay payload), filter dựa trên content thường không chặn được. Nhưng đây lại là signal phát hiện sớm nhất và đáng tin cậy nhất trong toàn bộ kill chain, vì nó xảy ra trước khi nạn nhân nhận bất kỳ tin nhắn Teams nào.
Volume email bombing trong khung 16:00-17:30 UTC ngày 06/04/2026, đạt đỉnh 26 email/phút
Giai Đoạn 2: Vishing Qua Microsoft Teams
Cái gì: khoảng 45 phút sau đỉnh email bombing, một external Teams account liên hệ nạn nhân, sử dụng email username và Federation Brand Name theo pattern mạo danh IT helpdesk đã mô tả ở phần dataset. Actor nhắc đến tình trạng spam mà nạn nhân vừa trải qua và đề nghị giúp xử lý.
Tại sao: timing 45 phút không phải ngẫu nhiên. Nó đủ để nạn nhân cảm thấy khó chịu thực sự, nhưng đủ gần để liên kết trực tiếp giữa "vấn đề" và "giải pháp" trong đầu nạn nhân, làm tăng đáng kể tỷ lệ tin tưởng vào người liên hệ.
Hệ quả: Microsoft Teams external messaging là kênh được nhiều tổ chức cho phép theo default, và banner "external user" không đủ để cảnh báo người dùng vốn đang trong trạng thái stress vì hộp thư bị spam.
Giai Đoạn 3: Quick Assist Và Recon Ban Đầu
Cái gì: tại 17:48 UTC, nạn nhân chạy QuickAssist.exe. EDR ghi nhận parent process là explorer.exe, xác nhận đây là user-initiated. Trong vòng 4 phút sau khi phiên Quick Assist được thiết lập, threat actor đã chạy lệnh net time /domain qua cmd.exe để recon thông tin domain.
Tại sao: Quick Assist là remote-access tool có sẵn trong Windows, được Microsoft ký, và hầu như không bị flag bởi antivirus hay application whitelisting theo default. Đây là lựa chọn tối ưu để vượt qua các kiểm soát chặn cài đặt RMM tool bên thứ ba như AnyDesk hay TeamViewer.
Hệ quả: ngay khi remote session được thiết lập, threat actor có full keyboard/mouse access như một user hợp lệ. Mọi hành động tiếp theo đều trông như hoạt động bình thường của chính nạn nhân trên endpoint của họ.
Giai Đoạn 4: Pastebin Như Một "Tờ Hướng Dẫn"
Cái gì: thay vì gõ lệnh trực tiếp, threat actor dán một URL vào Teams chat: pastebin[.]com/G6jA0PLU. Nạn nhân truy cập URL này tại 17:53 UTC. Nội dung là một checklist 4 dòng đơn giản, không phải script hay code obfuscated: dòng 1 là URL download payload, dòng 3 là persistence path, dòng 5 là extraction directory, dòng 7 là tên archive.
Tại sao: cách tiếp cận này cho phép threat actor "đọc hướng dẫn" qua điện thoại trong khi nạn nhân tự thực hiện từng bước trên màn hình. Từ góc nhìn nạn nhân, trải nghiệm này không khác gì được IT support hướng dẫn cài đặt phần mềm. Format checklist con người đọc được cũng cho thấy đây là tài liệu tái sử dụng qua nhiều cuộc gọi vishing khác nhau, chỉ thay đổi URL download.
Hệ quả: Pastebin gần như không bao giờ bị chặn ở network layer vì nó được dùng rộng rãi cho mục đích hợp pháp. Đây cũng là một forensic artifact quan trọng: nếu phát hiện một Teams vishing attempt, kiểm tra browser history xem có truy cập Pastebin trong cùng khung thời gian có thể lộ ra payload URL trước khi nó được thực thi.
Giai Đoạn 5: Payload Từ Tenant M365 Bị Compromise
Cái gì: link Pastebin trỏ đến InboxCorePro.zip (SHA-256: 9E5B1E10AD6904D3F5B48D38470CD57263974640A27D13CF793EF026D3D6B886), được host trong OneDrive cá nhân của một tài khoản trên tenant SharePoint <redacted>-my.sharepoint.com. Đây là một tenant M365 hợp pháp đã bị compromise và dùng làm điểm staging payload, đúng pattern "tenant-relay" mà TRU mô tả ở phần dataset. TRU từng quan sát chính URL SharePoint này host một cấu hình khác của cùng malware family trong một incident riêng biệt.
Tại sao: SharePoint/OneDrive là dịch vụ Microsoft, gần như chắc chắn không bị block, và việc tái sử dụng cùng compromised tenant cho nhiều campaign cách nhau vài tuần cho thấy đây là infrastructure đã được thiết lập ổn định của threat actor.
Hệ quả: archive giải nén ra một payload Java duy nhất, InboxCorePro.jar (SHA-256: 91E523A46F3BB860AC2E5800B7E1EC89D75A2408410B9CD25EEBC17C8D7A92BC), kèm theo InboxCorePro.reg và một bản OpenJDK 25.0.1 đầy đủ được bundle sẵn. Việc bundle JDK giúp payload chạy được trên bất kỳ máy Windows nào, bất kể máy đó có cài Java hay không, và cho phép threat actor kiểm soát chính xác runtime nào sẽ thực thi file JAR. Download này bị Netskope flag là potentially malicious nhưng vẫn hoàn tất, vì nạn nhân chủ động cho phép qua remote session.
Giai Đoạn 6: Thực Thi Nimbus RAT
Cái gì: nạn nhân làm theo checklist Pastebin, giải nén archive vào C:\ProgramData\InboxCorePro\, import InboxCorePro.reg qua regedit.exe (17:59:28 UTC), đặt launcher vào Startup folder. Tại 17:59:32 UTC, javaw.exe (bản OpenJDK 25.0.1 ký bởi Oracle, SHA-256: 99813F3D0625E880158C68039C0E2FBF488DB0BE3DB77CD1CE6D382644193F0E) thực thi InboxCorePro.jar. Toàn bộ logic độc hại nằm trong file JAR, binary javaw.exe hoàn toàn legitimate.
Tại sao: parent process của mọi lần gọi javaw.exe là explorer.exe, khớp với cơ chế Startup folder shortcut. Điều này nghĩa là từ góc nhìn EDR thuần process-tree, đây trông giống một ứng dụng Java người dùng tự khởi chạy, không có injection hay parent process bất thường nào.
Hệ quả: phân tích static của TRU trên InboxCorePro.jar cho thấy 8 package custom với tên được đặt bằng các từ tiếng Anh ngẫu nhiên làm lớp obfuscation nhẹ: BlackStatelessness, DomitianUndrapedEpigrammatize, EpitaphDunderhead, ExtricableSophisticated, Goferindubitably, sententiousness, Splendrousstile, WorldlySiege. Các package còn lại (com, io, javax, net, org) là dependency bên thứ ba bao gồm Google API client library, JNA, và Apache HttpClient.
Entry point class Goferindubitably.Audiometric thực hiện chuỗi khởi tạo: tạo lock file %TEMP%\java_app.lock để đảm bảo single-instance, đăng ký JVM shutdown hook xóa lock file khi exit, verify config blob đã embed bằng RSA public key 4096-bit hardcoded (config được ký bởi private key của operator, nên implant chỉ chấp nhận config do chính operator tạo), kiểm tra sự tồn tại của license.txt trong cùng directory với JAR (nếu không có, gọi System.exit(0), đây là kill switch), relaunch dưới javaw.exe để ẩn console window, rồi vào polling loop C2.
Malware tự định danh nội bộ là BackupBOX, với campaign UUID hardcoded là 1hc1his4gmto0q1.
Phân Tích Kỹ Thuật Chi Tiết: Nimbus RAT
Kiến Trúc C2 Qua Google Drive
Đặc điểm quan trọng nhất về mặt operational của Nimbus RAT là toàn bộ command delivery và data exfiltration đi qua Google API endpoint hợp pháp, khiến traffic mạng không thể phân biệt với một session Google Workspace thông thường.
Kiến trúc C2 với ba loại channel được cấu hình theo thứ tự ưu tiên
Ba loại C2 channel được implement, lựa chọn theo config đã decrypt:
| Channel | Xác thực | Poll bình thường | Poll wakeup |
|---|---|---|---|
Google Drive, Service Account (Keenplainspokenness) |
JSON key kiểu ServiceAccountCredentials | 45-75 giây | 4-8 giây |
Google Drive, OAuth2 User (Intervention) |
client_id + client_secret + refresh_token | 30-60 giây | 4-8 giây |
Direct TLS Socket (phonemicsVandalism) |
Không có (certificate validation bị tắt qua dummy X509TrustManager) | 45-75 giây | 4-8 giây |
Channel Google Drive poll một file lệnh tên entry_{campaignUUID} trong một folder Drive đã cấu hình. Response được viết vào exit_{campaignUUID}. Config update được stage với prefix newconfig_. Channel OAuth2 (Intervention) dùng một DriveFactory cache các Drive instance đã authenticate trong ConcurrentHashMap, kèm Retryer với 7 lần thử tối đa và exponential backoff full jitter để xử lý rate limit của Google API. Trong sample TRU phân tích, channel TLS socket không được cấu hình, xác nhận Google Drive là channel C2 active duy nhất cho campaign này.
Một "wakeup mode" được implement: threat actor có thể gửi lệnh giảm polling interval từ 45-75 giây xuống 4-8 giây trên tất cả channel đang active đồng thời, kéo dài tối đa 10 phút, cho phép thao tác gần như real-time khi cần hands-on activity.
Toàn bộ C2 traffic được mã hóa RSA bằng public key 4096-bit hardcoded trong JAR. Message lớn được chia thành chunk kích thước cố định và mỗi chunk xử lý RSA độc lập. Lệnh gửi đến implant được tạo bởi threat actor dùng private key tương ứng, đảm bảo implant chỉ xử lý config có nguồn gốc từ chính threat actor. Dữ liệu implant gửi đi được mã hóa bằng public key theo chunk cố định, nghĩa là chỉ ai giữ private key mới decrypt được response.
Hệ quả cho detection: chặn docs.google.com hay googleapis.com không khả thi trong môi trường đang dùng Google Workspace. Detection bắt buộc phải dựa vào behavioral signal ở process level, ví dụ javaw.exe chạy một JAR không thuộc danh sách ứng dụng Java được phê duyệt và đồng thời gọi ra Google Drive API endpoint, hoặc OAuth consent grant trong Google Workspace audit log cho một ứng dụng tên BackupBOX với scope Drive.
Bảng Lệnh Đầy Đủ Của Nimbus RAT
Mọi lệnh được dispatch qua command handler trong Splendrousstile.SomewhatJerky, với timeout 598 giây mỗi lệnh.
| Nhóm | Lệnh | Chi tiết |
|---|---|---|
| Shell | cmd | Chạy lệnh tùy ý qua cmd.exe /c |
| Shell | r | Thực thi trực tiếp qua ProcessBuilder, không qua cmd.exe, timeout 30 giây |
| Shell | exec | Fire-and-forget, stdout/stderr redirect vào NUL |
| File system | ls / dir | List directory kèm timestamp và size |
| File system | type | Đọc nội dung file theo path |
| File system | del | Xóa file |
| File system | rm | Xóa directory đệ quy |
| File system | cd | Đổi working directory |
| File system | tree | Walk directory đệ quy, tối đa 5.000 entry |
| File system | find | Tìm file theo regex, tối đa 5.000 kết quả |
| File system | za / tz / z | Zip directory, zip một file inline, extract zip (có thể kèm password) |
| Đánh cắp credential | lf | Hiển thị dialog giả Windows Security bằng Java Swing |
| Đánh cắp credential | cf | Gọi trực tiếp CredUIPromptForCredentialsW qua JNA |
| Recon | (tương đương ipconfig) | Thông tin network adapter đầy đủ qua GetNetworkParams + GetAdaptersInfo (JNA) |
| Recon | (tương đương sysinfo) | OS, phiên bản Java, user, memory, env vars, last reboot |
| Recon | (tương đương net time) | Domain, USERDNSDOMAIN, group membership của user hiện tại |
| Registry | reg query/add/delete | Truy cập đầy đủ HKLM, HKCU, HKCR, HKU, HKCC qua Advapi32Util |
| Screenshot | screenshot | Chụp full-screen PNG qua Robot.createScreenCapture(), zip rồi upload |
| Second-stage | jc / jcb | Compile và chạy Java source trong memory (blocking/non-blocking) qua javax.tools |
| C2 management | config update | Decrypt và áp dụng config blob RSA mới |
| C2 management | ping | Test connectivity đến tất cả channel C2 đã cấu hình |
| Self-destruct | self | timeout /t 2 & RD /S /Q {jdkPath} rồi System.exit(0) |
Hai Cơ Chế Đánh Cắp Credential
Lệnh lf render một Java Swing JFrame mô phỏng dialog Windows Security thật. Các thành phần UI xác nhận gồm title "Windows Security", header "Sign in", prompt "Enter your credentials", field username điền sẵn theo format DOMAIN\username, field password, và checkbox "Remember my credentials". Dialog luôn yêu cầu nhập password hai lần: lần đầu trả về lỗi giả "Password is incorrect. Please try again." và lưu lại input một cách âm thầm, lần hai đóng dialog. Cả hai lần nhập đều được gửi về cho threat actor. Dialog dùng User32.AttachThreadInput và SetForegroundWindow để cướp keyboard focus từ window hiện tại.
Lệnh cf gọi trực tiếp API thật CredUIPromptForCredentialsW qua JNA binding vào credui.dll. Dialog text xác nhận: caption "Login", message "Enter your credentials". Sai lần đầu sẽ gọi MessageBoxA với thông báo lỗi password sai. Cho phép nhập lại một lần rồi đóng. Tự đóng sau khoảng 10 phút qua User32.PostMessage(WM_CLOSE). Tạo một JFrame vô hình, always-on-top để cướp foreground focus trước khi gọi native prompt.
Lý do thiết kế hai lần nhập password là một chi tiết đáng chú ý cho defender: nó tăng đáng kể khả năng thu được password đúng, vì người dùng thường gõ sai lần đầu do bị làm phiền hoặc đánh máy nhanh, và "lỗi" giả tạo ra một lý do hợp lý để họ thử lại.
Thực Thi Mã Java Trong Memory: jc Và jcb
Lệnh jc và jcb implement một Java plugin loader đầy đủ trong memory thông qua class DomitianUndrapedEpigrammatize.MutagenInchoateness. Threat actor gửi Java source code đã encode Base64. Các dòng bắt đầu bằng /// https:// ở đầu source xác định URL của dependency JAR cần tải về %TEMP%\libs\ (được tái sử dụng cho lần gọi sau nếu đã tồn tại).
Source được compile bằng javax.tools.JavaCompiler, không viết file nào ra disk: bytecode đã compile được lưu trong memory qua một custom JavaClassObject, đặt trong MemoryClassLoader backed bởi HashMap, và class kết quả được instantiate qua reflection bằng cách gọi method start(). Lệnh jc blocking và trả kết quả ngay, jcb chạy trong background thread và return ngay lập tức.
Cơ chế này cho phép operator triển khai capability hoàn toàn mới sau khi đã compromise mà không cần drop thêm file nào lên disk, vô hiệu hóa hiệu quả các kiểm soát dựa trên file hash hay signature cho bất kỳ second-stage logic nào được gửi qua đường này.
Persistence: Quyết Định Của Operator, Không Phải Của RAT
Nimbus RAT bản thân không tự cài persistence. Trong incident này, persistence được pre-stage thủ công qua checklist Pastebin (Startup folder path) và file InboxCorePro.reg. Nếu host bị isolate trước khi threat actor chủ động gửi lệnh persistence qua C2, infection không sống sót qua reboot.
Việc tách persistence ra khỏi RAT binary đồng nghĩa cơ chế persistence có thể thay đổi tùy campaign mà không cần sửa file JAR, làm giảm giá trị của hash-based detection cho riêng khía cạnh này.
Second-Stage Tool: InboxSetupPro
Trong quá trình enumerate hạ tầng Google Drive của threat actor, TRU phát hiện một tool second-stage được triển khai sau Nimbus RAT trên ít nhất một victim đã được xác nhận (thuộc một tổ chức khác với khách hàng ngành luật trong incident chính). Tool này được TRU đặt tên InboxSetupPro dựa trên install path C:\ProgramData\InboxSetupPro\, khác biệt với Nimbus RAT và dùng OneDrive thay vì Google Drive cho exfiltration.
Config file thu được từ Drive của threat actor chứa pattern targeting sau:
local://C:/Users/<REDACTED>/AppData/roaming/signal/attachments.noindex/**
Pattern này nhắm trực tiếp vào local attachment store của Signal Desktop, tức cache toàn bộ file, hình ảnh, document được chia sẻ qua ứng dụng nhắn tin mã hóa Signal. Glob đệ quy (/**) lấy toàn bộ attachment trên mọi conversation của victim cụ thể.
TRU cũng quan sát một archive ZIP nặng 1,13 GB trong cùng folder Drive, được đặt tên theo địa chỉ email của victim, khớp với một file Outlook OST (offline mailbox) đã exfiltrate.
Kết hợp config file, targeting pattern, và archive thu được, có thể kết luận mục tiêu post-compromise của threat actor vượt xa initial access đơn thuần: dữ liệu giao tiếp từ cả kênh mã hóa (Signal) và kênh email truyền thống (Outlook) đều bị nhắm đến một cách có chủ đích.
MITRE ATT&CK Mapping
| Tactic | Technique ID | Technique Name | Triển khai trong chiến dịch |
|---|---|---|---|
| Reconnaissance | T1589.002 | Gather Victim Identity Information: Email Addresses | Thu thập email nạn nhân để dùng cho email bombing |
| Resource Development | T1583.001 | Acquire Infrastructure: Domains | Cluster domain .top mới đăng ký, đa ngôn ngữ |
| Resource Development | T1585.002 | Establish Accounts: Email Accounts | Throwaway *.onmicrosoft.com tenant dùng để gửi Teams message |
| Resource Development | T1586.002 | Compromise Accounts: Email Accounts | Tenant M365 hợp pháp bị compromise dùng để host payload |
| Initial Access | T1566.004 | Phishing: Spearphishing Voice | Vishing qua Microsoft Teams mạo danh IT helpdesk |
| Execution | T1204.002 | User Execution: Malicious File | Nạn nhân tự giải nén và chạy InboxCorePro.jar theo hướng dẫn Pastebin |
| Execution | T1059.003 | Command and Scripting Interpreter: Windows Command Shell | Lệnh cmd/r/exec của Nimbus RAT chạy qua cmd.exe và ProcessBuilder |
| Execution | T1620 | Reflective Code Loading | Lệnh jc/jcb compile và chạy Java code trong memory không drop file |
| Persistence | T1547.001 | Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder | InboxCorePro.reg và shortcut trong Startup folder |
| Defense Evasion | T1027 | Obfuscated Files or Information | 8 package custom đặt tên bằng từ tiếng Anh ngẫu nhiên |
| Defense Evasion | T1140 | Deobfuscate/Decode Files or Information | Config blob được giải mã bằng RSA 4096-bit tại runtime |
| Defense Evasion | T1218 | System Binary Proxy Execution | javaw.exe hợp pháp (Oracle-signed) chạy logic độc hại trong JAR |
| Defense Evasion | T1620 | Reflective Code Loading | (xem Execution) |
| Command and Control | T1219.002 | Remote Access Software | Quick Assist dùng làm kênh remote access ban đầu |
| Command and Control | T1102.002 | Web Service: Bidirectional Communication | Google Drive/Sheets dùng làm C2 channel chính |
| Command and Control | T1071.001 | Application Layer Protocol: Web Protocols | C2 traffic qua HTTPS đến Google API endpoint |
| Command and Control | T1573.002 | Encrypted Channel: Asymmetric Cryptography | RSA 4096-bit cho toàn bộ C2 traffic |
| Collection | T1056.002 | Input Capture: GUI Input Capture | Dialog giả lf/cf đánh cắp credential |
| Collection | T1113 | Screen Capture | Lệnh screenshot |
| Collection | T1005 | Data from Local System | Lệnh type/ls/find đọc file local |
| Collection | T1213 | Data from Information Repositories | InboxSetupPro target Signal attachments và Outlook OST |
| Collection | T1560 | Archive Collected Data | Lệnh za/tz/z |
| Discovery | T1082 | System Information Discovery | Lệnh sysinfo equivalent |
| Discovery | T1016 | System Network Configuration Discovery | Lệnh ipconfig equivalent |
| Discovery | T1033 | System Owner/User Discovery | net time /domain, group membership |
| Exfiltration | T1567.002 | Exfiltration to Cloud Storage | Exfil qua Google Drive (Nimbus RAT) và OneDrive (InboxSetupPro) |
Detection
Email Bombing: Tín Hiệu Sớm Nhất
Đây là điểm phát hiện sớm nhất trong toàn bộ kill chain, xảy ra trước cả lần liên hệ Teams đầu tiên. Một spike từ 20 email/phút trở lên từ nhiều sender domain khác nhau, với nội dung kiểu xác nhận subscription/account confirmation, là tín hiệu rất đáng tin cậy.
index=o365 sourcetype="o365:management:activity" Operation="MailItemsAccessed" OR Operation="Receive"
| bin _time span=1m
| stats count as email_count dc(SenderAddress) as unique_senders dc(SenderDomain) as unique_domains by UserId, _time
| where email_count >= 20 AND unique_domains >= 10
| sort -email_count
Tin Nhắn Teams Ngoại Bộ Từ Throwaway Tenant
Dựa trên pattern 65% sender từ *.onmicrosoft.com và các username/Federation Brand Name theo theme IT/helpdesk.
index=o365 sourcetype="o365:management:activity" Operation="MessageSent" Workload="MicrosoftTeams"
| eval sender_domain=lower(mvindex(split(SenderUserId, "@"), 1))
| where like(sender_domain, "%.onmicrosoft.com")
| eval suspicious_name=if(match(lower(SenderUserId),
"helpdesk|itsupport|it_assistance|it\.support|admin|cloudsupport|service|infratech|cloudops|scan"), 1, 0)
| where suspicious_name=1
| table _time, SenderUserId, ParticipantsInfo, sender_domain
javaw.exe Chạy JAR Từ Path Bất Thường, Parent Là explorer.exe
Đây là detection trung tâm cho chính Nimbus RAT, áp dụng được dù IOC hash hay tên file thay đổi giữa các campaign.
| tstats count from datamodel=Endpoint.Processes
where Processes.process_name="javaw.exe" Processes.process="*-jar*"
by Processes.process, Processes.parent_process_name, Processes.process_path,
Processes.dest, Processes.user, _time
| where Processes.parent_process_name="explorer.exe"
| where NOT match(Processes.process_path, "(?i)\\\\Program Files\\\\Java\\\\|\\\\Program Files \\(x86\\)\\\\Java\\\\")
| sort -_time
regedit.exe Import File .reg Từ ProgramData, Gần Thời Điểm javaw.exe Chạy
| tstats count from datamodel=Endpoint.Processes
where Processes.process_name="regedit.exe" Processes.process="*ProgramData*.reg*"
by Processes.process, Processes.dest, Processes.user, _time
| sort -_time
Kết hợp hai query trên trong cùng correlation search với time window 5 phút để giảm false positive và tăng độ tin cậy của alert.
Host-Based Indicator: java_app.lock
| tstats count from datamodel=Endpoint.Filesystem
where Endpoint.Filesystem.file_name="java_app.lock"
AND Endpoint.Filesystem.file_path="*\\Temp\\*"
by Endpoint.Filesystem.dest, Endpoint.Filesystem.file_path, _time
Google Workspace: OAuth Grant Cho Ứng Dụng "BackupBOX"
Với tổ chức dùng Google Workspace, theo dõi OAuth consent grant với scope Drive cho ứng dụng tên BackupBOX là indicator gần như chắc chắn về compromise.
index=gws sourcetype="gws:reports:activity" eventName="Authorize"
| search application_name="BackupBOX" OR scope="*drive*"
| table _time, actor_email, application_name, scope, client_id
Network: Proxy Log Với Process Attribution
Vì không thể block googleapis.com/docs.google.com trong môi trường dùng Google Workspace, alert cần dựa vào process khởi tạo connection.
index=proxy dest_host IN ("*.googleapis.com", "docs.google.com", "drive.google.com")
| search src_process IN ("javaw.exe") OR src_process_path="*ProgramData*"
| table _time, src_ip, user, dest_host, src_process, src_process_path
QuickAssist.exe Execution (Sigma, có thể convert SPL)
Tham khảo Sigma rule chuẩn cho hành vi khởi chạy Quick Assist và DNS query tới remoteassistance.support.services.microsoft.com. Rule này có false positive rate cao với tổ chức dùng Quick Assist hợp pháp, nên cần baseline trước khi alert, nhưng vẫn hữu ích như một correlation signal khi kết hợp với email bombing alert xảy ra trước đó trong cùng ngày.
Nhận Định
Điều đáng chú ý nhất ở campaign này không phải Nimbus RAT bản thân, malware này về kỹ thuật không có gì đột phá, một Java RAT với C2 qua cloud storage là pattern đã được ghi nhận từ năm 2025. Điều đáng chú ý là tốc độ và mức độ chuẩn hóa của initial access vector.
20 phút từ liên hệ Teams đầu tiên đến RAT chạy là một cửa sổ phản ứng cực kỳ hẹp cho bất kỳ SOC nào dựa vào alert triage truyền thống. Nếu detection chỉ kích hoạt ở giai đoạn javaw.exe thực thi, phần lớn thời gian phản ứng đã bị tiêu tốn. Email bombing kéo dài 90 phút trước đó là cơ hội thực sự duy nhất để can thiệp trước khi con người tham gia vào kill chain.
Số liệu 1.540 sự kiện trên 172 khách hàng trong 12 tháng, với volume tăng 8 lần trong tháng 2/2026, cho thấy đây không phải hoạt động của một nhóm nhỏ làm thủ công. Mức độ tái sử dụng infrastructure, throwaway tenant xuất hiện ở 10 khách hàng khác nhau, 6 IP nguồn xuất hiện ở 10 khách hàng trở lên, là dấu hiệu của tooling tự động hóa và một affiliate network có quy mô.
Liên kết với BlackSuit/Black Basta qua Rapid7 đặt campaign này vào đúng vị trí của nó trong economy ransomware: đây là initial access, không phải mục tiêu cuối. Tổ chức bị compromise qua Nimbus RAT nên giả định rằng access đã hoặc sẽ được bán cho một ransomware affiliate, và pivot từ "đã chặn được RAT" sang "đã loại bỏ hoàn toàn access" đòi hỏi review kỹ hơn nhiều, bao gồm kiểm tra credential đã bị thu thập qua lệnh lf/cf, vì hai lệnh này hoạt động độc lập với chính RAT và có thể đã thành công trước khi RAT bị phát hiện.
Điểm cần thay đổi trong tư duy phòng thủ: mọi platform trong kill chain này (Teams, SharePoint, Quick Assist, Pastebin, Google Drive) đều là dịch vụ hợp pháp và không thể block toàn diện. Defense phải chuyển từ "chặn dịch vụ xấu" sang "phát hiện hành vi bất thường của dịch vụ tốt", điều này đòi hỏi correlation giữa nhiều log source (mail flow, Teams audit log, EDR process tree, browser history, cloud API audit log) mà nhiều SOC hiện tại chưa làm tốt.
Khuyến Nghị
Ngay lập tức (0-24 giờ):
Vô hiệu hóa communication với trial Microsoft Teams tenant (*.onmicrosoft.com) trong Teams admin center. Đây là control đơn lẻ có impact cao nhất, chặn được 65% vector quan sát được trong dataset của TRU. Cấu hình Teams external access yêu cầu approval thủ công trước khi nhận message từ tổ chức ngoài.
Triển khai alert cho mailbox volume spike (≥20 email/phút từ ≥10 domain khác nhau trong 1 phút) trên mail gateway hoặc qua O365 management activity log. Đây là signal sớm nhất và ít false positive nhất.
Disable Quick Assist qua policy trên endpoint không có nhu cầu IT support hợp pháp. Nếu vẫn cần Quick Assist, giới hạn chỉ cho phép kết nối từ tài khoản helpdesk đã được pre-approve.
Ngắn hạn (1-7 ngày):
Triển khai các SPL detection cho javaw.exe chạy JAR từ path bất thường với parent explorer.exe, regedit.exe import .reg từ ProgramData, và sự xuất hiện của java_app.lock trong %TEMP%. Đây là các signal hoạt động độc lập với hash, có khả năng phát hiện các biến thể tương lai của Nimbus RAT.
Nếu tổ chức dùng Google Workspace, audit OAuth application grant có scope Drive, đặc biệt với tên ứng dụng BackupBOX hoặc bất kỳ application name lạ nào. Nếu dùng Microsoft 365, tương tự cho OneDrive/Graph permission grant liên quan đến InboxSetupPro pattern.
Cập nhật security awareness training: nhấn mạnh rằng IT helpdesk nội bộ thật sẽ không bao giờ liên hệ qua tài khoản Teams ngoại bộ, và một chuỗi "hộp thư bị spam rồi có người tự xưng IT liên hệ giúp" là một social engineering pattern đã được tài liệu hóa rộng rãi. Hướng dẫn user trong trường hợp này gọi lại số IT helpdesk đã biết trước trước khi hành động.
Dài hạn:
Xây dựng correlation rule liên kết email bombing alert với Teams external message alert trong cùng khung 2 giờ cho cùng user, tạo ra một alert tổng hợp với độ tin cậy cao hơn từng signal riêng lẻ.
Review và áp dụng application control policy chặn thực thi javaw.exe (và các Java runtime khác) từ C:\ProgramData\ hoặc các user-writable directory ngoài đường dẫn cài đặt Java chuẩn.
Đưa Pastebin vào watchlist cho browser activity diễn ra ngay sau một Teams external message, đặc biệt trong giờ làm việc nếu Pastebin không phải công cụ được phê duyệt cho mục đích nghiệp vụ.
Nếu xác nhận một host bị nhiễm Nimbus RAT, không chỉ xóa license.txt (kill switch chỉ ngăn relaunch sau reboot, không phải remediation đầy đủ). Cần terminate toàn bộ javaw.exe process liên quan đến JAR, xóa toàn bộ C:\ProgramData\InboxCorePro\, xóa entry Startup folder, và đánh giá re-image host vì operator có thể đã thiết lập persistence khác qua C2 mà chưa quan sát được. Đồng thời reset credential của user bị ảnh hưởng, vì lệnh lf/cf có thể đã thu được password trước khi bị phát hiện.
Indicators of Compromise
# File Hash - SHA256
9E5B1E10AD6904D3F5B48D38470CD57263974640A27D13CF793EF026D3D6B886 # InboxCorePro.zip (payload archive)
91E523A46F3BB860AC2E5800B7E1EC89D75A2408410B9CD25EEBC17C8D7A92BC # InboxCorePro.jar (Nimbus RAT payload)
99813F3D0625E880158C68039C0E2FBF488DB0BE3DB77CD1CE6D382644193F0E # javaw.exe (legitimate Oracle OpenJDK 25.0.1, bundled)
# Network pattern (defanged)
pastebin[.]com/G6jA0PLU # Instruction checklist (4-line: download URL / persistence path / extraction dir / archive name)
# Host artifact
C:\ProgramData\InboxCorePro\ # Nimbus RAT install directory
C:\ProgramData\InboxSetupPro\ # Second-stage tool install directory
%TEMP%\java_app.lock # Single-instance lock file, host indicator của Nimbus RAT init
%TEMP%\libs\ # Dependency JAR cache cho lệnh jc/jcb
InboxCorePro.reg # Registry import file dùng để pre-stage persistence
license.txt # Kill switch file, absence khiến malware tự exit
# Cloud / SaaS artifact
BackupBOX # Tên nội bộ malware, có thể xuất hiện trong OAuth app grant (Google Workspace, scope Drive)
1hc1his4gmto0q1 # Campaign UUID hardcoded trong config Nimbus RAT
entry_{campaignUUID} / exit_{campaignUUID} / newconfig_* # Naming pattern file lệnh C2 trên Google Drive
# Behavioral IOC
javaw.exe -jar <path> với parent process explorer.exe, path nằm ngoài Program Files\Java
regedit.exe import file .reg từ C:\ProgramData ngay trước/sau javaw.exe execution
Mailbox nhận >20 email/phút từ >=10 sender domain khác nhau trong cùng 1 phút
Tin nhắn Teams ngoại bộ từ *.onmicrosoft.com với username/brand name theo theme helpdesk/IT/cloudops
Truy cập pastebin[.]com ngay sau một Teams external message từ tài khoản chưa từng giao tiếp trước đó
Lưu ý: danh sách IOC đầy đủ (bao gồm domain .top, IP nguồn, throwaway tenant name) được eSentire công bố trên GitHub repository riêng. Vì naming convention của các package custom (BlackStatelessness, Goferindubitably, v.v.) và campaign UUID có thể thay đổi giữa các đợt deploy, ưu tiên các behavioral detection ở trên hơn là hash matching đơn lẻ.
Nguồn tham khảo:
- Nimbus RAT: How Threat Actors Are Abusing Microsoft Teams and Google Drive to Deploy a Java RAT — eSentire Threat Response Unit (TRU)
- New Microsoft Teams Vishing Attack Exploits Quick Assist to Deploy Stealthy Malware — Daily CyberSecurity / Do Son
- BlackSuit Continues Social Engineering Attacks in Wake of Black Basta's Internal Conflict — Rapid7
- Threat actors misusing Quick Assist in social engineering attacks leading to ransomware — Microsoft Security Blog
- Storm-1811, Group G1046 — MITRE ATT&CK
- Black Basta's playbook lives on as former affiliates launch fast-scale intrusion campaign — CyberScoop / ReliaQuest
- 3AM Ransomware Adopts Email Bombing, Vishing Combo Attack — Dark Reading





