SIEM安全数据桥接服务

一个Rust开发的服务器,用于连接Wazuh SIEM系统和需要上下文安全数据的应用程序,通过自然语言交互提供安全警报、漏洞评估和合规监控等功能。

  • by gbrigandi
  • Rust
  • 本地部署
  • 240 星标
  • 更新于
在 GitHub 查看 gbrigandi/mcp-server-wazuh

使用说明

Wazuh MCP服务器-与您的SIEM对话

一种基于Rust的服务器,旨在弥合Wazuh安全信息和事件管理(SIEM)系统与需要上下文安全数据的应用程序之间的差距,专门为使用模型上下文协议(MCP)的Claude桌面集成量身定制。

概述

像克劳德这样的现代人工智能助手可以从用户安全环境的实时上下文中受益匪浅。Wazuh MCP服务器通过自然语言交互提供对Wazuh SIEM数据的全面访问,弥合了这一差距。

该服务器将复杂的Wazuh API响应转换为兼容MCP的格式,使AI助手能够访问:

  • 安全警报和事件 来自Wazuh Indexer的威胁检测和事件响应
  • 代理管理和监控 包括健康状态、系统进程和网络端口
  • 漏洞评估 用于风险管理和补丁优先级排序的数据
  • 安全规则和配置 用于检测优化和合规性验证
  • 系统统计与性能 运营监控和审计跟踪指标
  • 日志分析和取证 事件调查和合规报告能力
  • 集群健康与管理 满足基础设施可靠性和可用性要求
  • 合规监控和差距分析 适用于PCI-DSS、HIPAA、SOX和GDPR等监管框架

安全团队现在不需要手动API调用或复杂查询,而是可以询问自然语言问题,如“显示web服务器上的关键漏洞”、“代理001上运行的进程是什么?”或“我们是否满足PCI-DSS日志记录要求?”,并从Wazuh部署中接收结构化、可操作的数据。

这种方法对于需要快速评估安全态势、识别监控覆盖范围中的差距、验证规则有效性以及为分布式基础设施的审计要求生成证据的合规团队来说尤其有价值。

示例用例

Wazuh MCP服务器通过自然语言交互提供对Wazuh安全数据的直接访问,实现了几个实际用例:

安全警报分析

  • 警报分类和调查: 使用查询最近的安全警报 get_wazuh_alert_summary 快速识别并优先考虑需要立即关注的威胁。
  • 警报模式识别: 分析警报趋势和模式,以识别反复出现的安全问题或潜在的攻击活动。

漏洞管理

  • 代理漏洞评估: 使用 get_wazuh_vulnerability_summary 和 get_wazuh_critical_vulnerabilities 评估特定代理的安全态势,并确定补丁工作的优先级。
  • 基于风险的漏洞优先级: 将漏洞数据与代理关键性和重点补救工作的暴露程度相关联。

系统监控和取证

  • 过程分析: 使用以下命令调查代理上正在运行的进程 get_wazuh_agent_processes 用于威胁搜索和系统分析。
  • 网络安全评估: 通过以下方式监控开放端口和网络服务 get_wazuh_agent_ports 以识别潜在的攻击媒介。
  • 代理健康监控: 使用跟踪代理状态和连接 get_wazuh_running_agents 以确保全面的安全覆盖。

安全行动情报

  • 规则有效性分析: 使用以下工具审查和分析安全检测规则 get_wazuh_rules_summary 以优化检测能力。
  • 经理绩效监控: 使用以下工具跟踪系统性能和统计数据 get_wazuh_weekly_stats, get_wazuh_remoted_stats,以及 get_wazuh_log_collector_stats.
  • 群集健康管理: 使用以下命令监视Wazuh集群状态 get_wazuh_cluster_health 和 get_wazuh_cluster_nodes 为了提高操作可靠性。

事件响应和取证

  • 日志分析: 使用以下命令搜索和分析经理日志 search_wazuh_manager_logs 和 get_wazuh_manager_error_logs 用于事故调查。
  • 代理人专项调查: 结合多种工具,在安全事件期间构建特定代理的全面配置文件。
  • 自然语言安全查询: 用自然语言提出复杂的安全问题,并从多个Wazuh组件接收结构化数据。

