mcpField
P
performing-network-forensics-with-wireshark

performing-network-forensics-with-wireshark

github.com/mukul975安全35.2k112 次安装8 周前更新
代码仓库

关于 performing-network-forensics-with-wireshark

这是一份面向安全事件调查人员的 Wireshark 网络取证技能指南,涵盖从 PCAP 检查、可疑流量筛查到文件提取和报告整理的流程。

主要功能

  1. 01检查 PCAP 文件与流量统计
  2. 02筛查可疑连接和协议
  3. 03提取 HTTP、SMB 传输文件
  4. 04重建 TCP 会话
  5. 05整理网络取证报告

适用场景

  1. 01调查恶意软件 C2 通信
  2. 02发现并还原数据外传
  3. 03追踪网络内横向移动
  4. 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 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
scripts/
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 的数据包分析器,具备深度协议解析能力
tsharkWireshark 的命令行版本,用于脚本化分析
NetworkMiner自动化网络取证分析和文件提取
tcpdump命令行数据包捕获工具
zeek (Bro)生成结构化连接日志的网络安全监控器
ngrep网络 grep,用于在数据包内容中进行模式匹配
capinfosPCAP 文件统计和元数据工具
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