Malicious File erkennen: das Office-Makro und sein Kindprozess

Kurzfassung: Das präparierte Office-Dokument ist seit Jahren einer der häufigsten Wege ins Netz. Malicious File bringt das Opfer dazu, eine Datei zu öffnen und ihre Makros zuzulassen - dann startet der Makrocode einen Kindprozess. Die Erkennung setzt genau dort an: eine Office-Anwendung als Elternteil einer Shell, eines Skript-Hosts oder eines Download-Werkzeugs, und eine von Office geschriebene ausführbare Datei. Drei sigma-cli-validierte Sigma-Regeln, dazu Härtung und der Test im Lab. Serie "Angriff erkennen".

Nicht jeder Einbruch beginnt mit einer Schwachstelle - sehr oft beginnt er mit einem Klick. Eine Rechnung, ein Lebenslauf, ein angebliches Angebot kommt per Mail oder über einen heruntergeladenen Anhang, das Opfer öffnet die Datei und lässt die Makros zu. Von da an arbeitet der Makrocode: Er startet eine Shell, lädt eine Nutzlast nach oder legt sie auf der Platte ab. Der Exploit ist hier der Mensch, und die Ausführung läuft über die Office-Anwendung. Genau diese Elternschaft - Office startet etwas, das es nie starten sollte - ist das verräterische Signal. Dieser Beitrag nimmt die Erkennung in den Blick und bleibt auf der Verteidigerseite.

Einordnung in ATT&CK: Malicious File (T1204.002), ein Unterverfahren von User Execution (T1204). MITRE führt die Technik in der Taktik Execution (TA0002) und nennt Windows, Linux und macOS als Plattformen. In dieser Serie steht sie in der Spalte Execution.

Was der Angreifer tut

Die Ausführung über ein bösartiges Dokument läuft auf der Ebene des Prinzips, nicht als Anleitung, in wenigen Schritten ab:

  • Zustellen und öffnen lassen. Das Dokument kommt per Mail oder Download; ein glaubwürdiger Vorwand bringt das Opfer dazu, es zu öffnen.
  • Makros aktivieren. Eine Aufforderung ("Inhalt aktivieren") bewegt das Opfer dazu, die Makros zuzulassen - erst damit läuft der Code.
  • Kindprozess starten. Der Makrocode startet eine Shell, einen Skript-Host oder ein Download-Werkzeug - als Kind der Office-Anwendung.
  • Nachladen und ausführen. Die eigentliche Nutzlast wird heruntergeladen, oft kodiert, und auf dem Host gestartet - der Übergang in die nächste Phase.

Für die Erkennung ist entscheidend: Was der Benutzer anklickt, bleibt unsichtbar, aber der Kindprozess steht in der Telemetrie - eine Office-App als Elternteil einer Shell oder eines Werkzeugs, das dort nichts zu suchen hat. Genau daran setzen die Regeln an.

Welche Logquellen die Technik zeigt

  • Prozess-Telemetrie. Event 4688 und Sysmon Event 1 zeigen den Elternprozess - winword, excel, powerpnt oder outlook - und das gestartete Kind samt Kommandozeile. Die wichtigste Quelle.
  • Dateiereignisse. Sysmon Event 11 zeigt eine von Office geschriebene .exe, .dll oder Skript-Datei, oft in Temp- oder Benutzerverzeichnissen.
  • PowerShell-Protokolle. Script Block Logging macht den nachgeladenen, oft kodierten Code sichtbar; das Entschlüsseln behandelt der Beitrag zu Deobfuscate/Decode.
  • Werkzeug-Kontext. Der Makrocode nutzt Bordmittel wie cmd, mshta oder certutil; Grundlagen dazu unter Living off the Land, Einrichtung unter Sysmon einrichten.

Das Muster im Log

Das klarste Signal ist eine Office-Anwendung als Elternteil einer Shell oder eines Skript-Hosts: winword oder excel startet cmd, powershell, wscript oder mshta. Dafür gibt es im Normalbetrieb praktisch keinen Grund. Das zweite Signal ist dieselbe Elternschaft mit einem Download- oder Proxy-Werkzeug wie certutil, bitsadmin oder regsvr32 - der typische Nachlade- und Ausführungsweg. Das dritte ist eine von Office geschriebene ausführbare oder Skript-Datei. Legitime Treffer stammen aus seltenen Add-ins und Makro-Vorlagen auf bekannten Hosts. Der Blick auf Elternprozess, Kind und geschriebene Datei trennt den Alltag vom Angriff.