运营效率

  • 自动报告: 通过对话式界面生成安全报告和摘要,无需手动调用API。
  • 交叉成分分析: 关联来自Wazuh Indexer(警报)和Wazuh Manager(代理、规则、漏洞)的数据,以获得全面的安全见解。
  • 多语言安全操作: 访问Wazuh数据,并为全球安全团队提供多种语言的见解。

威胁情报收集和响应

为了增强威胁情报和事件响应能力,Wazuh MCP服务器可以与互补的安全MCP服务器结合使用:

服务器 描述
Cortex MCP服务器 通过140多台分析仪进行伪影分析和IOC富集
The Hive MCP服务器 案例管理和事件响应协调
MISP MCP服务器 威胁情报共享和IOC查找

Cortex集成增强功能:

  • 工件分析: 使用Cortex的140多个分析器自动分析Wazuh警报中发现的可疑文件、URL、域和IP地址
  • IOC强化: 利用来自多个来源的威胁情报,包括VirusTotal、Shodan、MISP等,丰富Wazuh警报中的危害指标(IOC)
  • 自动威胁搜索: 将Wazuh的检测功能与Cortex的分析引擎相结合,自动调查和分类威胁
  • 多源情报: 利用分析器进行信誉检查、恶意软件分析、域分析和行为分析
  • 响应编排: 使用分析结果通知自动响应操作和警报优先级

通过TheHive集成增强功能:

  • 案例创建: 从Wazuh警报自动在TheSive中创建案例,以进行结构化事件跟踪
  • 警报相关性: 将Wazuh相关警报链接到现有案例,以获得全面的事件时间表
  • 任务管理: 根据警报严重程度和类型创建和跟踪调查任务
  • 可观察管理: 提取和管理IOC作为案件调查中的可观察对象
  • 协作: 使安全团队能够就Wazuh检测到的事件进行协作

通过MISP集成增强功能:

  • 国际奥委会查询: 检查您的威胁情报数据库中是否知道Wazuh警报的指标
  • 威胁背景: 检索IOC的事件上下文、威胁行为者归因和MITRE ATT&CK映射
  • 假阳性减少: 根据MISP警告列表验证IOC,以减少误报
  • 视线追踪: 记录和查询视力历史以评估IOC患病率
  • 银河探索: 访问威胁行为者档案、恶意软件家族和攻击模式

工作流程示例:

  1. Wazuh在警报中检测到可疑的文件哈希或网络连接
  2. AI助手查询MISP MCP服务器,以检查威胁情报中是否知道IOC
  3. 如果未知,Cortex MCP服务器将使用多个分析器分析工件
  4. VirusTotal、混合分析、域名信誉和其他来源的结果是相互关联的
  5. 通过TheHive MCP服务器在TheHive中创建案件以跟踪调查
  6. 综合情报为事件响应决策提供了背景
  7. 研究结果可用于更新Wazuh规则或触发额外的监测

需求

  • MCP(模型上下文协议)兼容的LLM客户端(例如Claude Desktop)
  • 正在运行的Wazuh服务器(推荐使用4.12版),已启用并可访问API。
  • 此服务器与Wazuh API之间的网络连接(如果使用API交互)。

安装

选项1:下载预构建二进制文件(推荐)

  1. 下载二进制文件:
    • 转到 发布页面 的 mcp-server-wazuh GitHub存储库。
    • 下载适合您操作系统的二进制文件(例如。, mcp-server-wazuh-linux-amd64, mcp-server-wazuh-macos-amd64, mcp-server-wazuh-macos-arm64, mcp-server-wazuh-windows-amd64.exe).
    • 使下载的二进制文件可执行(例如。, chmod +x mcp-server-wazuh-linux-amd64).
    • (可选)将其重命名为更简单的名称,如 mcp-server-wazuh 并将其移动到系统中的某个目录 PATH 以便于访问。

选项2:Docker

  1. 拉取Docker镜像:
    docker pull ghcr.io/gbrigandi/mcp-server-wazuh:latest
    

