Los registros de bloques de script de PowerShell residen en Registros de Aplicaciones y Servicios → Microsoft → Windows → PowerShell → Operacional, como evento 4104. Solo están completos si el registro de bloques de script está activado. Para exportarlos:
wevtutil epl "Microsoft-Windows-PowerShell/Operational" C:logspowershell.evtx
PowerShell 7 es un producto separado con un canal separado, PowerShellCore/Operational, y su propia configuración de políticas.
Si un atacante accedió a una máquina con Windows, lo más probable es que PowerShell estuviera involucrado. El registro de bloques de script registra el código que realmente se ejecutó, a menudo después de que se hayan eliminado las capas de ofuscación. Prime Core tiene 663 reglas de detección para los registros de PowerShell, asignadas a 417 técnicas MITRE ATT&CK. Cubren el uso malicioso de PowerShell (T1059.001), ofuscación (T1027) y cradles de descarga que traen herramientas (T1105).
Antes de comenzar
¿Está activado el registro de bloque de scripts?
reg query "HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging"
EnableScriptBlockLogging establecido en 0x1 significa sí. Si la clave no existe, está desactivado. Aun así, Windows PowerShell 5.1 sigue registrando bloques de script que considera sospechosos, como eventos 4104 en nivel de advertencia. Por lo que podrías encontrar algunos eventos. Solo asegúrate de no confundirlos con la imagen completa.
Activarlo ayuda de ahora en adelante, no para lo que ya sucedió. Usa la configuración de Política de Grupo Plantillas Administrativas → Componentes de Windows → Windows PowerShell → Activar el registro de bloques de script de PowerShell, o configura el valor del registro directamente:
reg add "HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging" /v EnableScriptBlockLogging /t REG_DWORD /d 1 /f
PowerShell 7 lee su propia clave de política bajo HKLMSOFTWAREPoliciesMicrosoftPowerShellCore. Si se instaló a partir de un zip en lugar del MSI, su canal de eventos puede no estar registrado hasta que ejecutes RegisterManifest.ps1 desde $PSHOME.
Espera volumen. Cada script y módulo que se ejecuta termina en el registro. Aumenta el tamaño máximo del canal, o solo conservarás unas pocas horas.
Espera secretos. Los scripts de administración a veces llevan contraseñas y claves API en texto plano, y el registro de bloques de script las registra fielmente. Tenlo en cuenta antes de que este archivo vaya a cualquier parte, y lee la sección LogTotal a continuación.
Exportar los registros
En el Visor de Eventos, haz clic derecho Operacional en PowerShell y elige Guardar Todos los Eventos Como… Desde la línea de comandos:
:: solo bloques de script
wevtutil epl "Microsoft-Windows-PowerShell/Operational" C:logsps_4104.evtx /q:"*[System[(EventID=4104)]]"
:: PowerShell 7
wevtutil epl "PowerShellCore/Operational" C:logspwsh.evtx
:: el clásico registro de "Windows PowerShell": eventos de inicio del motor con la línea de comandos del host
wevtutil epl "Windows PowerShell" C:logswindows_powershell.evtx
Ese último es fácil de olvidar, y vale la pena obtenerlo. El evento 400 registra cada inicio del motor, incluida la versión del motor. Una versión del motor de 2.0 en un sistema moderno generalmente significa que alguien bajó deliberadamente la versión para evitar el registro de bloques de script.
Sube y revisa en LogTotal
LogTotal lee EVTX de manera nativa. Una cosa que debes saber primero: LogTotal todavía no sanitiza archivos EVTX. Con los registros de PowerShell, eso importa más de lo habitual, debido a los secretos mencionados anteriormente. Usa cargas de EVTX libremente para computadoras de prueba. Para hosts de producción, obtén un sí de quien sea responsable del manejo de datos primero.
- Subir. Abrir logtotal.com y suelta el archivo.
- Revisar.
Cuando algo sale mal
| Síntoma | Causa probable | Fix |
|---|---|---|
| No hay eventos 4104 en absoluto | El registro de bloques de script está desactivado, y nada parecía sospechoso | Actívalo para el futuro; verifica el registro de Windows PowerShell para lo que aún puedes obtener |
| Solo un puñado de eventos 4104, todos de Advertencia | El registro está desactivado; estás viendo el registro automático de bloques sospechosos | Igual que arriba |
| PowerShellCore/Operational no encontrado | PowerShell 7 no está instalado, o su manifiesto no está registrado | Ejecuta RegisterManifest.ps1 desde $PSHOME |
| El texto 4104 es un cifrado ilegible | El registro de eventos protegidos está activado | Necesitas el certificado de descifrado |
| El registro cubre solo unas pocas horas | Tamaño predeterminado, alto volumen | Aumenta el tamaño máximo del canal |
FAQ
¿Captura el registro de bloques de script código ofuscado?
En gran medida, sí. Registra bloques de script a medida que se compilan. Cuando el código ofuscado construye y ejecuta la siguiente etapa, esa etapa se registra como su propio bloque, a menudo en forma legible.
¿Cuál es la diferencia con la transcripción?
La transcripción escribe archivos de texto de la entrada y salida de la sesión en una carpeta. El registro de bloques de script registra el código en sí en el registro de eventos. Se complementan entre sí, y ambos valen la pena tener.