batuhann99/splunk-detection-lab
GitHub: batuhann99/splunk-detection-lab
一个基于 Splunk Cloud 构建的 SIEM 检测工程实战项目,提供自定义 SPL 检测规则、Python IOC 富化脚本和多面板 SOC 仪表盘。
Stars: 0 | Forks: 0
# 🔍 Splunk 检测实验室
一个基于 Splunk Cloud 构建的 SIEM 检测工程实战项目。包含真实的攻击场景、自定义 SPL 检测规则、基于 Python 的 IOC 富化,以及一个全面运作的 SOC 仪表盘 —— 旨在模拟真实的 SOC 分析师工作流程。
## 📌 项目概述
本项目展示了如何使用 Splunk Cloud 作为 SIEM 平台进行端到端的检测工程。我们创建并接入(Ingest)了三个真实的攻击日志数据集,涵盖 Web 应用程序攻击、Windows 身份验证事件以及网络层威胁。在此数据基础之上,构建了自定义的 SPL 检测规则、定时告警、Python IOC 富化脚本,以及一个多面板的 SOC 仪表盘。
## 🛠️ 技术栈
| 工具 | 用途 |
|------|---------|
| Splunk Cloud | SIEM 平台 |
| SPL | 检测规则语言 |
| Python 3 | IOC 富化脚本 |
| VirusTotal API | IP/hash 信誉查询 |
| AbuseIPDB API | IP 滥用置信度评分 |
| GitHub | 版本控制与文档管理 |
## 📁 项目结构
```
splunk-detection-lab/
├── detections/
│ ├── brute_force_detection.spl
│ ├── critical_events_detection.spl
│ ├── sensitive_file_access.spl
│ └── backdoor_user_creation.spl
├── enrichment/
│ ├── ioc_enricher.py
│ ├── requirements.txt
│ ├── config.example.yaml
│ └── sample_output/
│ ├── ioc_results.json
│ └── ioc_results.csv
├── dashboards/
│ └── soc_dashboard.xml
├── data/
│ └── sample_logs/
│ ├── web_attack_logs.csv
│ ├── windows_auth_logs.csv
│ └── network_scan_logs.csv
└── docs/
└── screenshots/
```
## 📊 日志数据集
三个自定义的攻击日志数据集被创建并接入到 Splunk Cloud 中:
### 1. web_attack_logs.csv — 主机:web-server-01
针对登录页面和搜索功能的 Web 应用程序攻击。
| 攻击类型 | 描述 |
|-------------|-------------|
| SQLi | 经典及盲注 SQL 注入尝试 |
| XSS | 反射型、存储型及高级 XSS payload |
| BruteForce | 13 次登录失败 → 登录成功 |
| PathTraversal | 目录遍历以访问系统文件 |
| SensitiveFile | 访问 `.env`、`wp-config.php`、`backup.zip` |
| CMDInjection | OS 命令注入及反弹 shell 尝试 |
### 2. windows_auth_logs.csv — 主机:dc01-windows
Windows Active Directory 和身份验证事件。
| 事件 | 描述 |
|-------|-------------|
| Account Lockout | 10 次登录失败 → administrator 被锁定 |
| Privilege Escalation | 用户被添加至 admin 组 |
| Mimikatz | 凭据转储工具被执行 |
| Kerberoasting | 多次 RC4 服务票据请求 |
| Backdoor User | 执行了 `net user /add backdoor` 命令 |
### 3. network_scan_logs.csv — 主机:firewall-01
在网络边界捕获到的网络层威胁。
| 威胁 | 描述 |
|--------|--------|
| Port Scan | 跨子网的全 TCP SYN 扫描 |
| C2 Beacon | 每 30 秒一次的重复连接尝试 |
| DNS Tunneling | 异常庞大的 DNS 查询字节数 |
| Lateral Movement | 跨内部主机的 SMB 连接 |
| Data Exfiltration | 对外部 IP 的大量出站传输 |
## 🚨 检测规则
### 1. 暴力破解攻击检测
**文件:** `detections/brute_force_detection.spl`
检测失败登录尝试超过 5 次的源 IP。
```
index=main sourcetype=csv attack_type=BruteForce
| stats count by src_ip
| where count > 5
| sort -count
```
**结果:** 检测到 `203.0.113.42` 尝试了 13 次 → 确认登录成功。
### 2. 严重级别事件监控
**文件:** `detections/critical_events_detection.spl`
列出所有日志源中标记为 CRITICAL(严重)级别的所有事件。
```
index=main sourcetype=csv severity=CRITICAL
| table timestamp src_ip attack_type uri
| sort timestamp
```
**结果:** 检测到 22 个严重事件,包括 BruteForce_Success 和 SensitiveFile 访问。
### 3. 敏感文件访问检测
**文件:** `detections/sensitive_file_access.spl`
检测对敏感文件成功的 HTTP 访问。
```
index=main sourcetype=csv attack_type=SensitiveFile
| table timestamp src_ip uri status_code severity
| sort timestamp
```
**结果:** `198.51.100.77` 访问了 `/.env`、`/wp-config.php`、`/backup.zip` — 全部返回 HTTP 200。
### 4. 后门用户创建检测
**文件:** `detections/backdoor_user_creation.spl`
检测在域控制器上执行 `net user /add` 命令的行为。
```
index=main source=windows_auth_logs.csv
| where like(failure_reason, "%net user%")
| table timestamp host user failure_reason
```
**结果:** `dc01-windows` 上的 `administrator` 执行了 `net user /add backdoor Passw0rd!`
## 🔔 Splunk 告警
配置了四个每小时运行一次的定时告警:
| 告警 | 严重性 | 执行计划 |
|-------|----------|----------|
| DETECT - Brute Force Attack | High(高)| 每小时 |
| DETECT - Critical Severity Events | Critical(严重)| 每小时 |
| DETECT - Sensitive File Access | High(高)| 每小时 |
| DETECT - Backdoor User Creation | Critical(严重)| 每小时 |
## 🐍 Python IOC 富化
**文件:** `enrichment/ioc_enricher.py`
使用 VirusTotal 和 AbuseIPDB API 自动富化攻击者 IP。
```
Input : Attacker IPs from Splunk detection rules
Output : Verdict (MALICIOUS / SUSPICIOUS / CLEAN) + JSON + CSV report
```
### 结果示例
| IP | VT 评分 | Abuse 评分 | 国家/地区 | ISP | 判定 |
|----|----------|-------------|---------|-----|---------|
| 185.220.101.45 | 17/91 | 100% | DE | Tor Exit Node | **MALICIOUS** |
| 45.33.32.156 | 4/91 | 12% | US | Linode | **SUSPICIOUS** |
| 203.0.113.42 | 0/91 | 0% | — | — | CLEAN |
| 198.51.100.77 | 0/91 | 0% | — | — | CLEAN |
| 91.108.4.100 | 0/91 | 0% | NL | Telegram | CLEAN |
### 用法
```
pip install -r requirements.txt
python ioc_enricher.py
```
## 📈 SOC 仪表盘
**文件:** `dashboards/soc_dashboard.xml`
包含 8 个面板的多面板暗色主题仪表盘:
- **KPI 行** — 事件总数 (128)、严重事件 (22)、暴力破解尝试 (13)、独立攻击者 IP (12)
- **攻击时间线** — 按时间展示严重性分布的堆叠柱状图
- **攻击类型分布** — 涵盖所有攻击类别的饼图
- **顶级攻击者 IP** — 最活跃威胁行为者的条形图
- **严重性细分** — 饼图 (CRITICAL / HIGH / MEDIUM / LOW)
- **暴力破解顶级来源** — 带有热力图和风险评分的表格
- **敏感文件访问** — 成功获取敏感文件的表格
- **Windows 身份验证事件** — 按事件类型分类的条形图
- **近期严重事件** — 最新严重告警的实时表格
## ✅ 项目路线图
- [x] Splunk Cloud 配置
- [x] 创建并接入攻击日志数据集(3 个来源,128 个事件)
- [x] 编写并测试 SPL 检测规则(4 条规则)
- [x] 配置 Splunk 告警(4 个告警,按小时定时执行)
- [x] Python IOC 富化脚本(VirusTotal + AbuseIPDB)
- [x] 构建 SOC 仪表盘(8 个面板)
- [x] 完整的文档及 GitHub 设置
## 👤 作者
**Batuhan Akkurt**
Blue Team / SOC Analyst
[GitHub](https://github.com/batuhann99)
标签:Python, 威胁情报, 安全运营, 开发者工具, 扫描框架, 无后门