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, 仪表板, 句柄查看, 字段提取, 安全实验室, 安全运营中心, 安全防御评估, 网络安全, 网络映射, 网络遥测, 请求拦截, 隐私保护