WAZUH SIEM
MASTERCLASS
Domina el despliegue, configuración y operación de Wazuh como analista de ciberseguridad. Desde la instalación hasta la detección de intrusiones en tiempo real.
Entender la arquitectura, los componentes y por qué Wazuh es el SIEM open-source más utilizado en entornos empresariales.
Los 15+ tipos de incidentes que ves a diario como analista: brute force, escalada de privilegios, malware, etc.
Paso a paso: Wazuh Server (Docker), agente Windows, Kibana/OpenSearch Dashboard. Con comandos exactos.
Ejecuta ataques reales (brute force, netcat, modificación de archivos críticos) y obsérvalos aparecer en el SIEM.
Un SIEM es el sistema nervioso central de un SOC. Agrega logs de toda la infraestructura (servidores, firewalls, endpoints, aplicaciones), los correlaciona y genera alertas cuando detecta patrones maliciosos.
El problema que resuelve el SIEM es el volumen y velocidad de los logs modernos. Una empresa mediana genera millones de eventos diarios. Sin correlación automática, es imposible detectar un ataque.
| CAPACIDAD | QUÉ HACE | EJEMPLO REAL |
|---|---|---|
| Log Analysis | Parsea y normaliza logs de 100+ fuentes | Lee el Event ID 4625 de Windows y lo convierte en alerta "Login fallido" |
| Intrusion Detection | Detecta exploits, scans y TTPs MITRE ATT&CK | 5 logins fallidos seguidos → Alerta Brute Force (Rule 18100) |
| File Integrity | Monitoriza cambios en archivos críticos (FIM) | Alguien modifica C:\Windows\System32\hosts → Alerta inmediata |
| Vulnerability Detection | Compara software instalado con base CVE | Detecta Apache 2.4.49 vulnerable a CVE-2021-41773 |
| Active Response | Responde automáticamente a ataques | Bloquea IP en firewall si >10 intentos SSH fallidos |
| Compliance | Mapea alertas a PCI-DSS, HIPAA, GDPR | Genera reporte automático de controles de seguridad |
Instalado en cada servidor/PC. Recolecta: Windows Event Logs (Security, System, Application), cambios de archivos (FIM), estado de procesos, puertos abiertos, usuarios, y ejecuta comandos para auditoría. Envía todo cifrado al server por puerto 1514 UDP/TCP.
Cerebro del sistema. Recibe los eventos, aplica el ruleset (más de 3500 reglas), genera alertas, y las envía a OpenSearch. Gestiona la configuración de todos los agentes centralmente.
Base de datos de tiempo-serie. Almacena TODOS los eventos en índices diarios (wazuh-alerts-YYYY.MM.DD). Permite búsquedas en millones de eventos en milisegundos usando DSL queries.
Interfaz web donde el analista SOC trabaja. Incluye módulos de Security Events, Integrity Monitoring, Vulnerability Detection, MITRE ATT&CK, Compliance, y permite crear dashboards personalizados.
Cada evento muestra: severidad, rule ID, log raw tal como llega a Wazuh, y guía de análisis para el analista SOC.
Usaremos Docker para desplegar Wazuh Server en Windows (o en una VM Linux/WSL2). El agente Wazuh se instala directamente sobre Windows nativo.
| COMPONENTE | REQUISITOS | NOTAS |
|---|---|---|
| Docker Desktop | Windows 10/11 Pro, 8GB RAM min, 16GB rec. | Requiere WSL2 habilitado (Hyper-V opcional) |
| Wazuh Server (Docker) | 4GB RAM asignados a Docker, 50GB disco | Incluye: Manager + Indexer + Dashboard |
| Wazuh Agent | Windows 7+ / Server 2008+, 512MB RAM | Se instala como servicio de Windows |
| Puertos abiertos | 1514, 1515, 55000, 9200, 443 | En el firewall local de Windows |
# Habilitar WSL y la plataforma de VM dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart # Reiniciar Windows, luego: wsl --set-default-version 2 wsl --install -d Ubuntu # Verificar WSL2 activo wsl --list --verbose # NAME STATE VERSION # Ubuntu Running 2
Descarga desde https://www.docker.com/products/docker-desktop/
# Crea este archivo con Notepad [wsl2] memory=6GB processors=4 swap=2GB
Reinicia WSL después: wsl --shutdown
# Clonar el repo oficial de Wazuh git clone https://github.com/wazuh/wazuh-docker.git -b v4.9.0 cd wazuh-docker/single-node # Ver los archivos disponibles ls # config/ docker-compose.yml generate-indexer-certs.yml README.md
# Generar certificados TLS/SSL necesarios docker compose -f generate-indexer-certs.yml run --rm generator # Output esperado: [✓] Creating certificates... [✓] Certificates generated successfully
# Levantar todos los servicios en background docker compose up -d # Monitorizar el arranque (tarda 2-5 min la primera vez) docker compose logs -f # Verificar que todos los contenedores están UP docker compose ps NAME STATUS PORTS single-node-wazuh.manager-1 Up 0.0.0.0:1514->1514/tcp single-node-wazuh.indexer-1 Up 0.0.0.0:9200->9200/tcp single-node-wazuh.dashboard-1 Up 0.0.0.0:443->5601/tcp
Abre el navegador y ve a: https://localhost
Usuario: admin Password: SecretPassword # Cambia el password en producción: docker exec -it single-node-wazuh.indexer-1 bash /usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh \ -cd /etc/opensearch/opensearch-security \ -icl -nhnv -cacert /etc/opensearch/certs/root-ca.pem \ -cert /etc/opensearch/certs/admin.pem \ -key /etc/opensearch/certs/admin-key.pem
# Obtener IP del host Windows (la que usará el agente) ipconfig | findstr "IPv4" IPv4 Address. . .: 192.168.1.100 # En WSL/Docker, el agente se conecta a esta IP # Anotala: la necesitarás en la instalación del agente
WazuhSvc) y se ejecuta con privilegios de SYSTEM para poder leer todos los event logs.# Descargar agente Wazuh v4.9.0 para Windows x64 Invoke-WebRequest -Uri https://packages.wazuh.com/4.x/windows/wazuh-agent-4.9.0-1.msi ` -OutFile "C:\wazuh-agent.msi" # Alternativa: descarga manual desde # https://documentation.wazuh.com/current/installation-guide/wazuh-agent/wazuh-agent-package-windows.html
# Instalación silenciosa con IP del servidor Wazuh # Sustituye 192.168.1.100 por la IP de tu servidor msiexec.exe /i "C:\wazuh-agent.msi" /q ` WAZUH_MANAGER="192.168.1.100" ` WAZUH_REGISTRATION_SERVER="192.168.1.100" ` WAZUH_AGENT_NAME="WINDOWS-LAB-01" ` WAZUH_REGISTRATION_PASSWORD="please123" ` WAZUH_AGENT_GROUP="windows" # Si Docker corre localmente, usa 127.0.0.1 o la IP WSL
WAZUH_REGISTRATION_PASSWORD debe coincidir con el configurado en el servidor (/var/ossec/etc/authd.pass dentro del contenedor). Por defecto está vacío; si usas contraseña configúrala primero en el server.# Iniciar el servicio Wazuh NET START WazuhSvc # El servicio Wazuh se está iniciando. # El servicio Wazuh se ha iniciado correctamente. # Verificar estado Get-Service WazuhSvc Status Name DisplayName ------ ---- ----------- Running WazuhSvc Wazuh # Ver logs del agente en tiempo real Get-Content "C:\Program Files (x86)\ossec-agent\ossec.log" -Tail 30 -Wait
<!-- Logs de Windows a monitorizar --> <localfile> <location>Security</location> <log_format>eventchannel</log_format> </localfile> <localfile> <location>System</location> <log_format>eventchannel</log_format> </localfile> <localfile> <location>Application</location> <log_format>eventchannel</log_format> </localfile> <!-- File Integrity Monitoring --> <syscheck> <frequency>300</frequency> <directories check_all="yes">C:\Windows\System32</directories> <directories check_all="yes" report_changes="yes">C:\Users</directories> </syscheck>
# Entrar al contenedor docker exec -it single-node-wazuh.manager-1 bash # Listar agentes conectados /var/ossec/bin/agent_control -la Wazuh agent_control. List of available agents: ID: 000, Name: wazuh-manager (server) ID: 001, Name: WINDOWS-LAB-01, IP: 192.168.1.100, Active # Ver estado detallado del agente 001 /var/ossec/bin/agent_control -i 001
En https://localhost → Wazuh → Agents. Deberías ver tu agente Windows con estado Active.
# Intentar login fallido (genera Event ID 4625) # Abre CMD y ejecuta: runas /user:usuarioficticio cmd # Introduce cualquier contraseña incorrecta y pulsa Enter # Esto genera un Windows Security Event 4625 (login fallido) # En el Dashboard, ir a: # Security Events → buscar "authentication failure" # Deberías ver la alerta en <30 segundos
Empieza siempre por los Critical y High. En el dashboard usa: rule.level: [12 TO 15]
Haz clic en el evento. Wazuh muestra el JSON completo con: timestamp, IP origen, usuario, proceso, rule ID y la descripción de la regla disparada.
En Discovery, filtra por agent.name: "WINDOWS-LAB-01" y el rango de tiempo del incidente. Busca patrones.
Pregúntate: ¿Está ese usuario autorizado a realizar esa acción? ¿A esa hora? ¿Desde esa IP? Si algo no cuadra → escala al Tier 2.
El panel izquierdo simula lo que haría un atacante. El panel derecho muestra en tiempo real cómo lo detecta Wazuh. Haz clic en los botones de ataque para ver la detección.
EJECUTA ESTOS EN TU WINDOWS AGENTE:
runas /user:Administrator cmd # Introduce password incorrecto # Repite 5 veces seguidas # → Genera Event ID 4625 ×5
echo "# test" >> C:\Windows\System32\drivers\etc\hosts # Modifica el archivo hosts # → Wazuh FIM detecta el cambio
Test-NetConnection -ComputerName 10.0.0.1 -Port 4444 # Simula conexión saliente sospechosa # → Detectado por regla de red
net localgroup administrators hacker /add # Añade usuario al grupo admin # → Event ID 4732, Rule 60002
1..100 | % { Test-NetConnection ` -ComputerName localhost -Port $_ ` -WarningAction SilentlyContinue } # Escanea puertos locales
$files = Get-ChildItem C:\TestFolder -Recurse $files | % { Rename-Item $_ "$($_.Name).encrypted" } # Crea carpeta TestFolder con archivos .txt # → FIM detecta modificaciones masivas
Haz clic en un botón de ataque →
{
"query": {
"bool": {
"must": [
{"match": {"agent.name": "WINDOWS-LAB-01"}},
{"range": {"@timestamp": {"gte": "now-1h"}}}
]
}
},
"sort": [{"@timestamp": {"order": "desc"}}],
"size": 50
}
Wazuh puede responder automáticamente a ataques. Configura Active Response en el servidor:
<!-- Bloquear IP tras brute force --> <active-response> <command>firewall-drop</command> <location>local</location> <rules_id>18100</rules_id> <!-- Rule de Brute Force --> <timeout>3600</timeout> <!-- Bloqueo 1 hora --> </active-response> <!-- Resultado: cuando se detectan 5 logins fallidos, Wazuh ejecuta iptables -A INPUT -s <IP> -j DROP automáticamente en el endpoint afectado -->