# SourTrade: Chiến dịch biến JavaScript thành dây chuyền sản xuất mã độc

## Tổng Quan

**SourTrade** là chiến dịch malvertising quy mô lớn đang hoạt động từ cuối 2024, nhắm vào nhà đầu tư crypto và trader tại 12 quốc gia trên 25 ngôn ngữ. Kẻ tấn công giả mạo ba nền tảng được tin dùng trong cộng đồng tài chính đó là: **TradingView, Solana, và Luno** để dẫn dụ nạn nhân đến landing page độc hại thông qua quảng cáo lập trình trên **Google, Meta và Twitter/X.**

Điểm khiến **SourTrade** trở nên đặc biệt không phải là quy mô mà là kỹ thuật phân phối: **không có file malware hoàn chỉnh nào tồn tại trên mạng**. Server gửi đến browser nạn nhân một bộ "hướng dẫn lắp ráp", browser tải file runtime sạch từ CDN hợp lệ, tự tạo thêm các byte ngẫu nhiên theo mã AES-CTR, và lắp ráp thành file thực thi độc hại ngay trong bộ nhớ RAM.

Với cách thiết kế này, mỗi nạn nhân nhận một file có hash SHA256 khác nhau. Công cụ phát hiện dựa trên file fingerprinting — chiếm phần lớn cơ chế bảo vệ endpoint đang triển khai — bị vô hiệu hóa theo thiết kế. Tổ chức cần giám sát ở tầng network behavior và browser runtime, không phải tầng file.

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/4ee4423c-546b-4d70-bc0e-35970e42e093.png align="center")

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/8dd26b51-2027-4aa1-89fa-e183b2e51bdf.png align="center")

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/da5a920c-0dc9-4451-a14c-cbc26d2d82b6.png align="center")

## **Timeline Sự Kiện**

| **Thời điểm** | **Sự kiện** |
| --- | --- |
| **Cuối 2024** | SourTrade bắt đầu chạy programmatic ads giả mạo TradingView, Solana, Luno |
| **Sep 2025** | Bitdefender phát hiện biến thể cũ dùng `StreamSaver.js` hosted trên GitHub |
| **Đến 30/04/2026** | MotW signature trỏ đến `jimmywarting[.]github.io/StreamSaver.js/nwitassistnow.com/...` |
| **Sau 30/04/2026** | SourTrade cập nhật: self-hosted ServiceWorker, xóa dấu vết GitHub khỏi MotW |
| **23/07/2026** | Confiant công bố báo cáo kỹ thuật đầy đủ về 4-stage assembly pipeline |
| **30/07/2026** | BleepingComputer đưa tin rộng rãi ra cộng đồng |

## Chuỗi Tấn Công

Điểm khác biệt của SourTrade so với mọi chiến dịch malvertising thông thường nằm ở chỗ này: **không có file malware hoàn chỉnh nào được gửi qua mạng**. Thay vào đó, trang web biến chính trình duyệt của nạn nhân thành xưởng sản xuất — thu thập từng mảnh riêng lẻ từ nhiều nguồn, rồi tự lắp ráp thành malware ngay trong bộ nhớ máy tính.

Toàn bộ quá trình diễn ra trong bốn giai đoạn, tự động, không cần nạn nhân làm thêm gì ngoài việc click vào quảng cáo.

### **Stage 1 — Trang Giả Mạo Âm Thầm Cài "Thợ" Vào Trình Duyệt**

Khi landing page vừa load xong — trong lúc bạn đang nhìn vào giao diện TradingView trông rất thuyết phục — JavaScript của trang đã bắt đầu cài hai thứ vào trình duyệt của bạn, không cần bất kỳ click nào.

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/2bedad09-f124-49a6-b3a9-6e9faa677ddb.png align="center")

**Thứ nhất** là một tiến trình chạy ngầm (gọi là ServiceWorker — một tính năng browser hoàn toàn hợp lệ, thường dùng để web app hoạt động offline). Ở đây nó bị dùng sai mục đích: vai trò của nó là **người gác cổng**, ngồi chờ để nhận file đã được lắp ráp xong và trao nó ra ngoài dưới dạng download.

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/9b04d5ce-692e-4d29-80dc-480bced506d0.png align="center")

