PowerShell-Skriptblockprotokolle sind vorhanden in Anwendungen und Dienstprotokolle → Microsoft → Windows → PowerShell → Operational, als Ereignis 4104. Sie sind nur vollständig, wenn die Protokollierung von Skriptblöcken aktiviert ist. Um sie zu exportieren:
wevtutil epl "Microsoft-Windows-PowerShell/Operational" C:logspowershell.evtx
PowerShell 7 ist ein separates Produkt mit einem separaten Kanal, PowerShellCore/Operational, und einer eigenen Richtlinieneinstellung.
Wenn ein Angreifer auf einen Windows-Rechner zugegriffen hat, ist PowerShell wahrscheinlich involviert. Die Protokollierung von Skriptblöcken zeichnet den tatsächlich ausgeführten Code auf, oft nachdem die Verschleierungsschichten entfernt wurden. Prime Core verfügt über 663 Erkennungsregeln für PowerShell-Protokolle, die 417 MITRE ATT&CK-Techniken zugeordnet sind. Sie decken böswillige PowerShell-Nutzung (T1059.001), Verschleierung (T1027) und Download-Halterungen ab, die Tools anziehen (T1105).
Bevor Sie beginnen
Ist die Protokollierung von Skriptblöcken aktiviert?
reg query "HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging"
EnableScriptBlockLogging auf 0x1 bedeutet ja. Wenn der Schlüssel nicht existiert, ist er aus. Dennoch protokolliert Windows PowerShell 5.1 weiterhin Skriptblöcke, die es als verdächtig erachtet, als 4104-Ereignisse auf Warnungsebene. Sie können also einige Ereignisse finden. Verwechseln Sie sie jedoch nicht mit dem Gesamtbild.
Das Einschalten hilft ab sofort und nicht für bereits Geschehenes. Verwenden Sie die Gruppenrichtlinieneinstellung Administrative Vorlagen → Windows-Komponenten → Windows PowerShell → PowerShell-Skriptblockprotokollierung aktivieren, oder setzen Sie den Registrierungswert direkt:
reg add "HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging" /v EnableScriptBlockLogging /t REG_DWORD /d 1 /f
PowerShell 7 liest seinen eigenen Richtlinien-Schlüssel unter HKLMSOFTWAREPoliciesMicrosoftPowerShellCore. Wenn es aus einem Zip und nicht dem MSI installiert wurde, kann sein Ereigniskanal nicht registriert sein, bis Sie RegisterManifest.ps1 von $PSHOME ausführen.
Erwarten Sie Volumen. Jedes Skript und Modul, das ausgeführt wird, endet im Protokoll. Erhöhen Sie die maximale Größe des Kanals, oder Sie behalten nur wenige Stunden.
Erwarten Sie Geheimnisse. Administrator-Skripte enthalten manchmal Passwörter und API-Schlüssel im Klartext, und die Protokollierung von Skriptblöcken zeichnet diese originalgetreu auf. Beachten Sie dies, bevor diese Datei irgendwohin gelangt, und lesen Sie den Abschnitt LogTotal unten.
Exportieren Sie die Protokolle
Im Ereignisanzeige, Rechtsklick Operational unter PowerShell und wählen Sie Alle Ereignisse speichern unter… Von der Kommandozeile:
:: nur Skriptblöcke
wevtutil epl "Microsoft-Windows-PowerShell/Operational" C:logsps_4104.evtx /q:"*[System[(EventID=4104)]]"
:: PowerShell 7
wevtutil epl "PowerShellCore/Operational" C:logspwsh.evtx
:: das klassische "Windows PowerShell"-Protokoll: Engine-Startereignisse mit der Host-Befehlszeile
wevtutil epl "Windows PowerShell" C:logswindows_powershell.evtx
Das letzte ist leicht zu vergessen, aber es lohnt sich, es zu erfassen. Ereignis 400 protokolliert jeden Motorstart, einschließlich der Motorversion. Eine EngineVersion von 2.0 auf einem modernen System bedeutet normalerweise, dass jemand bewusst heruntergestuft hat, um die Protokollierung von Skriptblöcken zu umgehen.
Hochladen und Überprüfung in LogTotal
LogTotal liest EVTX nativ. Ein Punkt, den Sie vorher wissen sollten: LogTotal bereinigt EVTX-Dateien noch nicht. Mit PowerShell-Protokollen ist das mehr als üblich wichtig, wegen der oben erwähnten Geheimnisse. Verwenden Sie EVTX-Uploads frei für Testmaschinen. Für Produktionshosts holen Sie sich zuerst ein Ja von demjenigen, der für die Datenverarbeitung zuständig ist.
- Hochladen. Öffnen logtotal.com und ziehen Sie die Datei hinein.
- Überprüfen.
Wenn es falsch läuft
| Symptom | Wahrscheinliche Ursache | Fix |
|---|---|---|
| Keine 4104-Ereignisse überhaupt | Script-Block-Protokollierung ist aus und nichts sah verdächtig aus | Aktivieren Sie es für die Zukunft; überprüfen Sie das Windows PowerShell-Protokoll auf das, was Sie noch bekommen können |
| Nur eine Handvoll von 4104-Ereignissen, alle Warnungen | Protokollierung ist aus; Sie sehen die automatische Protokollierung verdächtiger Blöcke | Das gleiche wie oben |
| PowerShellCore/Operational wurde nicht gefunden | PowerShell 7 ist nicht installiert oder sein Manifest ist nicht registriert | Führen Sie RegisterManifest.ps1 von $PSHOME aus |
| 4104-Text ist unlesbare Geheimschrift | Geschütztes Ereignisprotokollieren ist aktiviert | Sie benötigen das Entschlüsslungszertifikat |
| Protokoll deckt nur ein paar Stunden ab | Standardgröße, hohes Volumen | Erhöhen Sie die maximale Größe des Kanals |
FAQ
Erfasst die Protokollierung von Skriptblöcken verschleierten Code?
Größtenteils ja. Sie protokolliert Skriptblöcke, während sie kompiliert werden. Wenn verschleierter Code die nächste Stufe erstellt und ausführt, wird diese Stufe als eigener Block protokolliert, oft in lesbarer Form.
Was ist der Unterschied zur Transkription?
Transkription schreibt Textdateien des Sitzungsinput und -outputs in einen Ordner. Die Protokollierung von Skriptblöcken zeichnet den Code selbst im Ereignisprotokoll auf. Sie ergänzen sich und beide sind es wert, zu haben.