RanjitRamja/Wazuh-alert-enrichment
GitHub: RanjitRamja/Wazuh-alert-enrichment
通过 n8n 工作流和 VirusTotal API 自动富化 Wazuh SIEM 告警,结合威胁情报评分帮助安全分析师快速过滤噪音并优先处理高危事件。
Stars: 0 | Forks: 0
# 自动化 SIEM 告警富化 — Wazuh + n8n + VirusTotal
该自动化流水线使用 n8n 工作流自动化和 VirusTotal 威胁情报 API 实时富化 Wazuh SIEM 告警 — 通过结合规则严重性和威胁情报评分自动标记真正可疑的活动,从而减少人工分类的工作量。
  
## 概述
安全运营中心 (SOC) 经常会被大量的告警淹没,其中许多是低价值或误报。分析师在决定某个告警是否值得关注之前,需要花费大量时间手动将 IP 和文件哈希与威胁情报源进行交叉比对。
本项目构建了一个**自动化告警富化流水线**,它能够:
1. 捕获由 Wazuh(一个开源的 SIEM/XDR 平台)生成的告警
2. 将它们转发到 n8n 自动化工作流
3. 从告警中提取威胁指标 (IOC) — IP 地址和文件哈希
4. 查询 VirusTotal API,根据全球威胁情报检查这些 IOC
5. 结合 VirusTotal 的判定结果和 Wazuh 规则严重性,计算出综合可疑评分
最终结果:告警会自动富化上威胁上下文,并且一个可疑标志可以帮助优先处理真正需要分析师关注的内容 — 而不是面对一大片毫无区分度的日志噪音。
## 架构
```
┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ ┌──────────────┐
│ Kali VM │────▶│ Wazuh Agents │────▶│ Wazuh Manager │────▶│ n8n Webhook │
│ (attacker) │ │ (Win/Ubuntu) │ │ (alerts.json) │ │ │
└─────────────┘ └──────────────┘ └─────────────────┘ └──────┬───────┘
│
▼
┌─────────────────┐
│ Extract IOC │
│ (JS function) │
└────────┬────────┘
│
┌──────────────────┴──────────────────┐
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ VirusTotal Hash │ │ VirusTotal IP │
│ Lookup │ │ Lookup │
└────────┬─────────┘ └────────┬─────────┘
└──────────────────┬──────────────────┘
▼
┌─────────────────┐
│ Get Score │
│ (suspicion calc)│
└────────┬────────┘
│
┌──────────────────┴──────────────────┐
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Send Alert Email │ │ Send Clean Email │
│ (malicious) │ │ (clean/no threat)│
└─────────────────┘ └─────────────────┘
```
**实验环境:** 在 Oracle VirtualBox 上的 4 台虚拟机,通过仅主机网络(`192.168.56.0/24`)进行通信:
- Wazuh Manager (Ubuntu 22.04)
- Wazuh Agent (Ubuntu)
- Wazuh Agent (Windows 10)
- Kali Linux(攻击机,用于模拟攻击)
## 工作原理
### 1. 告警生成 (Wazuh)
- 跨 Ubuntu 和 Windows 虚拟机部署 Wazuh Manager 和 Agents
- 在两个 Agent(Ubuntu 上的 `/root`,Windows 上的 `C:\test-fim`)上启用文件完整性监控 (FIM) 并进行实时检测
- 在 Manager 上启用 `logall` 和 `logall_json`,以便将所有告警写入 JSON 告警日志 — 这是集成脚本消费它们所必需的
### 2. 告警转发 (Wazuh → n8n)
一个自定义的 Wazuh 集成脚本 (`wazuh-integration/custom-n8n.sh`) 注册在 `ossec.conf` 中,并在任何规则级别达到或超过 7 级的告警时自动触发。它通过 `curl` 将告警 JSON 转发到 n8n 生产环境 webhook。
### 3. IOC 提取 (n8n)
`Extract IOC` 函数节点解析传入的 Wazuh 告警并提取:
- 源 IP 地址
- 文件哈希 (SHA256,来自 syscheck 或告警数据)
- 规则描述、规则 ID、规则级别
- Agent 名称和时间戳
它还会设置 `hasHash` / `hasIp` 布尔标志,用于对正确的 VirusTotal 查询进行条件路由。
### 4. 威胁情报富化 (VirusTotal)
两个 HTTP Request 节点查询 VirusTotal REST API:
- `/api/v3/files/{hash}` — 文件哈希信誉查询
- `/api/v3/ip_addresses/{ip}` — IP 信誉查询
### 5. 可疑评分 (n8n)
`Get Score` 函数节点结合了以下内容:
- VirusTotal 的 `malicious` 检测计数(来自 `last_analysis_stats`)
- Wazuh 的原生规则严重性级别
如果 VirusTotal 的恶意评分大于零**或者** Wazuh 的规则级别达到 10 级以上,该告警就会被标记为 `isSuspicious: true` — 确保即使 IOC 尚未被 VirusTotal 数据库收录,高危的 Wazuh 告警依然会被标记。
### 6. 分析师通知 (电子邮件)
根据可疑评分,工作流会分支到两种电子邮件通知之一:
- **发送告警邮件** — 当发现恶意指标时发送的红色主题 HTML 告警,包括 Agent 名称、规则级别、源 IP、文件哈希以及建议的操作清单(隔离 Agent、封禁 IP、运行恶意软件扫描等)
- **发送安全邮件** — 当 IOC 检查结果为安全时发送的绿色主题通知,确认告警已被审查和富化,且无需采取进一步行动
这完成了从原始告警 → 富化 → 分析师可以立即采取行动的易于理解的通知的闭环。
## 测试与验证
该流水线已通过受控的攻击模拟进行了验证:
| 测试 | 方法 | 结果 |
|---|---|---|
| SSH 暴力破解检测 | 使用 Hydra + rockyou.txt 字典对 Agent 的 SSH 服务进行攻击 | 触发了 Wazuh 规则 `60122`(登录失败),规则级别为 7 — 在 Threat Hunting 仪表板中可见,捕获了 16,000 多次命中 |
| 文件完整性监控 | 在受监控目录中创建/删除测试文件 | 触发了规则 `554`(文件已添加)和规则 `553`(文件已删除) |
| VirusTotal 哈希富化 | 查询已知的恶意测试哈希 | 返回了 `Trojan/Generic.ASBOL.2A` 分类,包含 407 个恶意投票 |
| 端到端可疑评分 | 完整流水线运行 | 从结合的 VirusTotal + 规则级别数据中正确计算出了 `isSuspicious: true` |
## 截图
| | |
|---|---|
|  *Wazuh Dashboard 登录* |  *文件完整性监控配置* |
|  *Threat Hunting 视图中的 SSH 暴力破解告警* |  *VirusTotal 哈希信誉查询* |
|  *n8n 可疑评分输出* |  *告警邮件通知(事件详情)* |
|  *告警邮件建议操作部分* | |
## 仓库结构
```
wazuh-alert-enrichment/
├── README.md
├── n8n-workflow/
│ └── Wazuh_Alert_Enrichment_Workflow.json
├── wazuh-integration/
│ ├── custom-n8n.sh
│ ├── ossec-integration-block.xml
│ ├── ubuntu-agent-fim-config.xml
│ └── windows-agent-fim-config.xml
└── screenshots/
├── wazuh-dashboard.png
├── ssh-bruteforce-threat-hunting.png
├── virustotal-hash-lookup.png
├── n8n-get-score-node.png
├── fim-configuration.png
├── alert-email-notification.png
└── alert-email-recommended-actions.png
```
## 技术栈
- **SIEM:** Wazuh (Manager + Agents)
- **自动化:** n8n(自托管工作流自动化)
- **威胁情报:** VirusTotal API v3
- **虚拟化:** Oracle VirtualBox
- **操作系统:** Ubuntu 22.04/24.04, Windows 10, Kali Linux
- **脚本编写:** Bash, JavaScript(n8n 函数节点)
- **攻击模拟:** Hydra(SSH 暴力破解)
## 配置说明
1. 在虚拟化网络中部署 Wazuh Manager + Agents (Ubuntu/Windows)
2. 在 Manager 上启用 `logall` / `logall_json`
3. 按照 `wazuh-integration/*-fim-config.xml` 在 Agents 上配置 FIM (`syscheck`)
4. 将 `custom-n8n` 集成块添加到 Manager 的 `ossec.conf` 中
5. 将 `custom-n8n.sh` 放在 `/var/ossec/integrations/custom-n8n` 并使其可执行 (`chmod +x`)
6. 将 `n8n-workflow/Wazuh_Alert_Enrichment_Workflow.json` 导入您的 n8n 实例
7. 将工作流中的 `YOUR_VIRUSTOTAL_API_KEY` 替换为您自己的 VirusTotal API 密钥(在 [virustotal.com](https://www.virustotal.com) 免费获取一个)
8. 将 `your-sender-email@gmail.com`、`your-alert-recipient@gmail.com` 和 `YOUR_SMTP_CREDENTIAL_ID` 替换为您自己的电子邮件地址和 n8n SMTP 凭据
9. 激活 webhook 并触发测试告警
## 作者
**Ranjit Ramja**
[LinkedIn](https://www.linkedin.com/in/ranjit-ramja-37951a353/) · [TryHackMe](https://tryhackme.com/p/Ranjit07)
标签:n8n, Wazuh, 威胁情报, 安全运营, 应用安全, 开发者工具, 扫描框架, 数据可视化