alexrepsec/SOAR-Lab
GitHub: alexrepsec/SOAR-Lab
该项目实现了一个连接 Wazuh、Shuffle、TheHive、VirusTotal 和 AbuseIPDB 的安全编排自动化与响应(SOAR)流程,用于自动化威胁情报富化和事件响应。
Stars: 0 | Forks: 0
# SOAR 实验室:Wazuh + Shuffle + TheHive + VirusTotal + AbuseIPDB
实现一个 **SOAR(安全编排、自动化与响应)** 流程,将 SIEM (Wazuh) 与自动化平台 (Shuffle)、事件管理系统 (TheHive) 以及两个威胁情报源 (VirusTotal 和 AbuseIPDB) 连接起来。
目标:当 Wazuh 检测到可疑指标(文件哈希或 IP 地址)时,Shuffle 会自动通过 VirusTotal 和 AbuseIPDB 对其进行丰富,如果确认其为恶意,则无需人工干预即可在 TheHive 中创建案例。
## 目录
1. [架构](#architecture)
2. [前置条件](#prerequisites)
3. [安装 Shuffle](#installing-shuffle)
4. [配置集成](#configuring-the-integrations-apps)
- [TheHive](#thehive-integration)
- [VirusTotal](#virustotal-integration)
- [AbuseIPDB](#abuseipdb-integration)
- [Wazuh](#wazuh-integration)
5. [工作流 1:恶意哈希检测](#workflow-1-malicious-hash-detection)
6. [工作流 2:恶意 IP 检测](#workflow-2-malicious-ip-detection)
7. [测试](#testing)
8. [截图](#screenshots)
## 架构
```
┌─────────┐ Webhook ┌──────────┐
│ Wazuh │ ──────────────────▶│ Shuffle │
└─────────┘ (hash / IP) └────┬─────┘
│
┌──────────────────┼──────────────────┐
▼ ▼
┌─────────────┐ ┌──────────────┐
│ VirusTotal │ │ AbuseIPDB │
│ (hash) │ │ (IP) │
└──────┬──────┘ └──────┬───────┘
│ │
└──────────────────┬───────────────────┘
▼
Is it malicious?
│
┌─────────┴─────────┐
▼ ▼
Yes: create case No: end flow
in TheHive
```
**组件:**
| 组件 | 角色 | 默认端口 |
|---|---|---|
| Wazuh | SIEM,生成初始警报 | 1514 / 55000 |
| Shuffle | 编排与自动化引擎 (SOAR) | 3001 |
| TheHive | 案例与事件管理 | 9000 |
| VirusTotal | 文件哈希威胁情报 | 公共 API |
| AbuseIPDB | IP 信誉威胁情报 | 公共 API |
## 前置条件
- Ubuntu Server 22.04 LTS
- 已安装 Docker 和 Docker Compose v2
- 至少有 4 GB 可用 RAM 供 Shuffle 使用(如果与 TheHive 同时运行,建议 8 GB 以上)
- `vm.max_map_count` 至少设置为 `262144`(OpenSearch 要求)
- Wazuh 和 TheHive 已安装并正在运行
- 账户和 API 密钥:
- [VirusTotal](https://www.virustotal.com/)(免费或付费层级)
- [AbuseIPDB](https://www.abuseipdb.com/)(免费或付费层级)
## 安装 Shuffle
### 1. 克隆官方仓库
```
git clone https://github.com/Shuffle/Shuffle.git
cd Shuffle
```
### 2. 准备宿主机环境
```
# 更正数据库文件夹的权限
sudo chown -R 1000:1000 shuffle-database
# 禁用 swap(OpenSearch 要求)
sudo swapoff -a
# 增加虚拟内存 map 数量限制
sudo sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
```
### 3. 启动服务
```
sudo docker compose up -d
```
这将创建并启动主要容器:
- `shuffle-frontend`(端口 3001/3443)
- `shuffle-backend`(端口 5001)
- `shuffle-opensearch`(端口 9200/9600/9300)
- `shuffle-orborus`(worker 协调器)
### 4. 验证状态
```
sudo docker compose ps
```
所有服务都应显示为 `Up` 状态。首次运行可能需要 1-2 分钟才能完全可用,因为 OpenSearch 需要完成初始化。
### 5. 访问 Web 界面
在浏览器中打开:
```
http://:3001
```
首次访问时,系统会提示您创建管理员用户(`/loginsetup`)。
## 配置集成(App)
在 Shuffle 中,集成作为 **App** 在每个工作流中进行管理。每个 App 都需要单独的身份验证。
### TheHive 集成
1. 在工作流中,从侧边的 Apps 面板添加 **TheHive** App。
2. 配置身份验证:
- **URL**:`https://:9000`
- **API Key**:在 TheHive 的 `My profile → API Key` 中生成
3. 本项目中使用的主要操作:
- `Create Alert` — 创建一个包含已分析指标数据的警报
- `Create Case` — 直接创建一个案例(警报的替代方案)
### VirusTotal 集成
1. 添加 **VirusTotal v3** App。
2. 使用您的 **API Key** 配置身份验证(从您的 VirusTotal 个人资料中获取)。
3. 使用的操作:`Get a file report` — 获取哈希 (MD5/SHA1/SHA256) 并返回防病毒引擎的检测报告。
4. 关键响应字段:`data.attributes.last_analysis_stats.malicious`(将文件标记为恶意的引擎数量)。
### AbuseIPDB 集成
1. 添加 **AbuseIPDB** App。
2. 使用您的 **API Key** 配置身份验证。
3. 使用的操作:`Check an IP address` — 获取 IP 并返回其信誉分数。
4. 关键响应字段:`data.abuseConfidenceScore`(0-100;值越高表示恶意活动的可能性越大)。
### Wazuh 集成
Wazuh 不作为 App 在 Shuffle 内部连接;相反,**Shuffle 暴露了一个 Webhook**,当触发规则时,Wazuh 会调用该 Webhook。
1. 在 Shuffle 工作流中,添加一个 **Webhook** 触发器。
2. 复制生成的 URL,格式如下:
http://:3001/api/v1/hooks/webhook_
3. 在 Wazuh 中,配置 **集成脚本** 或 `active-response` 规则,以便在满足警报条件时(例如,通过 FIM 检测到哈希或在日志中发现 IP)向该 URL 发送 `POST` 请求。
在 Wazuh 的 `ossec.conf` 中自定义集成配置的示例:
```
custom-shuffle
http://:3001/api/v1/hooks/webhook_
7
json
```
## 工作流 1:恶意哈希检测
**工作流名称:** `Malware Hash Detection`
**逻辑:**
1. **触发器 – Webhook**(`Wazuh_Alert_Receiver`):接收来自 Wazuh 的 JSON 警报,包含可疑文件的哈希。
2. **VirusTotal v3 – Get a file report**:查询接收到的哈希。
3. **条件**:评估 `last_analysis_stats.malicious > 0`。
4. **如果为恶意 → TheHive – Create Alert**:创建一个包含以下内容的警报:
- 标题:`Malware detected - Wazuh`
- 已分析的哈希
- 标记它的引擎数量
- 根据分数调整的严重性
5. **如果为干净 → 流程结束**(不创建案例,避免在 TheHive 中产生噪音)。
### 使用的主要变量
| 变量 | 来源 | 用途 |
|---|---|---|
| `$hash` | Wazuh webhook payload | VirusTotal 的输入 |
| `$malicious_count` | VirusTotal 响应 | 条件的输入 |
| `$source_ip` / `$agent_name` | Wazuh webhook payload | 包含在 TheHive 案例中的上下文 |
## 工作流 2:恶意 IP 检测
**工作流名称:** `Malicious IP Detection`
**逻辑:**
1. **触发器 – Webhook**:接收来自 Wazuh 的 JSON 警报,包含可疑的源 IP。
2. **AbuseIPDB – Check an IP address**:查询接收到的 IP。
3. **条件**:评估 `abuseConfidenceScore >= 50`(可配置的阈值)。
4. **如果超过阈值 → TheHive – Create Alert**:创建一个包含以下内容的警报:
- 标题:`Malicious IP detected - Wazuh`
- 已分析的 IP
- 滥用置信度分数
- 来源国家和报告类别(来自 AbuseIPDB 的响应)
5. **如果低于阈值 → 流程结束**。
### 使用的主要变量
| 变量 | 来源 | 用途 |
|---|---|---|
| `$ip` | Wazuh webhook payload | AbuseIPDB 的输入 |
| `$abuse_score` | AbuseIPDB 响应 | 条件的输入 |
| `$country_code` | AbuseIPDB 响应 | 包含在 TheHive 案例中的上下文 |
## 测试
为了测试每个工作流而无需等待真实的 Wazuh 警报,Shuffle 允许您手动触发 Webhook:
```
# 测试 hash 工作流
curl -X POST http://:3001/api/v1/hooks/webhook_ \
-H "Content-Type: application/json" \
-d '{"hash": "44d88612fea8a8f36de82e1278abb02f", "agent_name": "test-agent"}'
# 测试 IP 工作流
curl -X POST http://:3001/api/v1/hooks/webhook_ \
-H "Content-Type: application/json" \
-d '{"ip": "118.25.6.39", "agent_name": "test-agent"}'
```
## 截图
## ⚠️ 免责声明
本项目仅用于**教育目的**。所有测试均在作者拥有和控制的隔离虚拟机上执行。切勿对您不拥有或未获得明确测试许可的系统进行网络攻击。
## 👤 作者
**alexrepsec**
网络安全爱好者 | 家庭实验室构建者
*本项目作为网络安全作品集的一部分而构建,旨在展示实用的 SOC 自动化、AI 驱动的威胁检测和网络流量分析技能。*
标签:CIDR查询, Shuffle, SOAR, TheHive, Wazuh, 威胁情报, 安全运营, 开发者工具, 扫描框架, 版权保护, 请求拦截