mdmujahidhasan/wazuh-virustotal-threat-intelligence-lab
GitHub: mdmujahidhasan/wazuh-virustotal-threat-intelligence-lab
该项目是一个 Wazuh SIEM 与 VirusTotal 威胁情报集成的实操 SOC 实验室,详细记录了完整的配置流程以及 Windows FIM 告警失效时的诊断与变通方案。
Stars: 0 | Forks: 0
# 🛡️ Wazuh + VirusTotal 威胁情报实验室




一个实操性的 SOC 实验室,记录了 **VirusTotal 威胁情报** 与 **Wazuh SIEM** 的集成过程,包括一个真实的故障排查场景:Windows FIM 告警未能触发,以及如何对其进行诊断和采取变通方案。
## 📑 目录
- [概述](#-overview)
- [实验环境](#-lab-environment)
- [架构](#-architecture)
- [初始设置](#-initial-setup)
- [配置步骤](#-configuration-steps)
- [面临的问题](#-problem-faced)
- [根本原因](#-root-cause)
- [变通方案](#-workaround-solution)
- [测试与验证](#-testing--validation)
- [最终结果](#-final-result)
- [根本原因总结](#-root-cause-summary)
- [经验教训](#-lessons-learned)
- [结论](#-conclusion)
## 🔍 概述
本项目记录了一个实操性的 SOC 实验室,其中将 **VirusTotal 威胁情报** 与 **Wazuh SIEM** 集成,以便在 Wazuh dashboard 中生成基于 VirusTotal 的告警。
**主要目标:** 构建一个有效的威胁情报工作流 —
```
File Event → Wazuh FIM/Syscheck → VirusTotal API Lookup → Wazuh Alert → Dashboard
```
## 🧩 实验环境
| 组件 | 详情 |
|---|---|
| SIEM | Wazuh |
| 服务器 OS | Ubuntu Server |
| Endpoint | Windows Agent |
| 威胁情报 | VirusTotal API |
| Dashboard | Wazuh Dashboard |
| 测试目录 | `/opt/vt-test` |
| 最终告警来源 | Wazuh FIM + VirusTotal |
## 🏗️ 架构
```
Windows Endpoint
│
│ Wazuh Agent
▼
Ubuntu Wazuh Server
│
├── Wazuh Manager
├── Wazuh Dashboard
├── Wazuh FIM / Syscheck
└── VirusTotal Integration
│
▼
VirusTotal API
│
▼
Wazuh Alert
```
## ✅ 初始设置
在开始集成工作之前,已确认基础环境处于健康状态:
- [x] Wazuh Manager 运行中
- [x] Wazuh Dashboard 可访问
- [x] Windows agent 已连接
- [x] 威胁狩猎中可见 Windows 事件日志
- [x] 漏洞检测正常工作
- [x] 已收集 VirusTotal API key
📸 `screenshots/01-wazuh-manager-running.png`
## ⚙️ 配置步骤
### 步骤 1 — 检查 Wazuh Manager 状态
```
sudo systemctl status wazuh-manager --no-pager
```
**预期结果:**
```
active (running)
```
### 步骤 2 — 检查 VirusTotal 集成文件
```
ls -la /var/ossec/integrations/
```
**预期文件:**
```
virustotal
virustotal.py
```
### 步骤 3 — 备份 Wazuh 配置
在编辑之前始终备份 `ossec.conf`:
```
sudo cp /var/ossec/etc/ossec.conf /var/ossec/etc/ossec.conf.backup
```
在添加 `/opt/vt-test` 目录之前,创建了另一个检查点备份:
```
sudo cp /var/ossec/etc/ossec.conf /var/ossec/etc/ossec.conf.before-vt-test
```
📸 `screenshots/04-ossec-conf-backup.png`
### 步骤 4 — 配置 VirusTotal 集成
编辑 Wazuh Manager 配置文件,并在 **闭合标签 `` 之前** 添加以下代码块:
```
virustotal
YOUR_VIRUSTOTAL_API_KEY
syscheck
json
```
📸 `screenshots/05-virustotal-config-block.png`
### 步骤 5 — 验证 Wazuh 配置
```
sudo /var/ossec/bin/wazuh-analysisd -t
```
如果未出现错误,则配置有效。
### 步骤 6 — 重启 Wazuh Manager
```
sudo systemctl restart wazuh-manager
sudo systemctl status wazuh-manager --no-pager
```
**预期结果:**
```
active (running)
```
### 步骤 7 — 验证 VirusTotal 集成是否加载
```
sudo grep -i virustotal /var/ossec/logs/ossec.log | tail -20
```
**预期日志:**
```
wazuh-integratord: INFO: Enabling integration for: 'virustotal'
```
📸 `screenshots/06-virustotal-integration-loaded.png`
至此,VirusTotal 集成已成功加载。✅
## ❌ 面临的问题
配置 VirusTotal 后,在 Windows endpoint 上创建文件时未出现任何 VirusTotal 告警。
**在威胁狩猎中测试的查询:**
```
agent.name:windows AND rule.groups:syscheck
```
```
rule.id:550 OR rule.id:553 OR rule.id:554
```
Dashboard 返回 **无结果**。
📸 `screenshots/07-no-syscheck-alerts.png`
## 🔎 根本原因
问题 **不在于** VirusTotal API 本身。真正的问题在于:
Windows agent 已连接并正在发送正常的事件日志,但缺少文件完整性告警。
**证据:**
| 检查项 | 状态 |
|---|---|
| Windows 登录事件可见 | ✅ 正常工作 |
| 漏洞检测 | ✅ 正常工作 |
| Windows agent 连接 | ✅ 活跃 |
| Syscheck / FIM 告警 | ❌ 为空 |
## 🔧 变通方案
为了证明 VirusTotal 集成运行正常,通过在 Wazuh 服务器自身上配置 **本地 Linux 目录** 绕过了 Windows FIM 问题。
**最终的工作流:**
```
/opt/vt-test file created
↓
Wazuh local FIM / Syscheck
↓
VirusTotal Integration
↓
VirusTotal API Response
↓
Wazuh Alert
↓
Dashboard Alert
```
### 步骤 8 — 创建本地测试目录
```
sudo mkdir -p /opt/vt-test
sudo chown root:wazuh /opt/vt-test
sudo chmod 775 /opt/vt-test
```
**验证:**
```
ls -ld /opt/vt-test
```
**预期结果:**
```
drwxrwxr-x root wazuh /opt/vt-test
```
📸 `screenshots/09-opt-vt-test-directory.png`
### 步骤 9 — 将 `/opt/vt-test` 添加到 Wazuh FIM
```
sudo nano /var/ossec/etc/ossec.conf
```
在 `` 块内部,在 `yes ` 之后,添加:
```
/opt/vt-test
```
**最终部分应如下所示:**
```
yes
/opt/vt-test
no
```
📸 `screenshots/12-opt-vt-test-fim-config.png`
#### ⚠️ 此步骤中的问题
早期编辑意外地引入了 **HTML 编码字符**,而不是有效的 XML 标签:
```
>/opt/vt-test</directories>
```
这导致 Wazuh Manager 在重启时失败。
**正确的行:**
```
/opt/vt-test
```
📸 `screenshots/10-wrong-xml-error.png`
#### 🔄 恢复
由于存在备份,因此恢复了正常工作的配置:
```
sudo cp /var/ossec/etc/ossec.conf.before-vt-test /var/ossec/etc/ossec.conf
sudo /var/ossec/bin/wazuh-analysisd -t
sudo systemctl restart wazuh-manager
sudo systemctl status wazuh-manager --no-pager
```
恢复后,Wazuh Manager 返回到:
```
active (running)
```
📸 `screenshots/11-wazuh-manager-recovered.png`
### 步骤 10 — 再次验证并重启
重新添加正确的 `/opt/vt-test` 目录行后:
```
sudo /var/ossec/bin/wazuh-analysisd -t
sudo systemctl restart wazuh-manager
sudo systemctl status wazuh-manager --no-pager
```
**预期结果:**
```
active (running)
```
## 🧪 测试与验证
### 步骤 11 — 生成 FIM 告警
```
echo "hello wazuh" | sudo tee /opt/vt-test/test.txt
echo "second line" | sudo tee -a /opt/vt-test/test.txt
sleep 15
```
检查告警日志:
```
sudo grep -a "/opt/vt-test" /var/ossec/logs/alerts/alerts.json | tail -10
```
**告警包含:**
```
"file": "/opt/vt-test/test.txt"
"location": "syscheck"
```
📸 `screenshots/13-fim-alert-alerts-json.png`
### 步骤 12 — 生成 VirusTotal 告警
FIM 事件发生后,VirusTotal 集成被触发。
```
sudo grep -ia "virustotal" /var/ossec/logs/alerts/alerts.json | tail -30
```
**结果:**
```
VirusTotal: Alert - No records in VirusTotal database
```
```
"integration": "virustotal"
"groups": ["virustotal"]
```
📸 `screenshots/14-virustotal-alert-terminal.png`
这确认了整个链路实现了端到端的工作:
```
FIM Alert → VirusTotal API → Wazuh Alert
```
### 步骤 13 — EICAR 测试
创建了一个 EICAR 测试文件以触发检测型告警:
```
printf '%s\n' 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' | sudo tee /opt/vt-test/eicar.com
```
检查 VirusTotal 告警:
```
sudo grep -ia "virustotal" /var/ossec/logs/alerts/alerts.json | tail -30
```
**输出:**
```
VirusTotal: Error - Public API request rate limit reached
```
### 步骤 14 — 最终 Dashboard 告警
在 **Wazuh Dashboard → 威胁狩猎 → 事件** 中,使用了以下过滤器:
```
rule.groups:virustotal
```
```
VirusTotal
```
```
rule.id:87101 OR rule.id:87104
```
**最终的 dashboard 结果:**
| 告警 | 规则 ID | Agent |
|---|---|---|
| VirusTotal:错误 - 已达到公共 API 请求速率限制 | 87101 | Wazuh |
| VirusTotal:告警 - 未发现阳性结果 | 87104 | windows |
📸 `screenshots/15-final-dashboard-alert.png`
## 🏁 最终结果
```
/opt/vt-test/test.txt or eicar.com
↓
Wazuh FIM / Syscheck
↓
VirusTotal Integration
↓
VirusTotal API Response
↓
Wazuh Alert
↓
Threat Hunting Dashboard
```
### 最终状态
| 组件 | 状态 |
|---|---|
| Wazuh Manager | ✅ 正常工作 |
| Wazuh Dashboard | ✅ 正常工作 |
| Windows Agent | ✅ 已连接 |
| Windows 事件日志 | ✅ 正常工作 |
| 漏洞检测 | ✅ 正常工作 |
| VirusTotal 集成 | ✅ 正常工作 |
| `/opt/vt-test` FIM 监控 | ✅ 正常工作 |
| VirusTotal API 触发 | ✅ 正常工作 |
| Dashboard 告警 | ✅ 可见 |
## 🧾 根本原因总结
| # | 问题 | 根本原因 |
|---|---|---|
| 1 | 最初未出现 VirusTotal 告警 | 未生成 Windows FIM/Syscheck 告警 |
| 2 | Wazuh Manager 重启失败 | 插入了无效的 XML 字符(`<` / `>`)而不是 `<` / `>` |
| 3 | VirusTotal 速率限制错误 | 重复测试后达到了免费的 VirusTotal 公共 API 限制(但仍确认请求已发送) |
## 📚 经验教训
- VirusTotal 集成需要正常工作的 FIM/Syscheck 告警——没有它们就无法触发。
- 已连接的 agent 并不总是意味着 FIM 告警确实在正常工作。
- 当 dashboard 结果不清晰时,请始终直接检查 `alerts.json`。
- 在编辑之前始终备份 `ossec.conf`。
- 微小的 XML 语法错误(如 HTML 编码字符)可能会完全破坏 Wazuh Manager。
- VirusTotal 速率限制错误仍然证明集成已正确触发。
- 当 Windows 端的 FIM 失败时,可以使用 Wazuh 服务器上的本地 FIM 监控来验证 VirusTotal 集成。
## 🎯 结论
本实验室成功演示了 Wazuh 与 VirusTotal 威胁情报的集成。尽管最初的 Windows FIM 工作流未生成 Syscheck 告警,但通过对 `/opt/vt-test` 配置本地 Wazuh FIM 监控,对该问题进行了诊断和绕过。此目录中的文件更改生成了 Syscheck 告警,触发了 VirusTotal API 查询,并生成了在 Wazuh dashboard 中可见的 VirusTotal 告警。
**最终实现的 pipeline:**
```
Wazuh → FIM/Syscheck → VirusTotal API → Alert → Dashboard
```
## 📂 建议的仓库结构
```
wazuh-virustotal-threat-intelligence-lab/
├── README.md
├── screenshots/
│ ├── 01-wazuh-manager-running.png
│ ├── 04-ossec-conf-backup.png
│ ├── 05-virustotal-config-block.png
│ ├── 06-virustotal-integration-loaded.png
│ ├── 07-no-syscheck-alerts.png
│ ├── 09-opt-vt-test-directory.png
│ ├── 10-wrong-xml-error.png
│ ├── 11-wazuh-manager-recovered.png
│ ├── 12-opt-vt-test-fim-config.png
│ ├── 13-fim-alert-alerts-json.png
│ ├── 14-virustotal-alert-terminal.png
│ └── 15-final-dashboard-alert.png
└── configs/
└── virustotal-integration-block.xml
```
标签:Wazuh, 威胁情报, 安全实验环境, 安全运营, 开发者工具, 扫描框架