Wireshark の TCP ストリーム追跡機能で TCP トラフィックを解析する

WiresharkBeginner
オンラインで実践に進む

はじめに

この実験(Lab)では、Wireshark の「TCP ストリームを追跡 (Follow TCP Stream)」機能を使用して TCP トラフィックを分析する方法を学びます。この機能を使用すると、特定の TCP 会話のデータペイロードを抽出して表示できます。これは、疑わしいネットワークトラフィックの調査やアプリケーションプロトコルの分析など、複数のサイバーセキュリティのシナリオで非常に役立ちます。

この実験(Lab)を終えるまでに、この強力なツールを使用してネットワーク通信に関する洞察を得る方法を理解できるようになります。これにより、ネットワーク分析能力が大幅に向上します。

TCP の理解とネットワークトラフィックのキャプチャ

このステップでは、ネットワーク通信の基本的な部分である TCP (Transmission Control Protocol、伝送制御プロトコル) について学びます。次に、Wireshark と呼ばれる強力なツールを使用して、ネットワークトラフィックをキャプチャします。TCP を理解し、ネットワークトラフィックをキャプチャできることは、ネットワーク上で何が起こっているかを確認し、潜在的な問題を分析できるため、サイバーセキュリティの分野では不可欠なスキルです。

TCP とは?

TCP (Transmission Control Protocol、伝送制御プロトコル) は、インターネットプロトコルスイート(Internet Protocol suite)の中で最も重要なプロトコルの 1 つです。インターネットプロトコルスイートは、インターネット上でデータがどのように送信されるかを規定する一連の規則です。TCP は、IP ネットワークを介して通信している異なるホスト上で実行されているアプリケーション間で、データを確実に送信する方法を提供します。

信頼性とは、TCP があるアプリケーションから別のアプリケーションに送信されたすべてのデータパケットが、正しく、正しい順序で到着することを保証することを意味します。これは、コネクションレスプロトコルである UDP (User Datagram Protocol、ユーザデータグラムプロトコル) とは異なります。UDP は、データを送信する前に接続を確立せず、すべてのパケットが到着すること、または正しい順序で到着することを保証しません。一方、TCP はコネクション型です。最初に送信者と受信者の間に接続を確立し、その後データを送信します。このプロセスは、転送されるデータの整合性を維持するのに役立ちます。

Wireshark の起動

ネットワークトラフィックのキャプチャを開始するには、Wireshark を起動する必要があります。その方法は次のとおりです。

  1. まず、ターミナルウィンドウを開きます。これは、ドックにあるターミナルアイコンをクリックするか、Ctrl+Alt+T を押すことで実行できます。ターミナルは、コマンドを入力してコンピュータのオペレーティングシステムと対話できるテキストベースのインターフェースです。

  2. ターミナルが開いたら、Wireshark を起動するためのコマンドを入力する必要があります。次のコマンドを入力して、Enter キーを押します。

wireshark

このコマンドは、オペレーティングシステムに Wireshark アプリケーションを起動するように指示します。

  1. Wireshark が起動すると、メインインターフェースが表示されます。このインターフェースには、利用可能なネットワークインターフェースのリストが表示されます。ネットワークインターフェースは、コンピュータとネットワーク間の接続ポイントです。各インターフェースを使用して、ネットワークトラフィックを送受信できます。
Wireshark main interface

ネットワークトラフィックのキャプチャ

Wireshark が起動したので、ネットワークトラフィックのキャプチャを開始する準備ができました。手順は次のとおりです。

  1. ネットワークインターフェースのリストで、eth1 インターフェースをクリックします。これは通常、仮想マシン(virtual machine)のプライマリネットワークインターフェースです。仮想マシンはコンピュータ内のコンピュータのようなもので、eth1 インターフェースはネットワークへの接続方法です。

  2. eth1 インターフェースを選択したら、ツールバーにある青いサメのヒレのアイコンで表される Start capturing packets (パケットのキャプチャを開始) ボタンをクリックします。このアクションは、Wireshark に選択したネットワークインターフェースの監視を開始し、そこを通過するすべてのネットワークパケットをキャプチャするように指示します。

