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, 威胁情报, 安全运营中心, 开发者工具, 网络映射, 自动化响应, 自定义脚本, 请求拦截