Drei Sigma-Regeln

Die Regeln sind mit sigma-cli geprüft und nehmen die drei Spuren: die Shell oder den Skript-Host aus Office, das Download-Werkzeug aus Office und die von Office geschriebene ausführbare Datei. Die ersten beiden sind die spezifischsten.

1. Office-Anwendung startet eine Shell oder einen Skript-Host (T1204.002). winword, excel oder outlook als Elternteil von cmd, powershell, wscript oder mshta. Die Regel steht auf level: high.

Sigma
title: Office-Anwendung startet eine Shell oder einen Skript-Host
id: 1649680f-5042-4835-8186-0e60ff8f76b9
status: experimental
description: |
  Erkennt eine Office-Anwendung, die eine Shell oder einen Skript-Host startet - Word, Excel,
  PowerPoint oder Outlook als Elternprozess von cmd, powershell, wscript, cscript oder mshta. Oeffnet
  ein Opfer ein praepariertes Dokument und erlaubt die Makros, startet der Makrocode einen solchen
  Kindprozess. Eine Office-App als Elternteil einer Shell hat so gut wie nie einen legitimen Grund.
references:
  - https://attack.mitre.org/techniques/T1204/002/
author: blue-team.net
tags:
  - attack.execution
  - attack.t1204.002
logsource:
  product: windows
  category: process_creation
detection:
  sel_parent:
    ParentImage|endswith:
      - '\winword.exe'
      - '\excel.exe'
      - '\powerpnt.exe'
      - '\outlook.exe'
      - '\mspub.exe'
      - '\visio.exe'
      - '\msaccess.exe'
  sel_child:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\pwsh.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\mshta.exe'
  condition: sel_parent and sel_child
falsepositives:
  - Seltene Office-Add-ins und Makro-Vorlagen, die legitim Skripte starten - bekannte Faelle nach Host und Kommandozeile als Baseline ausnehmen
level: high

2. Office-Anwendung startet ein Download- oder Proxy-Werkzeug (T1204.002). certutil, bitsadmin, curl, regsvr32 oder rundll32 als Kind von Office. Ebenfalls level: high.

Sigma
title: Office-Anwendung startet ein Download- oder Proxy-Werkzeug
id: e5c0d4c7-513f-4200-bae5-6fc790ac083c
status: experimental
description: |
  Erkennt eine Office-Anwendung, die ein Download- oder Proxy-Werkzeug startet - certutil, bitsadmin,
  curl, regsvr32, rundll32, msiexec oder mshta als Kind von Word, Excel, PowerPoint oder Outlook. Nach
  dem Oeffnen eines praeparierten Dokuments laedt der Makrocode damit eine Nutzlast nach oder fuehrt
  sie ueber ein Bordmittel aus. Ein solches Werkzeug als Kind einer Office-App ist ein starkes Signal.
references:
  - https://attack.mitre.org/techniques/T1204/002/
author: blue-team.net
tags:
  - attack.execution
  - attack.t1204.002
logsource:
  product: windows
  category: process_creation
detection:
  sel_parent:
    ParentImage|endswith:
      - '\winword.exe'
      - '\excel.exe'
      - '\powerpnt.exe'
      - '\outlook.exe'
      - '\mspub.exe'
      - '\visio.exe'
      - '\msaccess.exe'
  sel_tool:
    Image|endswith:
      - '\certutil.exe'
      - '\bitsadmin.exe'
      - '\curl.exe'
      - '\regsvr32.exe'
      - '\rundll32.exe'
      - '\msiexec.exe'
      - '\installutil.exe'
  condition: sel_parent and sel_tool
falsepositives:
  - Seltene Add-ins, die ueber ein Bordmittel nachladen - bekannte Faelle nach Host und Konto als Baseline ausnehmen
level: high

3. Office-Prozess schreibt eine ausführbare oder Skript-Datei (T1204.002). Eine .exe, .dll, .ps1 oder .hta als Ziel eines Office-Prozesses. Die Regel steht auf level: medium.

Sigma
title: Office-Prozess schreibt eine ausfuehrbare oder Skript-Datei
id: f318c722-ce24-48a5-946d-636ea70eae6e
status: experimental
description: |
  Erkennt eine Office-Anwendung, die eine ausfuehrbare oder Skript-Datei auf die Platte schreibt - eine
  .exe, .dll, .ps1, .vbs, .hta oder .scr als Ziel eines Word-, Excel- oder PowerPoint-Prozesses. Ein
  Makro legt damit seine Nutzlast ab, bevor es sie startet. Dass eine Office-App eine solche Datei
  schreibt, ist ein deutliches Signal boesartiger Dokumentausfuehrung.
