CodeBroKinty/splunk-siem-lab
GitHub: CodeBroKinty/splunk-siem-lab
基于 Splunk Enterprise 的 SIEM 实验项目,通过 SPL 查询和日志分析完整还原了一起 SSH 暴力破解攻击的调查过程并形成正式事件报告。
Stars: 0 | Forks: 0
# 🔍 SIEM 实验室:SSH 暴力破解调查
**工具:** Splunk Enterprise | **数据集:** Splunk Tutorial Data | **分析师:** [Kiante Nolen](https://github.com/CodeBroKinty)



## 概述
使用 Splunk Enterprise 构建了一个可运行的 SIEM 环境,用于摄取、查询和调查真实日志数据。识别出一次真实的 SSH 暴力破解攻击,追踪了两个用户账户的凭据泄露情况,确认了提权至 root 的操作,并将整个调查过程记录为一份正式的事件报告。
**展示技能:** 日志摄取 · SPL 查询编写 · 威胁检测 · 事件调查 · 升级文档
## 事件详情
| 字段 | 详情 |
|-------|--------|
| **攻击者 IP** | `194.8.74.23` (外部) |
| **目标** | `mailsv`, `www1`, `www2`, `www3` — SSH 端口 22 |
| **总事件数** | 跨越 7 个日志源的 313 个事件 |
| **攻击时间窗** | 2026 年 4 月 30 日 — 凌晨 02:00 突发(1 小时内 132 个事件) |
| **被攻陷账户** | `nsharpe`, `djohnson` |
| **权限提升** | 已确认 `nsharpe` 通过 `su` 提升至 root |
| **严重程度** | 高 |
### 攻击链
```
194.8.74.23 (external attacker)
└── Reconnaissance probe at 14:00 (2 events)
└── 12-hour silence (waiting for off-hours)
└── Brute force burst at 02:00 AM (132 events)
└── nsharpe compromised from 10.2.10.163
└── su to root — PRIVILEGE ESCALATION
└── djohnson compromised from 10.3.10.46
└── root opens sessions on their behalf
```
## SPL 查询
### 查询 1 — 跨基础设施的攻击范围
```
index=main "194.8.74.23" | stats count by source
```
**发现:** 单个攻击者 IP 在 7 个日志源中生成了 313 个事件 — 确认了这是一次全面的基础设施攻击,而非单一目标的探测。
### 查询 2 — 暴力破解用户名枚举
```
index=main "Failed password" "194.8.74.23"
| rex "Failed password for (invalid user )?(?\S+) from"
| stats count by username
| sort -count
```
**发现:** 使用标准的 Linux 系统账户字典表尝试了 20 多个用户名。主要目标:`local` (6), `system` (6), `irc` (5), `root` (4)。证实了这是一次非针对性的机会性字典攻击。
### 查询 3 — 攻击时间轴
```
index=main "194.8.74.23" earliest=-1d | timechart span=1h count
```
**发现:** 14:00 出现 2 个事件(侦察探测),静默 12 小时后,在凌晨 02:00 突发 132 个事件。教科书般的非工作时间攻击时机 — 旨在规避 SOC 监控的蓄意策略。
### 查询 4 — 被攻陷账户调查
```
index=main "djohnson" OR "nsharpe"
| table _time, source, _raw
| sort _time
```
**发现:** 两个账户在 02:54 AM 的攻击时间窗内均显示了来自两个不同内部 IP 的 `Accepted password` 事件。`nsharpe` 执行了 `su` 提权到 root。Root 为 `djohnson` 开启了多个会话。证实了凭据泄露和权限提升。
## 仪表板


## 证据
| 截图 | 描述 |
|-----------|-------------|
|  | 查询 1 — 跨 7 个来源的 313 个事件 |
|  | 查询 2 — 暴力破解用户名表 |
|  | 查询 3 — 凌晨 2 点攻击激增 |
|  | 查询 4 — nsharpe & djohnson 被攻陷 |
## 调查总结
### 发现了什么
一起源自外部 IP `194.8.74.23` 的两阶段 SSH 暴力破解攻击。攻击者在工作时间进行了一次初步侦察探测,等待了 12 小时后,在凌晨 2 点使用 Linux 系统账户字典发起了一次集中的撞库攻击。两个账户被成功攻陷。`nsharpe` 通过 `su` 提升至 root。活动源自两个独立的内部 IP,表明存在横向移动或预先存在的内部失陷。
### 如何发现的
1. 运行广泛的基于 IP 的搜索,以量化跨所有日志源的攻击范围
2. 使用正则表达式提取枚举出完整的用户名字典
3. 构建时间图表以识别“探测后突发”模式并确认非工作时间攻击时机
4. 调查在攻击时间窗内成功建立会话的用户,以确认凭据泄露和权限提升
### 升级上报事项
- **立即执行:** 在边界防火墙封禁 `194.8.74.23`
- **立即执行:** 禁用 `nsharpe` 和 `djohnson` 账户,等待取证审查
- **立即执行:** 审计 www1 的持久化机制 — cron 任务、新的 SSH 密钥、由 root 添加的新账户
- **紧急执行:** 调查内部 IP `10.2.10.163` 和 `10.3.10.46` 以寻找失陷迹象
- **紧急执行:** 对所有服务器在 24 小时时间窗内的 sudo/su 进行全面审计
### 建议的控制措施
- 强制仅使用基于 SSH 密钥的身份验证 — 禁用密码认证
- 实施 `fail2ban`,在 5 次失败尝试后自动封禁 IP
- 通过防火墙白名单限制已知内部 IP 的 SSH 访问
- 在 `sshd_config` 中设置 `PermitRootLogin no`
- 配置 Splunk 告警:单个 IP 在 5 分钟内出现 >5 次 SSH 失败尝试
## 使用的工具
- **Splunk Enterprise** (免费试用版) — 日志摄取、SPL 查询、仪表板
- **Splunk Tutorial Dataset** — `tutorialdata.zip`(mailsv,www1-3 的 access 和 secure 日志)
- **SPL** — 用于威胁检测查询的搜索处理语言
## 相关项目
- [Network Scanner](../week4/) — TCP 端口扫描器和服务检测器
- [AWS Security Audit](../week5/) — S3、IAM 和 EC2 安全自动化
- [Python Automation Labs](https://github.com/CodeBroKinty/python-automation-labs)
*CodeBroKinty 云安全作品集的一部分 — 记录了从 Python 自动化到云安全工程的历程。*
标签:AMSI绕过, CSV导出, Root提权, SOC分析师, Splunk Enterprise, SPL查询, SSH暴力破解, Su命令, T1059.001, Web服务器安全, 威胁检测, 安全事件调查, 安全报告, 安全运营, 实验室, 密码猜测, 库, 应急响应, 扫描框架, 攻击链, 数据摄取, 溯源分析, 特权提升, 网络安全, 自动化部署, 蓝队实战, 隐私保护