Servidor Wazuh MCP - Hable con su SIEM
Un servidor basado en Rust diseñado para cerrar la brecha entre un sistema Wazuh de Información de Seguridad y Gestión de Eventos (SIEM) y las aplicaciones que requieren datos contextuales de seguridad, específicamente adaptados para la Integración de Claude Desktop utilizando el Protocolo de Contexto Modelo (MCP).
Visión general
Los modernos asistentes de IA como Claude pueden beneficiarse significativamente del contexto en tiempo real sobre el entorno de seguridad del usuario. El Servidor MCP de Wazuh salva esta brecha proporcionando un acceso completo a los datos SIEM de Wazuh a través de interacciones de lenguaje natural.
Este servidor transforma las complejas respuestas de la API de Wazuh en un formato compatible con MCP, permitiendo el acceso a los asistentes de IA:
- Alertas y Eventos de Seguridad desde el Indexador Wazuh para la detección de amenazas y respuesta a incidentes
- Gestión y supervisión de agentes, incluido el estado de salud, los procesos del sistema y los puertos de red
- Datos deevaluación de vulnerabilidades para la gestión de riesgos y la priorización de parches
- Reglas de seguridad y configuración para la optimización de la detección y la validación del cumplimiento
- Estadísticas del sistema y métricas derendimiento para la supervisión operativa y los registros de auditoría
- Capacidades deanálisis de registros y análisis forense para la investigación de incidentes y la elaboración de informes de conformidad
- Salud y gestión de clústeres para requisitos de fiabilidad y disponibilidad de la infraestructura
- Supervisión del cumplimiento y análisis de brechas para marcos normativos como PCI-DSS, HIPAA, SOX y GDPR
En lugar de requerir llamadas manuales a la API o consultas complejas, los equipos de seguridad pueden ahora hacer preguntas en lenguaje natural como "Muéstrame vulnerabilidades críticas en servidores web", "¿Qué procesos se están ejecutando en el agente 001?" o "¿Estamos cumpliendo los requisitos de registro PCI-DSS?" y recibir datos estructurados y procesables de su despliegue Wazuh.
Este enfoque es especialmente valioso para los equipos de cumplimiento que necesitan evaluar rápidamente la postura de seguridad, identificar lagunas en la cobertura de la supervisión, validar la eficacia de las reglas y generar pruebas para los requisitos de auditoría en toda la infraestructura distribuida.
Ejemplos de uso
El Servidor Wazuh MCP proporciona acceso directo a los datos de seguridad Wazuh a través de interacciones de lenguaje natural, permitiendo varios casos prácticos de uso:
Análisis de Alertas de Seguridad
- Triaje e Investigación de Alertas: Consulta de alertas de seguridad recientes con
get_wazuh_alert_summary
para identificar y priorizar rápidamente las amenazas que requieren atención inmediata. - Reconocimiento de patrones de alertas: Analice las tendencias y patrones de las alertas para identificar problemas de seguridad recurrentes o posibles campañas de ataque.
Gestión de vulnerabilidades
- Evaluación de vulnerabilidades de agentes: Utilice
get_wazuh_vulnerability_summary
yget_wazuh_critical_vulnerabilities
para evaluar la postura de seguridad de agentes específicos y priorizar los esfuerzos de aplicación de parches. - Priorización de vulnerabilidades basada en riesgos: Correlacione los datos sobre vulnerabilidades con la criticidad y exposición de los agentes para centrar los esfuerzos de corrección.
Supervisión y análisis forense del sistema
- Análisis de procesos: Investigue los procesos en ejecución en los agentes mediante
get_wazuh_agent_processes
para la detección de amenazas y el análisis del sistema. - Evaluación de la seguridad de la red: Supervise los puertos abiertos y los servicios de red con
get_wazuh_agent_ports
para identificar posibles vectores de ataque. - Supervisión del estado del agente: Realice un seguimiento del estado y la conectividad de los agentes mediante
get_wazuh_running_agents
para garantizar una cobertura de seguridad completa.
Inteligencia de operaciones de seguridad
- Análisis de la eficacia de las reglas: Revise y analice las reglas de detección de seguridad con
get_wazuh_rules_summary
para optimizar las capacidades de detección. - Supervisión del rendimiento del gestor: Realice un seguimiento del rendimiento y las estadísticas del sistema mediante herramientas como
get_wazuh_weekly_stats
,get_wazuh_remoted_stats
yget_wazuh_log_collector_stats
. - Gestión de la salud del clúster: Supervise el estado del clúster Wazuh con
get_wazuh_cluster_health
yget_wazuh_cluster_nodes
para la fiabilidad operativa.
Respuesta a incidentes y análisis forense
- Análisis de registros: Busque y analice los registros del gestor utilizando
search_wazuh_manager_logs
yget_wazuh_manager_error_logs
para la investigación de incidentes. - Investigación específica de agentes: Combine varias herramientas para crear perfiles completos de agentes específicos durante incidentes de seguridad.
- Consultas de seguridad en lenguaje natural: Haga preguntas complejas de seguridad en lenguaje natural y reciba datos estructurados de múltiples componentes de Wazuh.
Eficiencia operativa
- Informes automatizados: Genere informes y resúmenes de seguridad a través de interfaces conversacionales sin llamadas manuales a la API.
- Análisis entre componentes: Correlacione datos tanto de Wazuh Indexer (alertas) como de Wazuh Manager (agentes, reglas, vulnerabilidades) para obtener una visión integral de la seguridad.
- Operaciones de Seguridad Multilingüe: Acceda a los datos de Wazuh y reciba información en varios idiomas para equipos de seguridad globales.
Recopilación y respuesta de información sobre amenazas
Para mejorar las capacidades de inteligencia sobre amenazas, el servidor Wazuh MCP puede combinarse con el servidor Cortex MCP para crear un potente ecosistema de análisis de seguridad.
Capacidades mejoradas con la integración de Cortex:
- Análisis de artefactos: Analiza automáticamente archivos sospechosos, URLs, dominios y direcciones IP encontradas en las alertas de Wazuh utilizando los más de 140 analizadores de Cortex
- Enriquecimiento de IOC: Enriquezca los indicadores de compromiso (IOC) de las alertas de Wazuh con inteligencia de amenazas de múltiples fuentes, incluyendo VirusTotal, Shodan, MISP y más
- Caza automatizada de amenazas: Combine las capacidades de detección de Wazuh con los motores de análisis de Cortex para investigar y clasificar automáticamente las amenazas
- Inteligencia multifuente: Aproveche los analizadores para comprobaciones de reputación, análisis de malware, análisis de dominios y análisis de comportamiento
- Orquestación de respuestas: Utilice los resultados de los análisis para informar sobre las acciones de respuesta automatizadas y la priorización de alertas
Ejemplo de flujo de trabajo:
- Wazuh detecta un hash de archivo sospechoso o una conexión de red en una alerta
- El asistente de IA consulta automáticamente el servidor Cortex MCP para analizar el artefacto utilizando varios analizadores
- Se correlacionan los resultados de VirusTotal, análisis híbridos, reputación de dominio y otras fuentes
- La inteligencia combinada proporciona contexto para las decisiones de respuesta a incidentes
- Los resultados se pueden utilizar para actualizar las reglas de Wazuh o activar una supervisión adicional
Requisitos
- Un cliente LLM compatible con MCP (Model Context Protocol) (por ejemplo, Claude Desktop)
- Un servidor Wazuh en funcionamiento (se recomienda v4.12) con la API habilitada y accesible.
- Conectividad de red entre este servidor y la API Wazuh (si se usa la interacción API).
Instalación
Opción 1: Descarga del Binario Pre-construido (Recomendado)
- Descargue el Binario
- Vaya a la página Releases del repositorio
mcp-server-wazuh
GitHub. - Descargue el binario apropiado para su sistema operativo (por ejemplo,
mcp-server-wazuh-linux-amd64
,mcp-server-wazuh-macos-amd64
,mcp-server-wazuh-windows-amd64.exe
). - Haga ejecutable el binario descargado (por ejemplo,
chmod +x mcp-server-wazuh-linux-amd64
). - (Opcional) Cámbiale el nombre a algo más sencillo como
mcp-server-wazuh
y muévelo a un directorio en elPATH
de tu sistema para facilitar el acceso.
- Vaya a la página Releases del repositorio
Opción 2: Docker
- Extraiga la imagen Docker:
docker pull ghcr.io/gbrigandi/mcp-server-wazuh:latest
Opción 3: Construir desde el código fuente
Requisitos previos:
- Instalar Rust: https://www.rust-lang.org/tools/install
Construir:
git clone https://github.com/gbrigandi/mcp-server-wazuh.git cd mcp-server-wazuh cargo build --release
El binario estará disponible en
target/release/mcp-server-wazuh
.
Configure su cliente LLM
El método para configurar tu cliente LLM variará dependiendo del cliente en sí. Para clientes que soportan MCP (Model Context Protocol), normalmente necesitará apuntar al cliente a la ruta del ejecutable mcp-server-wazuh
.
Ejemplo para Claude Desktop:
Configure su archivo claude_desktop_config.json
:
{ "mcpServers": { "wazuh": { "command": "/ruta/a/mcp-servidor-wazuh", "args": [], "env": { "WAZUH_API_HOST": "your_wazuh_manager_api_host", "WAZUH_API_PORT": "55000", "WAZUH_API_USERNAME": "tu_wazuh_api_user", "WAZUH_API_PASSWORD": "tu_wazuh_api_contraseña", "WAZUH_INDEXER_HOST": "your_wazuh_indexer_host", "WAZUH_INDEXER_PORT": "9200", "WAZUH_INDEXER_USERNAME": "tu_wazuh_indexer_user", "WAZUH_INDEXER_PASSWORD": "your_wazuh_indexer_password", "WAZUH_VERIFY_SSL": "false", "WAZUH_TEST_PROTOCOL": "https", "RUST_LOG": "info" } } } }
Sustituye /path/to/mcp-server-wazuh
por la ruta real a tu binario y configura las variables de entorno como se detalla en la sección Configuración.
Una vez configurado, su cliente LLM debe ser capaz de lanzar y comunicarse con el mcp-server-wazuh
para acceder a los datos de seguridad Wazuh.
Si utiliza Docker, cree un archivo .env
con su configuración Wazuh:
WAZUH_API_HOST=your_wazuh_manager_api_host
WAZUH_API_PORT=55000
WAZUH_API_USERNAME=your_wazuh_api_user
WAZUH_API_PASSWORD=your_wazuh_api_password
WAZUH_INDEXER_HOST=your_wazuh_indexer_host
WAZUH_INDEXER_PORT=9200
WAZUH_INDEXER_USERNAME=your_wazuh_indexer_user
WAZUH_INDEXER_PASSWORD=your_wazuh_indexer_password
WAZUH_VERIFY_SSL=false
WAZUH_TEST_PROTOCOL=https
RUST_LOG=info
Configure su archivo claude_desktop_config.json
:
{ "mcpServers": { "wazuh": { "command": "docker", "args": [ "run", "--rm", "-i", "--env-file", "/path/to/your/.env", "ghcr.io/gbrigandi/mcp-server-wazuh:latest" ] } }
Configuración
La configuración se gestiona a través de variables de entorno. Se puede colocar un archivo .env
en la raíz del proyecto para el desarrollo local.
Variable | Descripción | Por defecto | Requerida |
---|---|---|---|
WAZUH_API_HOST | Nombre de host o dirección IP del servidor Wazuh Manager API. | localhost | Si |
WAZUH_API_PORT | Número de puerto para el Wazuh Manager API. | 55000 | Si |
WAZUH_API_USERNAME | Nombre de usuario para la autenticación de Wazuh Manager API. | wazuh | Sí |
WAZUH_API_PASSWORD | Contraseña para la autenticación de Wazuh Manager API. | wazuh | Sí |
WAZUH_INDEXER_HOST | Nombre de host o dirección IP del servidor Wazuh Indexer API. | localhost | Sí |
WAZUH_INDEXER_PORT | Número de puerto para el Wazuh Indexer API. | 9200 | Sí |
WAZUH_INDEXER_USERNAME | Nombre de usuario para la autenticación de Wazuh Indexer API. | admin | Sí |
WAZUH_INDEXER_PASSWORD | Contraseña para Wazuh Indexer API de autenticación. | admin | Sí |
WAZUH_VERIFY_SSL | Establecer en true para verificar certificados SSL para Wazuh API y conexiones Indexer. | false | No |
WAZUH_TEST_PROTOCOLO | Protocolo para las conexiones Wazuh (por ejemplo, "http", "https"). Anula el valor predeterminado del cliente. | https | No |
RUST_LOG | Nivel de registro (por ejemplo, info , debug , trace ). | info | No |
Nota sobreWAZUH_VERIFY_SSL
: Para entornos de producción, se recomienda encarecidamente establecer WAZUH_VERIFY_SSL=true
y asegurar la correcta validación del certificado tanto para el Wazuh Manager API como para las conexiones del Wazuh Indexer. Establecerlo en false
deshabilita las verificaciones de certificados, lo cual es inseguro. El "Requerido: Yes" indica que estas variables son esenciales para que el servidor se conecte a los respectivos componentes de Wazuh. Aunque se proporcionan valores por defecto, es poco probable que coincidan con una configuración de producción o no local.
Construyendo
Requisitos previos
- Instalar Rust: https://www.rust-lang.org/tools/install
- Instalar Docker y Docker Compose (opcional, para despliegue en contenedores): https://docs.docker.com/get-docker/
Desarrollo local
- Clonar el repositorio:
git clone https://github.com/gbrigandi/mcp-server-wazuh.git cd mcp-server-wazuh
- Configurar (si se utiliza Wazuh API)
- Copie el archivo de entorno de ejemplo:
cp .env.ejemplo .env
- Edite el archivo
.env
con sus detalles específicos de la API Wazuh (por ejemplo,WAZUH_API_HOST
,WAZUH_API_PORT
).
- Copie el archivo de entorno de ejemplo:
- Construir:
cargo build
- Run:
cargo run # O usa el script run (que puede configurar el modo stdio): # ./run.sh
Arquitectura
El servidor está construido usando el framework rmcp y facilita la comunicación entre los clientes MCP (por ejemplo, Claude Desktop, extensiones IDE) y el Servidor Wazuh MCP vía transporte stdio. El servidor interactúa con las APIs Wazuh Indexer y Wazuh Manager para obtener alertas de seguridad y otros datos.
sequenceDiagram participante ClientApp como Aplicación Cliente (e.g., IDE Extension / Claude Desktop) participant WazuhMCPServer as Wazuh MCP Server (this application) participant WazuhAPI as Wazuh API ClientApp->>+WazuhMCPServer: (stdio) MCP Initialize WazuhMCPServer-->>-ClientApp: (stdout) MCP Initialized ClientApp->>+WazuhMCPServer: (stdio) MCP Request (tools/list) WazuhMCPServer->>WazuhMCPServer: Parse MCP Request WazuhMCPServer->>WazuhMCPServer: Procesar internamente WazuhMCPServer-->>-ClientApp: (stdout) MCP Response (herramientas disponibles) ClientApp->>+WazuhMCPServer: (stdio) MCP Request (tools/call for wazuhAlerts) WazuhMCPServer->>WazuhMCPServer: Parse MCP Request WazuhMCPServer->>+WazuhAPI: Solicitud de Alertas Wazuh (con WAZUH_USER, WAZUH_PASS) WazuhAPI-->>-WazuhMCPServer: Datos de Alertas Wazuh (JSON) WazuhMCPServer->>WazuhMCPServer: Transformar Alertas Wazuh a Formato MCP WazuhMCPServer-->>-ClientApp: (stdout) Respuesta MCP (alertas)
Flujo de datos (stdio focus):
- Una aplicación (por ejemplo, una extensión IDE, una herramienta CLI) lanza el Wazuh MCP Server como un proceso hijo.
- La aplicación envía peticiones con formato MCP (comandos) al
stdin
del servidor. - El Servidor MCP de Wazuh lee el comando del
stdin
. - Procesamiento
- El servidor analiza el comando MCP.
- Si el comando requiere obtener datos de Wazuh (por ejemplo, "obtener las últimas alertas")
- El servidor se conecta a la API de Wazuh (autenticándose si es necesario usando credenciales configuradas como
WAZUH_USER
,WAZUH_PASS
). - Obtiene los datos requeridos (por ejemplo, alertas de seguridad).
- La lógica de transformación del servidor
(src/mcp/transform.rs
) procesa cada alerta, mapeando los campos Wazuh a campos MCP.
- El servidor se conecta a la API de Wazuh (autenticándose si es necesario usando credenciales configuradas como
- Si la orden es interna (por ejemplo, una comprobación de estado específica del servidor MCP), la procesa directamente.
- El servidor envía una respuesta JSON con formato MCP (por ejemplo, alertas transformadas, reconocimiento de comandos o mensajes de error) a la aplicación a través de su
salida estándar
. - La aplicación lee y procesa la respuesta MCP desde la
salida estándar
del servidor.
Esta interacción stdio permite una estrecha integración con herramientas de desarrollo locales u otras aplicaciones que puedan gestionar procesos hijo. También puede estar disponible un punto final HTTP opcional(/mcp
) para los clientes que prefieran el sondeo.
El servidor se comunica a través de stdin
y stdout
utilizando mensajes JSON-RPC 2.0, de acuerdo con el Protocolo de Contexto Modelo (MCP).
Ejemplo de flujo de interacción:
La aplicación cliente (por ejemplo, una extensión IDE) inicia el proceso
mcp-server-wazuh
.El cliente envía una solicitud de
inicialización
a laentrada estándar
del servidor:{ "jsonrpc": "2.0", "id": 0, "method": "initialize", "params": { "protocolVersion": "2024-11-05", "capabilities": { "sampling": {}, "roots": { "listChanged": true } }, "clientInfo": { "name": "mcp-inspector", "version": "0.11.0" } } }
El servidor envía
la
respuestade inicialización
al cliente a travésde stdout
:{ "jsonrpc": "2.0", "id": 1, "result": { "protocolVersion": "2024-11-05", "capabilities": { "prompts": {}, "resources": {}, "tools": {} }, "serverInfo": { "name": "rmcp", "version": "0.1.5" }, "instructions": "Este servidor provee herramientas para interactuar con una instancia SIEM de Wazuh para monitoreo y análisis de seguridad.\nHerramientas disponibles:\n- 'get_wazuh_alert_summary': Recupera un resumen de las alertas de seguridad de Wazuh. Opcionalmente toma el parámetro 'limit' para controlar el número de alertas devueltas (por defecto 100)." }
El cliente envía
notificaciones/inicializados
alstdin
del servidor:(Esto es una notificación, así que elid
es omitido por el cliente){ "jsonrpc": "2.0", "method": "notifications/initialized" }
El cliente solicita las herramientas disponibles enviando
tools/list
a laentrada estándar
del servidor:{ "jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {} }
El servidor responde con la lista de herramientas al cliente a través de
stdout
:{ "jsonrpc": "2.0", "id": 2, "result": { "tools": [ { "name": "get_wazuh_alert_summary", "description": "Recupera un resumen de las alertas de seguridad de Wazuh. Devuelve información de alerta formateada incluyendo ID, timestamp y descripción.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "limit": {"description": "Número máximo de alertas a recuperar (por defecto: 100)", "format": "uint32", "minimum": 0.0, "type": ["integer", "null"] } }, "title": "GetAlertSummaryParams", "type": "object" } } } }
El cliente llama a la herramienta
get_wazuh_alert_summary
enviandotools/call
alstdin
del servidor:{ "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "get_wazuh_alert_summary", "arguments": { "limit": 5 } } }
El servidor recibe en
stdin
, procesa la llamadaget_wazuh_alert_summary
(que implica consultar la API del Indexador Wazuh y transformar los datos).El servidor envía la respuesta de
la herramienta/llamada
con las alertas formateadas al cliente a través destdout
:{ "jsonrpc": "2.0", "id": 3, "result": { "content": [ { "type": "text", "text": "ID de alerta: 1747091815.1212763\nTime: 2024-01-15T10:30:45.123Z\nAgent: web-server-01\nLevel: 7\nDescription: Attached USB Storage" }, {"type": "text", "text": "ID de alerta: 1747066333.1207112\nTime: 2024-01-15T10:25:12.456Z\nAgent: database-server\nLevel: 5\nDescription: New dpkg (Debian Package) installed." } ], "isError": false }
O, si no se encuentran alertas:
{ "jsonrpc": "2.0", "id": 3, "result": { "content": [ { "type": "text", "text": "No Wazuh alerts found." } ], "isError": false } }
O, si hay un error al conectarse a Wazuh:
{ "jsonrpc": "2.0", "id": 3, "result": { "content": [ { "type": "text", "text": "Error retrieving alerts from Wazuh: HTTP request error: connection refused" } ], "isError": true } }
Desarrollo y Pruebas
- Estilo del código: Utiliza el formato estándar de Rust
(cargo fmt
). - Linting: Utiliza Clippy
(cargo clippy
). - Pruebas: Contiene pruebas unitarias para la lógica de transformación y pruebas de integración. Para stdio, las pruebas pueden implicar la canalización de entrada/salida a un arnés de pruebas. Para HTTP, las pruebas usan un servidor API Wazuh falso
(httpmock
) y un cliente MCP de prueba.# Ejecutar todas las pruebas cargo test # Ejecutar pruebas de integración específicas (ejemplo para pruebas HTTP) # cargo test --test integration_test # Ejecutar pruebas con registro detallado RUST_LOG=debug cargo test
- Consulte
tests/README.md
para más detalles sobre la ejecución de pruebas y el uso de la CLI del cliente de pruebas.
Licencia
Este proyecto está licenciado bajo la Licencia MIT.