Integracion Windows Defender con Wazuh SIEM

Deteccion nativa + despliegue centralizado desde el Dashboard

Guia tecnica para recoger los eventos de Windows Defender con el agente Wazuh, generar alertas con el ruleset nativo, y desplegar la configuracion a un grupo entero de equipos Windows sin usar la terminal.

1. Introduccion

Esta guia integra Windows Defender con Wazuh SIEM a traves del agente Wazuh instalado en el propio endpoint. A diferencia de otras integraciones (por ejemplo, la de un firewall por syslog), aqui no hace falta construir un decoder ni un conjunto de reglas propio: Wazuh trae de fabrica el decoder windows_eventchannel y un ruleset completo para Windows Defender.

El valor añadido de esta guia no esta en la decodificacion, sino en dos puntos que suelen dar problemas en la practica: la configuracion correcta del canal de eventos, y el despliegue centralizado a un grupo de agentes desde la interfaz del Dashboard, sin necesidad de acceso por SSH al manager.

2. Variables de esta guia

Todos los bloques de configuracion usan los siguientes marcadores en MAYUSCULAS. Sustituyelos por los valores reales del entorno donde se aplique esta guia.

MarcadorQue esDonde se obtiene
IP_WAZUH_MANAGERIP del servidor donde corre el Wazuh ManagerLa interfaz de red de ese servidor
NOMBRE_AGENTE_WINDOWSNombre del agente Wazuh instalado en el endpoint WindowsSe define durante el registro del agente
NOMBRE_GRUPO_WINDOWSGrupo de agentes que recibira la configuracion centralizadaSe crea en Agents management > Groups
ID_DEL_AGENTEIdentificador numerico del agente (por ejemplo 001)Columna ID en el listado de agentes del Dashboard

3. Arquitectura y flujo

Resumen visual
[WINDOWS DEFENDER]
  Detecta malware o EICAR
        |
        v
[REGISTRO DE EVENTOS DE WINDOWS]
  Canal: Microsoft-Windows-Windows Defender/Operational
        |
        v
[WAZUH AGENT]   NOMBRE_AGENTE_WINDOWS
  localfile, log_format eventchannel
        |
        v
[WAZUH MANAGER]   IP_WAZUH_MANAGER
  Decoder y reglas ya incluidos (windows_eventchannel, 0600-win-wdefender_rules.xml)
        |
        v
[WAZUH INDEXER]   (OpenSearch, almacena las alertas)
        |
        v
[WAZUH DASHBOARD]
  Discover / Threat hunting

A diferencia de una integracion por syslog, aqui el evento si llega asociado a un agente con nombre propio, no al manager (agent.id: "000"), porque pasa por el agente Wazuh instalado localmente en el endpoint Windows.

4. Requisitos

  • Endpoint Windows 10/11 con agente Wazuh instalado y conectado al manager.
  • Wazuh Manager 4.14.x instalado y en ejecucion.
  • Windows Defender activo, con proteccion en tiempo real habilitada.
  • Acceso administrador al endpoint Windows (PowerShell como administrador) y al Wazuh Dashboard.

5. Configuracion individual en un agente

Antes de desplegar a un grupo entero, conviene validar el montaje en un solo equipo. Abre en el agente:

Ruta del archivo
C:\Program Files (x86)\ossec-agent\ossec.conf

Añade este bloque dentro de <ossec_config>:

Bloque localfile
<localfile>
  <location>Microsoft-Windows-Windows Defender/Operational</location>
  <log_format>eventchannel</log_format>
</localfile>

Reinicia el servicio del agente para aplicar el cambio (aqui si hace falta, es configuracion local):

Reiniciar el agente
Restart-Service -Name WazuhSvc
Get-Service -Name WazuhSvc

Comprueba que el canal existe y esta habilitado a nivel de Windows:

