vishwashn12/AegisSOC

GitHub: vishwashn12/AegisSOC

一个集成 MISP、Wazuh 和 Shuffle SOAR 的自动化安全运营中心平台,实现了端到端的威胁检测、实时监控与自动事件响应。

Stars: 0 | Forks: 0

# AegisSOC — 自动化安全运营中心 ## 概述 本项目演示了一个完整的、端到端的自动化威胁检测与响应流水线: 1. **MISP** 在 4 个威胁事件活动中存储真实的 IoC(恶意 IP) 2. **Node.js 后端** 同步这些 IoC 并模拟实时网络流量 3. **Wazuh** 读取生成的日志并触发自定义检测规则 4. **Shuffle SOAR** 通过 webhook 自动执行封禁 IP 的响应 5. **React 仪表板** 实时可视化所有内容 ## 架构 ``` ┌──────────────────────────────────────────────────────────────┐ │ UBUNTU VM (192.168.56.105) │ │ │ │ MISP :8081 ──── 4 events, 12 IPs, correlation graph │ │ Wazuh :443 ──── 10 custom rules, CEF log ingestion │ │ Shuffle :3001 ──── SOAR workflow, ngrok webhook trigger │ └──────────────────────────┬───────────────────────────────────┘ │ agent ships logs ┌──────────────────────────▼───────────────────────────────────┐ │ WINDOWS HOST │ │ │ │ Node.js :5000 ── MISP sync · simulation · CEF logging │ │ React :5173 ── 3-column SOC dashboard │ │ Wazuh Agent ── monitors auth.log, network.log, app.log │ │ ngrok ── exposes /api/actions/block-ip to VM │ └──────────────────────────────────────────────────────────────┘ ``` ## 技术栈 | 层级 | 工具 | 用途 | |---|---|---| | 威胁情报 | **MISP** | 存储并关联跨攻击活动的恶意 IoC | | SIEM | **Wazuh 4.7.5** | 摄取日志,触发自定义规则,生成告警 | | SOAR | **Shuffle** | 通过工作流 webhook 自动化事件响应 | | 后端 | **Node.js + Express** | MISP 同步,模拟引擎,CEF 日志记录,黑名单管理 | | 前端 | **React + Vite** | 实时 3 列 SOC 仪表板 | | 隧道 | **ngrok** | 将 Windows 后端暴露给 Ubuntu 虚拟机以供 Shuffle webhook 使用 | | 基础设施 | **VirtualBox** (Ubuntu 20.04) | 运行 MISP、Wazuh、Shuffle Docker 容器的隔离虚拟机 | | 日志格式 | **CEF** (Common Event Format) | 行业标准的 SIEM 兼容告警格式 | ## 功能 ### 威胁情报 (MISP) - **4 个威胁事件**,模拟针对高频交易 (HFT) 公司的真实攻击活动 - **12 个唯一的恶意 IP**,包含描述、严重等级和 MISP 事件链接 - **跨事件 IP 关联** — 跨事件的 3 个共享 IP 揭示了 APT 基础设施重用 - 每 5 分钟自动从 MISP 同步到后端威胁情报库 ### 实时模拟引擎 - 以可配置的速率 (4.5秒/tick) 生成真实的 HFT 网络流量 - **60% 恶意流量** (MISP 追踪的 IP,轮询) / **40% 正常**随机流量 - 轮询循环确保在每个周期内都能看到所有 12 个 MISP IP ### 自动化事件响应 (SOAR) - 首次检测到恶意 IP 时**自动封禁** - 黑名单持久化到 `blocked_ips.txt` — 在后端重启后依然保留 - 已封禁 IP 的重复尝试单独记录 (`IP_Block_Repeated`) - **全部解封**恢复操作,用于干净状态的演示重置 - 通过 Shuffle → ngrok → `/api/actions/block-ip` 进行外部封禁触发 ### Wazuh 告警 (10 条自定义规则) | 规则 | 级别 | 触发条件 | |---|---|---| | 100001 | 5 | SSH 登录失败 | | 100002 | 10 | SSH 暴力破解 (60秒内失败5次以上) | | 100003 | 12 | 未经授权的算法修改 | | 100010 | 3 | 市场数据 API 请求 (基础规则) | | 100004 | 14 | HTTP 泛洪 / DoS (30秒内请求40次以上) | | 100021 | 15 | 原始网络流量中出现 MISP IP (srcip 匹配) | | 100030 | 12 | 检测到 MISP IOC (CEF 事件) | | 100031 | 15 | MISP 严重 IP — C2 / 勒索软件 | | 100032 | 13 | SOAR 自动封禁 — 新 IP 被封禁 | | 100033 | 10 | 已封禁 IP 重复连接尝试 | ### 仪表板 (React) - **左侧面板**:认证、交易、威胁情报、攻击模拟控制 - **中间**:实时事件控制台 + 事件日志表 - **右侧面板**:模拟引擎 (启动/停止,统计数据,实时 IP 流) + SOAR 响应 (已封禁 IP,恢复) ## 项目结构 ``` soc/ ├── backend/ │ ├── server.js Express server, ngrok, dotenv, MISP sync scheduler │ ├── .env MISP_URL + MISP_KEY (not committed to git) │ ├── routes/ │ │ ├── actions.js Simulation, block-IP, SOAR, MISP routes │ │ └── auth.js Login/logout event generation │ └── logs/ │ ├── auth.log SSH auth events → Wazuh rules 100001/100002 │ ├── network.log HTTP traffic → Wazuh rules 100010/100004/100021 │ ├── app.log CEF events → Wazuh rules 100030–100033 │ └── blocked_ips.txt Persistent blocklist (loaded on startup) │ ├── frontend/ │ └── src/ │ ├── App.jsx 3-column dashboard component │ └── index.css Full design system and layout styles │ ├── rules/ Wazuh configuration files │ ├── local_rules.xml All 10 custom Wazuh rules (with comments) │ ├── local_decoder.xml hft_app_decoder + hft_network_decoder │ └── sync_misp.sh MISP → Wazuh sync script (run on Ubuntu VM) │ ├── ngrok.exe Tunnel binary for Windows ├── playbook.md Full demo guide and troubleshooting reference └── README.md This file ``` ## 安装与运行 ### 前置条件 - 带有 Ubuntu 20.04 虚拟机的 **VirtualBox** (IP: `192.168.56.105`) - 虚拟机上运行带有 MISP、Wazuh (单节点)、Shuffle 的 **Docker** - 主机上安装了指向虚拟机的 **Wazuh Windows Agent** - Windows 主机上安装了 **Node.js 18+** 和 **npm** ### 环境配置 创建 `backend/.env`: ``` MISP_URL=http://192.168.56.105:8081 MISP_KEY= ``` 从以下位置获取您的 MISP API 密钥:`MISP UI → Administration → List Auth Keys` ### 启动后端 ``` cd backend npm install npm start ``` 等待: ``` [MISP] ✓ Synced 12 IPs from MISP (MISP-only mode) [ngrok] ✓ Public URL: https://xxxx.ngrok-free.dev ``` ### 启动前端 ``` cd frontend npm install npm run dev ``` 打开 `http://localhost:5173` — 使用任意用户名和密码登录。 ### 部署 Wazuh 规则 (在 Ubuntu 虚拟机上) ``` # 复制 sync script 到 VM scp rules/sync_misp.sh seed@192.168.56.105:~/sync_misp.sh # 在 VM 上运行以部署所有 rules 并重启 Wazuh ssh seed@192.168.56.105 "chmod +x ~/sync_misp.sh && bash ~/sync_misp.sh" ``` ## MISP 事件 | # | 活动 | 威胁等级 | IP 数 | |---|---|---|---| | 1 | 针对金融平台的恶意 IP | 高 | 3 | | 2 | 针对 HFT 公司的 SSH 暴力破解活动 | 高 | 3 | | 3 | 针对金融交易平台的高级持续性威胁 (APT) 侦察 | 高 | 3 | | 4 | 针对 HFT 基础设施的勒索软件 + DDoS 组合攻击 | 高 | 5 (包含 2 个共享) | **关联图** (可在 MISP UI → Event 4 → View Correlations 中查看): - `203.0.113.99` 在事件 1 和 4 之间共享 (C2 服务器重用) - `188.166.26.195` 在事件 2 和 3 之间共享 (APT 侦察中的暴力破解僵尸网络) - `193.32.162.157` 在事件 3 和 4 之间共享 (加密后的数据外发端点) ## 仪表板操作 | 按钮 | 模拟内容 | 触发的 Wazuh 规则 | |---|---|---| | Login Success | 成功的 SSH 认证 | — | | Login Fail | 失败的 SSH 认证 | 100001 (5次以上→ 100002) | | Modify Algorithm | 交易时间内的算法更改 | 100003 (如果是 Trader 角色) | | Trigger MISP IPs | 手动触发 3 个 IP 的 MISP 威胁突发 | 100030, 100032 | | SSH Brute Force | 15 次快速登录失败 | 100001 → 100002 | | HTTP Flood | N 个同时发出的市场数据请求 | 100010 → 100004 | | ▶ Start Simulation | 自动生成 60/40 比例的 MISP/正常流量 | 100021, 100030, 100031, 100032, 100033 | | Unblock All | 分析师发起的黑名单清除 | — | ## 日志格式 **auth.log** (syslog/ssh 格式): ``` Apr 17 09:00:00 hft-server sshd[1234]: Failed password for vish from 192.168.56.1 port 11866 ssh2 ``` **network.log** (hft-network syslog 格式): ``` Apr 17 09:00:00 hft-server hft-network[1234]: GET /api/public/market-data HTTP/1.1 from 185.220.101.34 ``` **app.log** (CEF 格式): ``` Apr 17 09:00:00 hft-server hft-app[1234]: CEF:0|SOCLab|HFT-Platform|1.0|100|MISP_IOC_Detected|5|suser=ThreatIntel msg=MISP-ALERT: ip=185.220.101.34 tag=Tor-Exit-Node severity=HIGH eventId=1 desc=Tor exit node - brute force campaigns ``` ## 常用命令 ``` # 实时查看 Wazuh alerts(在 VM 上) docker exec single-node_wazuh.manager_1 tail -f /var/ossec/logs/alerts/alerts.log \ | grep -E "100030|100032|100033|MISP|SOAR" # 在没有 agent 的情况下测试 rule echo "Apr 17 09:00:00 hft-server hft-app[1234]: CEF:0|SOCLab|HFT-Platform|1.0|100|MISP_IOC_Detected|5|suser=ThreatIntel msg=MISP-ALERT: ip=185.220.101.34 tag=Tor severity=HIGH" \ | docker exec -i single-node_wazuh.manager_1 /var/ossec/bin/wazuh-logtest # 添加新 events 后重新同步 MISP → Wazuh bash ~/sync_misp.sh # 检查已注册的 Wazuh agents docker exec single-node_wazuh.manager_1 /var/ossec/bin/agent_control -l ``` ## 关键指标 | 指标 | 数值 | |---|---| | MISP 威胁事件 | 4 | | 唯一的恶意 IP | 12 | | 跨事件关联 | 3 | | 自定义 Wazuh 规则 | 10 | | 自定义 Wazuh 解码器 | 2 | | 监控的日志文件 | 3 (auth, network, app) | | 模拟 tick 频率 | 4.5 秒 | | 恶意流量比例 | 60% | | 最高告警级别 | 15 (严重) | ## 参考 - [MISP 项目](https://www.misp-project.org/) - [Wazuh 文档](https://documentation.wazuh.com/) - [Shuffle SOAR](https://shuffler.io/) - [通用事件格式 (CEF)](https://www.microfocus.com/documentation/arcsight/arcsight-smartconnectors-8.4/cef-implementation-standard/)
标签:IP 地址批量处理, MITM代理, Shodan, SOAR, 威胁情报, 安全运营中心, 开发者工具, 网络映射, 自动化响应, 自定义脚本, 请求拦截