shivvv3824/SIEM-Log-Analysis-Threat-Hunting
GitHub: shivvv3824/SIEM-Log-Analysis-Threat-Hunting
一个基于实验室的 SIEM 日志分析与威胁狩猎项目,利用模拟日志与威胁情报丰富在 Splunk 中实现可复现的检测验证。
Stars: 0 | Forks: 0
# SIEM 日志分析与威胁狩猎仪表板(实验室)
端到端实验室项目:生成 **500k+** 条模拟的 Windows 安全 + Linux 风格 JSON 日志,使用 **VirusTotal** 和 **AbuseIPDB** 对公共 IP 进行丰富化,然后使用 MITRE 对齐的 SPL 在 **Splunk Enterprise** 中进行狩猎。
## 仓库结构
| 文件 | 用途 |
|------|------|
| `log_generator.py` | 第 1 阶段 – 模拟基线 + 注入的攻击场景 |
| `enrichment_engine.py` | 第 2 阶段 – VT + AbuseIPDB 并带 SQLite 缓存 |
| `docker-compose.yml` | 第 3 阶段 – 本地 Splunk Enterprise(Docker) |
| `splunk/threat_hunting_dashboard.spl` | 第 4 阶段 – 可复制粘贴的 SPL 面板 |
| `.env.example` | API 密钥模板(`cp .env.example .env`) |
## 第 1 阶段 – 生成日志
```
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# 快速烟雾测试(10k 事件)
python log_generator.py --total 10000 --out raw_logs.jsonl --seed 42
# 全量(500k+)
python log_generator.py --total 550000 --out raw_logs.jsonl --seed 42
```
输出换行分隔的 JSON(`raw_logs.jsonl`),Splunk 可将其作为 `_json` 良好处理。
## 第 2 阶段 – 威胁情报丰富化
```
cp .env.example .env
# 编辑 .env 并设置 VIRUSTOTAL_API_KEY 和 ABUSEIPDB_API_KEY
python enrichment_engine.py --in raw_logs.jsonl --out enriched_logs.json --max-api-ips 200 --sleep 15
```
说明:
- **SQLite** 缓存(`intel_cache.sqlite3`)可避免对同一 IP 重复查询。
- **`--max-api-ips`** 限制对大型文件查询的唯一公共 IP 数(保护免费层级)。
- **`--sleep`** 控制请求间隔(AbuseIPDB 免费层级限制严格)。
- **离线 / CI**:设置 `SKIP_LIVE_APIS=1` 运行 `python enrichment_engine.py ...`,可在不调用 API 的情况下写入 `ti_summary` 字段。
每条丰富化记录包含:
- `threat_intel`:每个 IP 的 `{ "virustotal": {...}, "abuseipdb": {...} }`
- `ti_summary`:`{ "abuse_score_max": ..., "vt_malicious_max": ..., "public_ip_count": ... }`
## 第 3 阶段 – Docker 中的 Splunk
先决条件:Docker Desktop(macOS),足够内存(Splunk 较重;**建议 8 GB+**)。
```
export SPLUNK_PASSWORD='ChangeMe!ChangeMe!'
docker compose up -d
```
打开 **Splunk Web**:`http://localhost:8000`
登录账号:**`admin`** / 在 `SPLUNK_PASSWORD` 中设置的密码。
### 首次启动密码安全
在首次启动前在 `SPLUNK_PASSWORD` 中设置强密码。如需后续修改,请在 **Settings → Users and authentication** 中使用 Splunk 账户流程(或在容器内使用 CLI)。对于一次性实验室,最简单的方法是删除并重新创建卷:
```
docker compose down -v
export SPLUNK_PASSWORD='NewStrongPasswordHere!'
docker compose up -d
```
### 上传 `enriched_logs.json`
1. **Settings → Add Data → Upload**
2. 选择 `enriched_logs.json`
3. **设置主机**(任意值,例如 `lab-generator`)
4. **输入设置**
- **来源类型:** `_json`(或自定义来源类型;参见下文)
- **索引:** `main`(默认)或新建 `threat_lab`
5. **确认并提交**
### 自定义来源类型以获得更清晰的 JSON 时间戳(推荐)
**Settings → Source types → New**
- 名称:`json_threat_lab`
- **高级设置**(或通过 `props.conf` 在本地应用中):启用 JSON 提取并对 Windows 与 Linux 时间戳启用时间解析。
在本地应用(例如容器内的 `etc/apps/search/local/props.conf`)中创建最小的 `props.conf` 片段:
```
[json_threat_lab]
KV_MODE = json
TIME_PREFIX = "TimeCreated"\s*:\s*"
TIME_FORMAT = %Y-%m-%dT%H:%M:%S%z
MAX_TIMESTAMP_LOOKAHEAD = 32
```
由于某些事件使用 `timestamp` 而非 `TimeCreated`,SPL 文件中使用 `coalesce(strptime(...))` 模式以确保面板在两种格式下均可工作。
定义来源类型后,**重新摄取**或**为现有输入分配来源类型**。
## 第 4 阶段 – SPL 仪表板
打开 `splunk/threat_hunting_dashboard.spl`,将每个面板查询复制到 **Search & Reporting → Save As → Dashboard Panel**。
替换:
- `index=main` 替换为你的索引(例如 `index=threat_lab`)
- `sourcetype=json_threat_lab` 替换为你配置过的来源类型
## 将本项目发布到 GitHub
目标仓库(空仓):[shivvv3824/SIEM-Log-Analysis-Threat-Hunting](https://github.com/shivvv3824/SIEM-Log-Analysis-Threat-Hunting)。
**如果 Cursor 的代理或沙箱阻止 `.git`**:在 **Terminal.app**(或 iTerm)中运行以下命令,而不是在受限代理 shell 中:
```
cd /path/to/siem-threat-hunting-dashboard
chmod +x scripts/push_to_github.sh
./scripts/push_to_github.sh
```
该脚本会移除任何损坏的本地 `.git`,初始化 `main`,提交并使用 HTTPS 推送到 `origin`。系统会提示输入 GitHub 凭据,或可使用凭据助手 / 个人访问令牌。
**等效手动操作:**
```
cd siem-threat-hunting-dashboard
rm -rf .git
git init -b main
git add .
git commit -m "Initial commit: synthetic SIEM logs, enrichment, Splunk SPL"
git remote add origin https://github.com/shivvv3824/SIEM-Log-Analysis-Threat-Hunting.git
git push -u origin main
```
(可选)安装 [GitHub CLI](https://cli.github.com/) 并使用 `gh repo create` 以获得更快捷的路径。
## 法律与道德使用
仅使用合成数据。API 密钥归您所有;请遵守 **VirusTotal** 与 **AbuseIPDB** 的条款与速率限制。本仓库仅供 **教育与授权测试** 使用。
标签:AbuseIPDB, Cloudflare, Conpot, Docker, IP信誉, JSON日志, Linux日志, MITRE ATT&CK, SQLite缓存, Windows安全, 免费API, 合成日志, 威胁情报, 安全仪表板, 安全运营, 安全防御评估, 开发者工具, 扫描框架, 数据富集, 日志丰富化, 日志可视化, 日志摄取, 日志生成, 病毒总览, 网络威胁, 请求拦截, 逆向工具