**Thứ hai** là một "công nhân" ẩn — cũng chạy trong nền, được tạo ra hoàn toàn từ mã JavaScript nhúng sẵn trong trang. Không cần tải gì từ bên ngoài, không để lại địa chỉ URL nào để bị chặn. Đây là thứ sẽ điều phối toàn bộ quá trình lắp ráp ở các bước tiếp theo.

**Stage 2 — Máy Chủ Gửi Bản Thiết Kế, Không Gửi Sản Phẩm**  
  
"Công nhân" ẩn vừa được cài vào bây giờ liên hệ về máy chủ của kẻ tấn công. Nó hỏi: *tôi cần làm gì tiếp theo?*

Máy chủ không trả về một file virus. Nó trả về một đoạn dữ liệu nhỏ — trông như mọi phản hồi từ một API web bình thường — chứa ba thông tin:

*   **Địa chỉ để tải phần mềm Bun** — một JavaScript runtime hoàn toàn hợp lệ, open-source, được nhiều lập trình viên dùng hằng ngày. Quét virus sẽ thấy nó sạch.
    
*   **Một "hạt giống" số ngẫu nhiên** — thay đổi theo từng người dùng, dùng để tạo ra những byte ngẫu nhiên riêng biệt cho phiên này. Đây là lý do tại sao mỗi nạn nhân nhận được file có "vân tay" số khác nhau, khiến phần mềm diệt virus nhận diện theo file hash không thể match được.
    
*   **Bản thiết kế lắp ráp** — một danh sách chỉ dẫn: lấy phần nào từ đâu, ghép theo thứ tự nào để tạo ra file hoàn chỉnh ở cuối.
    

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/4d17e22a-5a49-4033-92e4-1ec1b60cf446.png align="center")

Hãy hình dung: đây không phải cái tủ IKEA đã lắp sẵn — đây là tờ hướng dẫn lắp ráp. Mỗi người nhận được một tờ hướng dẫn có vài chi tiết khác nhau, nhưng kết quả cuối cùng giống nhau.

### **Stage 3 — Trình Duyệt Tự Lắp Ráp Malware Trong Bộ Nhớ**

Bây giờ trình duyệt của bạn — theo đúng hướng dẫn nhận được — bắt đầu thu thập nguyên liệu:

**Bước 3a:** Tải về phần mềm Bun từ địa chỉ được cung cấp. File này sạch, không có gì độc hại. Đây sẽ là "vỏ bọc" và "động cơ" của malware hoàn chỉnh.

**Bước 3b:** Dùng "hạt giống" số để tạo ra hàng trăm megabyte dữ liệu ngẫu nhiên, độc nhất cho phiên của bạn. Đây là phần lấp đầy, đảm bảo file cuối cùng có dấu vân tay số chưa từng xuất hiện trên đời.

**Bước 3c:** Ghép tất cả lại theo bản thiết kế. Phần thực sự độc hại — mã lệnh của malware — đã được mã hóa và nhúng sẵn trong bản thiết kế nhận từ máy chủ ngay từ đầu, chỉ chờ được lắp vào đúng vị trí.

Kết quả: một file thực thi Windows hoàn chỉnh, chỉ tồn tại trong bộ nhớ RAM của máy bạn. Nó chưa bao giờ hiện diện dưới dạng file hoàn chỉnh ở bất kỳ máy chủ nào trên internet.

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/b6e6ce28-8b97-48c0-b025-57f624ffa52e.png align="center")

### **Stage 4 — File Được "Giao Hàng" Như Thể Đến Từ Trang Web Bình Thường**

Đây là bước tinh vi nhất. File vừa được lắp ráp xong cần được đưa ra ngoài — ra màn hình của bạn dưới dạng một file download.

Trang tạo một iframe ẩn (một cửa sổ web vô hình) trỏ vào chính địa chỉ của landing page. Tiến trình chạy ngầm được cài từ Stage 1 bắt lấy yêu cầu đó, và trả về file vừa lắp ráp — dưới dạng file đính kèm để tải xuống.

Trình duyệt xử lý như mọi file download thông thường: `TradingView-Premium.exe` xuất hiện trong thư mục Downloads của bạn.

