IntermedioSysmondeteccionSOCWindowstelemetriaEvent LogSysinternals

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.

MalwareIntel Research··12 min lectura
Serie: EDR/XDR Telemetría por Vendor — Parte 15

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:

CampoDescripcionValor para deteccion
ImagePath completo del ejecutableDetectar ejecutables en paths inusuales
CommandLineLinea de comandos completaDetectar argumentos sospechosos
ParentImagePath del proceso padreDetectar cadenas de ejecucion anomalas
ParentCommandLineLinea del padreContexto adicional
HashesMD5, SHA256, IMPHASHCorrelacion con IOCs
UserUsuario que ejecutaDetectar escalacion de privilegios
IntegrityLevelNivel de integridadDetectar bypass de UAC
OriginalFileNameNombre original del PEDetectar masquerading (T1036)

Ejemplos de detecciones con Event ID 1:

  • PowerShell con -enc o -encodedcommand (ejecucion codificada)
  • cmd.exe como hijo de winword.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.exe con 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

EscenarioRecomendacion
Primera instalacionSwiftOnSecurity como base
Equipo maduro con tuningOlaf Hartong modular
Lab de pruebasSwiftOnSecurity sin modificar
Produccion criticaOlaf 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

OperadorDescripcion
isIgualdad exacta
is notDesigualdad
containsContiene el texto
contains anyContiene cualquiera de los textos (separados por ;)
contains allContiene todos los textos
excludesNo contiene el texto
begin withEmpieza con
end withTermina con
imageCoincide 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 WazuhEvent ID SysmonDeteccion
61600-616991Creacion de procesos sospechosos
616033Conexiones de red anomalas
616128CreateRemoteThread
6161310Acceso a LSASS
6164422DNS 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:

  1. Copiar el ejecutable y la configuracion a un share de red accesible
  2. Crear una GPO con un startup script que instale Sysmon si no esta presente
  3. 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.