Start capturing packets
  1. Wireshark がキャプチャを開始すると、メインの Wireshark ウィンドウにパケットが表示されます。これらのパケットは、ネットワークトラフィックの構成要素です。各パケットには、少量のデータと、送信元と送信先に関する情報が含まれています。

  2. 分析できる TCP トラフィックを生成するために、curl コマンドを使用します。新しいターミナルウィンドウを開き、次のコマンドを入力します。

curl https://labex.io

curl コマンドは、サーバーとの間でデータを転送するために使用されます。この場合、https://labex.io から Web ページコンテンツを取得しています。このアクションは、Web ページへの HTTP リクエストが TCP プロトコルを使用するため、TCP トラフィックを生成します。

  1. curl コマンドを実行すると、Web ページコンテンツがターミナルに表示されます。同時に、Wireshark はこの HTTP リクエストに関連するすべての TCP パケットをキャプチャします。これらのパケットには、コンピュータと Web サーバー間のリクエストとレスポンスに関する情報が含まれています。

  2. 約 10 ~ 15 秒間キャプチャした後 (通常、トラフィックの適切なサンプルを取得するのに十分です)、Wireshark に戻り、ツールバーにある赤い四角いアイコンで表される Stop capturing packets (パケットのキャプチャを停止) ボタンをクリックします。これにより、Wireshark によるパケットのキャプチャが停止します。

Stop capturing packets
  1. キャプチャされたトラフィックを将来の分析のために保存するには、File (ファイル) メニューに移動して Save (保存) を選択するか、Ctrl+S を押すことができます。/home/labex/project/ ディレクトリに移動し、ファイルに capture.pcapng という名前を付けて、Save (保存) をクリックします。.pcapng ファイル形式は、ネットワークパケットキャプチャを保存するための標準形式であり、キャプチャされたトラフィックを後で開いて分析できます。

これで、TCP 会話を含むネットワークトラフィックを正常にキャプチャできました。次のステップでは、このキャプチャされたトラフィックを分析して、TCP についてさらに詳しく学びます。

TCP ストリームのフィルタリングと追跡

このステップでは、前のステップでキャプチャした labex.io のトラフィックを分析します。ネットワークトラフィックをフィルタリングして特定の TCP 会話を分離する方法と、Wireshark の強力な「TCP ストリームを追跡 (Follow TCP Stream)」機能について学びます。この機能は、ネットワーク通信の虫眼鏡のように機能し、2 つのエンドポイント間の完全な会話を確認できます。

TCP トラフィックのフィルタリング

まず、トラフィックをフィルタリングして、labex.io との通信に特に焦点を当てましょう。

  1. Wireshark のメインウィンドウで、パケットリストの上部を見てください。「Apply a display filter (表示フィルタを適用)」というプレースホルダーテキストが表示された表示フィルタテキストボックスがあります。
  2. フィルタボックスに tcp と入力し、Enter キーを押すか、矢印ボタンをクリックしてフィルタを適用します。
  3. パケットリストに TCP パケットのみが表示されるようになりましたが、さらに絞り込むことができます。curl コマンドで生成した labex.io のトラフィックに関心があるので、フィルタを絞り込みましょう。
  4. フィルタボックスに tcp contains "labex" と入力して適用します。これにより、コンテンツに "labex" が含まれる TCP パケットのみが表示され、関連するトラフィックを見つけるのに役立ちます。
Apply TCP filter

TCP 会話の理解