Windows ghi lại nguồn gốc của file — gọi là **Mark-of-the-Web**, thứ mà SmartScreen dùng để quyết định có cảnh báo không. Và những gì nó ghi vào là địa chỉ của landing page: [`noxani.info`](http://noxani.info). Không phải địa chỉ máy chủ chứa phần mềm Bun. Không phải địa chỉ C2. Chỉ là một website lạ chưa có lịch sử xấu.

SmartScreen thấy: *file từ website này, chưa có trong danh sách đen*. Không đủ lý do để block.

Bạn thấy: *TradingView-Premium.exe — đã tải xong.*

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/e6da7f00-3a08-47e9-b9bf-ea5c1a0c2995.png align="center")

## **Phân Tích Kỹ Thuật Bổ Sung**

### **Cloaking Kit — Lọc Nạn Nhân Trước Khi Delivery**

Trước khi bất kỳ stage nào chạy, trang thực hiện fingerprint visitor. Cloaking kit kiểm tra IP, múi giờ, browser version, VPN, và các dấu hiệu của security researcher. Bot và analyst thấy trang trắng. Chỉ victim vượt qua mới thấy money page.

Nhóm tấn công còn nhúng Google Ads conversion pixel, Meta pixel, và Twitter/X pixel vào landing page — đo lường và tối ưu hóa conversion rate victim như một chiến dịch marketing thực thụ.

### **Luồng Dữ Liệu Trên Network — Trông Như Thế Nào?**

| **Request** | **Response** | **Trông như thế nào trên wire?** |
| --- | --- | --- |
| `GET /` | React JS bundle | Trang web HTTPS bình thường |
| `GET /sw.js` | ServiceWorker script | Script từ same origin — không khả nghi |
| `GET /config` | JSON: template + seed + URL | **Điểm detect duy nhất**: base64 blobs lớn trong JSON |
| `GET /static/*.exe` | Bun runtime (gzip) | Binary từ CDN ít tên tuổi |
| `GET /[filename].exe` | Assembled stream | .exe từ landing domain — MotW chỉ thấy đây |

Bước `/config` là cơ hội phát hiện duy nhất trên wire — nhưng chỉ khi có SSL inspection và rule kiểm tra response body có đủ ba trường `standaloneUrl` + `template` + `random`.

## **Tại Sao Mọi Lớp Bảo Vệ Thông Thường Đều Miss**

| **Công cụ** | **Tại sao fail với SourTrade** |
| --- | --- |
| **Hash-based AV** | AES-CTR seed rotation → hash unique mỗi victim |
| **Signature-based IDS** | Assembly động → không có static byte pattern |
| **URL blocklist** | Không có URL nào trỏ thẳng đến malware hoàn chỉnh |
| **VirusTotal** | File không tồn tại trước khi assembly → không thể pre-upload |
| **SmartScreen / MotW** | MotW ghi landing domain, không ghi C2/CDN |
| **EDR file write alert** | File ghi ra disk là Bun runtime (sạch) + payload — EDR không phân biệt |
| **Browser warning** | Download từ same-origin URL → browser không cảnh báo |

SourTrade không vượt qua từng lớp bảo vệ một. Nó thiết kế lại toàn bộ attack chain để bypass tất cả — vì tất cả đều được xây cho threat model cũ: một malware file tĩnh đi qua mạng.

## **IOC & Artifacts**

### **SHA-256 File Hashes**

*   9a29d26b94b708830c6eaea8a6c17616ec677adaf09114190d0e129564b2ca1b
    
*   05c0d056a6b3e76736d4f378541d28f24ecdf40060eeed24d8aa283d2f0120f6
    
*   ad542ed44df306bdcbb022ae210da74abad74e978cc1e3992016976282f31976
    

### **Network IOC — Domain**

