关于 performing-network-forensics-with-wireshark
这是一份面向安全事件调查人员的 Wireshark 网络取证技能指南,涵盖从 PCAP 检查、可疑流量筛查到文件提取和报告整理的流程。
主要功能
- 01检查 PCAP 文件与流量统计
- 02筛查可疑连接和协议
- 03提取 HTTP、SMB 传输文件
- 04重建 TCP 会话
- 05整理网络取证报告
适用场景
- 01调查恶意软件 C2 通信
- 02发现并还原数据外传
- 03追踪网络内横向移动
- 04重建 Web 攻击过程
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill performing-network-forensics-with-wireshark安装后在 Claude Code 中输入/performing-network-forensics-with-wireshark确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdscripts/agent.py详细介绍
使用 Wireshark 进行网络取证
何时使用
- 分析安全事件中捕获的网络流量(PCAP 文件)时
- 在捕获的流量中识别命令与控制(C2)通信时
- 从数据包捕获中重建数据外泄活动时
- 在恶意软件分析期间识别网络入侵指标时
- 提取通过网络传输的文件、凭证和工件时
前置条件
- 已安装 Wireshark 或 tshark 用于数据包分析
- 来自网络捕获的 PCAP/PCAPNG 文件(tcpdump、Wireshark、网络 TAP)
- 用于自动化工件提取的 NetworkMiner
- 为大型捕获文件配备足够的 RAM(1GB+ 的 PCAP 需要 8GB+ RAM)
- 了解 TCP/IP、HTTP、DNS、TLS 协议
- 用于 IP 地理定位的 GeoIP 数据库
工作流
步骤 1:准备并验证捕获文件
# Install Wireshark and tshark
sudo apt-get install wireshark tshark
# Verify the PCAP file
capinfos /cases/case-2024-001/network/capture.pcap
# Output includes: file type, packet count, capture duration, data size
# Example output:
# File name: capture.pcap
# File type: Wireshark/tcpdump/... - pcap
# Number of packets: 1,245,678
# File size: 856 MB
# Data size: 823 MB
# Capture duration: 3600.123456 seconds
# First packet time: 2024-01-15 14:00:00.000000
# Last packet time: 2024-01-15 15:00:00.123456
# Hash the PCAP for integrity
sha256sum /cases/case-2024-001/network/capture.pcap \
> /cases/case-2024-001/network/pcap_hash.txt
# Get a protocol hierarchy statistics overview
tshark -r /cases/case-2024-001/network/capture.pcap -q -z io,phs
步骤 2:过滤并识别可疑流量
# Extract conversation statistics
tshark -r /cases/case-2024-001/network/capture.pcap -q -z conv,tcp
# Find top talkers by bytes transferred
tshark -r /cases/case-2024-001/network/capture.pcap -q -z endpoints,ip \
| sort -t$'\t' -k3 -rn | head -20
# Filter for DNS queries (potential C2 or exfiltration)
tshark -r /cases/case-2024-001/network/capture.pcap \
-Y "dns.qr == 0" \
-T fields -e frame.time -e ip.src -e dns.qry.name \
> /cases/case-2024-001/analysis/dns_queries.txt
# Find DNS queries to unusual TLDs or long domain names (DNS tunneling)
tshark -r /cases/case-2024-001/network/capture.pcap \
-Y "dns.qr == 0 && dns.qry.name matches \"[a-z0-9]{30,}\"" \
-T fields -e frame.time -e ip.src -e dns.qry.name \
> /cases/case-2024-001/analysis/suspicious_dns.txt
# Filter HTTP traffic
tshark -r /cases/case-2024-001/network/capture.pcap \
-Y "http.request" \
-T fields -e frame.time -e ip.src -e ip.dst -e http.request.method \
-e http.host -e http.request.uri -e http.user_agent \
> /cases/case-2024-001/analysis/http_requests.txt
# Find connections to known malicious ports
tshark -r /cases/case-2024-001/network/capture.pcap \
-Y "tcp.dstport == 4444 || tcp.dstport == 8080 || tcp.dstport == 1337 || tcp.dstport == 6667" \
-T fields -e frame.time -e ip.src -e ip.dst -e tcp.dstport \
> /cases/case-2024-001/analysis/suspicious_ports.txt
# Detect beaconing patterns (regular interval connections)
tshark -r /cases/case-2024-001/network/capture.pcap \
-Y "ip.dst == 185.0.0.1" \
-T fields -e frame.time_epoch \
> /tmp/beacon_times.txt
步骤 3:从流量中提取文件和对象
# Export HTTP objects (files transferred over HTTP)
tshark -r /cases/case-2024-001/network/capture.pcap \
--export-objects http,/cases/case-2024-001/analysis/http_objects/
# Export SMB objects
tshark -r /cases/case-2024-001/network/capture.pcap \
--export-objects smb,/cases/case-2024-001/analysis/smb_objects/
# Export DICOM objects (medical imaging)
tshark -r /cases/case-2024-001/network/capture.pcap \
--export-objects dicom,/cases/case-2024-001/analysis/dicom_objects/
# Export FTP data transfers
tshark -r /cases/case-2024-001/network/capture.pcap \
-Y "ftp-data" \
-T fields -e ftp-data.data \
--export-objects ftp-data,/cases/case-2024-001/analysis/ftp_objects/
# Hash all extracted objects
find /cases/case-2024-001/analysis/http_objects/ -type f -exec sha256sum {} \; \
> /cases/case-2024-001/analysis/extracted_file_hashes.txt
# Check extracted file hashes against VirusTotal
while read hash filepath; do
echo "Checking $filepath ($hash)"
curl -s "https://www.virustotal.com/api/v3/files/$hash" \
-H "x-apikey: YOUR_API_KEY" | python3 -c "
import json,sys
data=json.load(sys.stdin)
if 'data' in data:
stats=data['data']['attributes']['last_analysis_stats']
print(f' Malicious: {stats[\"malicious\"]}, Undetected: {stats[\"undetected\"]}')
else:
print(' Not found on VT')
"
done < /cases/case-2024-001/analysis/extracted_file_hashes.txt
步骤 4:重建 TCP 流和会话
# Follow a specific TCP stream (stream index 42)
tshark -r /cases/case-2024-001/network/capture.pcap \
-q -z "follow,tcp,ascii,42" \
> /cases/case-2024-001/analysis/stream_42.txt
# Extract all HTTP request-response pairs for a suspicious host
tshark -r /cases/case-2024-001/network/capture.pcap \
-Y "http && ip.addr == 185.0.0.1" \
-T fields -e frame.time -e http.request.method -e http.host \
-e http.request.uri -e http.response.code -e http.content_length \
> /cases/case-2024-001/analysis/suspicious_http.txt
# Extract TLS/SSL certificate information
tshark -r /cases/case-2024-001/network/capture.pcap \
-Y "tls.handshake.type == 11" \
-T fields -e ip.dst -e tls.handshake.certificate \
> /cases/case-2024-001/analysis/tls_certs.txt
# Extract TLS SNI (Server Name Indication) values
tshark -r /cases/case-2024-001/network/capture.pcap \
-Y "tls.handshake.extensions_server_name" \
-T fields -e frame.time -e ip.src -e ip.dst \
-e tls.handshake.extensions_server_name \
> /cases/case-2024-001/analysis/tls_sni.txt
# Extract credentials from unencrypted protocols
tshark -r /cases/case-2024-001/network/capture.pcap \
-Y "ftp.request.command == \"USER\" || ftp.request.command == \"PASS\"" \
-T fields -e frame.time -e ip.src -e ftp.request.command -e ftp.request.arg
tshark -r /cases/case-2024-001/network/capture.pcap \
-Y "http.authorization" \
-T fields -e frame.time -e ip.src -e http.host -e http.authorization
步骤 5:使用 NetworkMiner 进行自动化分析
# Install NetworkMiner (Mono required on Linux)
sudo apt-get install mono-complete
wget https://www.netresec.com/?download=NetworkMiner -O NetworkMiner.zip
unzip NetworkMiner.zip -d /opt/NetworkMiner/
# Run NetworkMiner
mono /opt/NetworkMiner/NetworkMiner.exe /cases/case-2024-001/network/capture.pcap
# NetworkMiner automatically extracts:
# - Host inventory (OS fingerprinting, open ports)
# - Files transferred over HTTP, FTP, SMB, TFTP
# - Images from web traffic
# - Credentials (plaintext and NTLM hashes)
# - DNS records
# - Session parameters
# - Anomalies and alerts
步骤 6:生成网络取证报告
# Compile findings
cat << 'EOF' > /cases/case-2024-001/analysis/network_forensics_report.txt
NETWORK FORENSICS ANALYSIS REPORT
===================================
Case: 2024-001
Capture File: capture.pcap (856 MB, 1,245,678 packets)
Capture Period: 2024-01-15 14:00 to 15:00 UTC
Analyst: [Examiner Name]
TRAFFIC OVERVIEW:
Total packets: 1,245,678
Unique source IPs: 45
Unique destination IPs: 234
Protocols: TCP (78%), UDP (18%), ICMP (2%), Other (2%)
C2 COMMUNICATION:
Destination: 185.0.0.1:443
Beaconing interval: ~60 seconds
Total connections: 58
Data transferred: 4.2 MB outbound, 12.3 MB inbound
TLS SNI: update-service.malware-c2.com
EXFILTRATION:
Method: HTTPS POST to 185.0.0.1
Volume: 4.2 MB over 45 minutes
Files: 3 ZIP archives extracted from HTTP objects
DNS TUNNELING:
Suspicious queries to: data.evil-dns.com
Average subdomain length: 45 characters
Query count: 1,234 (normal baseline: 50)
EOF
关键概念
| 概念 | 描述 |
|---|---|
| PCAP/PCAPNG | 存储原始网络流量的数据包捕获文件格式 |
| TCP 流 | 两个端点之间的完整双向通信 |
| 深度数据包检测 | 对超出头部信息的数据包负载内容进行分析 |
| 信标行为 | 恶意软件以固定间隔向 C2 服务发起的回调 |
| DNS 隧道 | 将数据编码在 DNS 查询中以进行隐蔽外泄 |
| TLS/SNI | 服务器名称指示,在加密连接中揭示目标主机名 |
| 网络流 | 端点之间通信的摘要(IP、端口、字节数、持续时间) |
| 协议层次结构 | 捕获中存在的协议的统计细分 |
工具与系统
| 工具 | 用途 |
|---|---|
| Wireshark | 基于 GUI 的数据包分析器,具备深度协议解析能力 |
| tshark | Wireshark 的命令行版本,用于脚本化分析 |
| NetworkMiner | 自动化网络取证分析和文件提取 |
| tcpdump | 命令行数据包捕获工具 |
| zeek (Bro) | 生成结构化连接日志的网络安全监控器 |
| ngrep | 网络 grep,用于在数据包内容中进行模式匹配 |
| capinfos | PCAP 文件统计和元数据工具 |
| mergecap | 将多个 PCAP 文件合并为单个捕获文件 |
常见场景
场景 1:恶意软件 C2 通信分析 在 Wireshark 中加载 PCAP,识别指向外部 IP 的信标模式,检查 TLS 证书是否为自签名或异常颁发者,提取包含编码命令的 HTTP POST 数据,将 C2 IP 与威胁情报源进行关联。
场景 2:数据外泄检测 分析流量统计以发现异常大的出站传输,检查 DNS 查询长度以发现 DNS 隧道迹象,跟踪向外部服务器的 FTP 和 HTTP 文件上传,从数据包数据中重建被外泄的文件。
场景 3:企业网络中的横向移动 过滤内部主机之间的 SMB、RDP、WMI 和 PSExec 流量,识别跨多个系统的凭证使用模式,追踪攻击者在网络中的传播路径,与 Windows 事件日志的身份验证事件进行关联。
场景 4:Web 应用攻击重建 过滤发往 Web 服务器的 HTTP 流量,识别 SQL 注入、XSS 和目录遍历尝试,跟随成功利用漏洞的 TCP 流,提取上传的 webshell 或载荷,为事件报告记录攻击链。
输出格式
Network Forensics Summary:
Capture: capture.pcap
Duration: 1 hour (14:00-15:00 UTC, 2024-01-15)
Packets: 1,245,678 | Size: 856 MB
Top Suspicious Connections:
192.168.1.50 -> 185.0.0.1:443 (C2, 58 connections, 4.2MB out)
192.168.1.50 -> 10.0.0.25:445 (SMB lateral movement)
192.168.1.50 -> 10.0.0.30:3389 (RDP lateral movement)
Extracted Artifacts:
Files: 23 (3 malicious per VT)
Credentials: 2 plaintext FTP logins
DNS Queries: 1,234 suspicious (possible tunneling)
TLS Certs: 5 self-signed certificates
IOCs Identified:
IPs: 185.0.0.1, 203.0.113.50
Domains: update-service.malware-c2.com, data.evil-dns.com
Hashes: 3 file hashes flagged as malware
评论
支持 Markdown