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

Search for a command to run...

No comments yet. Be the first to comment.
Tổng Quan Hãy hình dung kịch bản này: bạn vừa check-in khách sạn sau chuyến bay dài, mở laptop, bật Wi-Fi, mở Chrome và Chrome tự mở trang đăng nhập Microsoft 365. Trông quen thuộc. Bạn gõ mật khẩu, b
Chuyện Gì Đang Xảy Ra? Hãy tưởng tượng thế này: bạn đang ngồi làm việc trên máy tính, soạn email, lướt web, mở tài khoản ngân hàng kiểm tra số dư. Mọi thứ đều bình thường. Không có cửa sổ lạ nào bật l

What's Going On? Imagine this: you're sitting at your computer, composing emails, surfing the web, opening a bank account to check the balance. Everything is normal. No strange windows pop up. There a

Overview SourTrade is a large-scale malvertising campaign running since late 2024, targeting crypto investors and traders in 12 countries across 25 languages. The attacker impersonates three trusted p

Tổng Quan Hãy hình dung kịch bản này: bạn vừa check-in khách sạn sau chuyến bay dài, mở laptop, bật Wi-Fi, mở Chrome và Chrome tự mở trang đăng nhập Microsoft 365. Trông quen thuộc. Bạn gõ mật khẩu, b

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.
| 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 |
Đ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.
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.
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.
Đâ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.
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ụ.
| 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.
| 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.
9a29d26b94b708830c6eaea8a6c17616ec677adaf09114190d0e129564b2ca1b
05c0d056a6b3e76736d4f378541d28f24ecdf40060eeed24d8aa283d2f0120f6
ad542ed44df306bdcbb022ae210da74abad74e978cc1e3992016976282f31976
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
| 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 |
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]
Block domain IOC — ưu tiên
Threat Hunt — kiểm tra EDR:
process.name IN ("bun.exe", "Bun.exe")
AND NOT 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ạ.
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"] }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.
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.
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