yusufdungarpurwala-beep/splunk-botsv1-threat-hunting
GitHub: yusufdungarpurwala-beep/splunk-botsv1-threat-hunting
一个使用 Splunk Enterprise 和 BOTSv1 数据集进行威胁狩猎调查的实战项目,演示了如何通过 SPL 查询分析海量安全日志以识别可疑攻击活动。
Stars: 0 | Forks: 0
# 使用 BOTSv1 数据集进行 Splunk 威胁狩猎调查
**备选标题:**
- 使用 Splunk Enterprise 进行 Web 攻击调查
- SOC 威胁狩猎实验室 – BOTSv1 数据集
- Splunk HTTP 日志分析与威胁狩猎
## 执行摘要
本项目记录了使用 Splunk Enterprise 和 Boss of the SOC Version 1 (BOTSv1) 数据集进行的威胁狩猎调查。其目标是模拟安全运营中心 (SOC) 分析师的工作流程,通过检查海量安全日志并使用 Splunk 的搜索处理语言 (SPL) 来识别可疑活动。
调查主要集中在 HTTP 流量分析上,旨在识别可疑主机、调查攻击者行为、分析 Web 请求,并了解攻击者如何与存在漏洞的 Web 应用程序进行交互。在调查过程中,使用了包括过滤、聚合、排序、基于时间的分析和字段选择在内的多种 SPL 技术来解析超过一千四百万条安全事件。
在随后调查以恶意软件为中心的场景时,发现了一个与 Sysmon 字段提取相关的问题。我们没有忽略这个问题,而是对该问题进行了调查和记录,这进一步凸显了在威胁狩猎期间得出结论之前验证日志源和数据质量的重要性。
本项目展示了对日志分析、威胁狩猎方法以及使用企业安全工具进行调查性思考的实践经验。
## 实验环境
### 使用的软件
- Splunk Enterprise
- BOTSv1 数据集 (Boss of the SOC Version 1)
- Windows 操作系统
- 本地 Splunk 实例
### 数据集
- BOTSv1 数据集
- 大约 1400 万条已索引事件
- 包括以下在内的多种日志源:
- Windows 安全日志
- Sysmon 日志
- HTTP 流量
- DNS 日志
- IIS 日志
- 网络流数据
### 调查的主要日志源
- `stream:http`
- `WinEventLog:Security`
- `XmlWinEventLog:Microsoft-Windows-Sysmon/Operational`
## 调查目标
本次调查的目的是通过分析真实世界的安全日志来培养实际的 SOC 分析师技能。
本次调查旨在:
- 识别可疑的网络活动。
- 确定哪个源 IP 生成了最大数量的 HTTP 请求。
- 使用 HTTP 方法分析攻击者行为。
- 调查针对性的 Web 资源。
- 检查 Web 服务器返回的 HTTP 状态码。
- 审查 User-Agent 字符串,以排查侦察或自动化工具。
- 执行时间线分析,以识别可疑活动的集中时间段。
- 获取编写用于威胁狩猎的 SPL 查询的经验。
- 在结构化的事件报告中记录调查结果。
## 调查方法
本次调查遵循了类似于 SOC 分析师所执行的结构化威胁狩猎工作流程。
该过程首先使用 `stream:http` sourcetype 从 BOTSv1 数据集中分离出 HTTP 流量。在确定了 HTTP 事件总量后,使用统计聚合技术来确定哪个源 IP 生成了最多的请求。
一旦确定了最活跃的源 IP,便使用额外的 SPL 查询来分析攻击者的活动。通过执行 URI 分析来确定哪些应用程序 endpoint 受到针对。通过分析 HTTP 方法来了解攻击者的行为,并判断请求主要是侦察还是利用尝试。
通过检查 HTTP 响应状态码来识别反复出现的服务器端故障和失败的请求。随后,使用时间线可视化来识别 HTTP 500 响应最频繁出现的时期,这表明可能存在利用尝试。
额外的调查包括审查 User-Agent 字符串和 HTTP 请求元数据(如 referrer 字段和提交的表单数据),以便更好地了解攻击者与 Web 应用程序之间的交互。
最后,我们尝试调查 Sysmon 日志以寻找恶意软件活动。在此阶段,缺失的字段提取阻碍了高级分析的进行。我们没有忽略这个问题,而是将其作为整个项目的一部分进行了调查和记录。
## 使用的 SPL 查询
### 查看 HTTP 流量
```
index=botsv1 sourcetype=stream:http
```
**目的:** 显示数据集中可用的所有 HTTP 流量。

### 识别最活跃的源 IP
```
index=botsv1 sourcetype=stream:http
| stats count by src_ip
| sort -count
```
**目的:** 识别哪个 IP 地址生成了最大数量的 HTTP 请求。
**发现:** `40.80.148.42` 生成了大约 17,547 个 HTTP 请求。

### 调查攻击者活动
```
index=botsv1 sourcetype=stream:http src_ip="40.80.148.42"
```
**目的:** 审查与可疑攻击者相关的所有 HTTP 活动。
### URI 分析
```
index=botsv1 sourcetype=stream:http src_ip="40.80.148.42"
| stats count by uri
| sort -count
```
**目的:** 识别最常被针对的应用程序 endpoint。
**发现:** 请求最多的 URI:`/joomla/index.php/component/search/`

