Wireshark キャプチャフィルタを適用してネットワークトラフィックを分析する

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

はじめに

この実験では、Wireshark のキャプチャフィルタを使用して、特定の条件に基づいてネットワークトラフィックを選択的にキャプチャする方法を学びます。キャプチャフィルタは、関連するデータに集中し、関係のないトラフィックを除外することができる強力なツールであり、分析をより効率的に行うことができます。

様々なキャプチャフィルタ式を探索し、実際のシナリオに適用します。この実践的な経験を通じて、ネットワークのトラブルシューティングやセキュリティ分析のスキルが向上します。

キャプチャフィルタの構文を理解する

ネットワーク分析の世界では、大量のデータを扱うことが圧倒的に困難になることがあります。そこで役立つのが、Wireshark のキャプチャフィルタです。キャプチャフィルタを使用すると、特定の条件に一致するパケットのみを収集することができます。これにより、分析する必要のあるデータ量が大幅に削減されます。キャプチャフィルタは表示フィルタとは異なることに注意することが重要です。表示フィルタは、すでにキャプチャされたパケットをフィルタリングするために使用されますが、キャプチャフィルタはパケットキャプチャの過程で機能します。

キャプチャフィルタとは

キャプチャフィルタは、Berkeley Packet Filter (BPF) 構文を使用します。BPF は、Wireshark のようなアプリケーションがネットワークパケットを処理する前に、それらをフィルタリングするために設計された特殊な言語です。これらのフィルタを適用することで、いくつかの重要な目標を達成することができます。

  • キャプチャするデータ量を削減する:すべてのネットワークトラフィックをキャプチャする代わりに、関連する部分に焦点を当てることができ、これによりストレージ容量と処理能力が節約されます。
  • 特定のタイプのトラフィックに焦点を当てる:HTTP リクエストや SSH 接続など、特定のタイプのネットワークアクティビティを対象にすることができます。
  • パケットキャプチャ時のパフォーマンスを向上させる:処理するデータが少なくなるため、パケットキャプチャプロセスが高速化され、効率的になります。
  • その後の分析を簡素化する:より小さく関連性の高いデータセットを持つ場合、分析して結論を導き出すのがはるかに容易になります。

基本的なキャプチャフィルタの構文

Wireshark のキャプチャフィルタは、libpcap フィルタ言語に基づく特定の構文を使用します。いくつかの一般的な要素を見てみましょう。

  • host:この要素は、IP アドレスまたはホスト名に基づいてトラフィックをフィルタリングします。たとえば、フィルタ host 192.168.0.2 を使用すると、Wireshark は指定された IP アドレスへの、またはそこからのすべてのトラフィックをキャプチャします。
  • net:これは、ネットワークアドレスとサブネットマスクに基づいてトラフィックをフィルタリングします。たとえば、フィルタ net 10.0.0.0/24 は、10.0.0.0/24 ネットワークからのトラフィックをキャプチャします。
  • port:これは、ポート番号に基づいてトラフィックをフィルタリングします。たとえば、port 80 は HTTP トラフィックをキャプチャするために使用されます。なぜなら、HTTP は通常ポート 80 を使用するからです。
  • protocol:これは、プロトコルに基づいてトラフィックをフィルタリングします。たとえば、tcp はすべての TCP トラフィックをキャプチャし、udp はすべての UDP トラフィックをキャプチャします。

これらの要素は、論理演算子を使用して組み合わせることができます。

  • and または &&:この演算子を使用すると、パケットをキャプチャするには両方の条件が真でなければなりません。
  • or または ||:この演算子を使用すると、パケットをキャプチャするにはいずれかの条件が真であればよいです。
  • not または !:この演算子は条件を否定します。したがって、not tcp を使用すると、すべての非 TCP トラフィックがキャプチャされます。

簡単なフィルタで練習してみましょう

では、学んだことを実践してみましょう。以下の手順に従って、Wireshark を開き、基本的なキャプチャフィルタを適用します。

  1. まず、ターミナルを開く必要があります。デスクトップのタスクバーにあるターミナルアイコンをクリックするか、Ctrl+Alt+T を押すことで開くことができます。

  2. ターミナルが開いたら、以下のコマンドを入力して Wireshark を起動します。

    wireshark
  3. Wireshark が開くと、メインの起動画面が表示されます。この画面には、システム上のすべての利用可能なネットワークインターフェイスが表示されます。

  4. Wireshark ウィンドウの上部にある「Capture Filter:」入力フィールドを探します。ここにキャプチャフィルタを入力します。

    Wireshark capture filter syntax
  5. フィルタボックスに tcp と入力します。これにより、Wireshark に対して TCP パケットのみをキャプチャするよう指示しています。

  6. インターフェイスのリストから、any とラベル付けされたものを選択します。any を選択すると、Wireshark はすべてのネットワークインターフェイスでパケットをキャプチャします。

  7. 青いサメのヒレの Start ボタンをクリックします。これにより、適用したフィルタでパケットキャプチャプロセスが開始されます。

    Capture filter
  8. Wireshark を約 10 - 15 秒間実行します。この間、いくつかの TCP パケットがキャプチャされます。メインウィンドウにパケットが表示され始めるはずです。

  9. キャプチャを停止するには、ツールバーの赤い四角の Stop ボタンをクリックします。

  10. 次に、キャプチャしたパケットを後で分析するために保存します。メニューバーで File > Save As をクリックします。

  11. ファイル保存ダイアログで、ディレクトリ /home/labex/project に移動します。

  12. ファイル名として step1.pcapng を入力し、Save をクリックします。

    Save captured packets

