【CTF入門連載|第19話/全20話】Wireshark実践|複数のパケットから通信を追う

🚩 CTF入門連載|第19話/全20話

Wireshark実践|複数のパケットから通信を追う

フォレンジック編の最終回。第18話で学んだ1つのパケットの構造を踏まえ、今回は複数のパケットに分断された1つの会話を「Follow TCP Stream」で再構築し、隠されたフラグの全貌を暴きます。

🦈 Wireshark 🔗 Follow TCP Stream 🧩 パケット分断 ⭐ 難易度:★★☆
01

🦈 Wiresharkとは何か|パケットを「見える化」する代表的ツール

3つのパネルでパケットを多角的に確認する

🔍

世界で最も使われているパケット解析ツール

Wiresharkは、PCAPファイル(第18話)を読み込み、視覚的に解析できる無料のオープンソースツールです。画面は主に3つのパネルで構成されます。パケットリスト(全パケットの一覧)、パケット詳細(第18話で体験した層構造のツリー表示)、パケットバイト(生の16進データ、第15話のhexdumpと同じ発想)です。

第18話では1つのパケットの中身を深く掘りました。しかし実際の通信は、1つの会話が何十個ものパケットに分かれて記録されています。今回は、パケットリストに並んだ複数の行をどう読み、どう1つの会話として組み立てるかを学びます。

02

📋 パケットリストを読む|1つの会話は複数のパケットに分かれる

大きなデータは「小分け」にして送られる

ネットワークには、1つのパケットに詰め込める最大サイズ(MTU、イーサネットでは通常約1500バイト)という制限があります。HTTPレスポンスのように大きなデータを送る場合、TCPは自動的にデータを複数のセグメント(パケット)に分割し、受信側で元の順番に組み立て直します。

1つの大きなHTTPレスポンスが3つのTCPセグメントに分割される HTTP/1.1 200 OK … Content-Length: 24 … CTF{TCP_STR34M_R3J0IN3D} ↓ MTUの制限で分割 ↓ パケット#6 “…CTF{TCP_S” パケット#7 “TR34M_R3” パケット#8 “J0IN3D}” ⚠ どの1パケットを見ても、フラグは「不完全」にしか見えない
⚠️

1パケットだけ見ても答えが分からない、これがCTFのトリック

パケット#6だけを見るとCTF{TCP_Sという不完全な文字列しか見えません。CTFのネットワーク問題では、「1つのパケットの中にフラグの全体がある」と思い込んで見逃すのが典型的な失敗パターンです。次のセクションで、この問題を解決する機能を学びます。

03

🔗 「Follow TCP Stream」で会話を再構築する

Wireshark最強の機能の1つ

Wiresharkでは、任意のTCPパケットを右クリックし「Follow」→「TCP Stream」を選ぶと、そのTCP接続に属するすべてのパケットのデータを正しい順番で結合し、1つの読みやすい会話として表示してくれます。リクエスト側とレスポンス側が色分けされ(通常は赤と青)、人間が読みやすい形に整形されます。

💡

断片化を意識しなくていい、それがFollow Streamの価値

セクション2で見た3つに分割されたパケットも、Follow Streamを使えば分割を意識せず、最初から1つの完全なやり取りとして読めます。CTFのネットワーク問題では、まず気になるTCP通信を見つけたら、即座にFollow Streamを試すのが鉄則です。

04

🔎 Wiresharkのフィルター構文(CTFで使う基本)

大量のパケットから目的の通信を絞り込む

実際のキャプチャには数千〜数万のパケットが記録されることもあります。Wireshark上部の「ディスプレイフィルター」欄に条件を入力することで、関係するパケットだけに絞り込めます。

フィルター式絞り込む内容
httpHTTPプロトコルのパケットのみ
tcp.port==80ポート80(HTTP)に関わるパケットのみ
ip.addr==192.168.56.10指定IPが関わるパケットのみ
http.requestHTTPリクエストのみ(レスポンスを除外)
tcp.flags.syn==1SYNフラグが立ったパケット(接続開始)のみ
05

🧩 5分CTFチャレンジ:断片化されたパケットからフラグの全貌を復元せよ

12個のパケットに分かれた1つの通信

下のパケットリストは、ある1回のHTTP通信(GET /flag.txt)を記録した12個のパケットです。黄緑色の文字になっている行はクリックすると個別のデータを確認できますが、どれを見てもフラグは断片的にしか見えません。「Follow TCP Stream」ボタンを押して、全パケットを正しい順番で結合してみましょう。

🦈 Wireshark — capture.pcapng (12 packets)
No.TimeSourceDestinationProtocolLengthInfo
🧩 5分CTFチャレンジ:再構築した会話からフラグを入力せよ

Follow TCP Streamで確認できる完全なレスポンスからフラグを入力してください。

06

📝 まとめ+FAQ+次回予告

フォレンジック編、完結です

第19話では、複数のパケットに分断された1つの会話を「Follow TCP Stream」で再構築する、Wiresharkの最も実用的な機能を学びました。第15話〜19話で、ファイル・ステガノグラフィー・ログ・パケット構造・パケット結合という、デジタルフォレンジックの主要な技術を一通り体験できたことになります。

✅ 今回のまとめチェック

・Wiresharkはパケットリスト・パケット詳細・パケットバイトの3パネルで構成される
・1つの会話(HTTPリクエスト/レスポンス等)は複数のTCPパケットに分割されることがある
・1つのパケットだけを見ても完全なデータは見えない(断片化のトラップ)
・「Follow TCP Stream」で全パケットを正しい順序に結合し、会話全体を読める
・ディスプレイフィルター(http tcp.port==80等)で大量のパケットを絞り込める

Q. 実際のWiresharkでも「Follow TCP Stream」は同じように使えますか?

はい、本物の機能です。パケットリストでTCPパケットを右クリックし、「Follow」→「TCP Stream」を選択すると、新しいウィンドウに今回体験したのと同じ形式(リクエスト/レスポンスが色分けされた会話)が表示されます。

Q. なぜ1つのHTTPレスポンスが複数のパケットに分割されるのですか?

イーサネットの最大転送単位(MTU)が約1500バイトに制限されているためです。これより大きなデータはTCPによって複数のセグメントに分割して送信され、受信側のOSが正しい順番に組み立て直してアプリケーションに渡します。

Q. パケットが順番通りに届かないことはありますか?

あります。ネットワークの経路によっては、後に送られたパケットが先に届くことがあります。TCPは各セグメントにシーケンス番号を付けており、受信側はこの番号を使って正しい順序に並べ替えます。Wiresharkも同様にシーケンス番号を使って再構築しています。

Q. HTTPS通信でもFollow TCP Streamは意味がありますか?

暗号化されたデータがそのまま表示されるため、内容を読むことはできません(第18話のFAQ参照)。ただし、通信が行われたタイミングやデータ量といった情報は確認できるため、メタデータ分析としては依然として有用です。

次回・第20話(最終回)

卒業チャレンジ|全技術を結集した最終問題

いよいよ最終回。これまで19話で学んだCookie操作・暗号解読・OSINT・フォレンジックの技術を組み合わせた、シリーズ最大のチャレンジに挑みます。

📚 参考情報

  • Wireshark公式サイト「User’s Guide」「Display Filter Reference」
  • IPA「ネットワークフォレンジックの基礎」関連資料
  • RFC 793 — Transmission Control Protocol(セグメント分割・再構築の仕様)

コメント