Forensik von PSReadLine ConsoleHost_history.txt
Was die PSReadLine-Verlaufsdatei aufzeichnet, wo sie liegt, warum sie keine Zeitstempel hat und wie man sie – samt ihren Grenzen – in einer Untersuchung nutzt.
Kurzfassung. PSReadLine speichert jeden an einer interaktiven Konsole eingegebenen Befehl in ConsoleHost_history.txt – je eine Zeile, ohne Zeitstempel, pro Benutzer und über Neustarts hinweg. Die Datei ist eine Fundgrube dafür, was eine Person eingetippt hat, erfasst aber nur interaktive Konsoleneingaben und liefert Ihnen eine Reihenfolge, keine Uhrzeit. Öffnen Sie den Parser, um sie neben den Ereignisprotokollen zu lesen.
Wo sie liegt und was sie enthält
PSReadLine (seit PowerShell 5 / Windows 10 standardmäßig enthalten) führt eine Verlaufsdatei unter:
C:\Users\<user>\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
Der Name lautet <HostName>_history.txt; ConsoleHost ist die normale powershell.exe-Konsole. Pro angenommenem Befehl wird eine Zeile angehängt. Ein mehrzeiliger Befehl wird mit einem abschließenden Backtick auf jeder Zeile außer der letzten gespeichert; der Parser fügt diese Zeilen wieder zu einem Eintrag zusammen. Da die Datei pro Benutzer unter AppData\Roaming liegt, wird sie dem Profil zugeordnet, in dem sie sich befindet – behalten Sie beim Sichern den Pfad Users\<name>\ bei. Siehe PSReadLine.
Keine Zeitstempel – nur Reihenfolge
Die Datei enthält überhaupt keine Zeitangaben. Das hat zwei Folgen. Erstens besteht ihre Chronologie nur aus der Reihenfolge der Zeilen; um einen Befehl zeitlich einzuordnen, müssen Sie ihn mit einem zeitgestempelten 4104- oder 800-Ereignis oder einem Transkript korrelieren. Zweitens überdauert die Datei Neustarts und Profilanmeldungen, sodass eine Zeile Wochen oder Monate älter sein kann als das früheste Ereignis in Ihren Protokollen. Betrachten Sie sie als Nachweis von Absicht und Vorgehensweise, dessen zeitliche Einordnung anderweitig bestätigt werden muss.
Grenzen, die man kennen sollte
- Nur interaktiv. Befehle aus einer
.ps1, einer geplanten Aufgabe, über WinRM oder aus einem benutzerdefinierten Host, der nicht die Konsole ist, werden hier nicht geschrieben. - Vom Angreifer kontrollierbar. Der Verlauf lässt sich löschen (
Clear-Historyleert die Sitzung; das Löschen oder Kürzen der Datei entfernt ihn vollständig) – der Parser markiert Befehle zum Löschen des Verlaufs, die er erkennt. - Kein Erfolgsnachweis. Er zeichnet auf, was eingetippt wurde, einschließlich Tippfehlern und abgebrochener Befehle, nicht was erfolgreich war.
Einsatz in einem Fall
Laden Sie die Verlaufsdatei zusammen mit den Ereignisprotokollen und Transkripten, damit ein eingetippter Befehl mit seiner protokollierten Ausführung übereinandergelegt werden kann. Der Parser dekodiert jeden kodierten Befehl in einer Verlaufszeile und markiert Download-Cradles, Manipulationen an Defender und AMSI sowie das Löschen von Protokollen. Analysieren Sie sie im Browser.
FAQ
Wo befindet sich die PowerShell-Verlaufsdatei?
PSReadLine schreibt sie nach C:\Users\<user>\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt, eine pro Benutzer. Andere Hosts verwenden <HostName>_history.txt.
Hat sie Zeitstempel?
Nein. PSReadLine hängt pro Befehl eine Zeile ohne Uhrzeit an. Die Reihenfolge der Zeilen ist die einzige Chronologie, und die Datei kann deutlich älter sein als die Ereignisprotokolle.
Was erfasst sie?
Nur interaktive Eingaben an einem Konsolen-Host, pro Benutzer, über Sitzungen und Neustarts hinweg. Skripte, geplante Aufgaben und Nicht-Konsolen-Runspaces werden nicht erfasst.