cnyarotso/SocLab
GitHub: cnyarotso/SocLab
基于 Zeek 与 Splunk 搭建的 SOC 流量监控实验,完整演示了从数据包捕获到 SIEM 分析的全流程。
Stars: 0 | Forks: 0
# SOC 网络流量监控实验:基于 Zeek 与 Splunk
## 概述
本文档记录了一个实战型安全运营中心(SOC)实验,涉及网络流量监控、数据包捕获、Zeek 遥测生成、Splunk SIEM 数据接入、字段提取以及仪表板开发。
该实验展示了原始网络流量如何被捕获、转换为安全遥测数据、接入 SIEM 平台,并通过搜索查询和仪表板指标进行分析。
## 简短说明
使用 Wireshark、Npcap、Kali Linux、Docker、Zeek 和 Splunk 设计并实现了一个实操型 SOC 监控实验,模拟真实网络安全运维。项目重点关注数据包捕获、网络遥测生成、SIEM 数据接入、威胁狩猎、字段提取和仪表板可视化,用于分析实验室受控环境中的 DNS、HTTPS、mDNS 和 TCP 流量。
## 实验架构
```
Network Traffic
↓
Npcap Packet Capture
↓
Wireshark Traffic Collection
↓
PCAP/PCAPNG Capture File
↓
Kali Linux VM
↓
Dockerized Zeek Analysis
↓
Zeek Logs
↓
Splunk SIEM Ingestion
↓
Search, Field Extraction, Dashboards
```
## 使用工具
| 工具 | 用途 |
|---|---|
| Wireshark | 捕获并检查原始网络数据包 |
| Npcap | Windows 数据包捕获驱动程序,供 Wireshark 使用 |
| Kali Linux | 安全工作站和分析环境 |
| VirtualBox | Kali 虚拟机的虚拟化平台 |
| Docker | 容器化 Zeek 部署 |
| Zeek | 将数据包捕获转换为网络安全遥测数据 |
| Splunk | SIEM 平台,用于日志接入、搜索、可视化和告警 |
## 项目目标
- 使用 Wireshark 捕获实时 Wi-Fi 网络流量。
- 理解 Npcap 在数据包捕获中的作用。
- 配置 Kali Linux 网络以访问互联网。
- 当原生安装因依赖冲突失败时,使用 Docker 运行 Zeek。
- 使用 Zeek 分析数据包捕获。
- 生成 Zeek 日志,包括 `conn.log`、`dns.log`、`ssl.log` 和 `weird.log`。
- 将 Zeek 日志接入 Splunk。
- 从原始 Zeek 日志中提取字段。
- 构建一个仪表板就绪的搜索,用于展示源 IP 活动排名。
- 记录该过程如何反映真实 SOC 工作流。
## 仓库结构
```
soc-zeek-splunk-lab/
│
├── README.md
├── screenshots/
├── splunk_queries/
│ ├── top_source_ips.spl
│ ├── extract_source_ip.spl
│ ├── search_all_zeek_conn.spl
│ └── suspicious_connection_states.spl
├── zeek_commands/
│ └── docker_zeek_commands.md
├── notes/
│ ├── soc_workflow_notes.md
│ └── troubleshooting_notes.md
├── docs/
│ └── project_summary.md
└── sample_outputs/
├── sample_conn_log_observations.md
└── sample_dns_observations.md
```
## 分步实验工作流
### 1. 安装 Wireshark 和 Npcap
使用 Wireshark 捕获并检查网络流量。Npcap 通过允许 Wireshark 访问网络接口,在 Windows 上实现数据包捕获。
**关键概念:**
Wireshark 是数据包分析工具。Npcap 是数据包捕获驱动程序,使 Wireshark 能够从网络适配器收集流量。
### 2. 配置 Kali Linux 虚拟机网络
Kali 虚拟机最初使用仅主机适配器,无法解析互联网域名。
问题表现为:
```
Temporary failure resolving 'http.kali.org'
```
虚拟机接口显示类似地址:
```
192.168.56.101
```
这表明使用了仅主机网络。
适配器更改为:
```
NAT
```
切换到 NAT 后,Kali 成功连接互联网:
```
ping google.com
```
### 3. 尝试原生安装 Zeek
首次尝试直接在 Kali 上安装 Zeek 因依赖冲突而失败:
```
zeek : Depends: libc6 (< 2.38) but 2.42-13 is to be installed
```
为避免降级核心库破坏 Kali,改用 Docker。
### 4. 安装并验证 Docker
```
sudo apt install docker.io -y
sudo systemctl start docker
sudo docker run hello-world
```
Docker 确认安装成功。
### 5. 使用 Docker 运行 Zeek
使用官方 Zeek Docker 镜像验证 Zeek:
```
sudo docker run --rm zeek/zeek zeek --version
```
观察到输出:
```
zeek version 8.2.0
```
### 6. 保存 Wireshark 数据包捕获
将 Windows 宿主机上的 Wireshark 捕获保存到以下路径:
```
C:\temp
```
实验中使用的捕获文件:
```
wifitest--pcappng.pcapng
```
配置 VirtualBox 共享文件夹,使 Kali 能够访问 Windows 文件夹,路径如下:
```
/media/sf_temp
```
### 7. 从数据包捕获生成 Zeek 日志
导航到共享文件夹:
```
cd /media/sf_temp
```
创建输出目录:
```
mkdir zeek_output
```
对数据包捕获运行 Zeek:
```
sudo docker run --rm -v "$PWD":/pcap -w /pcap/zeek_output zeek/zeek zeek -r /pcap/wifitest--pcappng.pcapng
```
Zeek 生成了如下日志:
```
conn.log
dns.log
packet_filter.log
quic.log
snmp.log
ssl.log
weird.log
x509.log
```
### 8. 查看 Zeek 日志
检查 DNS 日志:
```
head zeek_output/dns.log
```
检查连接日志:
```
head -20 zeek_output/conn.log
```
观察到的示例包括:
- 端口 53 上的 DNS 流量
- 端口 443 上的 HTTPS 流量
- 端口 5353 上的 mDNS 流量
- IPv6 DNS 活动
- Zeek 连接状态,如 `SF`、`S0`、`OTH` 和 `SHR`
### 9. 将 Zeek 日志接入 Splunk
在 Splunk 中操作如下:
1. 打开 **搜索与报告**
2. 进入 **设置 → 添加数据**
3. 上传 `conn.log`
4. 创建一个名为以下内容的源类型:
```
zeek_conn
```
5. 完成数据接入
6. 开始搜索上传的数据
### 10. 在 Splunk 中搜索 Zeek 日志
搜索所有 Zeek 连接事件:
```
sourcetype="zeek_conn"
```
### 11. 提取源 IP 字段
Splunk 最初将 Zeek 日志视为原始文本,因此使用了正则表达式提取:
```
sourcetype="zeek_conn"
| rex field=_raw "(?\d+\.\d+\.\d+\.\d+)"
```
这创建了一个可用的字段,名为:
```
src_ip
```
### 12. 创建仪表板就绪的聚合查询
第一个 SOC 仪表板指标按源 IP 统计网络活动:
```
sourcetype="zeek_conn"
| rex field=_raw "(?\d+\.\d+\.\d+\.\d+)"
| stats count by src_ip
```
示例结果:
| 源 IP | 计数 |
|---|---|
| 10.0.0.79 | 6 |
| 10.0.0.19 | 5 |
| 10.0.0.142 | 1 |
该指标有助于识别高活动主机、嘈杂系统以及潜在的调查起点。
## 展示的 SOC 概念
### 数据包捕获 vs SIEM 监控
| 层次 | 工具 | 用途 |
|---|---|---|
| 数据包捕获 | Npcap | 启用数据包收集 |
| 数据包检查 | Wireshark | 深度数据包分析 |
| 遥测生成 | Zeek | 将数据包转换为结构化日志 |
| SIEM | Splunk | 集中搜索、仪表板展示和告警 |
## 真实 SOC 对比
在真实 SOC 中,分析师通常不会整天通过 Wireshark 观看数据包。而是:
1. 网络和端点工具收集遥测数据。
2. SIEM 平台接入并关联日志。
3. 基于检测规则生成告警。
4. 分析师在 Splunk 等工具中调查告警。
5. 在需要时,使用 Wireshark 进行更深入的数据包级调查。
本实验模拟了该工作流的基础部分。
## 截图
截图存储在 `screenshots/` 文件夹中,记录了以下内容:
- VirtualBox 网络配置
- Kali 网络故障排查
- Wireshark 捕获保存
- 共享文件夹设置
- Splunk 上传过程
-unk 源类型创建
- Splunk 搜索结果
- 使用 `rex` 进行字段提取
- 源 IP 聚合结果
## 展示的关键技能
- 网络数据包捕获
- Wireshark 分析
- Kali Linux 故障排查
- 基于 Docker 的安全工具使用
- Zeek 网络遥测生成
- Splunk SIEM 数据接入
- SPL 搜索查询
- 正则表达式字段提取
- SOC 仪表板准备
- 威胁狩猎基础
- 安全文档编写
## 未来改进
- 配置持续日志接入 Splunk。
- 添加 DNS 专项仪表板。
- 创建针对过多失败连接的告警规则。
- 构建端口扫描检测查询。
- 添加 Suricata 用于 IDS 告警。
- 集成邮件告警通知。
- 使用 Splunk SOAR 或 Microsoft Sentinel Playbooks 探索 SOAR 工作流。
## 作者
Carol Nyarotso
网络安全 • 数字健康系统 • SOC 实验室 • SIEM • 威胁检测 • 数据分析
标签:Docker, Npcap, Rootkit, Wildcard支持, Wireshark, Zeek, 仪表板, 句柄查看, 字段提取, 安全实验室, 安全运营中心, 安全防御评估, 网络安全, 网络映射, 网络遥测, 请求拦截, 隐私保护