选项3:从源代码构建

  1. 先决条件:

  2. 构建:

    git clone https://github.com/gbrigandi/mcp-server-wazuh.git
    cd mcp-server-wazuh
    
    # Build with stdio transport only (default)
    cargo build --release
    
    # Build with HTTP transport support
    cargo build --release --features http
    

    二进制文件将在 target/release/mcp-server-wazuh.

配置LLM客户端

配置LLM客户端的方法将根据客户端本身而有所不同。对于支持MCP(模型上下文协议)的客户端,您通常需要将客户端指向 mcp-server-wazuh 可执行。

Claude Desktop示例:

配置您的 claude_desktop_config.json 文件:

{
  "mcpServers": {
    "wazuh": {
      "command": "/path/to/mcp-server-wazuh",
      "args": [],
      "env": {
        "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"
      }
    }
  }
}

替换 /path/to/mcp-server-wazuh 使用二进制文件的实际路径,并按照中的详细说明配置环境变量 配置 部分。

配置后,您的LLM客户端应该能够启动并与 mcp-server-wazuh 访问Wazuh安全数据。

如果使用Docker,创建一个 .env 使用您的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

配置您的 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"
      ]
    }
  }
}

配置

配置是通过环境变量进行管理的。A. .env 文件可以放置在项目根目录中进行本地开发。

变量 描述 默认值 必填
WAZUH_API_HOST Wazuh Manager API服务器的主机名或IP地址。 localhost 是的
WAZUH_API_PORT Wazuh Manager API的端口号。 55000 是的
WAZUH_API_USERNAME Wazuh Manager API身份验证的用户名。 wazuh 是的
WAZUH_API_PASSWORD Wazuh Manager API身份验证的密码。 wazuh 是的
WAZUH_INDEXER_HOST Wazuh Indexer API服务器的主机名或IP地址。 localhost 是的
WAZUH_INDEXER_PORT Wazuh Indexer API的端口号。 9200 是的
WAZUH_INDEXER_USERNAME Wazuh Indexer API身份验证的用户名。 admin 是的
WAZUH_INDEXER_PASSWORD Wazuh Indexer API身份验证的密码。 admin 是的
WAZUH_VERIFY_SSL 设置为 true 以验证Wazuh API和Indexer连接的SSL证书。 false 没有
WAZUH_TEST_PROTOCOL Wazuh连接协议(例如“http”、“https”)。覆盖客户端默认值。 https 没有
RUST_LOG 日志级别(例如。, info, debug, trace). info 没有

关于的注释 WAZUH_VERIFY_SSL: 对于生产环境,强烈建议设置 WAZUH_VERIFY_SSL=true 并确保对Wazuh Manager API和Wazuh Indexer连接进行正确的证书验证。将其设置为 false 禁用证书检查,这是不安全的。 “必需:是”表示这些变量对于服务器连接到相应的Wazuh组件至关重要。虽然提供了默认设置,但它们不太可能与生产或非本地设置相匹配。

建筑

先决条件

地方发展

  1. 克隆存储库:
    git clone https://github.com/gbrigandi/mcp-server-wazuh.git 
    cd mcp-server-wazuh
    
  2. 配置(如果使用Wazuh API):
    • 复制示例环境文件: cp .env.example .env
    • 编辑 .env 文件中包含您的特定Wazuh API详细信息(例如。 WAZUH_API_HOST, WAZUH_API_PORT).
  3. 构建:
    # Build with default features (stdio transport only)
    cargo build
    
    # Build with HTTP transport support
    cargo build --features http
    
  4. 运行:
    # Run with stdio transport (default)
    cargo run
    
    # Run with HTTP transport (requires --features http during build)
    cargo run --features http -- --transport http
    
    # Or use the run script (which might set up stdio mode):
    # ./run.sh
    

运输方式

Wazuh MCP服务器支持与MCP客户端通信的两种传输模式:

stdio传输(默认)

stdio传输是默认模式,非常适合MCP客户端作为子进程启动服务器的本地集成。通信通过stdin/stdout使用JSON-RPC 2.0消息进行。

# Run with stdio transport (default)
mcp-server-wazuh

# Explicit stdio transport
mcp-server-wazuh --transport stdio

可流式HTTP传输

HTTP传输支持远程服务器部署,允许MCP客户端通过网络连接。此模式实现了具有服务器发送事件(SSE)支持的MCP流式HTTP规范。