これで、基本的なキャプチャフィルタを適用して TCP パケットのみを収集し、結果を後で分析するために保存することに成功しました。

特定のトラフィックにキャプチャフィルタを適用する

このステップでは、特定のネットワークトラフィックのキャプチャに焦点を当てます。具体的には、ポート 80 の HTTP トラフィックをキャプチャするために、より具体的なキャプチャフィルタを適用する方法を学びます。ポート 80 の HTTP トラフィックは、暗号化されていない Web 通信に使用されるため、インターネット上で非常に一般的です。フィルタを設定した後、スクリプトを使用してテストトラフィックを生成します。これにより、フィルタが実際のシナリオでどのように機能するかを確認できます。

特定のフィルタを使用した新しいキャプチャの作成

まず、ポート 80 のフィルタを使用して新しいキャプチャを設定しましょう。新しいキャプチャを開始する前に、以前のキャプチャが開かれていないことを確認する必要があります。

  1. 前回のキャプチャがまだ開いている場合は、File > Close をクリックするか、パケットリストの右上にある Close this capture file ボタン(X)をクリックして閉じます。複数のキャプチャが開いていると混乱を招き、新しいキャプチャの精度に影響を与える可能性があるため、このステップは重要です。

    Close this capture file
  2. 前回のキャプチャを閉じたら、Wireshark のウェルカム画面に利用可能なインターフェイスが表示されるはずです。この画面で新しいキャプチャの設定を開始します。

  3. 今回は、より詳細な方法でキャプチャフィルタを設定します。Capture Options ボタンをクリックするか(またはメニューで Capture > Options に移動します)、Capture Options ダイアログを開きます。このダイアログでは、キャプチャフィルタの設定を含め、Wireshark がパケットをキャプチャする方法をより細かく制御できます。

    Capture filter
  4. Capture Options ダイアログには、インターフェイスのリストと、下部にある Capture Filter 入力ボックスが表示されます。インターフェイスはシステムで利用可能なネットワーク接続を表し、Capture Filter ボックスはキャプチャしたいパケットの条件を指定する場所です。

    Capture filter
  5. Capture Filter ボックスをクリックし、フィルタ tcp port 80 を入力します。このフィルタは、ポート 80 を使用する TCP トラフィックのみをキャプチャします。tcp port 80 を指定することで、単に port 80 を使用するよりも具体的に指定しています。ポート 80 を使用する可能性のある UDP トラフィックを除外し、このポートでの HTTP トラフィックに関連する TCP パケットのみをキャプチャするように Wireshark に指示しています。HTTP は通常 TCP をトランスポートプロトコルとして使用するため、これは HTTP トラフィック分析においてより正確です。

  6. または、Capture Filter: ボタンをクリックして、保存されたフィルタブックマークから選択することもできます。これは、頻繁に使用するフィルタのセットがある場合に便利です。

    Capture filter
  7. フィルタ選択ダイアログで、定義済みのフィルタから選択するか、新しいフィルタを作成できます。今回は、フィルタボックスに直接 port 80 と入力してください。これにより、関心のある特定のトラフィックを確実にキャプチャできます。

    Capture filter
  8. インターフェイス any が選択されていることを確認し、Start ボタンをクリックしてフィルタに一致するパケットのキャプチャを開始します。any を選択することは、Wireshark が利用可能なすべてのネットワークインターフェイスからパケットをキャプチャすることを意味します。

テストトラフィックの生成