*   noxani\[.\]info greensite\[.\]digital yuntaro\[.\]digital
    
    nexlisa\[.\]info vashiro\[.\]info campainter\[.\]digital
    
    riovera\[.\]info lunavo\[.\]club hanzoa\[.\]digital
    
    authcom\[.\]digital fererro\[.\]digital zythera\[.\]info
    
    angelxc\[.\]digital toushere\[.\]digital auronix\[.\]digital
    
    quorivamesh\[.\]digital junora\[.\]digital savanhe\[.\]digital
    
    tenderi\[.\]digital dexarionrte\[.\]info zuvex\[.\]digital
    
    minaro\[.\]club praxnova\[.\]info zuvex\[.\]club
    
    kalviorix\[.\]info thaivex\[.\]digital form-engine\[.\]digital
    
    solventa\[.\]club form-networktool\[.\]digital electmu\[.\]digital
    
    zenovapc\[.\]site qumoro\[.\]site insightcores\[.\]digital
    
    pulsewave-glow\[.\]digital ignite-spark\[.\]digital riberaz\[.\]com
    
    polvexa\[.\]site viewsafc\[.\]online insightmetrix\[.\]digital
    
    webnity\[.\]site cirevia1\[.\]digital tvviewreach\[.\]digital
    
    alteira\[.\]digital dalasu\[.\]digital parixaxj\[.\]com
    
    trustconnect\[.\]digital torvianet\[.\]site nebive\[.\]site
    
    forecastlogiccore\[.\]digital netkorava\[.\]digital forecasthub\[.\]digital
    
    dotlor\[.\]site koravaje\[.\]digital signalmetrics\[.\]digital
    
    forecastbridge\[.\]digital lakorava\[.\]digital pustou\[.\]site
    
    insightorbithub\[.\]digital dataroutehub\[.\]digital datasyncengine\[.\]digital
    
    forecastdeltaflow\[.\]digital forecastlogicflow\[.\]digital metricforge\[.\]digital
    
    forecastpulsegrid\[.\]digital robejj\[.\]com predictcore\[.\]digital
    
    dataplanehub\[.\]site oneclickme\[.\]site prolega\[.\]site
    
    nameprod\[.\]site transoe\[.\]site orientstrategypartners\[.\]digital
    
    beamoramag\[.\]digital beammaybea\[.\]digital urbanleafy\[.\]info
    
    brightmosaic\[.\]info forthlira\[.\]digital sobeamora\[.\]digital
    
    topbeamora\[.\]digital mortarora\[.\]digital lunarohub\[.\]info
    
    worldsol\[.\]site mindflowbase\[.\]info insight-radiant\[.\]digital
    
    nordexastudio\[.\]info cognitionpipeline\[.\]digital cognitionnodehub\[.\]digital
    
    acuitycore\[.\]digital radiantsynaptic\[.\]digital sapience-flare\[.\]digital
    
    engineclaritynode\[.\]digital flare-hub\[.\]digital beacon-net\[.\]digital
    
    brainyclevercore\[.\]digital syscodeapi\[.\]digital asiadataintelligencelab\[.\]digital
    

## **MITRE ATT&CK Mapping**

| **Technique ID** | **Technique Name** | **Quan sát trong SourTrade** |
| --- | --- | --- |
| **T1583.001** | Acquire Infrastructure: Domains | 80+ domains cho landing pages và runtime hosting |
| **T1036.005** | Masquerading: Match Legitimate Name | Giả mạo TradingView, Solana, Luno |
| **T1566** | Phishing via Malvertising | Programmatic ads dẫn đến landing page giả |
| **T1027** | Obfuscated Files or Information | Payload encode base64, split thành chunks trong `/config` |
| **T1027.011** | Fileless Storage | Assembly hoàn toàn trong browser memory |
| **T1204.002** | User Execution: Malicious File | Nạn nhân chạy file download |
| **T1553.005** | Subvert Trust Controls: MotW Bypass | MotW ghi landing domain, không ghi C2/CDN |
| **T1059.007** | Command and Scripting: JavaScript | JavaScriptCore bytecode là payload cuối |
| **T1071.001** | Application Layer Protocol: Web Protocols | `/config` C2 qua HTTPS |
| **T1102** | Web Service | Bun runtime fetch từ CDN-like external infrastructure |

## **Nhận Định**

