Cómo habilitar y exportar registros de bloques de scripts de PowerShell

Cómo habilitar y exportar registros de bloques de scripts de PowerShell

SOC Prime Team
SOC Prime Team linkedin icon Seguir

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).

Empieza Gratis

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.

  1. Subir. Abrir logtotal.com y suelta el archivo.
  2. Revisar.

Cuando algo sale mal

SíntomaCausa probableFix
No hay eventos 4104 en absolutoEl registro de bloques de script está desactivado, y nada parecía sospechosoActí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 AdvertenciaEl registro está desactivado; estás viendo el registro automático de bloques sospechososIgual que arriba
PowerShellCore/Operational no encontradoPowerShell 7 no está instalado, o su manifiesto no está registradoEjecuta RegisterManifest.ps1 desde $PSHOME
El texto 4104 es un cifrado ilegibleEl registro de eventos protegidos está activadoNecesitas el certificado de descifrado
El registro cubre solo unas pocas horasTamaño predeterminado, alto volumenAumenta 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.

Únete a la plataforma Detection as Code de SOC Prime para mejorar la visibilidad de las amenazas más relevantes para tu negocio. Para ayudarte a comenzar y obtener valor inmediato, programa una reunión ahora con los expertos de SOC Prime.