Wireshark がポート 80 のトラフィックをキャプチャするようになったので、フィルタの効果を確認するためにテストトラフィックを生成しましょう。これにより、フィルタが期待どおりに機能していることを確認できます。

  1. タスクバーのターミナルアイコンをクリックするか、Ctrl+Alt+T を押して新しいターミナルウィンドウを開きます。ターミナルは、テストトラフィックを生成するためのコマンドを実行する場所です。

  2. 新しいターミナルで、プロジェクトディレクトリに移動します。

    cd /home/labex/project

    このコマンドは、トラフィック生成スクリプトが配置されているプロジェクトディレクトリに現在の作業ディレクトリを変更します。

  3. 事前に作成されたスクリプトを実行して、シミュレートされた HTTP トラフィックを生成します。

    ./simulate_traffic.sh

    このスクリプトは、ポート 80 でリッスンする簡単なサーバーを作成し、それにデータを送信して、実際の HTTP トラフィックをシミュレートするように設計されています。

  4. 次のような出力が表示されるはずです。

    Netcat server listening on port 80...
    Sending data to port 80...
    Please check the Wireshark output for the data sent to port 80.

    この出力は、スクリプトが正しく機能しており、ポート 80 にデータが送信されていることを示しています。

  5. このスクリプトは、ポート 80 でリッスンする簡単なサーバーを作成し、それに短い「Hello, Wireshark!」メッセージを送信します。このメッセージは、フィルタが正しく機能していれば Wireshark によってキャプチャされます。

キャプチャされたトラフィックの分析

  1. Wireshark ウィンドウに戻ります。スクリプトによって生成されたパケットが表示されているはずです。これらのパケットは、先ほど生成したテストトラフィックの結果です。

  2. これらのパケットは、ポート 80 での通信を示しており、キャプチャフィルタと一致しているはずです。これにより、フィルタが期待どおりに機能していることが確認できます。

    Capture port 80
  3. パケットリストには、少なくとも 3 つのパケットが表示されているはずです。

    • TCP SYN パケット(接続確立用):これは TCP の 3 ウェイハンドシェイクの最初のステップであり、クライアントがサーバーとの接続確立を要求します。
    • TCP SYN-ACK パケット(接続確認用):サーバーはクライアントの SYN 要求に応答し、接続を確立する準備ができていることを示します。
    • 「Hello, Wireshark!」データを含む TCP パケット:これは、スクリプトによって送信されたメッセージを含む実際のデータパケットです。
  4. パケットのいずれかをクリックして、中央のペインで詳細を表示します。矢印アイコンをクリックしてセクションを展開できます。これにより、ヘッダーやデータなど、パケットのさまざまな部分を表示できます。

  5. ツールバーの赤い四角い Stop ボタンをクリックしてキャプチャを停止します。キャプチャを停止することは、新しいパケットが追加されるのを防ぎ、キャプチャされたパケットの分析を開始するために重要です。

  6. メニューバーの File > Save As をクリックして、キャプチャされたパケットを保存します。パケットを保存することで、後でさらに分析するために参照できます。

  7. ファイル保存ダイアログで、/home/labex/project ディレクトリに移動します。これは、キャプチャされたパケットを保存したいディレクトリです。

  8. ファイル名として step2.pcapng を入力し、Save をクリックします。.pcapng ファイル形式は、ネットワークパケットキャプチャを保存するための一般的な形式です。

ポート 80 のトラフィックのみを収集するために特定のキャプチャフィルタを適用し、このフィルタに一致する実際のトラフィックを観察することに成功しました。

表示フィルタを使用したキャプチャされたトラフィックの分析

このステップでは、すでにキャプチャしたトラフィックを分析するために表示フィルタを使用する方法を学びます。始める前に、キャプチャフィルタと表示フィルタの違いを理解することが重要です。キャプチャフィルタは、そもそもどのトラフィックを収集するかを決定するために使用されます。一方、表示フィルタを使用すると、すでにキャプチャされたパケットの特定の部分に焦点を当てることができます。これらは、キャプチャされたデータの虫眼鏡のようなもので、関心のある詳細を絞り込むのに役立ちます。

キャプチャフィルタと表示フィルタの違いの理解

キャプチャフィルタと表示フィルタの違いを詳しく見てみましょう。

  • キャプチャフィルタ は、パケットが記録される前に適用されます。Berkeley Packet Filter (BPF) 構文を使用します。キャプチャフィルタは、入り口の門番のようなものと考えてください。どのパケットを許可してキャプチャするかを決定します。
  • 表示フィルタ は、すでにキャプチャされたパケットに適用されます。Wireshark 独自の構文を使用します。表示フィルタは、すでにキャプチャされたパケットの中から特定のパケットを強調表示するスポットライトのようなものです。
  • 表示フィルタは、キャプチャフィルタよりも強力で柔軟性があります。キャプチャされたデータに対して、より複雑な検索と分析を実行できます。
  • 表示フィルタは、キャプチャされるデータ量を減らしません。インターフェースに表示されるものを制御するだけです。したがって、元のキャプチャされたデータはそのまま残り、データのさまざまな側面を表示するために、表示フィルタを何度でも変更できます。

キャプチャしたファイルを開く

