Sysmon: Configuración Óptima para Detección en el SOC
Guia completa de Sysmon para deteccion en el SOC. Event IDs criticos, configuraciones de SwiftOnSecurity y Olaf Hartong, reglas personalizadas, integracion con SIEM, tuning de rendimiento y mejores practicas operativas.
Que es Sysmon y por que importa
Sysmon (System Monitor) es una herramienta gratuita de Microsoft Sysinternals que genera telemetria de seguridad detallada en Windows. Se instala como un driver de kernel y un servicio que monitorizan actividad del sistema y la registran en el Windows Event Log.
Lo que hace especial a Sysmon es que registra informacion que el Event Log nativo de Windows no captura:
- Linea de comandos completa de procesos (incluyendo argumentos)
- Hash del ejecutable (MD5, SHA256, IMPHASH)
- Proceso padre real (no spoofeable facilmente)
- Conexiones de red con el proceso de origen
- Consultas DNS con el proceso que las genero
- Acceso a memoria de otros procesos (credential dumping)
- Carga de DLLs con firma y hash
- Creacion de named pipes (lateral movement)
Sin Sysmon, un SOC que depende del Event Log nativo tiene visibilidad muy limitada sobre actividad maliciosa en Windows.
Event IDs: la referencia completa
Sysmon genera eventos con IDs especificos para cada tipo de actividad. Conocer estos IDs es fundamental para escribir reglas de deteccion.
Event ID 1: Process Creation
El evento mas importante de Sysmon. Registra cada proceso que se crea en el sistema.
Campos clave:
| Campo | Descripcion | Valor para deteccion |
|---|---|---|
| Image | Path completo del ejecutable | Detectar ejecutables en paths inusuales |
| CommandLine | Linea de comandos completa | Detectar argumentos sospechosos |
| ParentImage | Path del proceso padre | Detectar cadenas de ejecucion anomalas |
| ParentCommandLine | Linea del padre | Contexto adicional |
| Hashes | MD5, SHA256, IMPHASH | Correlacion con IOCs |
| User | Usuario que ejecuta | Detectar escalacion de privilegios |
| IntegrityLevel | Nivel de integridad | Detectar bypass de UAC |
| OriginalFileName | Nombre original del PE | Detectar masquerading (T1036) |
Ejemplos de detecciones con Event ID 1:
- PowerShell con
-enco-encodedcommand(ejecucion codificada) cmd.execomo hijo dewinword.exe(ejecucion desde documento)- Ejecutable en
%TEMP%o%APPDATA%(ubicacion sospechosa) - Proceso con OriginalFileName diferente al nombre del archivo (masquerading)
Event ID 3: Network Connection
Registra conexiones de red TCP/UDP con el proceso de origen.
Campos clave: SourceIp, SourcePort, DestinationIp, DestinationPort, Image, User, Protocol.
Uso: detectar conexiones C2, beaconing, exfiltracion. Correlacionar con listas de IPs maliciosas.
Precaucion: este evento genera alto volumen. Es recomendable filtrar con exclusiones para procesos de confianza (navegadores, updates) y destinos conocidos.
Event ID 5: Process Terminated
Registra cuando un proceso termina. Util para:
- Correlacionar con Event ID 1 para calcular la duracion del proceso
- Detectar procesos de vida muy corta (tipico de scripts maliciosos que se ejecutan y borran)
Event ID 7: Image Loaded
Registra la carga de DLLs y drivers en procesos.
Campos clave: Image (proceso que carga), ImageLoaded (DLL cargada), Hashes, Signed, Signature.
Detecciones:
- DLL sin firma cargada en proceso legitimo (DLL side-loading, T1574.002)
- DLL cargada desde ubicacion inusual
- CLR/JIT DLLs cargadas en procesos que normalmente no usan .NET (posible inject)
Precaucion: genera mucho volumen. Filtrar con cuidado.
Event ID 8: CreateRemoteThread
Registra cuando un proceso crea un thread en otro proceso. Es un indicador fuerte de Process Injection (T1055).
Campos clave: SourceImage (proceso que inyecta), TargetImage (proceso victima), StartAddress, StartModule.
Detecciones:
- Cualquier proceso no system creando threads en
lsass.exe(credential dumping) - Threads remotos en procesos del sistema (svchost, explorer)
- SourceImage desde ubicacion inusual
Event ID 10: ProcessAccess
Registra cuando un proceso accede a la memoria de otro proceso. Critico para detectar credential dumping.
Campos clave: SourceImage, TargetImage, GrantedAccess (mascara de acceso), CallTrace.
Detecciones:
- Acceso a
lsass.execon GrantedAccess que incluye PROCESS_VM_READ (0x0010): posible Mimikatz o herramienta similar - Acceso a procesos de seguridad (EDR, antivirus)
Precaucion: genera alto volumen. Filtrar procesos legitimos que acceden a otros procesos (debuggers, monitoring).
Event ID 11: FileCreate
Registra la creacion de archivos.
Detecciones:
- Archivos ejecutables creados en directorios temporales
- Archivos con extensiones dobles (
document.pdf.exe) - Alternate Data Streams (ADS) en archivos NTFS
Event ID 12 y 13: Registry Events
Event ID 12: creacion/eliminacion de claves y valores de registro. Event ID 13: modificacion de valores de registro.
Detecciones:
- Modificacion de claves Run/RunOnce (persistencia T1547.001)
- Modificacion de Image File Execution Options (IFEO, T1546.012)
- Desactivacion de Windows Defender via registro
- Modificacion de firewall rules via registro
Event ID 15: FileCreateStreamHash
Registra la creacion de named file streams (Alternate Data Streams) y archivos descargados de Internet (Zone.Identifier).
Detecciones:
- Mark-of-the-Web (MotW) en archivos descargados
- ADS usados para ocultar datos (T1564.004)
Event ID 17 y 18: Pipe Events
Event ID 17: creacion de named pipes. Event ID 18: conexion a named pipes.
Detecciones:
- Named pipes asociados con herramientas conocidas (Cobalt Strike usa pipes como
\\.\pipe\msagent_*) - Pipes usados para comunicacion entre procesos maliciosos
- Lateral movement via named pipes (PsExec usa
\\.\pipe\PSEXESVC)
Event ID 22: DNSEvent
Registra consultas DNS con el proceso que las origino.
Detecciones:
- Consultas a dominios de C2 conocidos
- DNS tunneling (queries excesivamente largas o frecuentes)
- DGA (Domain Generation Algorithm): patrones de dominios aleatorios
- Procesos inusuales haciendo consultas DNS directas (en lugar de usar el resolver del sistema)
Event ID 23: FileDelete
Registra eliminacion de archivos con la opcion de archivar el contenido eliminado.
Detecciones:
- Eliminacion de logs o evidencia (T1070.004)
- Ransomware eliminando shadow copies
Event ID 25: ProcessTampering
Registra cuando la imagen de un proceso en memoria difiere de la imagen en disco. Detecta tecnicas como process hollowing (T1055.012) y herpaderping.
Este es uno de los eventos mas valiosos de Sysmon para detectar evasion avanzada.
Configuraciones de referencia
SwiftOnSecurity: la configuracion estandar
La configuracion de SwiftOnSecurity (sysmon-config) es el punto de partida mas utilizado. Sus caracteristicas:
- Filosofia: incluir todo por defecto, excluir el ruido conocido
- Cobertura: Event IDs 1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 22, 23, 25
- Exclusiones: procesos de sistema conocidos, updates, antivirus
- Mantenimiento: actualizada regularmente por la comunidad
Instalacion:
# Descargar Sysmon
# Descargar sysmonconfig-export.xml de GitHub
sysmon64.exe -accepteula -i sysmonconfig-export.xml
Ventajas:
- Buena relacion senial/ruido out-of-the-box
- Comunidad activa que mantiene las exclusiones
- Compatible con la mayoria de reglas Sigma
Limitaciones:
- Puede no cubrir Event IDs de alto volumen (7: Image Loaded) de forma completa
- Las exclusiones son genericas y pueden no encajar con software especifico de tu organizacion
Olaf Hartong: sysmon-modular
La configuracion de Olaf Hartong toma un enfoque modular:
- Filosofia: configuracion dividida en modulos por Event ID, combinables
- Estructura: un archivo XML por Event ID que se combinan con un script
- Flexibilidad: permite activar/desactivar modulos segun necesidades
# Clonar repo
git clone https://github.com/olafhartong/sysmon-modular.git
# Combinar modulos (PowerShell)
.\Merge-SysmonXml.ps1 -BasePath . -IncludeList .\config_include_list.csv
Ventajas:
- Mayor control granular sobre que se monitoriza
- Facilita el testing de reglas individuales
- Estructura mas facil de auditar y mantener
Limitaciones:
- Requiere mas esfuerzo de configuracion inicial
- Necesita entender cada modulo para combinarlos correctamente
Cual elegir
| Escenario | Recomendacion |
|---|---|
| Primera instalacion | SwiftOnSecurity como base |
| Equipo maduro con tuning | Olaf Hartong modular |
| Lab de pruebas | SwiftOnSecurity sin modificar |
| Produccion critica | Olaf Hartong con modulos seleccionados |
Reglas personalizadas
Estructura de una regla Sysmon
Las reglas Sysmon se definen en XML con la estructura:
<Sysmon schemaversion="4.90">
<EventFiltering>
<!-- Incluir o excluir eventos basandose en condiciones -->
<RuleGroup name="DetectSuspiciousPowerShell" groupRelation="or">
<ProcessCreate onmatch="include">
<Image condition="end with">powershell.exe</Image>
<CommandLine condition="contains any">-enc;-encodedcommand;downloadstring;iex;invoke-expression</CommandLine>
</ProcessCreate>
</RuleGroup>
</EventFiltering>
</Sysmon>
Operadores de condicion
| Operador | Descripcion |
|---|---|
| is | Igualdad exacta |
| is not | Desigualdad |
| contains | Contiene el texto |
| contains any | Contiene cualquiera de los textos (separados por ;) |
| contains all | Contiene todos los textos |
| excludes | No contiene el texto |
| begin with | Empieza con |
| end with | Termina con |
| image | Coincide con el nombre del ejecutable (sin path) |
Ejemplos de reglas personalizadas
Detectar LOLBins ejecutando desde ubicaciones inusuales:
<RuleGroup name="LOLBins_Unusual_Location" groupRelation="and">
<ProcessCreate onmatch="include">
<OriginalFileName condition="is any">cmd.exe;powershell.exe;mshta.exe;wscript.exe;cscript.exe;regsvr32.exe;rundll32.exe;certutil.exe;bitsadmin.exe</OriginalFileName>
<Image condition="excludes any">\Windows\;Program Files</Image>
</ProcessCreate>
</RuleGroup>
Detectar acceso sospechoso a LSASS:
<RuleGroup name="LSASS_Access" groupRelation="and">
<ProcessAccess onmatch="include">
<TargetImage condition="end with">lsass.exe</TargetImage>
<GrantedAccess condition="is any">0x1010;0x1410;0x1438;0x143a;0x1fffff</GrantedAccess>
</ProcessAccess>
<ProcessAccess onmatch="exclude">
<SourceImage condition="end with">svchost.exe</SourceImage>
<SourceImage condition="end with">lsm.exe</SourceImage>
<SourceImage condition="end with">csrss.exe</SourceImage>
<SourceImage condition="end with">MsMpEng.exe</SourceImage>
</ProcessAccess>
</RuleGroup>
Detectar named pipes de Cobalt Strike:
<RuleGroup name="CobaltStrike_Pipes" groupRelation="or">
<PipeEvent onmatch="include">
<PipeName condition="begin with">\msagent_</PipeName>
<PipeName condition="begin with">\MSSE-</PipeName>
<PipeName condition="begin with">\postex_</PipeName>
<PipeName condition="begin with">\status_</PipeName>
<PipeName condition="begin with">\mypipe-f</PipeName>
<PipeName condition="begin with">\mypipe-h</PipeName>
</PipeEvent>
</RuleGroup>
Integracion con SIEM
Wazuh
Wazuh recopila eventos Sysmon automaticamente a traves de su agente Windows. Los eventos se clasifican con reglas Wazuh que mapean Event IDs de Sysmon a detecciones con nivel de severidad y tecnicas MITRE ATT&CK.
Reglas Wazuh para Sysmon (incluidas por defecto):
| Regla Wazuh | Event ID Sysmon | Deteccion |
|---|---|---|
| 61600-61699 | 1 | Creacion de procesos sospechosos |
| 61603 | 3 | Conexiones de red anomalas |
| 61612 | 8 | CreateRemoteThread |
| 61613 | 10 | Acceso a LSASS |
| 61644 | 22 | DNS sospechoso |
Elastic Security
Elastic Agent recopila Sysmon via Winlogbeat o la integracion nativa de Windows. Las Elastic Detection Rules incluyen cientos de reglas basadas en Sysmon.
# Ejemplo de regla Elastic basada en Sysmon Event ID 1
- rule:
name: "Suspicious PowerShell Execution"
type: query
query: |
event.code: "1" AND
process.name: "powershell.exe" AND
process.command_line: (*-enc* OR *downloadstring* OR *iex*)
severity: high
tags: ["T1059.001"]
Splunk
En Splunk, los eventos Sysmon se indexan como source=XmlWinEventLog:Microsoft-Windows-Sysmon/Operational:
index=windows source="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1
| where match(CommandLine, "(?i)(mimikatz|sekurlsa|kerberos::)")
| table _time, Computer, User, Image, CommandLine, ParentImage
Sigma: reglas portables
Sigma es un formato de reglas de deteccion portable entre SIEMs. La mayoria de reglas Sigma se basan en eventos Sysmon. El repositorio SigmaHQ contiene miles de reglas:
title: Suspicious PowerShell Download Cradle
status: experimental
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\powershell.exe'
CommandLine|contains|all:
- 'Net.WebClient'
- 'DownloadString'
condition: selection
level: high
tags:
- attack.execution
- attack.t1059.001
Las reglas Sigma se convierten al formato nativo de cada SIEM con herramientas como sigma-cli:
sigma convert -t splunk -p sysmon rule.yml
sigma convert -t elasticsearch -p ecs-windows rule.yml
Performance tuning
Identificar cuellos de botella
Sysmon puede impactar el rendimiento si la configuracion es demasiado agresiva. Indicadores de problemas:
- Event Log creciendo mas de 100 MB/dia por endpoint
- CPU de Sysmon superando el 5% sostenido
- Latencia en operaciones de disco (minifilter de Sysmon)
Estrategias de optimizacion
1. Excluir procesos de alto volumen sin valor de seguridad:
<ProcessCreate onmatch="exclude">
<!-- Procesos de compilacion y desarrollo -->
<Image condition="end with">devenv.exe</Image>
<Image condition="end with">msbuild.exe</Image>
<!-- Antivirus (ya tiene su propia telemetria) -->
<Image condition="end with">MsMpEng.exe</Image>
<!-- Telemetria del sistema -->
<Image condition="end with">CompatTelRunner.exe</Image>
</ProcessCreate>
2. Limitar Event ID 7 (Image Loaded):
Este evento genera el mayor volumen. Opciones:
- Desactivarlo completamente si tu SIEM no tiene reglas basadas en el
- Filtrar solo DLLs sin firma de ubicaciones inusuales
- Filtrar solo DLLs especificas de interes (clr.dll para .NET injection)
3. Filtrar Event ID 3 (Network Connection) agresivamente:
<NetworkConnect onmatch="exclude">
<!-- Navegadores (la mayoria de conexiones son legitimas) -->
<Image condition="end with">chrome.exe</Image>
<Image condition="end with">firefox.exe</Image>
<Image condition="end with">msedge.exe</Image>
<!-- Destinos conocidos -->
<DestinationIp condition="begin with">10.</DestinationIp>
<DestinationIp condition="begin with">172.16.</DestinationIp>
</NetworkConnect>
4. Rotacion de logs:
Configurar la rotacion del Event Log de Sysmon para evitar llenar el disco:
wevtutil sl Microsoft-Windows-Sysmon/Operational /ms:104857600
# Tamano maximo: 100 MB. Cuando se llena, los eventos antiguos se sobreescriben.
Verificar la configuracion activa
# Ver configuracion actual de Sysmon
sysmon64.exe -c
# Ver estadisticas de eventos
wevtutil qe Microsoft-Windows-Sysmon/Operational /c:1 /rd:true /f:text
# Contar eventos por Event ID (ultima hora)
Get-WinEvent -LogName 'Microsoft-Windows-Sysmon/Operational' -MaxEvents 10000 |
Group-Object Id | Sort-Object Count -Descending |
Format-Table Name, Count
Mejores practicas operativas
Actualizacion de Sysmon
Sysmon se actualiza regularmente con nuevos Event IDs y mejoras. El proceso de actualizacion es no disruptivo:
# Actualizar binario manteniendo configuracion
sysmon64.exe -u
sysmon64_new.exe -accepteula -i existingconfig.xml
Actualizacion de configuracion
La configuracion puede actualizarse sin reinstalar Sysmon:
# Aplicar nueva configuracion
sysmon64.exe -c newconfig.xml
Esto permite iterar la configuracion rapidamente: anadir exclusiones, activar nuevos Event IDs o ajustar filtros sin downtime.
Proteccion de Sysmon
Un atacante con privilegios de administrador puede desinstalar o detener Sysmon. Medidas de proteccion:
- Renombrar el driver y servicio: Sysmon permite instalarse con un nombre personalizado, dificultando la deteccion por parte del malware
- Monitorizar la eliminacion de Sysmon: crear una alerta cuando el servicio de Sysmon se detiene (Event ID 4 en el Event Log de System)
- Protected Process Light: en versiones recientes, Sysmon puede ejecutarse como PPL, lo que impide que procesos no protegidos lo modifiquen
# Instalar con nombre personalizado
sysmon64.exe -i config.xml -d CustomDriverName
Despliegue via GPO
Para despliegues a escala, usar Group Policy para distribuir Sysmon:
- Copiar el ejecutable y la configuracion a un share de red accesible
- Crear una GPO con un startup script que instale Sysmon si no esta presente
- Crear una tarea programada para actualizar la configuracion periodicamente
# Script de despliegue (startup GPO)
$sysmonPath = "\\domain\sysvol\tools\sysmon64.exe"
$configPath = "\\domain\sysvol\tools\sysmonconfig.xml"
if (-not (Get-Service Sysmon64 -ErrorAction SilentlyContinue)) {
& $sysmonPath -accepteula -i $configPath
}
Conclusion
Sysmon es probablemente la herramienta gratuita con mayor impacto en la capacidad de deteccion de un SOC en entornos Windows. Su telemetria cubre los Event IDs criticos que el Event Log nativo no proporciona, y su configuracion flexible permite adaptarla a cualquier entorno.
La clave del exito con Sysmon es la configuracion. Una instalacion con la configuracion de SwiftOnSecurity como base, ajustada con exclusiones especificas de tu organizacion, y complementada con reglas de deteccion en tu SIEM, transforma la visibilidad del SOC sin coste de licencias. El esfuerzo esta en el tuning continuo, no en la compra.
Preguntas frecuentes
Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.