Basic PowerShell Base64 Encoded Command Detection
Beginner-level query to detect the use of Base64 encoding parameters in PowerShell (-EncodedCommand, -enc), a technique widely used by attackers to obfuscate malicious scripts and evade plain-text detection. Ideal starting point for EDR threat hunting
EDRpowershellbase64obfuscationencoded-commanddetection-evasionT1059.001T1027
FDR Beginnerby darkreitor 1 min read
Query
#repo="base_sensor" #event_simpleName=ProcessRollup2
| FileName=/(?i)powershell\.exe$/
| CommandLine=/(?i)(-enc\s|-encodedcommand\s|-e\s+[A-Za-z0-9+\/=]{20,})/
| groupBy([ComputerName, UserName, CommandLine], function=count(as=exec_count), limit=max)
| sort(field=exec_count, order=desc, limit=50)Explanation
| Pipe | Descripción | ||
|---|---|---|---|
#repo="base_sensor" #event_simpleName=ProcessRollup2 | Filtra eventos de creación de procesos del sensor FDR en endpoints | ||
FileName=/(?i)powershell\.exe$/ | Selecciona únicamente procesos de PowerShell incluyendo cualquier variante de capitalización del nombre | ||
| `CommandLine=/(?i)(-enc\s\ | -encodedcommand\s\ | -e\s+[A-Za-z0-9+\/=]{20,})/` | Detecta los flags de codificación Base64 con un payload mínimo de 20 caracteres para reducir falsos positivos de comandos cortos |
groupBy([ComputerName, UserName, CommandLine], function=count(as=exec_count)) | Agrupa por host, usuario y comando completo para facilitar triaje rápido e identificar recurrencia | ||
sort(field=exec_count, order=desc, limit=50) | Muestra los 50 comandos codificados más frecuentes — reducir el límite para enfocarse en las mayores anomalías |
Adjustable Variables
El mínimo {20,} puede aumentarse a {50,} o {100,} para reducir falsos positivos de scripts legítimos cortos. Añadir exclusiones por CommandLine con firmas de herramientas de administración legítimas conocidas. Combinar con ScriptBlockText del evento ScriptBlockLogging para decodificar y analizar el payload real del script.