Skip to content

Glossar

Skriptblockprotokollierung

Eine Funktion von PowerShell 5, die den Quelltext jedes von der Engine kompilierten Skriptblocks nach der Deobfuskation in Ereignis-ID 4104 aufzeichnet.

Die Skriptblockprotokollierung (Script Block Logging) ist eine in PowerShell 5.0 (Windows 10 / WMF 5.0) eingeführte Funktion, die den Text jedes von der Engine kompilierten Skriptblocks als Ereignis-ID 4104 in das Protokoll Microsoft-Windows-PowerShell/Operational schreibt. Ein Skriptblock ist jede Codeeinheit, die PowerShell kompiliert: ein ganzes Skript, eine Funktion, ein an der Eingabeaufforderung eingetippter Befehl oder eine an Invoke-Expression übergebene Zeichenkette. Da die Protokollierung erst nach der Deobfuskation des Codes erfolgt, wird ein -EncodedCommand oder ein verketteter Einzeiler in aufgelöster Form aufgezeichnet (Microsoft).

Warum es für Untersuchungen wichtig ist

Sie ist das einzige PowerShell-Protokoll, das den Code zeigt und nicht nur eine Befehlszeile, und damit die beste Aufzeichnung von Nutzlasten im Arbeitsspeicher, heruntergeladenen Skripten und dekodierten Einzeilern. Drei Dinge bestimmen, wie Sie sie lesen:

  • Standardmäßig deaktiviert. Die vollständige Protokollierung erfordert die Gruppenrichtlinie „PowerShell-Skriptblockprotokollierung aktivieren“ oder den Registrierungswert EnableScriptBlockLogging mit dem Wert 1 unter HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging.
  • Blöcke auf Warnstufe trotzdem. Selbst bei deaktivierter Richtlinie protokolliert PowerShell 5 Blöcke, die Begriffe enthalten, die es für verdächtig hält, auf Warnstufe. Ein System „ohne Protokollierung“ hat daher oft trotzdem eine teilweise Aufzeichnung.
  • Aufgeteilte Blöcke. Lange Blöcke werden auf mehrere 4104-Ereignisse mit gemeinsamer ScriptBlockId verteilt und müssen in der richtigen Reihenfolge wieder zusammengesetzt werden.

Angreifer wissen das, daher ist das Deaktivieren der Funktion für sich genommen schon ein Hinweis auf Manipulation: Änderungen am Richtlinienschlüssel ScriptBlockLogging oder Reflection gegen die zwischengespeicherten Gruppenrichtlinieneinstellungen von PowerShell sollten überall markiert werden, wo sie auftauchen.

Beispiel

Ein Befehl, der die Funktion abschaltet – die Art von Zeile, nach der Sie in Verläufen, Transkripten oder früheren 4104-Ereignissen suchen sollten:

Set-ItemProperty HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging -Name EnableScriptBlockLogging -Value 0

Der Parser erzeugt hierfür einen Befund zur Manipulation der Protokollierung mit hoher Schwere, ebenso für Verweise auf cachedGroupPolicySettings oder den ETW-Provider von PowerShell, und kennzeichnet 4104-Blöcke auf Warnstufe gesondert.

Verwandte Begriffe

Setzen Sie Skriptblöcke im PowerShell Parser zusammen und dekodieren Sie sie, und lesen Sie den Forensik-Leitfaden zu 4104.