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, 威胁情报, 安全运营, 开发者工具, 扫描框架, 版权保护, 请求拦截