# TWINLOOT: Khi Microsoft Cloud Trở Thành “Trung Tâm Điều Khiển” Của Hacker

Hãy hình dung một kịch bản ác mộng đối với mọi đội ngũ SOC: Kẻ tấn công nằm vùng sâu bên trong mạng nội bộ suốt nhiều tuần, âm thầm mở tới 128 luồng kết nối quản trị (SMB, RDP, WinRM) để di chuyển ngang, nhưng **hệ thống EDR không hề bật một cảnh báo nào**, và nhật ký Entra ID (Azure AD) của doanh nghiệp **hoàn toàn không ghi nhận một dòng log lạ nào**.

Đó không phải là giả thuyết học thuật. Đó chính là cách khung mã độc Python mới phát hiện mang tên **TWINLOOT** vừa vượt qua các hàng rào phòng thủ mạng enterprise.

Được bọc bảo vệ bằng **PyArmor 9.2.5 Pro**, TWINLOOT không cần tự dựng máy chủ C2 riêng mà vận hành **100% lệnh điều khiển ẩn nấp ngay trong dải IP tin cậy của Microsoft 365, SharePoint và Teams**. Bằng cách "mượn" trình duyệt Edge ở chế độ ẩn (Headless Edge qua CDP) để phát Graph API và biến hạ tầng Microsoft Teams TURN Relay thành cầu nối SOCKS5 ngược, TWINLOOT biến chính máy trạm bị nhiễm thành một trạm trung chuyển (pivot point) hoàn toàn hợp pháp.

Chưa dừng lại ở đó, TWINLOOT còn là mã độc đầu tiên trong thực tế vũ khí hóa thành công kỹ thuật tàng hình *"Corrupting the Hive Mind"* – tự tạo tệp Registry profile [`NTUSER.MAN`](http://NTUSER.MAN) ngoại tuyến để duy trì quyền truy cập (Persistence) mà **không cần quyền Administrator và không phát sinh bất kỳ sự kiện ghi Registry nào trên hệ thống**.

## Chuỗi Tấn Công

Chiến dịch tấn công của TWINLOOT được dàn dựng bài bản từ khâu chuẩn bị hạ tầng cho đến bước xâm nhập và chiếm quyền điều khiển.

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/7f16d66c-a5ed-4ab3-8070-63feef9523a8.png align="center")

### **Chi tiết các bước thực thi:**

1.  **Chuẩn bị hạ tầng:** Kẻ tấn công thu gom các tên miền lâu năm hết hạn (drop-caught aged domains) trước 7 tuần để qua mặt các hệ thống lọc tên miền mới tạo, đồng thời đăng ký ứng dụng riêng trên Azure AD và tạo SharePoint site làm kho trung chuyển.
    
2.  **Xâm nhập ban đầu:** Kẻ tấn công thực hiện kỹ thuật Vishing (Voice Phishing) hoặc gửi tin nhắn trực tiếp trên Microsoft Teams, giả danh nhân viên hỗ trợ CNTT nội bộ để hướng dẫn nạn nhân chạy một câu lệnh PowerShell.
    
3.  **Nạp Payload (Staging):** Lệnh PowerShell tải xuống một tệp nén chứa môi trường thực thi Python 3.12.9 chính chủ (Python embeddable runtime – giữ nguyên chữ ký Authenticode hợp lệ) và file loader `bootstrap-fat.pyc` dung lượng 39 MB (chứa ZIP mã nguồn 29 MB).
    
4.  **Giải mã Stage-1:** Loader thực thi không cửa sổ (`pythonw.exe`), kiểm tra khóa đơn thể (PID lockfile), giải nén phụ thuộc và khởi tạo môi trường GUI (Tcl/Tk). Toàn bộ 115+ module cốt lõi được giải mã động từ lớp bọc bảo vệ PyArmor 9.2.5 Pro.
    
5.  **Kích hoạt C2 Song Song:** Thiết lập đồng thời kênh SharePoint Dead-drop (giao việc bất đồng bộ) và kênh Teams TURN SOCKS5 Proxy (thao tác thời gian thực).
    

## **Phân Tích Kỹ Thuật Chi Tiết Khung Mã Độc TWINLOOT**

### **Kiến trúc C2 Đôi (Dual-Channel C2) & Đột phá ẩn nấp**

