Glosario
Script Block Logging
Una función de PowerShell 5 que registra en el event ID 4104 el código fuente de cada bloque de script que compila el motor, después de la desofuscación.
El Script Block Logging es una función añadida en PowerShell 5.0 (Windows 10 / WMF 5.0) que escribe el texto de cada bloque de script que compila el motor en el event ID 4104 del registro Microsoft-Windows-PowerShell/Operational. Un bloque de script es cualquier unidad de código que PowerShell compila: un script completo, una función, un comando tecleado en el prompt o una cadena pasada a Invoke-Expression. Como el registro se produce después de desofuscar el código, un -EncodedCommand o una línea de comando concatenada se registra en su forma expandida (Microsoft).
Por qué importa en una investigación
Es el único registro de PowerShell que muestra el código, no solo una línea de comandos, lo que lo convierte en el mejor registro de las cargas útiles en memoria, los scripts descargados y las líneas de comando decodificadas. Tres aspectos condicionan cómo leerlo:
- Desactivado de forma predeterminada. El registro completo requiere la directiva de grupo "Turn on PowerShell Script Block Logging", o el valor de registro
EnableScriptBlockLoggingestablecido en 1 enHKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging. - Bloques de nivel Warning de todos modos. Incluso con la directiva desactivada, PowerShell 5 registra con nivel Warning los bloques que contienen términos que considera sospechosos, por lo que un host "sin registro" a menudo conserva un registro parcial.
- Bloques divididos. Los bloques largos se reparten entre varios eventos 4104 que comparten un
ScriptBlockIdy deben reensamblarse en orden.
Los atacantes lo saben, por lo que desactivarlo es en sí mismo una señal de manipulación: los cambios en la clave de directiva ScriptBlockLogging, o el uso de reflexión contra la configuración de directiva de grupo que PowerShell guarda en caché, merecen señalarse allí donde aparezcan.
Ejemplo
Un comando que desactiva la función, el tipo de línea que conviene buscar en el historial, las transcripciones o eventos 4104 anteriores:
Set-ItemProperty HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging -Name EnableScriptBlockLogging -Value 0
El parser genera un hallazgo de manipulación del registro de gravedad alta por este comando y por las referencias a cachedGroupPolicySettings o al proveedor ETW de PowerShell, y marca por separado los bloques 4104 de nivel Warning.
Términos relacionados
- Event ID 4104, el evento que escribe esta función
- Module Logging (4103), su directiva complementaria
- Ataque de degradación de PowerShell, una forma de ejecutar sin él
- AMSI, la otra defensa de la versión 5 que inspecciona el código después de la desofuscación
Reensamble y decodifique bloques de script en el PowerShell Parser y lea la guía forense del 4104.