| name | analyzing-network-traffic-with-wireshark |
| description | 使用 Wireshark 和 tshark 捕获并分析网络数据包,识别恶意流量模式、诊断协议问题、提取工件, 并支持对授权网络分段进行事件响应调查。
|
| domain | cybersecurity |
| subdomain | network-security |
| tags | ["network-security","wireshark","packet-analysis","traffic-analysis","pcap"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
使用 Wireshark 分析网络流量
适用场景
- 通过检查命令与控制(command-and-control)流量、数据外泄或横向移动(lateral movement)的数据包级证据,调查疑似网络入侵
- 诊断网络性能问题,如重传、分片或 DNS 解析失败
- 通过捕获沙盒或隔离主机的流量,分析恶意软件的通信模式
- 通过确认实际穿越网络分段的流量,验证防火墙(firewall)和入侵检测系统(IDS)规则
- 从捕获的网络会话中提取文件、凭据或失陷指标(IOC)
不适用于:在未经授权的网络上捕获流量、在没有法律授权的情况下拦截私人通信,或作为生产监控中全功能 SIEM 平台的替代品。
前置条件
- 已安装 Wireshark 4.0+ 和 tshark 命令行工具
- 进行实时数据包捕获需要 root/sudo 权限或隶属于
wireshark 组
- 访问受监控网段的网络接口(物理网卡、SPAN 端口或网络分路器)
- 足够的磁盘空间用于数据包捕获文件(繁忙的千兆链路估计每分钟 1 GB)
- 熟悉 TCP/IP 协议、HTTP、DNS、TLS 和 SMB 的数据包层级细节
工作流程
步骤 1:配置捕获环境
设置捕获接口和过滤器,锁定相关流量:
tshark -D
tshark -i eth0 -f "host 10.10.5.23 and (port 80 or port 443 or port 445)" -w /tmp/capture.pcapng
tshark -i eth0 -b filesize:102400 -b files:10 -w /tmp/rolling_capture.pcapng
tshark -i eth0 -i eth1 -w /tmp/multi_interface.pcapng
对于 Wireshark GUI,在开始捕获前在"Capture Options"对话框中设置捕获过滤器。
步骤 2:应用显示过滤器进行针对性分析
tshark -r capture.pcapng -Y "http.user_agent contains \"curl\" or http.user_agent contains \"Wget\""
tshark -r capture.pcapng -Y "dns.qry.name contains \".xyz\" or dns.qry.name contains \".top\" or dns.qry.name contains \".tk\""
tshark -r capture.pcapng -Y "tcp.analysis.retransmission"
tshark -r capture.pcapng -Y "smb2.cmd == 5 or smb2.cmd == 3" -T fields -e ip.src -e ip.dst -e smb2.filename
tshark -r capture.pcapng -Y "ftp.request.command == \"PASS\" or http.authbasic"
tshark -r capture.pcapng -Y "ip.dst == 203.0.113.50" -T fields -e frame.time_relative -e ip.src -e tcp.dstport
步骤 3:协议专项深度分析
tshark -r capture.pcapng -q -z follow,tcp,ascii,0
tshark -r capture.pcapng -Y "http" -T fields -e frame.time -e ip.src -e ip.dst -e http.request.method -e http.request.uri -e http.response.code
tshark -r capture.pcapng -q -z dns,tree
tshark -r capture.pcapng -Y "tls.handshake.type == 2" -T fields -e ip.src -e ip.dst -e tls.handshake.ciphersuite
tshark -r capture.pcapng -Y "smb2" -T fields -e frame.time -e ip.src -e ip.dst -e smb2.filename -e smb2.cmd
步骤 4:提取工件和 IOC
tshark -r capture.pcapng --export-objects http,/tmp/http_objects/
tshark -r capture.pcapng --export-objects smb,/tmp/smb_objects/
tshark -r capture.pcapng -T fields -e ip.dst | sort -u > unique_dest_ips.txt
tshark -r capture.pcapng -Y "tls.handshake.type == 11" -T fields -e x509sat.uTF8String -e x509ce.dNSName
tshark -r capture.pcapng -Y "http.request" -T fields -e http.host -e http.request.uri | sort -u > urls.txt
find /tmp/http_objects/ -type f -exec sha256sum {} \; > extracted_file_hashes.txt
步骤 5:统计分析与异常检测
tshark -r capture.pcapng -q -z io,phs
tshark -r capture.pcapng -q -z conv,tcp -z conv,udp
tshark -r capture.pcapng -q -z endpoints,ip
tshark -r capture.pcapng -q -z io,stat,1,"COUNT(frame) frame"
tshark -r capture.pcapng -Y "tcp.flags.syn == 1 and tcp.flags.ack == 0" -T fields -e ip.src -e tcp.dstport | sort | uniq -c | sort -rn | head -20
步骤 6:生成报告和导出证据
tshark -r capture.pcapng -Y "ip.addr == 10.10.5.23 and tcp.port == 4444" -w evidence_c2_traffic.pcapng
tshark -r capture.pcapng -T fields -E header=y -E separator=, -e frame.number -e frame.time -e ip.src -e ip.dst -e ip.proto -e tcp.srcport -e tcp.dstport -e frame.len > traffic_summary.csv
tshark -r capture.pcapng -T pdml > capture_analysis.xml
sha256sum capture.pcapng > capture_hash.txt
核心概念
| 术语 | 定义 |
|---|
| 捕获过滤器(BPF) | 在捕获时应用的伯克利数据包过滤器(Berkeley Packet Filter)语法,用于限制记录的数据包,减小文件大小并提升性能 |
| 显示过滤器 | Wireshark 特有的过滤器语法,应用于已捕获的数据包以进行聚焦分析,不修改捕获文件 |
| PCAPNG | 下一代数据包捕获格式,支持在单个文件中存储多个接口、名称解析、注释和元数据 |
| TCP 流 | 重组后的 TCP 分段序列,代表两个端点之间完整的双向会话 |
| 协议解析器 | Wireshark 模块,用于解码特定协议的字段和结构,实现对数据包内容的深度检查 |
| IO 图 | 捕获期间数据包或字节速率的时序可视化,用于识别流量峰值或信标行为 |
工具与系统
- Wireshark 4.0+:基于 GUI 的数据包分析器,支持 3000+ 协议的解析器、流重组和导出功能
- tshark:Wireshark 的命令行版本,用于无界面捕获、批量处理和脚本化分析流程
- tcpdump:轻量级数据包捕获工具,适合在无 GUI 依赖的远程系统上快速捕获
- mergecap:Wireshark 工具,用于将多个捕获文件合并为单个 PCAP 进行统一分析
- editcap:Wireshark 工具,用于拆分、过滤和转换捕获文件格式
常见场景
场景:调查疑似通过 DNS 隧道的数据外泄
场景背景:安全运营中心(SOC)团队检测到一台工作站(10.10.3.45)向外部域名发出异常高频的 DNS 查询。SIEM 告警显示 DNS 查询平均每分钟 200 次,而基线为 15 次。已在工作站所在 VLAN 的网络分路器上启动数据包捕获。
方法:
- 使用
tshark -i eth2 -f "host 10.10.3.45 and port 53" -w dns_exfil_investigation.pcapng 从工作站子网捕获流量
- 分析 DNS 查询模式:
tshark -r dns_exfil_investigation.pcapng -Y "dns.qry.name contains \"suspect-domain.xyz\"" -T fields -e frame.time -e dns.qry.name
- 检查子域名标签中的编码数据(长 base64 类子域名表明存在隧道):
tshark -r dns_exfil_investigation.pcapng -Y "dns.qry.type == 16" -T fields -e dns.qry.name -e dns.txt
- 通过累加查询名称长度计算数据量,估算外泄带宽
- 提取唯一查询名称并解码 base64 子域名以恢复外泄内容
- 将证据数据包导出到独立 PCAP,并生成 SHA-256 哈希用于证据监管链
常见陷阱:
- 在繁忙网络上捕获未过滤流量,在收集到相关数据前磁盘空间耗尽
- 使用显示过滤器代替捕获过滤器,导致文件过大、处理缓慢
- 忽视绕过传统 53 端口 DNS 捕获的加密 DNS(DoH/DoT)流量
- 未建立数据包捕获哈希和证据监管链文档以用于取证证据
输出格式
## 流量分析报告
**案例 ID**: IR-2024-0847
**捕获文件**: dns_exfil_investigation.pcapng
**SHA-256**: a3f2b8c1d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1
**时间范围**: 2024-03-15 14:00:00 至 14:45:00 UTC
**源接口**: eth2(VLAN 30 SPAN 端口)
### 发现
**1. DNS 隧道确认**
- 源:10.10.3.45
- 目标 DNS:8.8.8.8(转发至 ns1.suspect-domain.xyz)
- 查询量:45 分钟内 9,247 次查询(205 次/分,基线为 15 次/分)
- 平均子域名标签长度:63 字符(base64 编码数据)
- 估计外泄数据量:通过 TXT 记录响应约 2.3 MB
**2. 失陷指标**
- 域名:suspect-domain.xyz(注册于 3 天前)
- 名称服务器:ns1.suspect-domain.xyz(203.0.113.50)
- 查询模式:带 base64 编码子域名的 TXT 记录请求
- 响应模式:包含 base64 编码载荷的 TXT 记录