次に、以前にキャプチャしたパケットを含むファイルを開きましょう。

  1. 前のステップから Wireshark を開いたままにしている場合は、そのまま進めることができます。それ以外の場合は、Wireshark を開き、ステップ 2 で保存したファイルを開きます。
  2. Wireshark で以前に保存したファイルを開くには:
    • メニューバーの ファイル (File) > 開く (Open) をクリックします。これは、多くのソフトウェアアプリケーションでファイルにアクセスする一般的な方法です。
    • /home/labex/project ディレクトリに移動します。ここにキャプチャされたファイルが保存されています。
    • step2.pcapng ファイルを選択し、開く (Open) をクリックします。 .pcapng ファイル形式は、ネットワークパケットデータを保存するためによく使用されます。
  3. ファイルを開くと、ステップ 2 でキャプチャしたパケットが Wireshark に表示されるはずです。これは、表示フィルタを使用して分析するデータです。

表示フィルタの適用

次に、キャプチャされたパケットに表示フィルタを適用します。

  1. Wireshark ウィンドウの上部にある表示フィルタツールバーを見つけます。これは、以前に使用したキャプチャフィルタとは異なります。アクティブなときは、薄い緑色の背景になっています。表示フィルタツールバーは、特定のパケットを表示するためのフィルタ式を入力する場所です。

  2. 表示フィルタフィールドに tcp と入力し、Enter キーを押すか、右矢印ボタンをクリックします。 tcp と入力することで、TCP プロトコルを使用するパケットのみを表示するように Wireshark に指示しています。これにより、TCP パケットのみが表示され、他のプロトコルパケットが存在する場合はフィルタリングされます。

  3. 新しいキャプチャを必要とせずに、パケットがすぐに表示でフィルタリングされることに注意してください。これは、表示フィルタを使用する利点の 1 つです。トラフィックを再度キャプチャしなくても、キャプチャされたデータのさまざまな側面をすばやく分析できます。

  4. 次に、より具体的な表示フィルタを試してみましょう。フィルタバーの右側にある X ボタンをクリックして、現在のフィルタをクリアします。これにより、以前のフィルタが削除され、キャプチャされたすべてのパケットが再度表示されます。

  5. 次のフィルタを入力して、「Wireshark」という単語を含むパケットを表示します。

    frame contains "Wireshark"

    このフィルタは、パケットのフレームデータで「Wireshark」という単語を検索します。

  6. Enter キーを押すか、右矢印をクリックしてフィルタを適用します。

    Display filter
  7. これで、「Wireshark」というテキストを含むパケットのみが表示されるはずです。これは、"Hello, Wireshark!" メッセージを含む 1 つまたは 2 つのパケットである可能性があります。これは、表示フィルタを使用して、キャプチャされたパケット内の特定の情報を見つける方法を示しています。

  8. パケットリストでこれらのパケットの 1 つをクリックすると、中央のペインにその詳細が表示されます。 "Data" セクションを探してください。 "Hello, Wireshark!" テキストが表示されるはずです。これにより、パケットの内容をより詳細に調べることができます。

レポートの作成

表示フィルタを使用してトラフィックを分析したので、見つかった内容を文書化する簡単なレポートを作成しましょう。

  1. frame contains "Wireshark" フィルタに一致するパケットの数をカウントします。この数は、Wireshark ウィンドウの下部にあるステータスバーに表示され、「Displayed: X of Y packets」のように表示されます。この数は、「Wireshark」という単語を含むパケットの数を表します。

  2. タスクバーのターミナルアイコンをクリックするか、Ctrl+Alt+T を押して、ターミナルウィンドウを開きます。ターミナルは、コンピューターでコマンドを実行できる強力なツールです。

  3. ターミナルで、パケット数情報を含むレポートファイルを作成します。

    echo "Number of packets matching the filter expression: 1" > /home/labex/project/report.txt

    注:上記のコマンドの 1 を、フィルタに一致する実際に観測されたパケット数に置き換えてください。この数は、スクリプトの実行方法によって異なる場合があります。

    Save report

これで、表示フィルタを適用してキャプチャされたネットワークトラフィックを分析し、調査結果をレポートファイルに文書化することに成功しました。

まとめ

この実験では、Wireshark のキャプチャフィルタを使用して、特定の基準に従ってネットワークトラフィックを選択的にキャプチャし、分析する方法を学びました。Berkeley Packet Filter 言語に基づくキャプチャフィルタの基本構文を理解し、実際のキャプチャ中に適用することや、キャプチャフィルタと表示フィルタを区別するなどの重要なスキルを練習しました。

これらのスキルは、ネットワークの問題やセキュリティインシデントを扱うネットワーク管理者、セキュリティアナリスト、および IT 専門家にとって非常に重要です。キャプチャフィルタを習得することで、関連するトラフィックに焦点を当てることができ、より効率的なネットワーク分析が可能になります。ネットワーク分析のスキルを向上させるにつれて、これらのスキルを基に、複雑な環境で高度なトラフィック選択を行うための複雑なフィルタを作成することができます。