Kurzfassung: mshta.exe ist ein signiertes Windows-Programm, das HTML-Applikationen (.hta) mit eingebettetem JScript oder VBScript ausführt. Angreifer missbrauchen es, um fremden Code über einen vertrauenswürdigen Prozess zu starten und so die Anwendungssteuerung zu umgehen - per Phishing-Anhang, Remote-HTA oder Inline-Skript. Die Erkennung setzt an drei Stellen an: der auffälligen Kommandozeile, dem Kindprozess von mshta und der ungewöhnlichen Elternkette. Drei sigma-cli-validierte Sigma-Regeln, Härtung und der Test im Lab. Serie "Angriff erkennen".
Nach den direkten Ausführungswegen über geplante Aufgaben, WMI und Windows-Dienste folgt eine andere Klasse: der signierte Interpreter, der fremden Code ausführt. mshta.exe gehört zu Windows, ist von Microsoft signiert und dafür gedacht, HTML-Applikationen auszuführen - kleine Programme aus HTML und Skript. Genau das macht es für Angreifer wertvoll: Wer seinen Code in eine .hta-Datei oder ein Inline-Skript packt, lässt ihn von einem vertrauenswürdigen Systemprogramm starten und umgeht damit viele Kontrollen, die auf unbekannte Binärdateien achten. Der Beitrag nimmt die Erkennung in den Blick und bleibt auf der Verteidigerseite.
Einordnung in ATT&CK: Die Technik ist System Binary Proxy Execution: Mshta (T1218.005) in der Taktik Defense Evasion (TA0005). Weil mshta fremden Code über ein signiertes Microsoft-Programm ausführt, dient der Missbrauch zugleich der Ausführung und der Umgehung von Anwendungssteuerung - in dieser Serie steht er in der Spalte Execution und Stealth.
Was der Angreifer tut
Der Missbrauch von mshta läuft auf der Ebene des Prinzips, nicht als Anleitung, in wenigen Varianten ab:
- Remote-HTA laden. mshta nimmt eine URL entgegen und lädt die HTA-Datei direkt aus dem Netz - der Code muss nie dauerhaft auf der Platte liegen.
- Inline-Skript ausführen. Statt einer Datei übergibt der Angreifer ein kurzes javascript: oder vbscript:, das mshta sofort ausführt.
- Per Dokument auslösen. Ein Office-Makro oder ein Link startet mshta mit der Nutzlast, oft als Teil eines Phishing-Angriffs.
- Nachladen und weitermachen. Der HTA-Code startet den nächsten Schritt - eine PowerShell, ein weiteres LOLBin oder direkt die Schadsoftware.
Für die Erkennung ist entscheidend: mshta hat im Normalbetrieb ein sehr enges Verhalten. Eine URL, ein Inline-Skript oder ein ungewöhnlicher Elternprozess fallen deshalb klar auf.
Welche Logquellen die Technik zeigt
- Prozess-Telemetrie. Event 4688 und Sysmon Event 1 zeigen die vollständige Kommandozeile von mshta - hier werden URL und Inline-Skript sichtbar.
- Die Elternkette. Dieselben Quellen zeigen, wer mshta gestartet hat - Word, Outlook oder ein Browser als Elternprozess sind verdächtig.
- Der Kindprozess. Startet mshta anschließend cmd oder PowerShell, erscheint der nächste Schritt als Kind von mshta, siehe LOLBins-Erkennung.
- Netzwerk und Proxy. Lädt mshta eine Remote-HTA, erscheint der Abruf in den Web-Proxy- und DNS-Protokollen - ein zusätzliches, unabhängiges Signal.
Das Muster im Log
Das klarste Signal ist die Kommandozeile von mshta selbst: Ein javascript:, vbscript: oder eine http-URL als Argument hat im Normalbetrieb keinen Platz. Dazu kommt die Elternkette - mshta, das von Word, Outlook oder einem Browser gestartet wird, deutet auf eine per Dokument oder Download ausgelöste Ausführung. Das dritte Signal ist das Verhalten danach: mshta, das eine Shell oder PowerShell startet, ist werkzeugunabhängig verdächtig. Ein regulärer Aufruf startet eine lokale .hta-Datei aus einem bekannten Pfad, ohne URL und ohne Shell-Kind. Wie immer trennt der Blick auf Elternprozess, Argument und Kindprozess den Alltag vom Angriff.
Drei Sigma-Regeln
Die Regeln sind mit sigma-cli geprüft. Die erste nutzt die Kommandozeile, die zweite das Verhalten, die dritte die Elternkette. Die zweite ist die tragende, weil sie werkzeugunabhängig greift.
1. mshta mit Inline-Skript oder Remote-HTA (T1218.005). mshta mit javascript:, vbscript: oder einer http-URL in der Kommandozeile. Die Regel steht auf level: high.
title: mshta.exe mit Inline-Skript oder Remote-HTA
id: 7f3c9a21-6b84-4e52-9d03-1a7e5c2b48f6
status: experimental
description: |
Erkennt mshta.exe, das ein Inline-Skript (javascript:, vbscript:, about:) oder eine aus dem Netz
geladene HTA-Datei (http/https) ausfuehrt. mshta ist ein signiertes Windows-Programm und wird so
als Proxy missbraucht, um Code auszufuehren, ohne eine eigene Binaerdatei auf die Platte zu legen.
Ein regulaerer Aufruf startet eine lokale .hta-Datei, kein Skript und keine URL.
references:
- https://attack.mitre.org/techniques/T1218/005/
author: blue-team.net
tags:
- attack.stealth
- attack.t1218.005
logsource:
product: windows
category: process_creation
detection:
sel_img:
Image|endswith: '\mshta.exe'
sel_inline:
CommandLine|contains:
- 'javascript:'
- 'vbscript:'
- 'about:'
sel_remote:
CommandLine|contains:
- 'http://'
- 'https://'
condition: sel_img and (sel_inline or sel_remote)
falsepositives:
- Einzelne Altanwendungen rufen mshta mit einer internen URL auf; bekannte Faelle nach Konto und Ziel ausnehmen
level: high
2. mshta startet eine Shell oder ein LOLBin (T1218.005). Ein Kindprozess unter mshta - das werkzeugunabhängige Verhaltenssignal. Ebenfalls level: high.
title: mshta.exe startet eine Shell oder ein LOLBin
id: 2a6d8f14-9c35-4b71-8e02-5f3c7a1b94e8
status: experimental
description: |
Erkennt einen Prozess, dessen Elternprozess mshta.exe ist und der eine Kommandozeile, PowerShell
oder ein weiteres LOLBin startet. Fuehrt eine HTA-Datei Code aus, erscheint der naechste Schritt
als Kind von mshta - ein lautes, werkzeugunabhaengiges Verhaltenssignal. mshta selbst hat keinen
Grund, cmd oder powershell zu starten.
references:
- https://attack.mitre.org/techniques/T1218/005/
author: blue-team.net
tags:
- attack.stealth
- attack.t1218.005
logsource:
product: windows
category: process_creation
detection:
selection:
ParentImage|endswith: '\mshta.exe'
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\pwsh.exe'
- '\wscript.exe'
- '\cscript.exe'
- '\rundll32.exe'
- '\regsvr32.exe'
- '\certutil.exe'
- '\bitsadmin.exe'
condition: selection
falsepositives:
- Sehr selten; einzelne Altanwendungen koennen aus einer HTA heraus ein Skript starten - bekannte Faelle ausnehmen
level: high
3. mshta durch Office oder Browser gestartet (T1218.005). Die verdächtige Elternkette oder eine .hta-Datei als Argument. Ebenfalls level: high.
title: mshta.exe durch Office oder Browser gestartet
id: 9e1b7c53-4a26-4d38-b70f-6c2a8f3d15b9
status: experimental
description: |
Erkennt mshta.exe, das von einer Office-Anwendung oder einem Browser gestartet wird oder eine
.hta-Datei ausfuehrt. Diese Elternkette ist das typische Zeichen einer per Dokument oder Download
ausgeloesten HTA-Ausfuehrung. Ein Nutzer, der Word oder einen Browser oeffnet, startet im
Normalfall kein mshta.
references:
- https://attack.mitre.org/techniques/T1218/005/
author: blue-team.net
tags:
- attack.stealth
- attack.t1218.005
logsource:
product: windows
category: process_creation
detection:
sel_img:
Image|endswith: '\mshta.exe'
sel_parent:
ParentImage|endswith:
- '\winword.exe'
- '\excel.exe'
- '\powerpnt.exe'
- '\outlook.exe'
- '\msaccess.exe'
- '\mspub.exe'
- '\visio.exe'
- '\chrome.exe'
- '\msedge.exe'
- '\firefox.exe'
- '\iexplore.exe'
sel_hta:
CommandLine|contains: '.hta'
condition: sel_img and (sel_parent or sel_hta)
falsepositives:
- Intranet-Anwendungen, die HTA-Dateien ueber den Browser ausliefern; bekannte interne Ziele ausnehmen
level: high
Härtung: der Angriff, der ins Leere läuft
- mshta einschränken oder blockieren. Wird mshta im Betrieb nicht gebraucht, per Anwendungssteuerung (AppLocker, WDAC) blockieren - das nimmt der Technik die Grundlage.
- Dateizuordnung ändern. Die Standardverknüpfung von .hta von mshta auf einen Editor umstellen, damit ein Doppelklick keinen Code ausführt.
- Office-Kindprozesse bremsen. Mit ASR-Regeln (Attack Surface Reduction) verhindern, dass Office-Programme mshta und andere Interpreter starten.
- Verhaltensregel scharf schalten. mshta mit URL oder Inline-Skript sollte immer alarmieren - das ist die zuverlässigste Einzelregel.
Der Test
Die Erkennung lässt sich im Lab gefahrlos prüfen, auf isolierten Systemen mit aktivem Sysmon:
- Für Regel 1 mshta mit einem harmlosen Inline-Skript aufrufen, das nur ein Fenster schließt. Die Kommandozeile mit vbscript: muss in Event 4688 erscheinen.
- Für Regel 2 eine Test-HTA bauen, die cmd startet. Der Kindprozess muss als Kind von mshta auftauchen.
- Für Regel 3 die Test-HTA über ein Office-Makro oder einen Browser-Download auslösen. Die Elternkette muss sichtbar werden. Breiter wird der Test mit den Fällen zu T1218.005 aus Atomic Red Team.
Fehlalarme und Tuning
- Alt-Anwendungen. Einzelne interne Anwendungen nutzen HTA-Dateien legitim. Für Regel 3 die bekannten internen Ziele und Pfade als Baseline ausnehmen.
- Verwaltungsskripte. Selten startet ein Verwaltungsskript mshta. Für Regel 1 die bekannten Konten und Kommandozeilen dokumentieren und filtern.
- Intranet-HTA. Manche Intranet-Seiten liefern HTA aus. Für Regel 3 die internen Quellen filtern, statt die Regel zu entschärfen.
- Korrelation schlägt Einzelregel. Wer Elternprozess, Kommandozeile und Kindprozess zusammen betrachtet, trennt Alltag und echten Angriff zuverlässiger als jede Einzelregel.
Fazit
mshta ist ein signiertes Windows-Programm und damit ein bequemer Weg, fremden Code über einen vertrauenswürdigen Prozess auszuführen. Die verlässlichen Signale sind die auffällige Kommandozeile (URL oder Inline-Skript), die verdächtige Elternkette aus Office oder Browser und der Kindprozess, der eine Shell startet. Die wirksamste Härtung blockiert mshta ganz, wo es nicht gebraucht wird, ändert die Dateizuordnung von .hta und bremst Office-Kindprozesse mit ASR-Regeln. Als Nächstes folgen die verwandten signierten Interpreter Regsvr32 und Rundll32. Verwandt sind die LOLBins allgemein sowie die Ausführung über WMI und Dienste. Weitere Techniken dieser Taktik sammelt das Lexikon nach Taktik unter Stealth.