Comprobar el canal de eventos
Get-WinEvent -ListLog "Microsoft-Windows-Windows Defender/Operational" | Select-Object LogName, IsEnabled, RecordCount
IsEnabled debe ser True. Si es False, el canal esta desactivado a nivel de Windows y ningun agente va a poder leerlo, por bien configurado que este en Wazuh.

6. Verificacion en el Wazuh Manager

En el manager, en /var/ossec/etc/ossec.conf, dentro de <global>:

Activar el registro de archivos crudos
<logall>yes</logall>
<logall_json>yes</logall_json>
Confirmado en pruebas: si tras añadir logall_json el tail no muestra nada, el manager necesita reiniciarse para aplicar el cambio.
Reiniciar el manager
sudo systemctl restart wazuh-manager

Buena practica: primero confirma que fluyen eventos en bruto sin filtrar, y solo despues añade el filtro:

Seguir los archivos crudos
sudo tail -f /var/ossec/logs/archives/archives.json
# una vez confirmado que fluye:
sudo tail -f /var/ossec/logs/archives/archives.json | grep -i "windows defender"
Un evento generado antes de activar logall_json nunca aparecera en archives.json — hay que generar uno nuevo con el tail ya abierto. Este archivo es un flujo totalmente independiente del de alertas: que una alerta ya llegue bien al Dashboard no implica que los archivos crudos esten activos.

7. Generar la primera alerta: prueba EICAR

El archivo EICAR es el estandar universal para probar antivirus (no es malware real, es una cadena de texto reconocida por firma):

Crear el archivo de prueba
$eicar = 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'
Set-Content -Path "C:\Users\$env:USERNAME\Downloads\eicar-test.com" -Value $eicar

Si no salta, comprueba que la proteccion en tiempo real este activa:

Comprobar el estado de Defender
Get-MpComputerStatus | Select-Object AMRunningMode, RealTimeProtectionEnabled, AntivirusEnabled
Confirmado en pruebas: la alerta llega como regla 62123 (nivel 12, "Antimalware platform detected potentially unwanted software"), aunque Defender clasifique internamente el EICAR como Virus:DOS/EICAR_Test_File. Es una particularidad del ruleset, no un error.

8. Tabla de reglas relevantes

Rule IDNivelQue significaComo dispararla en la demo
621073Inicio de un analisis (scan)Start-MpScan -ScanType QuickScan
6211314Malware detectadoMejor explicarla; no recomendado disparar malware real en directo
6212312Software potencialmente no deseado / deteccion generica (incluye EICAR)Prueba EICAR de la seccion 7
621513Proteccion en tiempo real activadaSet-MpPreference -DisableRealtimeMonitoring $false
621525Proteccion en tiempo real desactivadaSet-MpPreference -DisableRealtimeMonitoring $true (requiere Tamper Protection desactivado)
Los niveles 12 y 14 son los que en un SOC real dispararian notificacion inmediata; los niveles 3-5 son mas bien telemetria operativa.

9. Despliegue centralizado desde el Wazuh Dashboard

Con el montaje ya validado en un agente, el despliegue real a todo un grupo se hace asi, sin acceso por SSH al manager:

  1. Menu → Agents management → Groups
  2. Si el grupo no existe: Add new group → nombre NOMBRE_GRUPO_WINDOWS
  3. Selecciona el grupo → Manage agents → añade los agentes Windows → Apply changes
  4. Dentro del grupo, pestaña FilesEdit group configuration
  5. Pega el bloque XML y guarda
Contenido a pegar en la configuracion del grupo
<agent_config>
  <localfile>
    <location>Microsoft-Windows-Windows Defender/Operational</location>
    <log_format>eventchannel</log_format>
  </localfile>
