AnnsGilani/SOC-Threat-Hunting-Ecommerce
GitHub: AnnsGilani/SOC-Threat-Hunting-Ecommerce
基于 Splunk Enterprise 对模拟电商服务器的合成访问日志进行威胁狩猎调查,检测并记录了五类 Web 攻击活动。
Stars: 0 | Forks: 0
# 电商 SOC 调查 — Splunk 威胁狩猎项目
使用 Splunk Enterprise 和 SPL 进行的自主 SOC 调查,针对模拟的电商 Web 服务器,旨在检测、关联并记录混入正常流量中的真实攻击行为。

## 概述
- **数据集:** 250,000 个事件,Apache Combined Log Format
- **时间范围:** 14 天(2026 年 7 月 6 日–19 日)
- **唯一客户端 IP:** ~1,383
- **工具:** Splunk Enterprise, SPL
- **确认的发现:** 识别并验证了 5 次不同的攻击活动
该数据集是一个合成的访问日志,旨在模拟真实的电商流量——正常浏览、结账流程、静态资产、健康检查——同时攻击活动被直接穿插在同一时间线中。攻击者 IP **并未**被放置在与合法流量分离的地址段中,这意味着检测必须依赖于行为(请求率、payload 内容、响应代码模式、目标 endpoint),而不是简单的 IP 封锁过滤。
## 方法论
1. 建立正常 Web 流量的基线(吞吐量、状态码分布、HTTP 方法)
2. 识别最活跃的客户端 IP
3. 审查请求的 URI 以查找恶意模式
4. 检查 HTTP 响应码以发现异常
5. 调查可疑的 user agent
6. 使用 `timechart` 关联时间戳和攻击序列
7. 使用 `stats` 聚合而不是原始事件列表来验证每项发现的总范围(见下文注释)
8. 记录证据并构建仪表盘以进行持续监控
**期间总结的经验:** Splunk 的默认事件列表视图仅显示有上限的结果页。在此次调查的早期阶段,仅凭肉眼观察该视图严重低估了某次活动的实际持续时间。改为运行 `stats count, min(_time) as first, max(_time) as last by clientip` 后,每次都能得出真实的时间窗口——这现在已成为以下每项发现的固定习惯。
## 确认的 IOC 摘要
| 源 IP | 攻击类型 | 严重性 | 状态 |
|---|---|---|---|
| `111.115.221.94` | SQL 注入(自动化,sqlmap) | 高 | 已检测 |
| `59.32.208.15` | 凭据暴力破解 (`/wp-login.php`) | 严重 | 已检测 — 尝试约 3,200 次后有 1 次成功登录 |
| `167.25.135.250` | 目录枚举 | 高 | 已检测 |
| `188.32.158.82` | 强制浏览 (Feroxbuster) | 中 | 已检测 |
| `89.159.44.17` | 管理后台门户攻击(Basic-Auth 暴力破解) | 严重 | 已检测 — 尝试约 1,400 次后有 1 次成功登录 |
## 详细发现
### 发现 1 — SQL 注入 (`111.115.221.94`)
在 URI 参数中观察到自动化的 SQL 注入 payload,集中在短暂的高频时间窗口内。
```
index=web_lab clientip="111.115.221.94" | timechart span=5m count by status
```
### 发现 2 — 凭据暴力破解 (`59.32.208.15`)
在约 32 分钟内对 `/wp-login.php` 发起持续的 POST 请求,尝试约 3,200 次,在密集的失败尝试之后紧接着出现了一次成功的身份验证。
```
index=web_lab clientip="59.32.208.15" | timechart span=1m count by status
```
### 发现 3 和 4 — 目录枚举 / 强制浏览
针对不同 endpoint 的两波独立枚举,其中一波通过其 Feroxbuster user agent 字符串被识别出来。
```
index=web_lab (clientip="167.25.135.250" OR clientip="188.32.158.82") | timechart span=2m count by clientip
```
### 发现 5 — 管理后台门户攻击 (`89.159.44.17`)
针对 `/admin/` 的 HTTP Basic-Auth 暴力破解。由于目标使用 Basic-Auth,因此可以直接从 Splunk 的 `user` 字段中恢复尝试的用户名——这是比单看请求量更强的 IOC。
```
index=web_lab clientip="89.159.44.17" | stats count by user | sort -count
```
## 仪表盘
一个 Splunk 经典仪表盘 (`dashboard/ecommerce_soc_dashboard.xml`) 汇总了所有五项发现以及基线流量面板:一个 KPI 条、整体流量时间线、确认的 IOC 表格,以及针对每项发现的专用下钻面板。
## 建议
- 部署 Web 应用防火墙 (WAF)
- 对所有特权账户强制执行多因素身份验证 (MFA)
- 对身份验证 endpoint 实施速率限制
- 监控来自单一源的连续 404/403 爆发
- 根据 user agent 检测并拦截已知的自动化扫描工具
- 验证并清理所有用户输入
## 关键要点
## 仓库内容
```
├── README.md
├── dashboard/
│ └── ecommerce_soc_dashboard.xml
├── screenshots/
└── report/
└── SOC_Threat_Hunting_Investigation_Report.pdf
```
## 作者
Muhammad Anas Gilani — 计算机科学 (BSCS) 学生,正致力于成为 SOC 分析师和云安全工程师。
标签:CISA项目, IP 地址批量处理, Web安全, 安全运营, 密码管理, 扫描框架, 蓝队分析