TCP ストリームの追跡を開始する前に、TCP 会話とは何かを理解することが重要です。TCP 会話は、TCP セッション中に 2 つのエンドポイント (IP アドレスとポートの組み合わせ) 間で交換されるすべてのパケットで構成されます。各 TCP 会話には、いくつかの重要なコンポーネントがあります。

  • 送信元 IP アドレスと宛先 IP アドレス:今回の場合、あなたのマシンの IP と labex.io のサーバー IP
  • 送信元ポートと宛先ポート:labex.io への HTTPS 接続の場合、宛先ポートは 443 である可能性が高い
  • シーケンス番号と確認応答番号:これらはデータを追跡し、正しい配信を保証します
  • さまざまなフラグ (SYN、ACK、FIN など): これらは接続状態を制御します

キャプチャでは、あなたのマシンと labex.io サーバー間の TCP 会話が表示されるはずです。

TCP ストリームの追跡

次に、labex.io リクエストの TCP ストリームを分析しましょう。

  1. フィルタリングされたパケットリストで、labex.io に属する可能性が高い宛先 IP を持つパケットを探します。セキュアな Web トラフィックに使用される宛先ポート 443 (HTTPS) を持つパケットが表示されるはずです。
  2. これらのパケットの 1 つをクリックして選択します。
  3. 選択したパケットを右クリックし、コンテキストメニューから Follow (追跡) > TCP Stream (TCP ストリーム) を選択します。
Follow TCP Stream menu
  1. 新しいウィンドウが開き、あなたのマシンと labex.io サーバー間の TCP 会話全体が表示されます。
TCP Stream content window
  1. このウィンドウでは:

    • 赤色のテキストは、あなたのマシン (クライアント) から labex.io サーバーに送信されたデータを表します
    • 青色のテキストは、labex.io サーバーからあなたのマシンに返信されたデータを表します
    • 会話全体が、発生した順に再構築されます
  2. HTTPS 経由で labex.io にアクセスしたため、ストリームにはほとんど暗号化されたデータが表示されます。これは正常であり、予想されることです。HTTPS は、送信中にデータを保護するために暗号化するためです。通信の開始時に TLS ハンドシェイクを識別できるかもしれませんが、実際の HTTP リクエストとレスポンスは暗号化されます。

  3. 「Show and save data as (データの表示と保存形式)」ドロップダウンメニューを使用して、さまざまな表示オプションを調べます。

    • ASCII: データをテキストとして表示します (暗号化されていない部分を読み取るのに役立ちます)
    • Hex Dump (16 進ダンプ): 16 進数と ASCII の両方の表現を表示します (暗号化されたデータを調べるのに適しています)
    • C Arrays (C 配列): データを C プログラミング言語の配列としてフォーマットします
    • Raw (生データ): 生のバイナリデータのみを表示します
  4. この分析の記録を保持するには、Print (印刷) ボタンをクリックします。印刷出力を /home/labex/project/ ディレクトリに print.pdf という名前の PDF として保存します。

Print button

TCP ストリームを追跡することで、個々のパケットから手動でデータを組み立てることなく、あなたのマシンと labex.io サーバー間の完全な通信を確認できます。次のステップでは、このデータを保存してより詳細に分析する方法を学びます。

TCP ストリームデータの保存と分析

このステップでは、前のステップで調べた labex.io の TCP ストリームデータをオフライン分析のために保存します。また、この保存された情報を解釈して、暗号化された HTTPS 通信から貴重な洞察を抽出する方法も学びます。

TCP ストリームデータの保存

labex.io 接続からの TCP ストリームデータを保存しましょう。

  1. 前のステップから TCP ストリームウィンドウが開いたままで、あなたのマシンと labex.io 間の通信が表示されているはずです。誤って閉じてしまった場合は、labex.io パケットのいずれかの TCP ストリームを追跡する手順を繰り返してください。

  2. TCP ストリームウィンドウの下部にある Save As (名前を付けて保存) ボタンを見つけます。

