performing-network-forensics-with-wireshark について
Wiresharkなどを使うセキュリティインシデント調査向けのネットワークフォレンジックガイドです。PCAPの確認から不審な通信の特定、ファイル抽出、調査結果の記録までを扱います。
主な機能
- 01PCAPと通信統計の確認
- 02不審な接続やプロトコルの絞り込み
- 03HTTP・SMBファイルの抽出
- 04TCPセッションの再構築
- 05ネットワークフォレンジック報告書の作成
活用シーン
- 01マルウェアのC2通信調査
- 02データ流出の検知と再構築
- 03ネットワーク内の横展開の追跡
- 04Webアプリケーション攻撃の再構築
インストール
コマンドをコピーしてターミナルで実行します。
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 ストリーム | 2 つのエンドポイント間の双方向通信全体 |
| ディープパケットインスペクション | ヘッダー情報にとどまらないパケットペイロードの内容分析 |
| ビーコニング | マルウェアから C2 サーバーへの一定間隔でのコールバック |
| DNS トンネリング | DNS クエリ内にデータをエンコードして密かに流出させる手法 |
| TLS/SNI | 暗号化された接続先のホスト名を明らかにするサーバー名表示 |
| ネットワークフロー | エンドポイント間の通信(IP、ポート、バイト数、継続時間)の概要 |
| プロトコル階層 | キャプチャに含まれるプロトコルの統計的な内訳 |
ツールとシステム
| ツール | 目的 |
|---|---|
| Wireshark | 詳細なプロトコル解析機能を備えた GUI ベースのパケットアナライザー |
| tshark | スクリプトによる分析に使う Wireshark のコマンドライン版 |
| NetworkMiner | ネットワークフォレンジック分析とファイル抽出の自動化 |
| tcpdump | コマンドラインのパケットキャプチャユーティリティ |
| zeek (Bro) | 構造化された接続ログを生成するネットワークセキュリティモニター |
| ngrep | パケット内容のパターンマッチングを行うネットワーク grep |
| capinfos | PCAP ファイルの統計情報とメタデータを表示するユーティリティ |
| mergecap | 複数の PCAP ファイルを 1 つのキャプチャに結合 |
よくあるシナリオ
シナリオ 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 ストリームを追跡し、アップロードされた Web シェルまたはペイロードを抽出して、インシデントレポート用に攻撃の連鎖を記録します。
出力形式
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