references:
  - https://attack.mitre.org/techniques/T1204/002/
author: blue-team.net
tags:
  - attack.execution
  - attack.t1204.002
logsource:
  product: windows
  category: file_event
detection:
  sel_img:
    Image|endswith:
      - '\winword.exe'
      - '\excel.exe'
      - '\powerpnt.exe'
      - '\outlook.exe'
      - '\mspub.exe'
      - '\visio.exe'
      - '\msaccess.exe'
  sel_ext:
    TargetFilename|endswith:
      - '.exe'
      - '.dll'
      - '.ps1'
      - '.vbs'
      - '.hta'
      - '.scr'
      - '.js'
  condition: sel_img and sel_ext
falsepositives:
  - Legitime Add-in- oder Vorlagen-Installationen, die Dateien ablegen - bekannte Faelle nach Pfad und Konto als Baseline ausnehmen
level: medium

Härtung: der Angriff, der ins Leere läuft

  • Makros aus dem Internet blockieren. Die Richtlinie, die VBA-Makros aus dem Internet standardmäßig sperrt, nimmt dem bösartigen Dokument die Grundlage.
  • Child-Prozesse unterbinden. Per Angriffsflächenreduzierung oder EDR verhindern, dass Office-Anwendungen Shells und Werkzeuge starten - genau das Muster der ersten beiden Regeln.
  • Dateitypen am Gateway filtern. Riskante Anhänge und Container am Mail-Gateway entschärfen, bevor sie den Posteingang erreichen.
  • PowerShell härten. Script Block Logging und Constrained Language Mode machen den nachgeladenen Code sichtbar und auswertbar.

Der Test

Die Erkennung lässt sich im Lab gefahrlos prüfen, auf einem isolierten System mit aktivem Sysmon und einem harmlosen Testdokument:

  • Für Regel 1 ein Testdokument mit einem Makro bauen, das calc oder powershell startet, und es öffnen. In Event 4688 muss die Office-App als Elternteil erscheinen.
  • Für Regel 2 dasselbe Makro certutil oder regsvr32 aufrufen lassen und den Elternprozess in der Prozess-Telemetrie prüfen.
  • Für Regel 3 das Makro eine harmlose .ps1- oder .exe-Testdatei schreiben lassen und das Dateiereignis in Event 11 kontrollieren.
  • Breiter wird der Test mit den Fällen zu T1204 aus Atomic Red Team.

Fehlalarme und Tuning

  • Add-ins und Vorlagen. Manche Office-Add-ins und Makro-Vorlagen starten legitim Hilfsprozesse. Bekannte Add-ins, Pfade und Konten als Baseline ausnehmen.
  • Automatisierung. Reporting-Lösungen steuern Office mitunter programmatisch. Diese bekannten Fälle gezielt ausnehmen und den Rest scharf halten.
  • Shell aus Office ist spezifisch. Eine Office-App als Elternteil einer Shell hat kaum einen legitimen Grund - diese Treffer hochpriorisieren.
  • Kette schlägt Einzelzeile. Kindprozess, Nachladen und geschriebene Datei zusammen betrachtet sind aussagekräftiger als ein Ereignis allein - die Korrelation schärft die Bewertung.

Fazit

Malicious File ist der Klassiker unter den Einstiegswegen - und zugleich einer der am besten erkennbaren, weil die Ausführung immer über die Office-Anwendung läuft. Die verlässlichen Signale sind eine Office-App als Elternteil einer Shell oder eines Skript-Hosts, dieselbe Elternschaft mit einem Download-Werkzeug und eine von Office geschriebene ausführbare Datei. Die wirksamste Härtung blockiert Makros aus dem Internet und unterbindet Child-Prozesse aus Office. Was nach dem Klick folgt, zeigen die Beiträge zu Deobfuscate/Decode und zum Living off the Land. Die weiteren Techniken dieser Taktik sammelt das Lexikon nach Taktik unter Execution.

NH

$ whoami

Norbert Hofmann

Cyber Defense Analyst im Security Operations Center eines Managed Security Service Providers. Red und Blue Teaming, Malware-Analyse, Incident Response und Security-Awareness-Trainings. Finalist bei „Deutschlands bester Hacker“ 2022, mehrere CVE-Einträge für WordPress-Plugins.