</agent_config>
Trampa real y actual, confirmada en el tracker de Wazuh: si añades el atributo os para filtrar por sistema operativo, no uses sintaxis de expresion regular. os="^Windows" no funciona (el atributo es un simple substring match, no regex); os="Windows" si funciona. Si el grupo ya es exclusivamente Windows, lo mas simple es no poner el atributo en absoluto.
Otra trampa a tener en cuenta: un XML mal formado en agent.conf bloquea la sincronizacion por completo y sin aviso — ni un solo agente del grupo recibe nada hasta que se corrija. Si algo no llega tras el despliegue, lo primero es descartar un error de sintaxis antes de sospechar de la conexion del agente.

10. Verificar que se aplico la configuracion

A diferencia del metodo manual (paso 5), aqui no hace falta reiniciar el servicio: el agente aplica la configuracion de grupo solo, en el siguiente keepalive (unos segundos). Tres formas de confirmarlo, de mas a menos directa:

a) En el propio agente Windows

Revisa que el bloque llego al archivo combinado que envia el manager:

Comprobar merged.mg
Get-Content "C:\Program Files (x86)\ossec-agent\shared\merged.mg" | Select-String "Defender"

b) En el log del propio agente

Busca la confirmacion de que recargo por configuracion compartida:

Revisar ossec.log del agente
Get-Content "C:\Program Files (x86)\ossec-agent\ossec.log" -Tail 50 | Select-String "shared configuration"

Deberias ver una linea similar a Agent is reloading due to shared configuration changes.

c) Desde el manager, vía API (Dev Tools del propio Dashboard)

Consulta el estado de sincronizacion del grupo para ese agente:

Consulta en Dev Tools
GET /agents?agents_list=ID_DEL_AGENTE&select=group_config_status
Debería devolver "group_config_status": "synced". Si sale "not synced", espera unos segundos mas (depende del intervalo de keepalive) antes de sospechar de un problema real.

11. Prueba EICAR tras el despliegue centralizado

Repite la prueba de la seccion 7 en un agente que solo recibio la configuracion por el grupo, sin tocarla a mano. Si la alerta 62123 aparece igual que antes, el despliegue centralizado queda demostrado de extremo a extremo.

Buen detalle para el video: revisa en la propia alerta el campo agent.groups (o el listado de grupos del agente en el Dashboard) para confirmar visualmente que la deteccion viene de un equipo que solo recibio la configuracion por el grupo.

12. Errores comunes y como resolverlos

ProblemaCausa probableSolucion
No llega ningun evento de Defender Proteccion en tiempo real desactivada Get-MpComputerStatus, reactivar si hace falta
El canal existe pero no genera eventos Canal Operational deshabilitado a nivel de Windows Get-WinEvent -ListLog ..., revisar IsEnabled
archives.json no muestra nada aunque logall_json este activado Falta reiniciar el manager tras el cambio sudo systemctl restart wazuh-manager
La config de grupo no se aplica a ningun agente XML mal formado en agent.conf (bloquea toda la sincronizacion, sin error visible) Revisar que el XML sea valido antes de nada mas
La config de grupo no se aplica solo en Windows Atributo os con regex (^Windows) Cambiar a substring simple (os="Windows") o quitar el atributo
Los cmdlets de Defender fallan sin explicacion clara Tamper Protection activo Desactivar temporalmente en el equipo de pruebas
group_config_status en "not synced" mucho rato Intervalo de keepalive aun no ha pasado, o agente desconectado Esperar un ciclo; comprobar el estado de conexion del agente

13. Notas de ampliacion

El montaje de esta guia cubre la deteccion basica y su despliegue a escala. Para un entorno mas completo se puede ampliar con:

  • Sysmon combinado con Defender: Defender dice que detecto, Sysmon dice que proceso lo trajo (proceso padre, linea de comandos, red).
  • Active response: aislar el equipo de la red o notificar a Slack/email automaticamente cuando salte una regla de nivel ≥ 12.
  • YARA como capa adicional, solo para detectar lo que Defender no ve (malware personalizado, hunting proactivo) — complementario, no sustituto.
  • Visualizacion dedicada en el Dashboard: un panel filtrado por rule.groups: windows_defender, separado del resto de telemetria Windows.