Sbharadwaj05/sb-siem-mcp

GitHub: Sbharadwaj05/sb-siem-mcp

连接 LLM 与 Wazuh SIEM 的 MCP 服务器,提供 28 个安全工具支持自然语言威胁狩猎、合规审计与事件响应。

Stars: 13 | Forks: 1

# 🔐 SB SIEM MCP **28 个 MCP 工具。9 个领域。已在 Wazuh 4.14.5 实时实例上测试。为 Wazuh SIEM/XDR 提供 AI 驱动的安全运营。**

CI Security Scan 28/28 tools Python License: MIT

只需一个提示词。您的 AI 助手就能查询 7,514 条告警,检查 5,038 条 FIM 记录,扫描 12 个 CVE,交叉比对 750 个 MITRE 技术,审计 CIS 合规性,并触发事件响应 —— 所有这些都通过您的 Wazuh 基础设施完成。 ## 工作原理(30 秒) 您已经在某处运行了 Wazuh。MCP 服务器是一个**本地进程**,由您的 AI 客户端作为子进程启动 —— 就像语言服务器或 linter 一样。 ``` Your Machine Your Wazuh Server ┌────────────────────┐ ┌──────────────────┐ │ Zed / Claude │ │ │ │ │ │ │ Wazuh API │ │ ▼ │ │ :55000 │ │ python -m │───────HTTPS──────▶│ │ │ wazuh_mcp.server │ │ Wazuh Indexer │ │ (child process) │───────HTTPS──────▶│ :9200 │ └────────────────────┘ └──────────────────┘ ``` **无需 Docker。无需容器。无需安装代理。** 只需将其指向您现有的 Wazuh,即可开始用自然语言提问。 ## 🛡️ 安全特性(纵深防御) - [x] **输入验证** — 阻止 Shell 元字符,对 agent ID、IP、CVE、MITRE ID 使用正则表达式 - [x] **速率限制** — 令牌桶算法:读操作工具 30次/60秒,破坏性操作工具 5次/120秒 - [x] **输出清理** — 从绑定至 LLM 的数据中脱敏 AWS 密钥、JWT token、SSH 密钥、API 密钥、密码 - [x] **审计日志** — 为所有破坏性操作记录仅追加的 JSONL 审计轨迹 - [x] **确认门控** — 针对主动响应工具的两步 `confirm=True` + 过期 token 机制 - [x] **RBAC** — 4 个内置角色:`viewer`、`analyst`、`admin`、`soc`,具有层级访问权限 - [x] **Dependabot + pip-audit + CodeQL** — 每次 push 时进行自动依赖扫描 + 每周定期扫描 - [x] **非 root Docker** — 生产环境容器以非特权用户 `wazuhmcp` 运行 - [x] **TLS 支持** — 验证服务器证书,或在本地开发中通过 `WAZUH_INSECURE` 禁用 - [x] **Prometheus 指标** — 在 `:9090/metrics` 暴露 7 个指标用于 SOC 监控(延迟、错误、速率限制) - [x] **OpenAPI 3.0 / Swagger UI** — 在 `/docs` 提供交互式 API 文档,原始规范位于 `/openapi.json` ## 📊 架构 ``` ┌──────────────────────────┐ ┌──────────────────────────┐ │ Your AI Client │ │ Wazuh Infrastructure │ │ (Zed / Claude / Cursor) │ │ │ │ │ │ │ Wazuh API :55000 │ │ ▼ │ │ ├─ Agents, Groups │ │ ┌──────────────────┐ │ │ ├─ SCA, FIM, MITRE │ │ │ MCP Server │────HTTPS────▶│ ├─ Manager, Cluster │ │ │ 28 tools │ │ │ └─ Active Response │ │ │ │ │ │ │ │ │ WazuhClient ────┼────HTTPS────▶│ Wazuh Indexer :9200 │ │ │ IndexerClient ───┤ │ │ ├─ Alerts (7,514+) │ │ │ RateLimiter │ │ │ ├─ Vulnerabilities │ │ │ Sanitizer │ │ │ └─ Events, Rules │ │ │ RBACEnforcer │ │ │ │ │ └──────────────────┘ │ └──────────────────────────┘ │ │ │ │ :9090/metrics │ │ :8000/docs │ └──────────────────────────┘ ``` MCP 服务器与 Wazuh REST API(端口 55000,用于管理)**以及** Wazuh Indexer(端口 9200,用于告警/漏洞)进行通信。在 Wazuh 4.x/5.x 中,告警和漏洞仅在 indexer 中提供 —— 无法通过 REST API 访问。服务器的 `IndexerClient` 会透明地处理此问题。 ## 📊 功能介绍 | 工作流 | 示例提示词 | 使用的工具 | |----------|---------------|------------| | **告警分类** | *"按严重程度和 MITRE 技术总结今天的告警"* | `list_alerts`, `alert_summary`, `get_alert` | | **威胁狩猎** | *"在所有事件和 FIM 记录中搜索 IOC 10.0.0.50"* | `search_events`, `query_fim`, `search_mitre` | | **合规审计** | *"显示所有未通过 CIS 基准检查的 agent"* | `sca_status`, `sca_checks`, `compliance_report` | | **规则覆盖** | *"我的 NIST 800-53 检测覆盖率是多少?"* | `rules_coverage_map`, `rules_info` | | **漏洞管理** | *"哪些系统存在未修补的关键 CVE?"* | `query_vulnerabilities`, `vulnerability_heatmap` | | **事件时间线** | *"重建告警 #45821 前后发生的事情"* | `incident_timeline`, `search_events`, `query_fim` | | **资产管理** | *"列出已断开连接的 agent 及其所属组"* | `list_agents`, `get_agent`, `agent_health`, `list_groups` | | **威胁情报** | *"显示 CDB 黑名单以及 T1059 的 MITRE 技术"* | `list_cdb_lists`, `get_cdb_list`, `search_mitre` | | **事件响应** ⚠️ | *"在所有 Web 服务器上封禁 IP 203.0.113.55"* | `run_active_response` (需确认) | ## 📦 安装说明 ### pip(来自 PyPI —— 即将推出) ``` pip install sb-siem-mcp ``` ### 从源码安装 ``` git clone https://github.com/Sbharadwaj05/sb-siem-mcp.git cd sb-siem-mcp pip install -e ".[dev]" ``` ### Docker(一键演示 —— 启动 Wazuh + MCP 用于测试) ``` git clone https://github.com/Sbharadwaj05/sb-siem-mcp.git cd sb-siem-mcp docker compose up -d # Wazuh Dashboard: https://localhost:443 # Swagger UI: http://localhost:8000/docs # Prometheus Metrics: http://localhost:9090/metrics ``` ### 配置 创建一个 `.env` 文件: ``` # 必需 WAZUH_API_URL=https://your-wazuh-manager:55000 WAZUH_USERNAME=wazuh-wui WAZUH_PASSWORD=your-api-password # 警报、漏洞、规则所需(Wazuh 4.x/5.x) WAZUH_INDEXER_URL=https://your-wazuh-manager:9200 WAZUH_INDEXER_USER=admin WAZUH_INDEXER_PASS=your-indexer-password # 可选 WAZUH_INSECURE=true # Skip TLS verification (dev only) WAZUH_RBAC_ROLE=analyst # Restrict tools by role WAZUH_RATE_LIMIT_TOKENS=30 # Rate limit burst WAZUH_RATE_LIMIT_PERIOD=60 # Rate limit window ``` ### Claude Desktop / Zed / Cursor ``` { "mcpServers": { "wazuh": { "command": "python", "args": ["-m", "wazuh_mcp.server"], "cwd": "/path/to/sb-siem-mcp/src", "env": { "WAZUH_API_URL": "https://192.168.56.102:55000", "WAZUH_USERNAME": "wazuh-wui", "WAZUH_PASSWORD": "your-api-password", "WAZUH_INSECURE": "true", "WAZUH_INDEXER_PASS": "your-indexer-password" } } } } ``` ## 🔧 完整工具参考(28 个工具,9 个领域) ### 🔔 告警与分类 (3) | 工具 | 描述 | 数据源 | |------|-------------|-------------| | `wazuh_list_alerts` | 按严重程度、agent、规则 ID、MITRE、搜索查询告警 | Wazuh Indexer | | `wazuh_get_alert` | 通过 ID 获取单个告警及其完整上下文 | Wazuh Indexer | | `wazuh_alert_summary` | 聚合:严重程度分布、热门规则/IP、MITRE 覆盖率 | Wazuh Indexer | ### 🔍 威胁狩猎 (4) | 工具 | 描述 | 数据源 | |------|-------------|-------------| | `wazuh_search_events` | 提交原始事件供 Wazuh 解析/分析 | Wazuh API | | `wazuh_query_fim` | 文件完整性监控 —— 文件更改、添加、删除 | Wazuh API | | `wazuh_query_vulnerabilities` | 每个 agent 的 CVE 清单,可按严重程度过滤 | Wazuh Indexer | | `wazuh_search_mitre` | MITRE ATT&CK 技术、战术、缓解措施、组织 | Wazuh API | ### 📋 合规性 (3) | 工具 | 描述 | 数据源 | |------|-------------|-------------| | `wazuh_sca_status` | 每个 agent 的 SCA 策略评分(CIS、PCI DSS、NIST、GDPR) | Wazuh API | | `wazuh_sca_checks` | 每项检查的通过/失败详情,包含理由和补救措施 | Wazuh API | | `wazuh_compliance_report` | 跨所有 agent 的资产级合规性聚合 | Wazuh API | ### 🖥️ Agent 与组 (6) | 工具 | 描述 | 数据源 | |------|-------------|-------------| | `wazuh_list_agents` | 列出 agent 的状态、OS、版本、搜索、分页信息 | Wazuh API | | `wazuh_get_agent` | 深入了解单个 agent:配置、模块、组 | Wazuh API | | `wazuh_agent_health` | 资产健康度:状态计数、OS 分布、僵尸 agent | Wazuh API | | `wazuh_list_groups` | 列出 agent 组及其数量和校验和 | Wazuh API | | `wazuh_get_group` | 组详情、配置、成员数量 | Wazuh API | | `wazuh_group_agents` | 特定组中的所有 agent | Wazuh API | ### 📚 CDB 列表 (2) | 工具 | 描述 | 数据源 | |------|-------------|-------------| | `wazuh_list_cdb_lists` | 列出 CDB 威胁情报文件(IP 黑名单、IOC 数据库) | Wazuh API | | `wazuh_get_cdb_list` | 读取 CDB 列表文件的内容 | Wazuh API | ### ⚙️ 管理器与集群 (5) | 工具 | 描述 | 数据源 | |------|-------------|-------------| | `wazuh_manager_stats` | 守护进程统计信息(EPS、队列、已处理事件) | Wazuh API | | `wazuh_manager_logs` | 获取管理器日志,支持按类别和搜索过滤 | Wazuh API | | `wazuh_cluster_status` | 集群健康度:启用/运行状态 | Wazuh API | | `wazuh_cluster_node_stats` | 每个节点的守护进程统计信息(单节点下回退至管理器统计信息) | Wazuh API | | `wazuh_rules_info` | 按框架/MITRE 搜索规则(在 4.14.x 版本 bug 下回退至 indexer) | Wazuh API / Indexer | ### 📊 安全分析 (3) | 工具 | 描述 | 数据源 | |------|-------------|-------------| | `wazuh_rules_coverage_map` | 对照您的规则生成 MITRE/NIST/PCI/GDPR/HIPAA 覆盖率矩阵 | Wazuh Indexer | | `wazuh_vulnerability_heatmap` | 跨所有 agent 的风险评分 CVE 热力图 | Wazuh Indexer | | `wazuh_incident_timeline` | 从单条告警自动生成按时间顺序排列的攻击时间线 | Wazuh Indexer | ### ⚠️ 事件响应 (2) | 工具 | 描述 | 数据源 | |------|-------------|-------------| | `wazuh_run_active_response` | 触发 firewall-drop、host-deny、restart-wazuh(带有确认门控) | Wazuh API | | `wazuh_agent_command` | 在远程 agent 上执行命令(带有确认门控) | Wazuh API | ## 🖥️ 可观测性 ### Prometheus 指标 (`:9090/metrics`) | 指标 | 类型 | 描述 | |--------|------|-------------| | `wazuh_mcp_tool_calls_total` | Counter | 按名称 + 状态(成功/错误)统计的工具调用 | | `wazuh_mcp_tool_duration_seconds` | Histogram | 每个工具的 P50/P95/P99 延迟 | | `wazuh_mcp_rate_limits_total` | Counter | 每个工具的速率限制拒绝次数 | | `wazuh_mcp_api_up` | Gauge | Wazuh API 连通性(1=正常,0=宕机) | | `wazuh_mcp_audit_entries_total` | Counter | 记录的破坏性操作 | | `wazuh_mcp_active_requests` | Gauge | 正在处理中的工具调用 | | `wazuh_mcp_tool_errors_total` | Counter | 按工具 + 错误类型统计的错误数 | ### OpenAPI / Swagger (`:8000/docs`) 为所有 28 个工具提供交互式 API 文档。原始 OpenAPI 3.0 规范位于 `/openapi.json`。 ### 审计日志 (`~/.wazuh-mcp/audit.jsonl`) 仅追加的 JSON Lines。每次破坏性操作对应一条记录。永不截断。线程安全。 ## 🔐 RBAC 四个具有层级递增访问权限的内置角色: | 角色 | 权限 | 工具 | |------|--------|-------| | `viewer` | 只读 | 告警、agent、合规性、规则 | | `analyst` | + 调查 | 所有 viewer 权限 + 狩猎、MITRE、CDB 列表、分析 | | `admin` | + 管理 | 所有 analyst 权限 + 管理器统计、日志、集群 | | `soc` | + 响应 ⚠️ | 所有 admin 权限 + 主动响应、agent 命令 | ``` export WAZUH_RBAC_ROLE=analyst # 或自定义 policy: WAZUH_RBAC_POLICY=/path/to/rbac.json ``` ## 📁 项目结构 ``` sb-siem-mcp/ ├── src/wazuh_mcp/ │ ├── server.py # FastMCP entry point (stdio + SSE transport) │ ├── client.py # Wazuh REST API client (JWT, Basic Auth, fallback) │ ├── indexer.py # Wazuh Indexer / OpenSearch client (alerts, vulns) │ ├── rbac.py # Role-Based Access Control (4 roles, custom policies) │ ├── audit.py # Immutable audit logging (JSONL, append-only) │ ├── sanitizer.py # Output sanitization (credential redaction) │ ├── rate_limiter.py # Token-bucket per-tool rate limiting │ ├── validators.py # Input validation (regex, shell metacharacter blocking) │ ├── metrics.py # Prometheus metrics exporter (7 metrics) │ ├── openapi.py # OpenAPI 3.0 spec + Swagger UI generator │ ├── output.py # Token-efficient field selection (5 modes) │ ├── utils.py # JSON formatters, pagination helpers │ └── tools/ # 9 tool modules, 28 MCP tools │ ├── alerts.py # 3 tools: list, get, summary │ ├── hunting.py # 4 tools: events, fim, vulns, mitre │ ├── compliance.py # 3 tools: sca status, checks, report │ ├── agents.py # 3 tools: list, get, health │ ├── groups.py # 3 tools: list, get, group agents │ ├── lists.py # 2 tools: list cdb, get cdb │ ├── manager.py # 5 tools: stats, logs, cluster, node, rules │ ├── analysis.py # 3 tools: coverage, heatmap, timeline │ └── response.py # 2 tools: active response, agent command (safety-gated) ├── tests/ # pytest-asyncio test suite (12 tests, all passing) ├── docs/ # SECURITY, DEVELOPMENT, ADVANCED_FEATURES, TROUBLESHOOTING ├── scripts/setup.sh # One-command Wazuh + MCP dev environment ├── docker-compose.yml # Wazuh 4.9 + MCP server + Prometheus ├── Dockerfile # Multi-stage production build (non-root) ├── openapi.json # Generated OpenAPI 3.0 specification (24 paths) ├── .github/workflows/ # CI (test matrix), Release, Security Scan ├── CHANGELOG.md └── README.md ``` ## 🚀 快速开始 ``` # 1. Clone git clone https://github.com/Sbharadwaj05/sb-siem-mcp.git cd sb-siem-mcp # 2. Configure cp .env.example .env # 使用你的 Wazuh API + Indexer credentials 编辑 .env # 3. Install pip install -e ".[dev]" # 4. 验证连通性 python -c " from wazuh_mcp.client import WazuhClient import asyncio async def t(): c = WazuhClient(insecure=True) print('Agents:', (await c.list_agents(limit=1)).get('total_affected_items','?')) print('Alerts:', (await c.list_alerts(limit=1)).get('total_affected_items','?')) await c.close() asyncio.run(t()) " # 5. 连接到 AI client # 将 claude_desktop_config.json.example 复制到你的 MCP config 中 ``` ## 🔒 生产环境加固 本项目出厂带有安全的默认设置,但为了方便本地测试,docker-compose 演示堆栈禁用了一些安全功能。**不要在生产环境中使用演示配置**,除非进行了以下更改: ### 1. 在各处启用 TLS - 设置 `WAZUH_INSECURE=false` —— 现在 docker-compose 默认设置为 `false`。 - 重新启用 Wazuh Indexer 安全插件 —— 从 `wazuh.indexer` 服务中移除 `DISABLE_SECURITY_PLUGIN=true` 和 `plugins.security.disabled=true`。取而代之的是,生成正确的证书。 - 在 Wazuh Manager 上设置 `FILEBEAT_SSL_VERIFICATION_MODE=full`。 ### 2. 限制 MCP Endpoint MCP 服务器端口 8000 上暴露了一个 HTTP endpoint。**此 endpoint 没有内置的客户端身份验证。** 在生产环境中: - 如果 AI 客户端在同一主机上运行,请绑定到 `127.0.0.1`,或者 - 将 MCP 服务器置于具有双向 TLS / API 密钥身份验证的反向代理之后,或者 - 使用网络级控制(防火墙规则、安全组)来限制访问。 ### 3. 保护 Wazuh Indexer Indexer(端口 9200)必须能从 MCP 服务器进行网络访问。 - 使用 TLS 和证书验证(`WAZUH_INSECURE=false`)。 - 将 Indexer 凭据存储在密钥管理器中(Docker secrets、Kubernetes secrets、HashiCorp Vault) —— 在生产环境中绝对不要以明文形式存放在 `.env` 文件中。 - 考虑在网络/防火墙层进行 IP 白名单过滤。 ### 4. 加固审计日志 - 默认的审计日志位置是 `~/.wazuh-mcp/audit.jsonl`。在生产环境中,请设置 `WAZUH_AUDIT_LOG=/var/log/wazuh-mcp/audit.jsonl`(或主目录之外的另一个持久化卷)。 - 为了实现真正的不可变性,请将审计日志发送到外部 SIEM 或使用一次写入多次读取(WORM)文件系统。 ### 5. RBAC:启用它 RBAC 默认是禁用的(`WAZUH_RBAC_ROLE` 未设置 → 所有工具均可用)。在生产环境中,请设置 `WAZUH_RBAC_ROLE=analyst`(或更严格的角色),并在您的 AI 客户端中配置相应的工具权限。 ### 6. 版本兼容性 本服务器主要针对 Wazuh 4.x(已在 4.14.5 上测试)。Wazuh 5.x 用新的存储后端取代了 Indexer —— 本服务器需要进行更新才能与 5.x 兼容。部署前请检查您的 Wazuh 版本。 ## 🔒 安全策略 请参阅 [docs/SECURITY.md](docs/SECURITY.md) 获取完整的纵深防御文档(6 层)、生产环境部署清单以及漏洞报告流程。 ## 🛠️ 故障排除 请参阅 [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) 获取以下问题的解决方案: - Wazuh dashboard 版本不匹配 - `/alerts` 返回 404(indexer 设置) - `/rules` 返回 500(Wazuh 4.14.x bug + indexer 回退) - Indexer 401 身份验证 - Filebeat 连接问题 - MCP 服务器连通性 - 速率限制和确认门控行为 - 完整的网络架构图 ## 📄 许可证 MIT © [Sbharadwaj05](https://github.com/Sbharadwaj05) 需要自定义检测规则、SIEM 调优或构建 MCP 服务器?请访问 Topmate:https://topmate.io/subhash_bharadwaj 或私信获取 Fiverr 交易链接。
标签:DLL 劫持, MCP服务, PB级数据处理, Wazuh, 动态调试, 大语言模型, 安全运维, 安全运营, 扫描框架, 自定义请求头, 请求拦截, 逆向工具