Skip to main content

Command Palette

Search for a command to run...

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

Updated
13 min readView as Markdown
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.

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.

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.

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.

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.

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. 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.

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:

  • 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:

  • 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

SourTrade: Browser-Assembled Malware Delivered Through Malvertising

Malicious Sites Use JavaScript to Build Malware in Browser Memory

More from this blog

F

FPT IS Security

1000 posts

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