# Run with HTTP transport on default address (127.0.0.1:8080)
mcp-server-wazuh --transport http

# Run with custom host and port
mcp-server-wazuh --transport http --host 0.0.0.0 --port 3000

HTTP传输特性:

  • 单 /mcp 所有MCP通信的端点
  • 带有JSON-RPC消息的POST请求
  • 流式响应的服务器发送事件(SSE)
  • 会话管理 MCP-Session-Id 头球
  • 协议版本: 2025-06-18 (rmcp 0.10支持MCP规范)

安全说明: 默认情况下,HTTP传输绑定到 127.0.0.1 (仅限本地主机)。绑定到时 0.0.0.0 对于远程访问,确保采取了适当的网络安全措施(防火墙规则、带TLS的反向代理等)。

CLI参数

参数 描述 默认值
--transport 运输方式: stdio 或 http stdio
--host HTTP服务器绑定地址(仅用于HTTP传输) 127.0.0.1
--port HTTP服务器端口(仅用于HTTP传输) 8080

建筑

服务器是使用 rmcp 框架(v0.10+),并促进MCP客户端(如Claude Desktop、IDE扩展)和Wazuh MCP服务器之间的通信。该服务器支持stdio和Streamable HTTP传输,并与Wazuh Indexer和Wazuh Manager API交互以获取安全警报和其他数据。

