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.
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.
| Marcador | Que es | Donde se obtiene |
|---|---|---|
IP_WAZUH_MANAGER | IP del servidor donde corre el Wazuh Manager | La interfaz de red de ese servidor |
NOMBRE_AGENTE_WINDOWS | Nombre del agente Wazuh instalado en el endpoint Windows | Se define durante el registro del agente |
NOMBRE_GRUPO_WINDOWS | Grupo de agentes que recibira la configuracion centralizada | Se crea en Agents management > Groups |
ID_DEL_AGENTE | Identificador numerico del agente (por ejemplo 001) | Columna ID en el listado de agentes del Dashboard |
3. Arquitectura y flujo
[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:
C:\Program Files (x86)\ossec-agent\ossec.conf
Añade este bloque dentro de <ossec_config>:
<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):
Restart-Service -Name WazuhSvc Get-Service -Name WazuhSvc
Comprueba que el canal existe y esta habilitado a nivel de Windows:
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>:
<logall>yes</logall> <logall_json>yes</logall_json>
logall_json el tail no muestra nada, el manager necesita reiniciarse para aplicar el cambio.sudo systemctl restart wazuh-manager
Buena practica: primero confirma que fluyen eventos en bruto sin filtrar, y solo despues añade el filtro:
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"
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):
$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:
Get-MpComputerStatus | Select-Object AMRunningMode, RealTimeProtectionEnabled, AntivirusEnabled
Virus:DOS/EICAR_Test_File. Es una particularidad del ruleset, no un error.8. Tabla de reglas relevantes
| Rule ID | Nivel | Que significa | Como dispararla en la demo |
|---|---|---|---|
| 62107 | 3 | Inicio de un analisis (scan) | Start-MpScan -ScanType QuickScan |
| 62113 | 14 | Malware detectado | Mejor explicarla; no recomendado disparar malware real en directo |
| 62123 | 12 | Software potencialmente no deseado / deteccion generica (incluye EICAR) | Prueba EICAR de la seccion 7 |
| 62151 | 3 | Proteccion en tiempo real activada | Set-MpPreference -DisableRealtimeMonitoring $false |
| 62152 | 5 | Proteccion en tiempo real desactivada | Set-MpPreference -DisableRealtimeMonitoring $true (requiere Tamper Protection desactivado) |
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:
- Menu → Agents management → Groups
- Si el grupo no existe: Add new group → nombre
NOMBRE_GRUPO_WINDOWS - Selecciona el grupo → Manage agents → añade los agentes Windows → Apply changes
- Dentro del grupo, pestaña Files → Edit group configuration
- Pega el bloque XML y guarda
<agent_config>
<localfile>
<location>Microsoft-Windows-Windows Defender/Operational</location>
<log_format>eventchannel</log_format>
</localfile>
</agent_config>
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.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:
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:
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:
GET /agents?agents_list=ID_DEL_AGENTE&select=group_config_status
"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.
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
| Problema | Causa probable | Solucion |
|---|---|---|
| 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.