### HTTP 方法分析
```
index=botsv1 sourcetype=stream:http src_ip="40.80.148.42"
| stats count by http_method
| sort -count
```
**目的:** 确定攻击者如何与应用程序进行交互。
**发现:**
| 方法 | 计数 |
|---|---|
| POST | ~12,000 |
| GET | ~4,600 |
| OPTIONS | 5 |
| CONNECT | 1 |
| PROPFIND | 1 |
| TRACE | 1 |

### User-Agent 分析
```
index=botsv1 source="stream:http" src_ip="40.80.148.42"
| stats count by http_user_agent
| sort -count
```
**目的:** 识别攻击期间使用的工具或浏览器。
**发现:** 观察到的大部分是常见的浏览器 User-Agent 字符串,但也发现了几个不常见的、仅出现一次的 User-Agent 值,这可能表明使用了自动化扫描或测试工具。

### HTTP 状态码分析
```
index=botsv1 sourcetype=stream:http src_ip="40.80.148.42"
| stats count by status
| sort -count
```
**目的:** 分析返回给攻击者的服务器响应。
**发现:**
| 状态码 | 计数 |
|---|---|
| 303 | ~11,000 |
| 200 | ~2,900 |
| 404 | ~1,900 |
| 500 | ~1,500 |
| 400 | 62 |
| 403 | 51 |
| 301 | 18 |
| 304 | 15 |
| 405 | 7 |
| 417 | 1 |
| 501 | 1 |

### 识别返回 HTTP 500 的 URI
```
index=botsv1 sourcetype=stream:http src_ip="40.80.148.42" status=500
| stats count by uri
| sort -count
```
**目的:** 确定哪些应用程序 endpoint 产生了最多的服务器错误。
**发现:** Joomla 搜索组件产生了大部分的 HTTP 500 响应。
### 时间线分析
```
index=botsv1 sourcetype=stream:http src_ip="40.80.148.42" status=500 http_method=POST
| timechart count
```
**目的:** 识别在攻击期间何时发生服务器错误。
**发现:** 观察到三次明显的激增,表明存在集中的攻击活动期。

### 表格视图
```
index=botsv1 sourcetype=stream:http src_ip="40.80.148.42"
| table _time src_ip uri http_method status
```
**目的:** 展示攻击者活动的简化时间顺序视图。
## 关键发现
- 成功分析了 BOTSv1 数据集中超过一千四百万条安全事件。
- 确认 `40.80.148.42` 为最活跃的 HTTP 源 IP,发起了大约 17,547 次请求。
- 确定攻击者主要针对位于 `/joomla/index.php/component/search/` 的 Joomla 搜索组件。
- 观察到 POST 请求占了攻击者活动的大部分,表明其多次尝试与服务器端功能进行交互。
- 发现与 Joomla 搜索 endpoint 相关的大量 HTTP 500 响应,表明存在反复出现的服务器端处理错误。
- 时间线分析揭示了 HTTP 500 响应中的三次明显激增,暗示存在多个集中的攻击活动阶段。
- User-Agent 分析揭示了标准浏览器标识符和不常见值的混合体,这些不常见值可能代表了自动化侦察或扫描活动。
- 调查突出了在进行高级威胁狩猎之前验证日志解析和字段提取的重要性。
## 经验教训
本次调查强化了在执行威胁狩猎时遵循结构化方法的重要性。我们不直接假设存在恶意活动,而是在调查个别事件之前使用统计分析来识别异常。
该项目提高了使用诸如 `stats`、`sort`、`table` 和 `timechart` 等 SPL 命令的实践经验,展示了如何将海量的安全事件汇总为有意义的发现。
最有价值的经验之一来自对 Sysmon 数据源的故障排查。在尝试调查恶意软件活动时,尽管原始 XML 日志中包含 `Image`、`EventID` 和 `ProcessId` 等预期字段,但它们却无法使用。进一步的调查证实,这些数据缺乏预期的字段提取。这一经验强调,准确的威胁狩猎不仅取决于编写正确的查询,还取决于验证摄入的日志数据的质量和结构。
该项目还通过鼓励基于假设的调查,而不是仅仅依赖操作指南,从而强化了分析思维。
## 遇到的挑战
- 大型数据集需要仔细进行查询优化。
- 理解 SPL 语法需要进行不断的试验。
- 必须理解 source、host 和 sourcetype 之间的区别。
- HTTP 状态码需要结合上下文进行解释。
- Sysmon 字段提取问题阻碍了以恶意软件为中心的调查的完成。
- 需要执行多个故障排查步骤,才能确定该问题源于缺失的字段提取,而不是不正确的 SPL 查询。
## 未来改进
未来的工作将通过调查 BOTSv1 数据集中额外的攻击阶段来扩展本项目,包括恶意软件执行、暴力破解身份验证尝试、横向移动和数据泄露。
Splunk 环境将被重新配置以确保正确的 Sysmon 字段提取,从而能够对进程创建事件、命令行参数、镜像加载和父子进程关系进行深入调查。
将开发额外的仪表板和可视化视图以改善分析师的工作流程,并将创建检测规则以自动识别可疑的 HTTP 活动和常见攻击模式。
标签:BOTSv1, 安全运营, 扫描框架, 网络流量分析