Save As button location
  1. Save As (名前を付けて保存) ボタンをクリックすると、保存ダイアログが開きます。

  2. /home/labex/project/ ディレクトリに移動し、ファイル名 tcp_stream_data.txt を入力します。

  3. Save (保存) ボタンをクリックします。これにより、labex.io TCP ストリーム全体が、指定された名前のテキストファイルに保存されます。

  4. コンテンツは、「Show and save data as (データの表示と保存形式)」ドロップダウンメニューで選択された形式で保存されます。別の形式 (ASCII の代わりに Hex Dump (16 進ダンプ) など) で保存する場合は、保存する前にドロップダウンメニューで形式を変更できます。

保存されたデータの理解

labex.io 接続からの TCP ストリームを保存したので、その内容を調べてみましょう。

  1. ターミナルを開いて、保存されたファイルを表示します。
head /home/labex/project/tcp_stream_data.txt

または、cat を使用してファイル全体を表示できます。

cat /home/labex/project/tcp_stream_data.txt
  1. ファイルの内容を調べます。labex.io へのトラフィックは HTTPS 経由であったため、データの多くは暗号化されており、判読できない文字として表示されます。ただし、いくつかの重要な要素を観察できます。

    • 通信の開始時の TLS ハンドシェイク。ここでは、クライアントと labex.io サーバーが暗号化パラメータをネゴシエートします。
    • クライアントハローメッセージとサーバーハローメッセージ。これらは TLS ハンドシェイクの一部です。
    • 実際の HTTP リクエストとサーバーのレスポンスを含む暗号化されたアプリケーションデータ
  2. データが TCP ストリームウィンドウに表示されたのと同じ方法で編成されていることに注意してください。クライアントデータ (あなたのマシンから labex.io へ) は、サーバーデータ (labex.io からあなたのマシンへ) から分離されています。

TCP ストリーム分析の実用的な応用

あなたが開発している TCP ストリーム分析スキルは、多くのサイバーセキュリティシナリオで役立ちます。これらを、labex.io トラフィックで観察したことに関連付けてみましょう。

  1. TLS/SSL インスペクション (TLS/SSL Inspection): labex.io ストリームの TLS ハンドシェイクを分析することにより、セキュリティ専門家は、セキュアな接続が強力な暗号化アルゴリズムを使用していることを確認できます。
  2. セキュリティ監視 (Security Monitoring): labex.io 接続のような暗号化された HTTPS トラフィックであっても、アナリストは必ずしもコンテンツを復号化しなくても、通信パターンを識別できます。
  3. ネットワークトラブルシューティング (Network Troubleshooting): labex.io への接続が失敗した場合、TCP ストリームを分析すると、問題が TCP 接続の確立、TLS ハンドシェイク、または HTTP 交換のいずれで発生したかを特定するのに役立ちます。
  4. ネットワークフォレンジック (Network Forensics): 調査シナリオでは、labex.io 接続のような TCP ストリームは、ネットワークアクティビティのタイムラインを再構築するのに役立ちます。
  5. パフォーマンス分析 (Performance Analysis): labex.io TCP ストリームのパケットのタイミングとシーケンスを調べることで、ネットワーク内の潜在的なパフォーマンスボトルネックを特定できます。

labex.io 接続で行ったように TCP ストリームを保存することで、次のことが可能な永続的な記録を作成できます。

  • チームメンバーと共有して共同分析を行う
  • セキュリティ調査の証拠として使用する
  • 他のキャプチャされたストリームと比較してパターンを識別する
  • Wireshark 以外の追加ツールで分析する

実際のネットワーク通信データを抽出、保存、分析するこの機能こそが、TCP ストリーム分析をネットワークセキュリティ専門家にとって非常に強力なテクニックにしている理由です。

高度な TCP ストリーム分析テクニック

この最後のステップでは、キャプチャ内の TCP ストリームを分析するための高度なテクニックをいくつか探求します。labex.io トラフィックと、存在する可能性のあるその他の TCP 会話に焦点を当てます。これらの高度なスキルは、複雑なネットワークトラフィックキャプチャを扱う際に、より効率的になるのに役立ちます。

