abdillahisaidismail-arch/homelab-soc-n8n

GitHub: abdillahisaidismail-arch/homelab-soc-n8n

一个基于 Wazuh 和 n8n 的自动化安全运营中心(SOC)实验室方案,用于模拟企业级威胁检测、告警富化与自动化事件响应流程。

Stars: 0 | Forks: 0

# 🛡️ Homelab SOC — 自动化威胁检测与事件响应 [![Python](https://img.shields.io/badge/Python-3.11-blue?logo=python)](https://python.org) [![n8n](https://img.shields.io/badge/SOAR-n8n-orange?logo=n8n)](https://n8n.io) [![Wazuh](https://img.shields.io/badge/SIEM-Wazuh_4.x-red)](https://wazuh.com) [![MITRE ATT&CK](https://img.shields.io/badge/MITRE-ATT%26CK-black)](https://attack.mitre.org) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![Maintained](https://img.shields.io/badge/Maintained-Yes-brightgreen)](https://github.com) ## 🎯 目标 此 homelab 模拟了一个基于开源工具构建的生产级安全运营中心 (SOC) 环境。它使用 **Wazuh** 作为 SIEM 进行实时日志采集和威胁检测,并使用 **n8n** 作为 SOAR 平台,用于自动告警丰富、MITRE ATT&CK 映射和事件路由。其目标是展示与真实企业 SOC 工作流相一致的端到端检测与响应能力 —— 从原始日志到升级工单 —— 在一个可复现的本地虚拟实验室中。 ## 🏗️ 架构 ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ HOMELAB SOC PIPELINE │ │ │ │ ┌──────────┐ ┌───────────────────┐ ┌──────────────────────────┐ │ │ │ Sources │ │ Wazuh SIEM │ │ n8n SOAR Engine │ │ │ │ │ │ │ │ │ │ │ │ Linux VM ├───►│ ossec-agent │ │ ┌────────────────────┐ │ │ │ │ SSH logs │ │ Log ingestion │ │ │ alert-enrichment │ │ │ │ │ Syslog │ │ Decoder engine ├───►│ │ (AbuseIPDB/VT API) │ │ │ │ │ Auditd │ │ Custom rules │ │ └────────┬───────────┘ │ │ │ │ Scripts │ │ Alert generation │ │ │ │ │ │ └──────────┘ │ │ │ ┌────────▼───────────┐ │ │ │ │ Webhook ──────────┼───►│ │ incident-routing │ │ │ │ └───────────────────┘ │ │ P1/P2/P3 triage │ │ │ │ │ └────────┬───────────┘ │ │ │ │ │ │ │ │ │ ┌────────▼───────────┐ │ │ │ │ │ mitre-mapping │ │ │ │ │ │ ATT&CK enrichment │ │ │ │ │ └────────────────────┘ │ │ │ └──────────┬───────────────┘ │ │ │ │ │ ┌─────────────────────────────────────────┤ │ │ │ Outputs │ │ │ ▼ ▼ ▼ ▼ │ │ Slack #soc Slack #soc GLPI Log file │ │ -critical -alerts Ticket (P3) │ │ + Email RSSI (P2) (P3) │ │ (P1) │ └─────────────────────────────────────────────────────────────────────────┘ ``` **数据流:** 1. 安全事件由代理或测试脚本生成 2. Wazuh 采集、解码日志,并根据自定义检测规则对其进行评估 3. 规则匹配触发通过 Wazuh active-response 或集成模块发往 n8n 的 webhook 4. n8n 丰富告警 (GeoIP, AbuseIPDB 评分, MITRE 映射) 5. 根据严重性路由告警:critical 渠道 → SOC 邮箱 → 工单系统 → 日志 ## ⚙️ n8n 工作流 ### 1. `alert-enrichment.json` **触发器:** Wazuh webhook (HTTP POST) **逻辑:** - 解析传入的 JSON: `rule.id`, `rule.level`, `data.srcip`, `full_log` - 查询 **AbuseIPDB** REST API 以获取 IP 信誉评分和国家 - 如果 AbuseIPDB 未返回数据,则回退到 **VirusTotal** - 从 `mitre-mapping.json` 字典中注入 MITRE ATT&CK 技术 - 生成一个标准化的告警对象,传递给路由工作流 ### 2. `incident-routing.json` **触发器:** 来自工作流 #1 的已丰富告警 **逻辑:** - **P1** (level ≥ 12): 发送消息至 Slack `#soc-critical` + 向 RSSI 值班人员发送邮件 —— 包含 IP、规则、MITRE ID、AbuseIPDB 评分 - **P2** (level 8–11): 发送摘要卡片至 Slack `#soc-alerts` - **P3** (level < 8): 通过 REST API 创建 GLPI 工单或追加到本地日志文件 - 一个 **Wait 节点** (30 分钟) 将未被确认的 P1 升级为 P0 并重新通知 ### 3. `mitre-mapping.json` **类型:** 静态丰富字典 **结构:** 映射 Wazuh `rule.id` → MITRE 技术 ID + 战术 + 严重性评分 + 推荐响应动作 **使用者:** `alert-enrichment.json` 用于内联 MITRE 标记 ## 🔍 Wazuh 检测规则 | # | 场景 | Wazuh Rule ID | 级别 | MITRE | |---|----------|--------------|-------|-------| | 1 | SSH 暴力破解 (>5 次失败 / 60秒) | 100100 | 10 | T1110 | | 2 | 多次失败后成功登录 | 100101 | 12 | T1078 | | 3 | 在维护窗口之外创建管理员账户 | 100102 | 11 | T1136 | | 4 | 访问 `/etc/shadow` 或 `/etc/passwd` | 100103 | 12 | T1003 | | 5 | 可疑命令执行 (wget/curl → 外部 IP) | 100104 | 10 | T1059 | | 6 | 异常 sudo 权限提升 | 100105 | 11 | T1548 | | 7 | 来自白名单以外国家的登录 (GeoIP) | 100106 | 9 | T1133 | | 8 | 异常出站数据量 (潜在数据渗出) | 100107 | 13 | T1048 | ## 🗺️ MITRE ATT&CK 覆盖 | 技术 ID | 名称 | 战术 | 检测 | |---|---|---|---| | T1110 | Brute Force | Credential Access | SSH 失败阈值规则 | | T1078 | Valid Accounts | Defense Evasion | 失败后登录规则 | | T1136 | Create Account | Persistence | 管理员创建规则 | | T1003 | OS Credential Dumping | Credential Access | `/etc/shadow` 访问规则 | | T1059 | Command & Scripting Interpreter | Execution | wget/curl 外部规则 | | T1548 | Abuse Elevation Control Mechanism | Privilege Escalation | sudo 异常规则 | | T1133 | External Remote Services | Initial Access | GeoIP 异常规则 | | T1048 | Exfiltration Over Alternative Protocol | Exfiltration | 流量阈值规则 | 包含工作流映射的完整覆盖表:[`docs/mitre-coverage.md`](docs/mitre-coverage.md) ## 🚀 复现实验室 ### 前置条件 - 安装了 Debian 12 VM 的 VirtualBox / VMware (2 vCPU, 4 GB RAM 最低配置) - Docker 或直接安装 n8n - Python 3.11+ ### 步骤 1 — 部署 Wazuh ``` # Wazuh single-node (Docker) curl -sO https://packages.wazuh.com/4.7/wazuh-install.sh sudo bash wazuh-install.sh -a ``` ### 步骤 2 — 导入自定义规则 ``` sudo cp wazuh/custom-rules.xml /var/ossec/etc/rules/local_rules.xml sudo systemctl restart wazuh-manager ``` ### 步骤 3 — 部署 n8n ``` docker run -d --name n8n \ -p 5678:5678 \ -e N8N_BASIC_AUTH_ACTIVE=true \ -v ~/.n8n:/home/node/.n8n \ n8nio/n8n ``` ### 步骤 4 — 导入工作流 打开 `http://localhost:5678` → Settings → Import from file → 从 `n8n/workflows/` 中选择每个 JSON 文件 ### 步骤 5 — 配置 Wazuh webhook 集成 在 `/var/ossec/etc/ossec.conf` 中添加: ``` custom-n8n http://localhost:5678/webhook/wazuh-alert 7 json ``` ### 步骤 6 — 模拟攻击 ``` python3 scripts/log-generator.py --scenario brute_force --count 20 python3 scripts/threat-simulator.py # isolated lab only — read the warning ``` ## 👤 作者 **Master 1 RSSI — CyberSchool / ISTIC Rennes** (Alternance — September 2026) 认证: Fortinet NSE 1/2/3 · BTL1 (进行中) · ANSSI SecNumAcadémie [LinkedIn](https://www.linkedin.com/in/) · [GitHub](https://github.com/) *本项目是一个用于学习目的的个人 homelab。所有模拟均在隔离环境中进行。*
标签:Cloudflare, DevSecOps, Homelab, MITRE ATT&CK, n8n, Python, SOAR, Wazuh, 上游代理, 安全实验室, 安全运营中心, 无后门, 网络安全, 网络映射, 自动化威胁检测, 请求拦截, 逆向工具, 速率限制, 隐私保护