sequenceDiagram
    participant ClientApp as Client Application (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: Process internally
    WazuhMCPServer-->>-ClientApp: (stdout) MCP Response (available tools)
    
    ClientApp->>+WazuhMCPServer: (stdio) MCP Request (tools/call for wazuhAlerts)
    WazuhMCPServer->>WazuhMCPServer: Parse MCP Request
    WazuhMCPServer->>+WazuhAPI: Request Wazuh Alerts (with WAZUH_API_USERNAME, WAZUH_API_PASSWORD)
    WazuhAPI-->>-WazuhMCPServer: Wazuh Alert Data (JSON)
    WazuhMCPServer->>WazuhMCPServer: Transform Wazuh Alerts to MCP Format
    WazuhMCPServer-->>-ClientApp: (stdout) MCP Response (alerts)

数据流(stdio焦点):

  1. 应用程序(例如IDE扩展、CLI工具)将Wazuh MCP Server作为子进程启动。
  2. 应用程序向服务器发送MCP格式的请求(命令) stdin.
  3. Wazuh MCP服务器从以下位置读取命令 stdin.
  4. 处理:
    • 服务器解析MCP命令。
    • 如果命令需要从Wazuh获取数据(例如,“获取最新警报”):
      • 服务器连接到Wazuh API(必要时使用配置的凭据进行身份验证,如 WAZUH_API_USERNAME, WAZUH_API_PASSWORD).
      • 它获取所需的数据(例如安全警报)。
      • 服务器的转换逻辑处理每个警报,将Wazuh字段映射到MCP格式。
    • 如果命令是内部的(例如,特定于MCP服务器的状态检查),它将直接处理它。
  5. 服务器通过其应用程序向应用程序发送MCP格式的JSON响应(例如,转换后的警报、命令确认或错误消息) stdout.
  6. 应用程序读取并处理来自服务器的MCP响应 stdout.

这种stdio交互允许与本地开发工具或其他可以管理子进程的应用程序紧密集成。可选的HTTP端点(/mcp)也可能适用于喜欢轮询的客户端。

服务器通过以下方式进行通信 stdin 和 stdout 使用JSON-RPC 2.0消息,遵守模型上下文协议(MCP)。

交互流程示例:

  1. 客户端应用程序(例如IDE扩展)启动 mcp-server-wazuh 过程。

  2. 客户端发送 initialize 请求服务器 stdin:

    {
      "jsonrpc": "2.0",
      "id": 0,
      "method": "initialize",
      "params": {
        "protocolVersion": "2025-06-18",
        "capabilities": {
          "sampling": {},
          "roots": { "listChanged": true }
        },
        "clientInfo": {
          "name": "mcp-inspector",
          "version": "0.11.0"
        }
      }
    }
    
  3. 服务器发送 initialize 通过以下方式回复客户 stdout:

    {
      "jsonrpc": "2.0",
      "id": 1,
      "result": {
        "protocolVersion": "2025-06-18",
        "capabilities": {
          "prompts": {},
          "resources": {},
          "tools": {}
        },
        "serverInfo": {
          "name": "mcp-server-wazuh",
          "version": "0.3.0"
        },
        "instructions": "This server provides tools to interact with a Wazuh SIEM instance for security monitoring and analysis.\nAvailable tools:\n- 'get_wazuh_alert_summary': Retrieves a summary of Wazuh security alerts. Optionally takes 'limit' parameter to control the number of alerts returned (defaults to 100)."
      }
    }
    
  4. 客户端发送 notifications/initialized 到服务器 stdin: (这是一个通知,所以 id 被客户端省略。)

    {
      "jsonrpc": "2.0",
      "method": "notifications/initialized"
    }
    
  5. 客户端通过发送请求可用工具 tools/list 到服务器 stdin:

    {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "tools/list",
      "params": {}
    }
    
  6. 服务器通过以下方式向客户端返回工具列表 stdout:

    {
      "jsonrpc": "2.0",
      "id": 2,
      "result": {
        "tools": [
          {
            "name": "get_wazuh_alert_summary",
            "description": "Retrieves a summary of Wazuh security alerts. Returns formatted alert information including ID, timestamp, and description.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "properties": {
                "limit": {
                  "description": "Maximum number of alerts to retrieve (default: 100)",
                  "format": "uint32",
                  "minimum": 0.0,
                  "type": ["integer", "null"]
                }
              },
              "title": "GetAlertSummaryParams",
              "type": "object"
            }
          }
        ]
      }
    }
    
  7. 客户致电 get_wazuh_alert_summary 通过发送工具 tools/call 到服务器 stdin:

    {
      "jsonrpc": "2.0",
      "id": 3,
      "method": "tools/call",
      "params": {
        "name": "get_wazuh_alert_summary",
        "arguments": {
          "limit": 5
        }
      }
    }
    
  8. 服务器接收 stdin,处理 get_wazuh_alert_summary 调用(包括查询Wazuh Indexer API并转换数据)。

  9. 服务器发送 tools/call 通过向客户端发送格式化警报进行响应 stdout:

    {
      "jsonrpc": "2.0",
      "id": 3,
      "result": {
        "content": [
          {
            "type": "text",
            "text": "Alert ID: 1747091815.1212763\nTime: 2024-01-15T10:30:45.123Z\nAgent: web-server-01\nLevel: 7\nDescription: Attached USB Storage"
          },
          {
            "type": "text", 
            "text": "Alert ID: 1747066333.1207112\nTime: 2024-01-15T10:25:12.456Z\nAgent: database-server\nLevel: 5\nDescription: New dpkg (Debian Package) installed."
          }
        ],
        "isError": false
      }
    }
    

    或者,如果没有发现警报:

    {
      "jsonrpc": "2.0",
      "id": 3,
      "result": {
        "content": [
          {
            "type": "text",
            "text": "No Wazuh alerts found."
          }
        ],
        "isError": false
      }
    }
    

    或者,如果连接到Wazuh时出错:

    {
      "jsonrpc": "2.0",
      "id": 3,
      "result": {
        "content": [
          {
            "type": "text",
            "text": "Error retrieving alerts from Wazuh: HTTP request error: connection refused"
          }
        ],
        "isError": true
      }
    }
    

开发与测试

  • 代码样式: 使用标准Rust格式(cargo fmt).
  • Linting: 使用Clippy(cargo clippy).
  • 测试: 包含转换逻辑和集成测试的单元测试。对于stdio,测试可能涉及将输入/输出管道连接到测试线束。对于HTTP,测试使用模拟Wazuh API服务器(httpmock)以及测试MCP客户端。
    # Run all tests
    cargo test
    
    # Run specific integration test (example for HTTP tests)
    # cargo test --test integration_test
    
    # Run tests with detailed logging
    RUST_LOG=debug cargo test
    
  • 看 tests/README.md 有关运行测试和使用测试客户端CLI的更多详细信息。

许可证

该项目根据 MIT许可证.