Fileless malware truyền thống vẫn cần một stage loader chạy trên endpoint — PowerShell, WMI, hay reflective injection. SourTrade đẩy toàn bộ assembly stage lên browser layer, tận dụng các Web API hợp lệ (ServiceWorker, SharedWorker, Web Crypto API, ReadableStream) để làm điều đó mà không cần bất kỳ code độc hại nào thực thi ở tầng OS trước khi nạn nhân chủ động chạy file.

Hệ quả thực tế: nếu SOC đang dựa vào EDR alert từ file write event hay AV signature để phát hiện inbound malware, thì với SourTrade, alert đó sẽ không bao giờ kích hoạt. File được ghi ra disk là kết quả cuối cùng của quá trình assembly — và ở thời điểm đó, file đã có hash unique chưa từng xuất hiện trong bất kỳ threat database nào.

Mô hình này có thể tái sử dụng. Cùng pipeline có thể apply cho bất kỳ vertical nào có lực kéo download software: fintech, gaming, remote work tools. Và rất ít tổ chức hiện có browser-level telemetry đủ để phát hiện pattern SharedWorker-from-blob hay `/config`\-assembly-response.

**Với thị trường Việt Nam:** Việt Nam liên tục nằm trong top 10 quốc gia có tỷ lệ adoption crypto cao nhất toàn cầu (Chainalysis 2024-2025). Cộng đồng trader lớn, nhiều người dùng TradingView — target profile trùng khớp với SourTrade. `[NEEDS VERIFICATION: 12 quốc gia target theo Confiant không bao gồm Việt Nam, nhưng chiến dịch có thể mở rộng hoặc có biến thể targeting SEA]`

## **Khuyến Nghị**

### **Immediate (0-24h)**

*   **Block domain IOC — ưu tiên**
    
*   **Threat Hunt — kiểm tra EDR:**
    
    *   [`process.name`](http://process.name) `IN ("bun.exe", "Bun.exe")`
        
        `AND NOT` [`process.parent.name`](http://process.parent.name) `IN ("node.exe", "npm.exe", "yarn.exe", "bun.exe")`
        
        `AND event.time > [NOW - 90 days]`
        
*   **Kiểm tra download history** các máy dùng TradingView, Solana, Luno — tìm `.exe` từ domain `.digital`, `.club`, `.info`, `.site` lạ.
    

### **Short-term (1-7 ngày)**

*   **Detection rule cho** `/config` **assembly pattern (Splunk SPL):**
    
    *   `index=proxy OR index=network`
        
        `| where uri_path="/config"`
        
        `| eval suspicious=if(`
        
        `match(response_body,"standaloneUrl")`
        
        `AND match(response_body,"template")`
        
        `AND match(response_body,"random"), 1, 0)`
        
        `| where suspicious=1`
        
        `| table src_ip, dest_domain, response_body`
        
*   **Chrome Enterprise policy hạn chế ServiceWorker:**
    
    *   `{ "ServiceWorkerAllowedOriginPatterns": ["`[`https://*.your-domain.com`](https://*.your-domain.com)`"] }`
        
*   **Thông báo cho nhân viên** — đặc biệt là finance team, trading desk, crypto desk: không download software từ quảng cáo.
    

### **Long-term**

*   **Browser telemetry**: Triển khai Chrome Enterprise Reporting hoặc MDE browser extension. Monitor SharedWorker creation từ Blob URL và ServiceWorker registration từ non-whitelisted origins.
    
*   **CSP policy** cho internal apps: `worker-src 'self'` (không có `blob:`) để ngăn kỹ thuật tương tự nếu được inject vào internal surface.
    
*   **Download vetting**: Yêu cầu verify hash từ vendor official page trước khi chạy bất kỳ `.exe` nào tải từ web — phá vỡ attack chain ở bước cuối.
    

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

[Malicious sites use JavaScript to build malware in browser memory](https://www.bleepingcomputer.com/news/security/malicious-sites-use-javascript-to-build-malware-in-browser-memory/)

[SourTrade: Browser-Assembled Malware Delivered Through Malvertising](https://blog.confiant.com/p/sourtrade-browser-assembled-malware)

[Malicious Sites Use JavaScript to Build Malware in Browser Memory](https://www.q2bstudio.com/en/our-blog/2096774/malicious-sites-use-javascript-to-build-malware-in-browser-memory)
