PowerShell Event ID 4104: Registro de bloques de script
- Event ID
- 4104
- Registro
- Microsoft-Windows-PowerShell/Operational
- Proveedor
- Microsoft-Windows-PowerShell
- Archivo
- Microsoft-Windows-PowerShell%4Operational.evtx
- Categoría
- PowerShell
- Registro predeterminado
- Requiere configuración
Qué significa el evento 4104
El evento 4104 lo escribe el motor de PowerShell cuando compila un bloque de script. El campo ScriptBlockText contiene el código tal como lo ve PowerShell: comandos escritos en el prompt, scripts completos, funciones y, lo más importante, código que estaba codificado en Base64, se descargó o se construyó en tiempo de ejecución, porque el registro se produce después de eliminar esa capa.
Los scripts grandes se dividen en varios eventos que comparten un ScriptBlockId; MessageNumber y MessageTotal indican cómo volver a unirlos. El campo Path se rellena cuando el bloque procede de un archivo de script.
Incluso sin ninguna directiva, PowerShell 5 y posteriores registran con nivel Warning los bloques de script que contienen palabras clave conocidas como sospechosas. El registro completo de cada bloque requiere la directiva Script Block Logging, que es lo que convierte al 4104 en la columna vertebral de las investigaciones de PowerShell.
Cuándo se registra
Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell > Turn on PowerShell Script Block Logging (o el registro HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging\EnableScriptBlockLogging = 1).
Sin la directiva, Windows PowerShell 5.x sigue registrando como eventos 4104 de nivel Warning los bloques que considera sospechosos. PowerShell 7 escribe en el canal PowerShellCore/Operational y tiene su propia configuración de directivas.
Campos clave
| Campo | Qué indica |
|---|---|
| ScriptBlockText | El código del bloque de script, una vez eliminadas las capas de ofuscación como -EncodedCommand. |
| ScriptBlockId | GUID compartido por todas las partes de un bloque de script; agrupe por él para reconstruir los scripts largos. |
| MessageNumber | Número de parte de este evento en un bloque de script dividido. |
| MessageTotal | Número total de partes del bloque de script. |
| Path | Archivo de script del que procede el bloque; vacío para el código interactivo o en memoria. |
Orígenes legítimos habituales
- Scripts administrativos, gestión de la configuración (SCCM, Intune, DSC) y agentes de monitorización.
- Módulos propios de PowerShell y scripts de perfil que se cargan al iniciar.
- Instaladores de software y automatizaciones de TI que usan PowerShell internamente.
Qué hacen los atacantes para generarlo
- Download cradles como
IEX (New-Object Net.WebClient).DownloadString(...)eInvoke-WebRequestdescargando payloads. - Comandos codificados u ofuscados, recuperados aquí en forma legible.
- Frameworks y herramientas ofensivas cargados en memoria (volcado de credenciales, reconocimiento de AD, intentos de evasión de AMSI).
- Comandos de manipulación de defensas como
Set-MpPreference -DisableRealtimeMonitoring.
Consejos de investigación
- Filtre primero el nivel 3 (Warning): son los bloques que el propio PowerShell marcó como sospechosos.
- Reconstruya los bloques divididos por ScriptBlockId en el orden de MessageNumber antes de leerlos.
- Busque en ScriptBlockText indicadores de red (URL, IP),
FromBase64String,Invoke-Expression,-bxor,Reflection.Assemblyy cadenas relacionadas con AMSI. - Encuentre el proceso que ejecutó el bloque con Sysmon 1 / 4688 de Seguridad (línea de comandos de powershell.exe) y el evento 400 del registro clásico (HostApplication).
Técnicas MITRE ATT&CK
MITRE ATT&CK v19.2. Nombres de técnicas y tácticas según MITRE (en inglés).
Reglas Sigma para este evento
162 reglas de detección de SigmaHQ (versión r2026-07-01) apuntan a este evento. Se muestran las 25 reglas de mayor severidad.
- Crítica · 2
- Alta · 51
- Media · 89
- Baja · 20
- CríticaSilence.EDA DetectionRule by Alina Stepchenkova, Group-IB, oscd.community, SigmaHQ, DRL 1.1
- CríticaSuspicious PowerShell Mailbox Export to Share - PSRule by Nasreddine Bencherchali (Nextron Systems), SigmaHQ, DRL 1.1
- AltaAADInternals PowerShell Cmdlets Execution - PsScriptRule by Austin Songer (@austinsonger), Nasreddine Bencherchali (Nextron Systems), Swachchhanda Shrawan Poudel (Nextron Systems), SigmaHQ, DRL 1.1
- AltaAbuse of Service Permissions to Hide Services Via Set-Service - PSRule by Nasreddine Bencherchali (Nextron Systems), SigmaHQ, DRL 1.1
- AltaAMSI Bypass Pattern Assembly GetTypeRule by Florian Roth (Nextron Systems), SigmaHQ, DRL 1.1
- AltaClearing Windows Console HistoryRule by Austin Songer @austinsonger, SigmaHQ, DRL 1.1
- AltaCode Executed Via Office Add-in XLL FileRule by frack113, SigmaHQ, DRL 1.1
- AltaCreate Volume Shadow Copy with PowershellRule by frack113, SigmaHQ, DRL 1.1
- AltaDeletion of Volume Shadow Copies via WMI with PowerShell - PS ScriptRule by Tim Rauch, frack113, SigmaHQ, DRL 1.1
- AltaDisable of ETW Trace - PowershellRule by Nasreddine Bencherchali (Nextron Systems), SigmaHQ, DRL 1.1
- AltaDisable Powershell Command HistoryRule by Ali Alwashali, SigmaHQ, DRL 1.1
- AltaDisable-WindowsOptionalFeature Command PowerShellRule by frack113, SigmaHQ, DRL 1.1
- AltaDSInternals Suspicious PowerShell Cmdlets - ScriptBlockRule by Nasreddine Bencherchali (Nextron Systems), SigmaHQ, DRL 1.1
- AltaHackTool - Rubeus Execution - ScriptBlockRule by Christian Burkard (Nextron Systems), Florian Roth (Nextron Systems), SigmaHQ, DRL 1.1
- AltaHackTool - WinPwn Execution - ScriptBlockRule by Swachchhanda Shrawan Poudel, SigmaHQ, DRL 1.1
- AltaInvoke-Obfuscation CLIP+ Launcher - PowerShellRule by Jonathan Cheong, oscd.community, SigmaHQ, DRL 1.1
- AltaInvoke-Obfuscation Obfuscated IEX Invocation - PowerShellRule by Daniel Bohannon (@Mandiant/@FireEye), oscd.community, SigmaHQ, DRL 1.1
- AltaInvoke-Obfuscation STDIN+ Launcher - PowershellRule by Jonathan Cheong, oscd.community, SigmaHQ, DRL 1.1
- AltaInvoke-Obfuscation VAR+ Launcher - PowerShellRule by Jonathan Cheong, oscd.community, SigmaHQ, DRL 1.1
- AltaInvoke-Obfuscation VAR++ LAUNCHER OBFUSCATION - PowerShellRule by Timur Zinniatullin, oscd.community, SigmaHQ, DRL 1.1
- AltaInvoke-Obfuscation Via Stdin - PowershellRule by Nikita Nazarov, oscd.community, SigmaHQ, DRL 1.1
- AltaInvoke-Obfuscation Via Use Clip - PowershellRule by Nikita Nazarov, oscd.community, SigmaHQ, DRL 1.1
- AltaInvoke-Obfuscation Via Use MSHTA - PowerShellRule by Nikita Nazarov, oscd.community, SigmaHQ, DRL 1.1
- AltaInvoke-Obfuscation Via Use Rundll32 - PowerShellRule by Nikita Nazarov, oscd.community, SigmaHQ, DRL 1.1
- AltaLive Memory Dump Using PowershellRule by Max Altgelt (Nextron Systems), SigmaHQ, DRL 1.1
Reglas de sus autores indicados, publicadas por SigmaHQ bajo la Detection Rule License (DRL) 1.1.
Ejecute estas reglas en sus registros
Suelte un archivo .evtx en el visor: las 2395 reglas SigmaHQ incluidas se ejecutan en su navegador. No se sube nada.