TWINLOOT vận hành hai kênh truyền thông riêng biệt xuất phát từ cùng một tiến trình `pythonw.exe` trên máy nạn nhân:

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/d2997b44-7e90-459c-a21d-83683c47442c.png align="center")

#### **Kênh 1: SharePoint Online Dead-Drop (Tasking & Exfiltration)**

*   **Cơ chế:** Mã độc phát yêu cầu HTTPS outbound mỗi 15 giây tới SharePoint Drive đặt tại Tenant Azure của chính kẻ tấn công ([`kerteransens.sharepoint.com`](http://kerteransens.sharepoint.com)).
    
*   **Điểm mù phòng thủ:** Vì mã độc tự xác thực trực tiếp bằng Tenant ID và Credential của kẻ tấn công nhúng sẵn, **toàn bộ nhật ký xác thực (Entra ID Audit Logs / Sign-in Logs) trên Tenant của nạn nhân hoàn toàn không ghi nhận bất kỳ bất thường nào**.
    

#### **Kênh 2: Reverse SOCKS5 qua Teams TURN WebRTC DataChannel (Interactive Lateral Movement)**

*   **Cơ chế:** Để thao tác tương tác thời gian thực, TWINLOOT tạo một đường truyền SOCKS5 ngược. Lưu lượng dữ liệu được đóng gói vào WebRTC DataChannel (sử dụng thư viện Python `aiortc`) và truyền tải thông qua máy chủ TURN relay chính thức của Microsoft Teams (`turns:`[`worldaz-msit.relay.teams.microsoft.com:443`](http://worldaz-msit.relay.teams.microsoft.com:443)).
    
*   **Thu thập Credential tự động:** Mã độc không dùng TURN credential hardcode. Nó tự động gửi HTTP POST không xác thực tới API Teams vãng lai (`teams.microsoft.com/api/authsvc/v1.0/authz/visitor`) với header `Ms-Teams-Auth-Type: ExplicitLogin` để lấy Skype token, sau đó đổi lấy TURN Username/Password có hiệu lực trong 1 giờ.
    
*   **Tác hại thực tế:** Kẻ tấn công mở một cổng SOCKS5 Listener (`127.0.0.1:1080`) ngay trên máy của mình. Toàn bộ lưu lượng tấn công (SMB/445, RDP/3389, WinRM/5985, MSSQL/1433) khi đi qua tunnel này sẽ "đi ra" (exit) trực tiếp từ tiến trình `pythonw.exe` trên máy nạn nhân hướng vào mạng nội bộ. Đối với hệ thống giám sát mạng nội bộ, đây trông như kết nối quản trị thông thường từ máy trạm của người dùng. Kênh này hỗ trợ tới **128 luồng TCP đồng thời**.
    

### **Kỹ thuật Điều khiển Trình duyệt Ẩn**

Đây là điểm tinh vi nhất trong khả năng lẩn tránh EDR của TWINLOOT:

*   Thay vì dùng thư viện HTTP của Python (như `urllib` hay `requests`) để gửi trực tiếp yêu cầu lên Graph API (hành vi dễ bị EDR bắt luật "Process `python.exe` making external network connections"), TWINLOOT khởi chạy trình duyệt Microsoft Edge ở chế độ ẩn:
    

`msedge.exe --headless --remote-debugging-port=9222 --user-data-dir=...`

*   Mã độc kết nối tới Edge qua giao thức **Chrome DevTools Protocol (CDP)** bằng WebSocket nội bộ. Thông qua lệnh `Runtime.evaluate`, nó chèn đoạn mã JavaScript phát hàm `fetch()` trực tiếp trong ngữ cảnh trang [`graph.microsoft.com`](http://graph.microsoft.com).
    
*   **Hệ quả:** Trên góc độ Giám sát Tiến trình (Process Telemetry) và Giám sát Mạng (Network Telemetry), hệ thống chỉ thấy tiến trình hợp lệ `msedge.exe` đang kết nối HTTPS tới địa chỉ Microsoft [`graph.microsoft.com`](http://graph.microsoft.com). Luật EDR dựa trên tên tiến trình tạo kết nối mạng bị vô hiệu hóa hoàn toàn.
    

### **Thu thập Mật khẩu qua Màn hình khóa Giả**

Khi nhận được lệnh `credz_waiting` từ SharePoint C2, TWINLOOT lập tức hiển thị một màn hình khóa Windows giả lập:

*   **Độ chân thực tuyệt đối:** Mã độc truy vấn API `GetUserNameExW` để lấy tên hiển thị thật, trích xuất ảnh đại diện người dùng trong `%APPDATA%\Microsoft\Windows\AccountPictures`, và lấy hình nền màn hình khóa thật từ các khóa Registry CSP/Spotlight.
    
*   **Che đậy chuyển cảnh:** Một màn hình đen (black flash-cover) hiển thị trong 250ms để che giấu khoảnh khắc chuyển giao giữa màn hình thật và giả.
    
*   **Bẫy mật khẩu 2 lần (Dual-Attempt Capture):** Màn hình khóa này **không hề kiểm tra tính đúng đắn của mật khẩu** với Windows Authentication. Bất kể người dùng nhập gì ở lần đầu tiên, giao diện đều trả về thông báo lỗi *"The password is incorrect. Try again."* Người dùng theo phản xạ sẽ gõ lại mật khẩu chuẩn xác ở lần thứ hai. Màn hình giả sau đó tự đóng lại. Mã độc đóng gói toàn bộ chuỗi mật khẩu gõ lần 1 và lần 2, mã hóa và đẩy về SharePoint Drive.
    
*   Mật khẩu đánh cắp được lập tức phục vụ cho bước leo nấc đặc quyền và di chuyển ngang qua kênh Reverse SOCKS5 Proxy.
    

### **Kỹ thuật Persistence "Corrupting the Hive Mind"**

TWINLOOT hỗ trợ 4 cơ chế duy trì quyền truy cập, trong đó đáng chú ý nhất là kỹ thuật **Offline Mandatory Profile Hive Forging** dựa trên nghiên cứu của Praetorian (tháng 1/2026), lần đầu tiên được ghi nhận sử dụng trong một chiến dịch thực tế:

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/62953b89-0436-41bd-86e9-ead61f3518ba.png align="center")

#### **Đột phá kỹ thuật của** [`NTUSER.MAN`](http://NTUSER.MAN)**:**

*   **Không cần quyền Admin:** Tệp nằm trong thư mục Profile của người dùng.
    
*   **Bỏ qua EDR/SIEM:** Tệp Registry được dựng offline bằng DLL và ghi ra đĩa dưới dạng file nhị phân, **hoàn toàn không phát sinh bất kỳ sự kiện ghi Registry (Registry modification event / Sysmon Event ID 13)** nào trên hệ thống live.
    
*   Các phương pháp phụ khác: TypeLib COM Scriptlet Hijack (`HKCU\Software\Classes\TypeLib\...` chỉ hướng tới `Config.sct`), GhostTask Scheduled TaskCache manipulation (ghi trực tiếp vào `HKLM\Schedule\TaskCache` bỏ qua SD value khiến `schtasks /query` không thấy), và cơ chế Tự cập nhật qua `reobf.json`.
    

## **Khả Năng Mở Rộng & Chuẩn Bị Hạ Tầng Tấn Công**

*   **Bộ lệnh đa dạng:**
    
    *   `recon`: Thu thập thông tin hệ thống qua NetAPI (NetServerEnum, NetGroupGetUsers, DsEnumerateDomainTrustsW) – hoàn toàn không gọi WMI hay `cmd.exe`.
        
    *   `screenshot`: Chụp màn hình bằng PowerShell one-liner.
        
    *   `tunnel/turn`: Điều khiển bật/tắt các luồng WebSocket và Teams TURN.
        
    *   Arbitrary Command Execution: Mọi lệnh không thuộc danh mục trên đều được chuyển trực tiếp tới `subprocess` với `shell=True`, timeout 120s, giới hạn 65KB output và cờ `CREATE_NO_WINDOW`.
        
*   **Dự phòng cấu hình (Fallback & Resilience):** Cấu hình runtime được làm mới mỗi 300 giây từ Azure Blob Storage. Mã độc còn chứa sẵn module `eth_call` (kỹ thuật EtherHiding đọc cấu hình từ hợp đồng thông minh Ethereum), sẵn sàng kích hoạt khi kênh Cloud bị chặn.
    
*   **Hạ tầng máy chủ tấn công:** Hạ tầng failover trỏ về IP `193.24.211.221` thuộc ASN AS215929 (Data Campus Limited) – dải IP từng bị GreyNoise ghi nhận liên quan đến hàng triệu đợt tấn công brute-force cổng Palo Alto GlobalProtect cuối năm 2025.
    

## **MITRE ATT&CK Mapping**

| **Tactic** | **Technique ID** | **Technique Name** | **Mô tả ứng dụng trong TWINLOOT** |
| --- | --- | --- | --- |
| **Initial Access** | T1566.003 | Phishing: Spearphishing via Service | Sử dụng vishing/tin nhắn Microsoft Teams mạo danh IT Support. |
| **Execution** | T1059.006 | Command and Scripting Interpreter: Python | Thực thi mã qua Python 3.12.9 embeddable runtime và file `.pyc`. |
| **Persistence** | T1547.001 | Boot or Logon Autostart Execution: Registry Run Keys | Lạm dụng [`NTUSER.MAN`](http://NTUSER.MAN) profile hive forging và TypeLib COM Hijack. |
| **Persistence** | T1053.005 | Scheduled Task/Job: Scheduled Task | Kỹ thuật GhostTask ghi đè TaskCache không hiện trong `schtasks`. |
| **Defense Evasion** | T1027.002 | Obfuscation: Software Packing | Bọc mã nguồn bằng PyArmor 9.2.5 Pro (License 011971). |
| **Defense Evasion** | T1562.001 | Impair Defenses: Disable/Modify Tools | Chạy Edge CDP ở chế độ Headless để vượt qua EDR process detection. |
| **Credential Access** | T1056.002 | Input Capture: GUI Input Capture | Giả lập màn hình khóa Windows bằng Tkinter/HTML thu thập mật khẩu. |
| **Discovery** | T1087.002 | Account Discovery: Domain Account | Truy vấn Domain Admins và Trust qua API `NetGroupGetUsers`. |
| **Command & Control** | T1071.001 | Application Layer Protocol: Web Protocols | Sử dụng Microsoft Graph API trỏ tới SharePoint Drive qua HTTPS. |
| **Command & Control** | T1567.002 | Exfiltration to Cloud Storage | Đẩy dữ liệu thu thập và credential về SharePoint Drive. |
| **Command & Control** | T1090.003 | Proxy: Multi-hop Proxy | Tạo Reverse SOCKS5 Tunnel đa luồng qua Teams WebRTC TURN Relay. |

## **Nhận Định Chuyên Gia**

### **Độ tinh vi & Tốc độ chuyển giao công nghệ tấn công**

TWINLOOT chứng minh một thực tế đáng lo ngại: **Khoảng cách giữa các nghiên cứu học thuật/hội thảo bảo mật (Hacking Conferences) và việc bị mã độc vũ khí hóa thực tế đã rút ngắn xuống chỉ còn tính bằng tuần**.

*   Kỹ thuật lạm dụng Teams TURN relay được công bố tại Black Hat USA 2025 (công cụ TURNt của Praetorian). Đến giữa năm 2026, chúng ta ghi nhận DragonForce (`Backdoor.Turn`) và TWINLOOT đồng loạt đưa vào sản chiến thực tế.
    
*   Kỹ thuật [`NTUSER.MAN`](http://NTUSER.MAN) ("Corrupting the Hive Mind") vừa xuất hiện trong báo cáo nghiên cứu đầu năm 2026 thì đến tháng 7/2026 đã được nhúng hoàn chỉnh vào TWINLOOT.
    

### **Xu hướng "Living Off the Cloud" & Sự suy thoái của chỉ số IOC truyền thống**

Việc TWINLOOT đặt toàn bộ kênh C2 bên trong hạ tầng tin cậy của Microsoft (SharePoint, Teams, Azure) khiến khái niệm giám sát dựa trên IP/Domain Reputation truyền thống hoàn toàn bị vô hiệu hóa. Tường lửa mạng hay Secure Web Gateway (SWG) không thể chặn các dải IP của Microsoft mà không làm gián đoạn vận hành của doanh nghiệp.

### **Bối cảnh đối với các doanh nghiệp tại Việt Nam**

Tại Việt Nam, sự bùng nổ của mô hình chuyển đổi số và việc áp dụng rộng rãi bộ giải pháp Microsoft 365 / Teams trong các tập đoàn, tổ chức tài chính - ngân hàng khiến nguy cơ từ TWINLOOT trở nên cực kỳ hiện hữu. Kẻ tấn công lợi dụng tâm lý tin tưởng tuyệt đối vào các thông báo/cuộc gọi từ ứng dụng Teams nội bộ để thực hiện bước xâm nhập ban đầu.

## **Khuyến Nghị Phòng Thủ Thực Chiến**

### **Giai đoạn Tức thì (0 - 24 giờ)**

1.  **Giám sát kết nối SharePoint ngoại vùng:** Cấu hình EDR / CASB / SWG cảnh báo hoặc chặn ngay lập tức các máy trạm quản lý kết nối tới các hostname dạng `*.`[`sharepoint.com`](http://sharepoint.com) **không thuộc danh sách Tenant ID chính thức của doanh nghiệp**. TWINLOOT bắt buộc phải gửi dữ liệu về Tenant SharePoint của kẻ tấn công.
    
2.  **Khóa tính năng Headless Mode & Remote Debugging trên Edge:** Triển khai chính sách Intune / Group Policy để vô hiệu hóa cờ chạy ngầm trình duyệt Edge trên máy trạm thông thường:
    
    *   **HeadlessModeEnabled** ➔ `Disabled` *(Path: Microsoft Edge > Control use of the Headless Mode)*
        
    *   **RemoteDebuggingAllowed** ➔ `Disabled` *(Path: Microsoft Edge > Allow remote debugging)* *(Lưu ý: Hai chính sách này bẻ gãy hoàn toàn cơ chế Edge CDP của TWINLOOT).*
        

### **Giai đoạn Ngắn hạn (1 - 7 ngày)**

1.  **Phát hiện tiến trình Python bất thường:** Đặt luật EDR/SIEM cảnh báo các tiến trình `python.exe` hoặc `pythonw.exe` khởi chạy từ các đường dẫn người dùng có quyền ghi (User-writable paths) như:
    
    *   `%APPDATA%\...`
        
    *   `%LOCALAPPDATA%\...`
        
    *   `%TEMP%\...`
        
    *   `C:\ProgramData\...`
        
2.  **Giám sát hành vi quét mạng nội bộ (Process Anomaly):** Cảnh báo khi tiến trình `pythonw.exe` phát sinh luồng kết nối tới nhiều địa chỉ IP nội bộ trên các cổng quản trị: `445` (SMB), `3389` (RDP), `5985` (WinRM), `1433` (MSSQL), `389` (LDAP).
    
3.  **Thu hồi phiên làm việc khi nghi ngờ lộ Mật khẩu:** Nếu phát hiện máy trạm nghi ngờ nhiễm TWINLOOT, lập tức đổi mật khẩu tài khoản người dùng và thực hiện thu hồi Token xác thực qua PowerShell Entra ID
    

### **Giai đoạn Dài hạn (Kiến trúc & Quy trình)**

1.  **Bắt buộc áp dụng Xác thực Phishing-Resistant (FIDO2 / Passkey):** Triển khai khóa FIDO2 hoặc Passkey cho toàn bộ tổ chức. Khi không còn sử dụng mật khẩu gõ tay truyền thống, đòn đánh cắp mật khẩu bằng màn hình khóa giả của TWINLOOT hoàn toàn mất tác dụng.
    
2.  **Siết chặt chính sách kết nối bên ngoài trên Microsoft Teams:** Giới hạn hoặc tắt tính năng "External Access" (cho phép tài khoản Teams bên ngoài nhắn tin/gọi điện tới nhân viên nội bộ) nếu không có nhu cầu giao tiếp đối ngoại rộng rãi.
    

## **Indicators of Compromise (IOCs) & References**

### File Hashes

*   7d8f9e0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e
    
*   a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b
    

### Network & C2 Artifacts

*   sharepointx.th2ch\[.\]com
    
*   193.24.211\[.\]22
    
*   kerteransens.sharepoint\[.\]com
    
*   turns:[worldaz-msit.relay.teams.microsoft](http://worldaz-msit.relay.teams.microsoft)\[.\]com
    

## Tài Liệu Tham Khảo

[TWINLOOT Abuses SharePoint and Teams to Steal Credentials and Move Across Networks](https://thehackernews.com/2026/08/twinloot-abuses-sharepoint-and-teams-to.html)

[Living Off the Cloud: A Python Implant Hiding Its Entire C2 Inside Microsoft 365 & Azure](https://www.ontinue.com/resource/python-implant-hiding-its-entire-c2-inside-microsoft-365-azure/)

['TwinLoot' Cyber Threat Operates Entirely From Microsoft's Cloud](https://www.darkreading.com/cloud-security/silent-twinloot-threat-operates-microsoft-cloud)
