abdul48bari/splunk-soc-detection-lab
GitHub: abdul48bari/splunk-soc-detection-lab
一个基于 Splunk 和 Sysmon 的企业级 SOC 家庭实验室,用于演示检测工程、日志分析和威胁狩猎的完整工作流程。
Stars: 1 | Forks: 0
# SOC 家庭实验室:使用 Splunk 进行检测工程与威胁狩猎
这是一个企业级的安全运营中心 (SOC) 家庭实验室,旨在展示实际的**检测工程**、**日志分析**和**威胁狩猎**技能。本项目复现了 Tier 1 SOC 分析师的核心工作流程:收集遥测数据、模拟真实攻击、使用自定义查询进行检测,并记录发现。




## 概述
我构建了一个多虚拟机实验室环境,部署了 **Splunk Enterprise** 作为 SIEM,并从受监控的端点转发了 **Windows Event Log** 和 **Sysmon** 遥测数据。然后,我从 Kali Linux 模拟了真实世界的攻击,设计了映射到 **MITRE ATT&CK** 框架的自定义 **SPL** 检测,在实时 SOC 仪表板中将结果可视化,并进行了一次假设驱动的威胁狩猎。
目标很简单:证明我能够端到端地运行完整的检测生命周期 —— **收集 → 检测 → 调查 → 记录。**
## 实验室架构

```
┌──────────────────────────┐
│ Kali Linux │
│ 192.168.19.133 │
│ (Attacker) │
└────────────┬─────────────┘
│ Attacks (brute force, recon)
▼
┌──────────────────────────┐
│ Windows 10 │
│ 192.168.19.135 │
│ Monitored Endpoint │
│ • Universal Forwarder │
│ • Sysmon │
└────────────┬─────────────┘
│ Logs (Windows Events + Sysmon)
│ TCP 9997
▼
┌──────────────────────────┐
│ Ubuntu │
│ 192.168.19.136 │
│ Splunk Enterprise SIEM │
│ (Indexer + Search Head) │
└──────────────────────────┘
```
| 虚拟机 | 角色 | 关键软件 |
|----|------|--------------|
| **Ubuntu** | SIEM 服务器 | Splunk Enterprise (indexer + search head) |
| **Windows 10** | 受监控端点 | Splunk Universal Forwarder, Sysmon |
| **Kali Linux** | 攻击者 | CrackMapExec, Nmap |
| **Windows Server 2019** | 域控制器 | *(保留用于后续的 Active Directory 实验)* |
所有机器均运行在 **VMware Workstation** 的一个隔离 NAT 网络上。
## 数据流水线
1. **Sysmon**(带有调优的 SwiftOnSecurity 配置)捕获深度的端点遥测数据 —— 包含完整命令行的进程创建、父子进程关系、网络连接以及文件/注册表活动。
2. **Splunk Universal Forwarder** 通过 TCP 9997 端口将 Windows Security/System/Application 日志**和** Sysmon 操作通道发送至 SIEM。
3. **Splunk Enterprise** 对数据进行索引,随后对其进行搜索、关联、告警和可视化。
## 设计的检测
每次攻击均从 Kali 发起,随后在 Splunk 中使用自定义 SPL 查询进行检测,并映射到 MITRE ATT&CK。
### 1. 暴力破解身份验证 — `T1110`
使用 CrackMapExec 对一个 SMB 账户运行了密码猜测攻击,产生了一阵失败的登录尝试,随后登录成功。
**检测逻辑 —— 标记具有过多失败登录的账户:**
```
index=main source="WinEventLog:Security" EventCode=4625
| stats count by Account_Name, host
| where count > 2
| sort - count
```
**关联时间线 —— 失败爆发后跟随成功的登录:**
```
index=main source="WinEventLog:Security" (EventCode=4625 OR EventCode=4624) Account_Name="testvictim"
| table _time, EventCode, Account_Name, Source_Network_Address
| sort _time
```

### 2. 主机与域侦察 — `T1087` / `T1082`
入侵后的发现命令在端点上执行,并通过 Sysmon 进程创建日志被检测到。
```
index=main source="*Sysmon*" EventCode=1
(CommandLine="*whoami*" OR CommandLine="*net user*" OR CommandLine="*net localgroup*"
OR CommandLine="*systeminfo*" OR CommandLine="*nltest*")
| table _time, User, ParentImage, Image, CommandLine
| sort _time
```
## SOC 监控仪表板
一个实时的 5 面板仪表板,可对环境进行一目了然的监控:
- **随时间变化的失败登录** —— 显示身份验证攻击的激增
- **登录成功与失败对比** —— 身份验证结果的细分
- **受攻击最多的账户** —— 排名靠前、正受到攻击的账户
- **检测到的侦察命令** —— 来自 Sysmon 的发现活动
- **顶级进程活动** —— 进程执行基线

## 端点遥测 (Sysmon)
丰富的进程创建数据,显示了父进程、执行的映像以及完整的命令行 —— 这正是分析师用来调查可疑活动的确切字段。

## 威胁狩猎
**假设:** 如果攻击者对端点进行暴力破解,我们应该会看到针对单一账户的大量失败登录 (4625) 激增,随后是一次成功的登录 (4624) 和早期的发现命令。
**方法:**
1. 查询按账户分组的失败登录 —— 发现 `testvictim` 超过了尝试阈值。
2. 关联 4625/4624 时间线,确认在失败爆发后立即出现了成功的登录。
3. 转向 Sysmon 进程日志,并确认了受影响主机上的侦察命令(`whoami`、`nltest`、`systeminfo`)。
**发现:** 模式相匹配 —— 一次成功的暴力破解,随后是主机和域侦察,映射到 **T1110** 和 **T1087 / T1082**。
**建议:** 强制执行账户锁定策略,对单个账户的 4625 激增进行告警,监控集群化的发现命令,并要求使用强大且唯一的凭证。
## 展现的技能
`SIEM 管理` · `检测工程` · `SPL (搜索处理语言)` · `Sysmon`
`Windows Event Log 分析` · `MITRE ATT&CK` · `威胁狩猎` · `事件调查`
`日志转发与流水线设计` · `攻击模拟` · `Linux 与 Windows 管理`
## 仓库结构
```
splunk-soc-detection-lab/
├── README.md
├── screenshots/
│ ├── architecture-diagram.png
│ ├── sysmon-telemetry-splunk.png
│ ├── brute-force-detection.png
│ └── soc-dashboard.png
├── detections/
│ └── spl-queries.md
└── threat-hunt/
└── threat-hunt.md
```
## 关键收获
构建这个实验室印证了,可见性在很大程度上取决于遥测数据的质量 —— 经过调优的 Sysmon 配置能将浅层的默认日志转化为丰富、可调查的数据源。它也使检测生命周期变得具体:只有当查询能可靠地将攻击呈现出来时,攻击才算被“检测”到;只有当文档记录得足够清晰、足以让他人据此采取行动时,检测才是有用的。
*该实验室是在隔离环境中出于教育和作品集目的而构建的。*
标签:CTI, Sysmon, 安全实验室, 安全运营中心, 插件系统, 网络映射