Pràctica: SIEM amb Wazuh Docker
Objectius
- Desplegar un entorn SIEM complet amb Wazuh en Docker
- Configurar agents de monitoratge en sistemes Linux
- Crear regles d'alerta personalitzades
- Simular incidents i detectar-los amb el SIEM
- Generar un informe d'incidents basat en les alertes detectades
- Gestionar un cas d'incident a TheHive
Prerequisits
| Requisit | Descripció |
|---|---|
| Temps estimat | 10-12 hores |
| RAM mínima | 8 GB (Wazuh necessita ~6 GB) |
| Espai disc | 30 GB lliures |
| Docker | Docker Desktop o Docker Engine + Compose |
| Coneixements previs | Conceptes bàsics de Linux, logs, SIEM |
Introducció
Wazuh és una plataforma open source de seguretat que integra SIEM, XDR i CSPM en un únic producte. Empreses com Telefónica, BBVA i moltes administracions públiques espanyoles l'utilitzen en producció.
L'arquitectura de Wazuh consta de tres components principals:
flowchart LR
subgraph Agents
A[Agent Linux\nSistema monitorat]
B[Agent Windows\nSistema monitorat]
end
subgraph Servidor Wazuh
C[Wazuh Manager\nAnàlisi i correlació]
D[Wazuh Indexer\nElasticsearch]
E[Wazuh Dashboard\nKibana]
end
A -->|Logs xifrats| C
B -->|Logs xifrats| C
C --> D
D --> E
En aquesta pràctica, desplegarem Wazuh en mode single-node (per a laboratori) amb Docker Compose, configurarem un agent en un contenidor Linux, simularem incidents i analitzarem les alertes generades.
Recursos necessaris
Wazuh és una plataforma potent però consumeix molts recursos. Assegura't de tenir almenys 8 GB de RAM disponibles. Si el teu ordinador té menys RAM, parla amb el professor per a alternatives.
Part 1: Preparació de l'entorn
1.1 Clonar el repositori oficial de Wazuh Docker
# Clona el repositori oficial de Wazuh per a Docker
git clone https://github.com/wazuh/wazuh-docker.git -b v4.8.0
cd wazuh-docker/single-node
# Genera els certificats TLS necessaris (obligatori)
docker compose -f generate-indexer-certs.yml run --rm generator
1.2 Personalitzar la configuració amb el teu nom
IMPORTANT: Substitueix NOMCOGNOM per les teves inicials (ex: jgarcia, mlopez)
# Crea una xarxa Docker personalitzada per a la pràctica
docker network create --subnet=172.25.0.0/24 siem-NOMCOGNOM
# Modifica el fitxer docker-compose.yml per afegir el teu nom als contenidors
# Edita docker-compose.yml i canvia els container_name:
# wazuh.manager → wazuh-manager-NOMCOGNOM
# wazuh.indexer → wazuh-indexer-NOMCOGNOM
# wazuh.dashboard → wazuh-dashboard-NOMCOGNOM
El fitxer docker-compose.yml modificat hauria de tenir:
services:
wazuh.manager:
image: wazuh/wazuh-manager:4.8.0
container_name: wazuh-manager-NOMCOGNOM # ← el teu nom aquí
hostname: wazuh-manager-NOMCOGNOM # ← el teu nom aquí
# ... resta de la configuració sense canvis
wazuh.indexer:
image: wazuh/wazuh-indexer:4.8.0
container_name: wazuh-indexer-NOMCOGNOM # ← el teu nom aquí
# ...
wazuh.dashboard:
image: wazuh/wazuh-dashboard:4.8.0
container_name: wazuh-dashboard-NOMCOGNOM # ← el teu nom aquí
# ...
1.3 Iniciar Wazuh
# Inicia tots els serveis (pot trigar 3-5 minuts la primera vegada)
docker compose up -d
# Verifica que tots els contenidors estan en marxa
docker ps | grep NOMCOGNOM
# Comprova els logs si hi ha problemes
docker logs wazuh-manager-NOMCOGNOM --tail 50
Accés al Dashboard
Un cop tots els serveis estiguin actius (verifica amb docker ps que tots surten "Up"):
- URL:
https://localhost:443 - Usuari:
admin - Contrasenya:
SecretPassword(o la que s'hagi generat)
Accepta el certificat auto-signat al navegador.
Part 2: Configuració d'un agent monitorat
2.1 Desplegar el sistema "víctima" a monitorar
# Desplegem un contenidor Ubuntu que actuarà com a sistema monitorat
docker run -d \
--name target-NOMCOGNOM \
--hostname target-NOMCOGNOM \
--network siem-NOMCOGNOM \
ubuntu:22.04 \
sleep infinity
# Entrem al contenidor
docker exec -it target-NOMCOGNOM bash
2.2 Instal·lar l'agent Wazuh al sistema monitorat
Dins del contenidor target-NOMCOGNOM:
# Actualitzar el sistema
apt-get update && apt-get install -y curl
# Instal·lar l'agent Wazuh (ajusta la IP del manager)
WAZUH_MANAGER="$(docker inspect wazuh-manager-NOMCOGNOM \
--format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}')"
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | apt-key add -
echo "deb https://packages.wazuh.com/4.x/apt/ stable main" \
| tee /etc/apt/sources.list.d/wazuh.list
apt-get update
WAZUH_MANAGER="${WAZUH_MANAGER}" apt-get install -y wazuh-agent
# Iniciar l'agent
/var/ossec/bin/wazuh-control start
2.3 Verificar que l'agent es connecta
Al dashboard de Wazuh (https://localhost:443):
- Ves a Agents → Manage agents
- Hauries de veure el teu agent
target-NOMCOGNOMen estat Active
Pregunta de reflexió
- Quins tipus de logs recopila l'agent Wazuh per defecte?
- Quina és la diferència entre un agent Wazuh i un syslog forwarder?
Part 3: Simulació i detecció d'incidents
3.1 Incident 1: Força bruta SSH (Brute Force)
# Des de la màquina host, instal·la hydra (eina de brute force)
docker run --rm --network siem-NOMCOGNOM \
--name attacker-NOMCOGNOM \
kalilinux/kali-rolling \
bash -c "apt-get install -y hydra && \
hydra -l root -P /usr/share/wordlists/rockyou.txt \
ssh://target-NOMCOGNOM -t 4 -f"
Ara al dashboard de Wazuh, cerca les alertes generades:
- Filtra per l'agent target-NOMCOGNOM
- Busca regles relacionades amb "authentication failure"
- Identifica el Rule ID de l'alerta
3.2 Incident 2: Accés amb usuari root
# Simula un accés exitós com a root (activitat sospitosa)
docker exec -it target-NOMCOGNOM bash
# Dins del contenidor, executa comandes sospitoses
cat /etc/shadow
id
whoami
ls -la /root
3.3 Incident 3: Creació d'un fitxer en directori sensible
# Intenta crear fitxers en directoris monitorats
docker exec target-NOMCOGNOM bash -c \
"echo 'backdoor' > /etc/cron.d/malicious-NOMCOGNOM"
Wazuh hauria d'alertar sobre modificacions en /etc/cron.d/.
3.4 Incident 4: Instal·lació de software nou (FIM - File Integrity Monitoring)
# Instal·la un nou paquet (FIM detecta canvis en fitxers del sistema)
docker exec target-NOMCOGNOM apt-get install -y nmap
Pregunta de reflexió
Comprova el dashboard per a cadascun dels incidents:
- Quant temps triga Wazuh a detectar cada incident?
- Quin és el nivell de gravetat (severity) de cada alerta?
- Quins Rule IDs s'han activat?
- Podries crear una regla personalitzada per millorar la detecció?
Part 4: Creació d'una regla personalitzada
4.1 Crear una regla per detectar comandes perilloses
# Entra al contenidor del manager
docker exec -it wazuh-manager-NOMCOGNOM bash
# Crea un fitxer de regles personalitzades
cat > /var/ossec/etc/rules/custom_rules_NOMCOGNOM.xml << 'EOF'
<group name="custom_NOMCOGNOM,">
<!-- Regla: Detectar descàrregues amb curl/wget -->
<rule id="100001" level="10">
<if_group>syslog</if_group>
<match>curl|wget|nc |netcat</match>
<description>Possible descàrrega o connexió de xarxa sospitosa per NOMCOGNOM</description>
<group>network_activity,</group>
</rule>
<!-- Regla: Detectar accés a /etc/shadow -->
<rule id="100002" level="14">
<if_group>audit</if_group>
<match>/etc/shadow</match>
<description>Intent d'accés a fitxer de contrasenyes per NOMCOGNOM</description>
<group>credentials_access,</group>
</rule>
</group>
EOF
# Reinicia el manager per aplicar les regles
/var/ossec/bin/wazuh-control restart
4.2 Provar les regles personalitzades
# Genera activitat que hauria d'activar les regles
docker exec target-NOMCOGNOM bash -c "curl -s https://ipinfo.io"
docker exec target-NOMCOGNOM cat /etc/shadow 2>/dev/null || true
Part 5: Informe d'incidents
Prepara un informe en markdown (informe_siem_NOMCOGNOM.md) amb:
# Informe d'Incidents SIEM - NOMCOGNOM
Data: YYYY-MM-DD
## Resum executiu
## Incidents detectats
### Incident 1: Força Bruta SSH
- **Hora de detecció**:
- **Rule ID activada**:
- **Nombre d'intents**:
- **Severitat**:
- **Recomanació**:
### Incident 2: [...]
## Anàlisi de regles personalitzades
- Regla 100001: [efectivitat]
- Regla 100002: [efectivitat]
## Conclusions i recomanacions
1. ...
2. ...
## Captura de proves (screenshots del dashboard)
[Insereix les captures de pantalla aquí]
Preguntes finals de reflexió
- Quina diferència hi ha entre un SIEM i un IDS/IPS?
- Quins falsos positius has observat? Com els reduiríes?
- En un entorn real, quants events per segon pot gestionar Wazuh?
- Com integraries Wazuh amb TheHive per a gestió de casos?
Neteja de l'entorn
# Un cop acabada la pràctica, neteja els contenidors
docker stop wazuh-manager-NOMCOGNOM wazuh-indexer-NOMCOGNOM \
wazuh-dashboard-NOMCOGNOM target-NOMCOGNOM
docker rm wazuh-manager-NOMCOGNOM wazuh-indexer-NOMCOGNOM \
wazuh-dashboard-NOMCOGNOM target-NOMCOGNOM
docker network rm siem-NOMCOGNOM
Entregables
- Captura de pantalla del dashboard amb els incidents detectats
- Fitxer de regles personalitzades
custom_rules_NOMCOGNOM.xml - Informe d'incidents
informe_siem_NOMCOGNOM.md