gutierrezxsec/Network-Reconnaissance-Detection
GitHub: gutierrezxsec/Network-Reconnaissance-Detection
基于 Splunk 和 BOTSv3 数据集构建的网络侦察检测项目,展示了完整的 Tier 1 SOC 工作流程,包括流量可视化、扫描行为检测和告警配置。
Stars: 1 | Forks: 0
# 网络侦察检测 — Splunk 仪表板与告警配置
**作者:** Rafael Gabriel Gutierrez
**目标角色:** 初级 SOC 分析师(Tier 1)
**数据集:** Boss of the SOC v3 (BOTSv3)
**使用工具:** Splunk Enterprise 免费版
## 概述
这是一个自学实践项目,旨在将 SIEM 基础知识应用于真实的安全数据集。它展示了一个基础但完整的 Tier 1 SOC 工作流程:构建对网络流量的可见性,设计针对异常行为的检测规则,并使用 Splunk 中的 BOTSv3 数据集将发现结果映射到已知的攻击者技术。
## 目标
仪表板的目标是回答关于边界网络流量的四个基本问题:
1. 谁产生了最高量的网络活动?
2. 哪些目标端口被最频繁地访问?
3. 是否有单台主机正在执行自动化的网络扫描?
4. 是否存在表明潜在数据外传的异常流量?
## 仪表板
**面板 1 — 高活跃主机(外部流量)**
过滤掉内部地址范围(10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12)以仅关注面向外部的流量,然后使用 `iplocation` 按源 IP 和大致国家/地区对结果进行分组。这提供了一个初步的分类视图 —— 高流量的外部源及其访问的端口通常是分析师首先检查的内容。
```
index=botsv3 sourcetype="stream:tcp" NOT (src_ip=10.0.0.0/8 OR src_ip=192.168.0.0/16 OR src_ip=172.16.0.0/12)
| iplocation src_ip
| stats count, values(dest_port) as targeted_ports by src_ip, Country
| sort - count
```
**面板 2 — 目标端口分布**
按 `dest_port` 聚合流量,以展示哪些端口最活跃。有助于一眼发现发往异常或非标准端口的流量。
```
index=botsv3 sourcetype="stream:tcp"
| stats count by dest_port
| sort -count
| head 15
```
**面板 3 — 扫描检测(核心面板)**
这是项目的主要检测逻辑。它将流量划分到 5 分钟的时间窗口中,并计算每个源 IP 在该窗口内访问了多少个不同的目标端口。典型的宿主机只会访问少数几个端口;在短时间内访问大量不同端口的主机正表现出网络侦察的典型特征。设置阈值(此处为超过 15 个端口)会自动标记该行为,而不是依赖对原始日志的手动审查。
```
index=botsv3 sourcetype=stream:tcp
| bucket _time span=5m
| stats dc(dest_port) as unique_ports by src_ip, _time
| where unique_ports > 15
```
**面板 4 — 随时间变化的 DNS 查询量**
随时间追踪 DNS 查询量,作为上述 TCP 面板的辅助信号。DNS 经常被滥用于侦察(枚举内部主机)和数据外传(通过查询将数据隧道化传出),因此密切关注其流量可以增加单一协议之外的可见性。
```
index=botsv3 sourcetype=stream:dns
| timechart count
```
```
---
## 告警配置
面板 3 的搜索已被保存为关联搜索,配置如下:
- **触发条件:** 结果数 > 0
- **计划:** 每 5 分钟
- **逻辑:** 标记在滚动的 5 分钟时间桶中 `unique_ports > 15` 的任何 `src_ip`
**关于实时行为的说明:** BOTSv3 是一个静态的历史数据集,而不是实时数据流,因此此告警是针对该数据集进行配置和验证的,而不是在连续的实时条件下进行测试的。触发逻辑、阈值和计划的配置与生产环境中的完全一样 —— 唯一的区别是缺少可以随着时间的推移重复触发告警的实时传入数据。这是数据集的属性,而不是告警设计的限制。
**MITRE ATT&CK 映射:** T1046 — 网络服务发现
**面板 2 — 目标端口分布**
按 `dest_port` 聚合流量,以展示哪些端口最活跃。有助于一眼发现发往异常或非标准端口的流量。
```
index=botsv3 sourcetype="stream:tcp"
| stats count by dest_port
| sort -count
| head 15
```
**面板 3 — 扫描检测(核心面板)**
这是项目的主要检测逻辑。它将流量划分到 5 分钟的时间窗口中,并计算每个源 IP 在该窗口内访问了多少个不同的目标端口。典型的宿主机只会访问少数几个端口;在短时间内访问大量不同端口的主机正表现出网络侦察的典型特征。设置阈值(此处为超过 15 个端口)会自动标记该行为,而不是依赖对原始日志的手动审查。
```
index=botsv3 sourcetype=stream:tcp
| bucket _time span=5m
| stats dc(dest_port) as unique_ports by src_ip, _time
| where unique_ports > 15
```
**面板 4 — 随时间变化的 DNS 查询量**
随时间追踪 DNS 查询量,作为上述 TCP 面板的辅助信号。DNS 经常被滥用于侦察(枚举内部主机)和数据外传(通过查询将数据隧道化传出),因此密切关注其流量可以增加单一协议之外的可见性。
```
index=botsv3 sourcetype=stream:dns
| timechart count
```
```
---
## 告警配置
面板 3 的搜索已被保存为关联搜索,配置如下:
- **触发条件:** 结果数 > 0
- **计划:** 每 5 分钟
- **逻辑:** 标记在滚动的 5 分钟时间桶中 `unique_ports > 15` 的任何 `src_ip`
**关于实时行为的说明:** BOTSv3 是一个静态的历史数据集,而不是实时数据流,因此此告警是针对该数据集进行配置和验证的,而不是在连续的实时条件下进行测试的。触发逻辑、阈值和计划的配置与生产环境中的完全一样 —— 唯一的区别是缺少可以随着时间的推移重复触发告警的实时传入数据。这是数据集的属性,而不是告警设计的限制。
**MITRE ATT&CK 映射:** T1046 — 网络服务发现