Analyse forensique de PSReadLine ConsoleHost_history.txt
Ce qu'enregistre le fichier d'historique PSReadLine, où il se trouve, pourquoi il n'a pas d'horodatage, et comment l'utiliser — et ses limites — en investigation.
En bref. PSReadLine enregistre chaque commande tapée dans une console interactive dans ConsoleHost_history.txt — une ligne chacune, sans horodatage, par utilisateur, en survivant aux redémarrages. C'est une mine pour ce qu'une personne a tapé, mais il n'enregistre que la saisie interactive en console et donne l'ordre, pas l'heure. Ouvrez le parseur pour le lire à côté des journaux d'événements.
Où il se trouve et ce qu'il contient
PSReadLine (livré d'origine depuis PowerShell 5 / Windows 10) conserve un fichier d'historique à :
C:\Users\<user>\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
Le nom est <HostName>_history.txt ; ConsoleHost est la console powershell.exe normale. Il ajoute une ligne par commande acceptée. Une commande multiligne est enregistrée avec un accent grave en fin de chaque ligne sauf la dernière ; le parseur les réunit en une seule entrée. Comme il est par utilisateur sous AppData\Roaming, il est attribué au profil dans lequel il se trouve — conservez le chemin Users\<name>\ lors de la collecte. Voir PSReadLine.
Aucun horodatage — seulement l'ordre
Le fichier ne contient aucune heure. Cela a deux conséquences. D'abord, sa chronologie n'est que l'ordre des lignes ; pour situer une commande dans le temps, il faut la corréler à un événement 4104 ou 800 horodaté, ou à une transcription. Ensuite, le fichier persiste à travers redémarrages et ouvertures de session, si bien qu'une ligne peut être plus ancienne de plusieurs semaines ou mois que le plus ancien événement de vos journaux. Traitez-le comme un enregistrement d'intention et de technique, corroboré ailleurs pour la datation.
Limites à énoncer
- Interactif uniquement. Les commandes lancées depuis un
.ps1, une tâche planifiée, WinRM ou un hôte personnalisé autre que la console ne sont pas écrites ici. - Contrôlé par l'attaquant. L'historique peut être effacé (
Clear-Historyvide la session ; supprimer ou tronquer le fichier l'élimine entièrement) — le parseur signale les commandes d'effacement d'historique qu'il voit. - Pas une preuve de réussite. Il enregistre ce qui a été tapé, y compris les fautes de frappe et les commandes abandonnées, pas ce qui a réussi.
L'utiliser dans un dossier
Chargez le fichier d'historique aux côtés des journaux d'événements et des transcriptions pour qu'une commande tapée s'aligne sur son exécution journalisée. Le parseur décode toute commande encodée sur une ligne d'historique et signale cradles de téléchargement, altération de Defender et d'AMSI, et effacement de journaux. Analysez-le dans votre navigateur.
FAQ
Où se trouve le fichier d'historique PowerShell ?
PSReadLine l'écrit dans C:\Users\<user>\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt, un par utilisateur. Les autres hôtes utilisent <HostName>_history.txt.
Comporte-t-il des horodatages ?
Non. PSReadLine ajoute une ligne par commande, sans heure. L'ordre des lignes est la seule chronologie, et le fichier peut être bien plus ancien que les journaux d'événements.
Que capture-t-il ?
Uniquement la saisie interactive tapée dans une console hôte, par utilisateur, à travers les sessions et les redémarrages. Il ne capture ni les scripts, ni les tâches planifiées, ni les runspaces non-console.