Wiresharkによるネットワークトラフィック分析 は何をしますか?
使用するタイミング
- ネットワーク侵入の疑いがある場合、コマンド&コントロールトラフィック、データ流出、ラテラルムーブメントのパケットレベル証拠を調査する
- 再送信、フラグメンテーション、DNS解決失敗などのネットワークパフォーマンス問題を診断する
- サンドボックス化または隔離されたホストからトラフィックをキャプチャし、マルウェアの通信パターンを分析する
- ネットワークセグメントを実際に通過しているトラフィックを確認して、ファイアウォールやIDSルールを検証する
- キャプチャしたネットワークセッションからファイル、認証情報、侵害指標(IoC)を抽出する
使用すべきでないケース: 許可なくネットワーク上のトラフィックをキャプチャすること、法的権限なしにプライベート通信を傍受すること、本番監視においてフル機能のSIEMプラットフォームの代わりとして使用すること。
前提条件
- Wireshark 4.0以上とtsharkコマンドラインユーティリティがインストールされていること
- ライブパケットキャプチャのためのroot/sudo権限、または
wiresharkグループへの所属 - 監視対象セグメントへのネットワークインターフェースアクセス(物理NIC、SPANポート、またはネットワークタップ)
- パケットキャプチャファイル用の十分なディスク容量(ビジーなギガビットリンクでは毎分約1 GBを見積もる)
- TCP/IPプロトコル、HTTP、DNS、TLS、SMBに対するパケットレベルの知識
ワークフロー
ステップ1: キャプチャ環境の設定
関連するトラフィックを対象とするために、キャプチャインターフェースとフィルタを設定します:
# 利用可能なインターフェースを一覧表示
tshark -D
# eth0でキャプチャを開始し、キャプチャフィルタで範囲を制限
tshark -i eth0 -f "host 10.10.5.23 and (port 80 or port 443 or port 445)" -w /tmp/capture.pcapng
# リングバッファを使用してディスク使用量を管理(10ファイル、各100MB)
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の場合は、起動前にキャプチャオプションダイアログでキャプチャフィルタを設定します。
ステップ2: 対象分析のための表示フィルタの適用
# 不審なユーザーエージェントを含むHTTPトラフィックをフィルタ
tshark -r capture.pcapng -Y "http.user_agent contains \"curl\" or http.user_agent contains \"Wget\""
# 不審なTLDへのDNSクエリを検索
tshark -r capture.pcapng -Y "dns.qry.name contains \".xyz\" or dns.qry.name contains \".top\" or dns.qry.name contains \".tk\""
# ネットワーク問題を示すTCP再送信を特定
tshark -r capture.pcapng -Y "tcp.analysis.retransmission"
# ラテラルムーブメント検出のためのSMBトラフィックをフィルタ
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: プロトコル別の詳細分析
# TCPストリームを追跡して会話を再構成
tshark -r capture.pcapng -q -z follow,tcp,ascii,0
# HTTPリクエスト/レスポンスペアを分析
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
# DNSクエリ/レスポンス統計を抽出
tshark -r capture.pcapng -q -z dns,tree
# 弱い暗号スイートのためのTLSハンドシェイクを分析
tshark -r capture.pcapng -Y "tls.handshake.type == 2" -T fields -e ip.src -e ip.dst -e tls.handshake.ciphersuite
# SMBファイルアクセス列挙
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の抽出
# HTTPオブジェクトをエクスポート(HTTP経由で転送されたファイル)
tshark -r capture.pcapng --export-objects http,/tmp/http_objects/
# SMBオブジェクトをエクスポート(SMB経由で転送されたファイル)
tshark -r capture.pcapng --export-objects smb,/tmp/smb_objects/
# 脅威インテリジェンス検索用にすべての一意な宛先IPを抽出
tshark -r capture.pcapng -T fields -e ip.dst | sort -u > unique_dest_ips.txt
# SSL/TLS証明書情報を抽出
tshark -r capture.pcapng -Y "tls.handshake.type == 11" -T fields -e x509sat.uTF8String -e x509ce.dNSName
# アクセスされたすべてのURLを抽出
tshark -r capture.pcapng -Y "http.request" -T fields -e http.host -e http.request.uri | sort -u > urls.txt
# 抽出したファイルのハッシュを計算してIoC照合
tshark -r capture.pcapng --export-objects http,/tmp/http_objects/ && 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
# IOグラフデータ(1秒あたりのパケット数)
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: レポート生成と証拠のエクスポート
# フィルタリングされたパケットを新しいPCAPファイルにエクスポートして証拠保存
tshark -r capture.pcapng -Y "ip.addr == 10.10.5.23 and tcp.port == 4444" -w evidence_c2_traffic.pcapng
# パケットサマリーをCSV形式で生成
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
# プログラムによる分析のためのPDML(XML)出力を作成
tshark -r capture.pcapng -T pdml > capture_analysis.xml
# 証拠保管連鎖のためにキャプチャファイルのハッシュを計算
tshark -r capture.pcapng -w /dev/null && sha256sum capture.pcapng > capture_hash.txt
主要概念
| 用語 | 定義 |
|---|---|
| キャプチャフィルタ(BPF) | キャプチャ時に適用されるBerkeley Packet Filter構文。記録するパケットを制限し、ファイルサイズを削減してパフォーマンスを向上させる |
| 表示フィルタ | 既にキャプチャされたパケットに適用するWireshark独自のフィルタ構文。キャプチャファイルを変更せずに分析を絞り込む |
| PCAPNG | 次世代パケットキャプチャ形式。複数インターフェース、名前解決、注釈、メタデータを1つのファイルでサポート |
| TCPストリーム | 2つのエンドポイント間の完全な双方向通信を表す、TCPセグメントの再構成されたシーケンス |
| プロトコルディセクタ | 特定プロトコルのフィールドと構造をデコードするWiresharkモジュール。パケット内容の詳細な検査を可能にする |
| IOグラフ | キャプチャ期間中のパケット数やバイト数の時系列グラフ。トラフィックスパイクやビーコン動作の特定に有用 |
ツールとシステム
- Wireshark 4.0+: 3,000以上のプロトコルに対応するプロトコルディセクタ、ストリーム再構成、エクスポート機能を備えたGUIベースのパケットアナライザ
- tshark: Wiresharkのコマンドライン版。ヘッドレスキャプチャ、バッチ処理、スクリプト化された分析パイプラインに使用
- tcpdump: GUI依存のないリモートシステムでのクイックキャプチャのための軽量パケットキャプチャツール
- mergecap: 複数のキャプチャファイルを1つのPCAPに結合して統合分析するWiresharkユーティリティ
- editcap: キャプチャファイルの分割、フィルタリング、形式変換を行うWiresharkユーティリティ
よくあるシナリオ
シナリオ: DNSトンネリングによるデータ流出の調査
背景: SOCチームが、ワークステーション(10.10.3.45)から外部ドメインへの異常に高いDNSクエリ量を検出。SIEMアラートにより、DNSクエリがベースラインの15件/分に対して平均200件/分であることが通知された。当該ワークステーションの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. 侵害指標(IoC)**
- ドメイン: suspect-domain.xyz(3日前に登録)
- ネームサーバー: ns1.suspect-domain.xyz(203.0.113.50)
- クエリパターン: base64エンコードされたサブドメインを含むTXTレコード要求
- 応答パターン: base64エンコードされたペイロードを含むTXTレコード