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
EnableScriptBlockLoggingmit dem Wert 1 unterHKLM\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
ScriptBlockIdverteilt 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
- Ereignis-ID 4104, das Ereignis, das diese Funktion schreibt
- Modulprotokollierung (4103), die begleitende Richtlinie
- PowerShell-Downgrade-Angriff, ein Weg, ohne sie zu arbeiten
- AMSI, der andere Schutzmechanismus aus Version 5, der Code nach der Deobfuskation prüft
Setzen Sie Skriptblöcke im PowerShell Parser zusammen und dekodieren Sie sie, und lesen Sie den Forensik-Leitfaden zu 4104.