複数の TCP ストリームのフィルタリング

labex.io トラフィックだけでなく、キャプチャ内のすべての TCP 会話を探索およびフィルタリングする方法を学びましょう。

  1. Wireshark のメインウィンドウに戻ります。labex.io 分析からの TCP ストリームウィンドウがまだ開いている場合は、閉じます。
  2. キャプチャ内のすべての TCP 会話を表示するには、上部のメニューで Statistics (統計) > Conversations (会話) に移動します。
  3. [会話] ウィンドウで、TCP タブをクリックして、TCP 会話のみを表示するようにビューをフィルタリングします。
Conversations window
  1. このビューには、キャプチャ内のすべての TCP 会話に関する詳細が表示されます。

    • 送信元アドレスと宛先アドレス、およびポート
    • 各方向で転送されたバイト数
    • 各会話の期間
    • 各方向のパケット
  2. labex.io 接続に対応する会話を探します。ステップ 2 で観察したのと同じ IP アドレスが含まれているはずです。キャプチャ期間中に発生していた他の TCP 会話も表示される場合があります。

  3. labex.io の会話を選択し、下部の Follow Stream (ストリームを追跡) ボタンをクリックします。これにより、以前に分析したのと同じ TCP ストリームにアクセスする別の方法が提供されます。

TCP ストリーム番号の使用

キャプチャ内の各 TCP ストリームには、「tcp.stream」番号と呼ばれる一意の識別子があります。これにより、特定のストリームをフィルタリングして分析するための正確な方法が提供されます。

  1. Wireshark のメインウィンドウを開いた状態で、以前に識別した labex.io パケットのいずれかのパケット詳細を見てください。中央のペインで「Transmission Control Protocol (伝送制御プロトコル)」セクションを展開し、「Stream index (ストリームインデックス)」または同様のフィールドを探します。この番号は、labex.io TCP ストリームの一意の識別子です。

  2. この特定のストリームに属するパケットをフィルタリングするには、次のような表示フィルタを使用します。

tcp.stream eq N

N を、見つけたストリームインデックス番号に置き換えます。たとえば、labex.io ストリームのインデックスが 0 の場合、次のように使用します。

tcp.stream eq 2
  1. このフィルタを表示フィルタボックスに適用します。Wireshark には、labex.io TCP ストリームに属するパケットのみが表示されるようになり、この会話のみをより明確に表示できます。

  2. このフィルタは、キャプチャに多数の TCP 会話があり、パケットを見つけて右クリックする手間をかけずに、特定の会話に焦点を当てたい場合に特に役立ちます。

Filtered packets

これらの高度な TCP ストリーム分析テクニックを習得することで、ネットワークトラフィック分析機能を大幅に強化しました。複雑なネットワークキャプチャで TCP 会話を効率的に分離、調査、および文書化できるようになりました。これは、サイバーセキュリティの専門家にとって非常に貴重なスキルです。

まとめ

この実験(Lab)では、Wireshark の "Follow TCP Stream (TCP ストリームを追跡)" 機能を使用して、詳細なネットワークトラフィック分析を行う方法を学びました。ネットワークトラフィックのキャプチャ、TCP 会話のフィルタリング、さまざまな形式でのデータの解釈、オフラインで使用するためのストリームデータの保存、および高度な分析テクニックの適用について、実践的な経験を積みました。

これらのスキルは、ネットワーク管理者、セキュリティアナリスト、および IT プロフェッショナルにとって不可欠です。ネットワークの問題のトラブルシューティング、セキュリティインシデントの調査、およびアプリケーションの動作の理解を可能にします。進歩するにつれて、Wireshark にはさらに多くの機能があり、TCP ストリーム分析はサイバーセキュリティの武器庫にある貴重なツールの 1 つにすぎないことを覚えておいてください。