WireGuard es una VPN moderna, rápida y extremadamente simple que utiliza criptografía de última generación. Sin embargo, una de sus características de diseño es un enfoque minimalista en el registro de eventos: por defecto, WireGuard no escribe eventos detallados a un archivo de log dedicado, lo que puede ser un desafío para el monitoreo de seguridad.
Esta guía proporciona una solución práctica para monitorear un servidor WireGuard basado en Linux e integrarlo con Wazuh. Utilizaremos rsyslog para capturar eventos a nivel de kernel de WireGuard y enviarlos a un archivo de log personalizado, además de decoders y reglas personalizadas de Wazuh para analizar estos logs y generar alertas de seguridad significativas.
Capacidades de monitoreo de eventos
Esta integración permite monitorear eventos como:
- 130001: Inicios de handshake exitosos
- 130002: Inicios de handshake inválidos (posibles ataques o malas configuraciones)
- 130003: Paquetes keepalive estándar
- 130004: Paquetes enviados desde una IP de origen no permitida (violación de política, posible ataque)
Requisitos
- Un servidor WireGuard instalado en un host Linux
- Un agente Wazuh instalado en el mismo host Linux
- Servicio rsyslog (instalado por defecto en la mayoría de distribuciones Linux)
Parte 1: Habilitar captura de logs vía rsyslog en el servidor WireGuard
Primero, necesitamos instruir al servicio rsyslog para que escuche mensajes del kernel que contengan la palabra “wireguard” y los redirija a un archivo de log dedicado.
Paso 1: Crear un nuevo archivo de configuración de rsyslog
vim /etc/rsyslog.d/20-wireguard.conf
Paso 2: Añadir las siguientes reglas al archivo
Esta regla encuentra cualquier mensaje con “wireguard:”, lo escribe en /var/log/wireguard.log, y luego detiene su procesamiento posterior para evitar duplicados.
# Rule for WireGuard logs
:msg, contains, "wireguard:" /var/log/wireguard.log
& stop
Paso 3: Reiniciar el servicio rsyslog
Guarda el archivo y reinicia el servicio rsyslog para aplicar los cambios.
systemctl restart rsyslog
Ahora deberías ver eventos de WireGuard apareciendo en /var/log/wireguard.log. Puedes verificar los eventos con el siguiente comando:
tail -f /var/log/wireguard.log
Parte 2: Configurar el agente Wazuh para monitorear el archivo de log
A continuación, configuramos el agente Wazuh para leer nuestro nuevo archivo de log y enviar los eventos al Wazuh Manager. También añadiremos un prefijo personalizado a cada línea de log, lo que ayudará a nuestros decoders personalizados a identificar los logs.
Paso 1: Abrir el archivo de configuración del agente Wazuh
vim /var/ossec/etc/ossec.conf
Paso 2: Añadir el bloque localfile
Añade el siguiente bloque <localfile> dentro de la sección <ossec_config>.
<localfile>
<location>/var/log/wireguard.log</location>
<log_format>syslog</log_format>
<out_format>wireguard-log: $(log)</out_format>
</localfile>
Nota: La etiqueta <out_format> es crucial. Añade el prefijo wireguard-log: a cada entrada de log antes de enviarla al manager. Nuestro decoder padre utilizará esta cadena única para coincidir con los eventos entrantes.
Paso 3: Reiniciar el servicio del agente Wazuh
Guarda el archivo y reinicia el servicio del agente Wazuh.
systemctl restart wazuh-agent
Parte 3: Importar reglas y decoders personalizados al Wazuh Manager
Ahora, en tu servidor Wazuh Manager, descargaremos e instalaremos los archivos de reglas y decoders personalizados.
Paso 1: Clonar el repositorio de GitHub
Clona el repositorio de GitHub que contiene los archivos de integración.
git clone https://github.com/jayzielinski/wazuh-wireguard-integration.git
Paso 2: Copiar los archivos de decoder y reglas
Copia los archivos de decoder y reglas a los directorios correctos de Wazuh.
cp wazuh-wireguard-integration/130000-wireguard_decoders.xml /var/ossec/etc/decoders/
cp wazuh-wireguard-integration/130000-wireguard_rules.xml /var/ossec/etc/rules/
Paso 3: Establecer la propiedad y permisos correctos
Establece la propiedad y permisos correctos para los nuevos archivos. Esto es esencial para que el Wazuh manager pueda leerlos.
chown wazuh:wazuh /var/ossec/etc/rules/130000-wireguard_rules.xml
chmod 660 /var/ossec/etc/rules/130000-wireguard_rules.xml
Paso 4: Reiniciar el servicio Wazuh Manager
Reinicia el servicio Wazuh Manager para cargar los nuevos decoders y reglas.
systemctl restart wazuh-manager
Parte 4: Probar la integración
Ahora puedes probar las reglas activando eventos específicos en un cliente WireGuard.
Caso de prueba 1: Activar la regla 130004 (IP no permitida)
Esta regla detecta cuando un peer legítimo envía tráfico desde una dirección IP que no está listada en su configuración AllowedIPs en el servidor.
Para activarlo, modifica la configuración de tu cliente WireGuard, cambia la Address del cliente a una IP no cubierta por los AllowedIPs del servidor para ese peer, y luego intenta enviar tráfico.
Resultado en el servidor WireGuard (/var/log/wireguard.log):
Se mostrará una entrada de log indicando un paquete con IP de origen no permitida.
Resultado en el Dashboard de Wazuh: Se generará una alerta con la descripción WireGuard: Peer [...] sent a packet with an unallowed source IP [...].
Caso de prueba 2: Activar la regla 130002 (Handshake inválido)
Esta regla detecta un intento de handshake fallido, que puede ocurrir debido a un par de claves privada/pública no coincidente. Este es un evento de seguridad crítico para monitorear.
Para activarlo, cambia la PrivateKey en la configuración de tu cliente WireGuard a un valor incorrecto e intenta conectarte al servidor.
Resultado en el Dashboard de Wazuh: Se generará una alerta con la descripción WireGuard: Invalid handshake initiation from [...].
Conclusión
Tu integración está ahora completa y monitoreando activamente tu servidor WireGuard. Esta configuración habilita el monitoreo de seguridad de conexiones VPN WireGuard, ayudándote a detectar posibles ataques, malas configuraciones y violaciones de políticas en tiempo real.
Repositorio
Para los archivos de integración completos (decoders y reglas), visita:
- Repositorio GitHub: https://github.com/jayzielinski/wazuh-wireguard-integration
Referencias
- Artículo original: https://www.cylenth.blog/posts/wazuh-wireguard-monitoring
- Documentación de Wazuh: https://documentation.wazuh.com/
- Documentación de WireGuard: https://www.wireguard.com/
