はじめに

この実験では、Wireshark の強力なコマンドライン版である tshark について学びます。Wireshark はネットワーク分析のためのグラフィカルなインターフェースを提供しますが、tshark を使えば、ターミナルから直接、全く同じパケットキャプチャと分析を行うことができます。

これが重要な理由は、パケット分析には通常 2 つの異なるレベルが存在するからです。tcpdump のようなツールは、生のパケットの概要を表示したり、パケットが保存される前に低レベルのキャプチャフィルタを適用したりするのに優れています。一方、tshark はキャプチャ後にプロトコル構造をデコードするという一歩進んだ機能を持っています。つまり、HTTP メソッドや DNS クエリ名など、プロトコル固有の詳細な情報を理解できるということです。実務において、アナリストはこれら両方のスタイルを組み合わせて使用します。効率的に証拠を収集するための低レベルキャプチャと、より詳細な調査を行うためのプロトコル認識型分析です。

この実験では、ライブネットワークトラフィックのキャプチャ、ファイルへの保存、そして HTTP や DNS といったプロトコル構造を本質的に理解した表示フィルタの適用方法を学びます。これらの表示フィルタは、パケットの内容を解析できるため、標準的な Berkeley Packet Filters (BPF) よりもはるかに強力です。最後に、プロトコル階層統計を生成し、ネットワークトラフィックの全体像を把握する方法を学びます。

基本的なキャプチャの実行

このステップでは、tshark を使用してライブネットワークトラフィックをキャプチャし、後で分析するためにファイルに保存する方法を学びます。

キャプチャを開始する前に、システム上で何らかのネットワークトラフィックが発生していることを確認する必要があります。環境内では、DNS および HTTP トラフィックを継続的に生成するバックグラウンドスクリプトが既に実行されています。

この段階では、キャプチャと分析を分けて考えることが重要です。キャプチャとは、パケットがインターフェースを通過するそのままの状態で保存する行為です。分析とは、その後にパケットをデコードして解釈する作業です。セキュリティ調査では、何が重要かまだ分からないことが多いため、広範囲にキャプチャすることから始めるのが一般的です。パケットが PCAP ファイルとして保存されていれば、元のトラフィックを再度発生させることなく、何度でも読み直して異なる視点から調査を行うことができます。

それでは、ネットワークトラフィックをキャプチャしましょう。tshark を使用して、利用可能なすべてのネットワークインターフェース (any) を監視し、キャプチャしたパケットを traffic.pcap という名前のファイルに保存します。また、5 秒後に自動的にキャプチャを停止するように tshark に指示します。

以下のコマンドを実行して、キャプチャを開始し、ファイルを正しく保存してください。

sudo tshark -i any -w /tmp/traffic.pcap -a duration:5
sudo mv /tmp/traffic.pcap ~/project/traffic.pcap
sudo chown labex:labex ~/project/traffic.pcap

tshark コマンドで使用したオプションを解説します。

  • sudo: ネットワークトラフィックのキャプチャに必要な管理者権限でコマンドを実行します。
  • -i any: 利用可能なすべてのネットワークインターフェースでトラフィックをキャプチャするように指定します。
  • -w /tmp/traffic.pcap: キャプチャした生のパケットデータを一時的に /tmp ディレクトリ内のファイルに書き込むよう指示します。これは、tshark を root 権限で実行する際の権限問題を回避するためのベストプラクティスです。
  • -a duration:5: キャプチャの自動停止条件 (-a) を設定し、5 秒後にキャプチャを終了させます。

以下のような出力が表示され、パケットがキャプチャされていることが確認できます。

Capturing on 'eth0'
24

5 秒が経過すると、tshark は自動的に終了し、traffic.pcap ファイルが分析可能な状態になります。

表示フィルタの適用

このステップでは、作成したパケットキャプチャファイルを読み込み、表示フィルタを適用して特定の種類のトラフィックを抽出する方法を学びます。

tshark (および Wireshark) の表示フィルタは、ネットワークプロトコルの構造を理解しているため、非常に強力です。単に IP アドレスやポート番号を見るだけでなく、http や dns といったプロトコル名に基づいてトラフィックをフィルタリングできます。

この違いは強調しておく価値があります。従来のキャプチャフィルタは「このパケットはポート 53 を使用しているか?」といった低レベルな質問を投げかけます。一方、表示フィルタは「このパケットは DNS レスポンスか?」や「この HTTP リクエストには特定のフィールドが含まれているか?」といった、より高レベルな質問が可能です。つまり、表示フィルタはプロトコル解析の後に機能するため、より表現力が高く、読みやすいのです。

ライブトラフィックをキャプチャするのではなくキャプチャファイルを読み込むには、-r オプションを使用します。表示フィルタを適用するには、-Y オプションの後にフィルタ文字列を指定します。

まず、キャプチャファイルをフィルタリングして HTTP トラフィックのみを表示してみましょう。以下のコマンドを実行してください。

tshark -r ~/project/traffic.pcap -Y "http"

以下のような出力が表示され、HTTP GET リクエストとそれに対応する HTTP OK レスポンスのみが確認できるはずです。

    4 0.012345678 10.0.2.15 → 93.184.216.34 HTTP 143 GET / HTTP/1.1
    8 0.045678901 93.184.216.34 → 10.0.2.15 HTTP 403 HTTP/1.1 200 OK  (text/html)

次に、DNS トラフィックのみを表示するようにフィルタリングします。DNS (Domain Name System) は、example.com のようなドメイン名を IP アドレスに変換するために使用されるプロトコルです。

以下のコマンドを実行して、DNS 表示フィルタを適用します。

tshark -r ~/project/traffic.pcap -Y "dns"

出力には、キャプチャ期間中に発生した DNS クエリとレスポンスが表示されます。

    1 0.000000000 10.0.2.15 → 10.0.2.3 DNS 73 Standard query 0x1a2b A example.com
    2 0.001234567 10.0.2.3 → 10.0.2.15 DNS 89 Standard query response 0x1a2b A example.com A 93.184.216.34

-Y オプションを使用することで、数千ものパケットの中から必要な情報を簡単に探し出すことができます。

プロトコル階層統計の表示

このステップでは、キャプチャファイルに含まれるプロトコルの統計概要を生成する方法を学びます。

大規模なキャプチャファイルを分析する際、個々のパケットを詳しく調べる前に、どのような種類のトラフィックが含まれているかの概要を把握することは非常に有益です。tshark には「プロトコル階層統計 (Protocol Hierarchy Statistics)」という機能があり、各プロトコルのパケット数と割合を計算してくれます。

このトップダウンの視点は、一般的な調査手法です。個々のパケットに時間を費やす前に、アナリストはまず広範な質問を投げかけます。「このキャプチャで支配的なプロトコルは何か?」「トラフィックは主に Web か、名前解決か、それとも異常なものか?」「その割合はシステムの想定される役割と一致しているか?」といった高レベルなコンテキストは、どこを重点的に調査すべきかを判断する助けになります。

統計を生成するには、-z オプションの後に計算したい特定の統計項目を指定します。プロトコル階層統計の場合、キーワードは io,phs です。

さらに、個々のパケットの詳細ではなく統計レポートのみを表示したいため、-q (quiet) オプションを使用します。

以下のコマンドを実行して、キャプチャファイルのプロトコル階層を表示してください。

tshark -r ~/project/traffic.pcap -q -z io,phs

トラフィックを要約したツリー状の出力が表示されます。

===================================================================
Protocol Hierarchy Statistics
Filter:

eth                                      frames:24 bytes:2340
  ipv4                                   frames:24 bytes:2340
    udp                                  frames:2 bytes:162
      dns                                frames:2 bytes:162
    tcp                                  frames:12 bytes:1338
      http                               frames:2 bytes:546
    icmp                                 frames:10 bytes:840
===================================================================

この出力により、各プロトコルに属するフレーム(パケット)数とバイト数が正確に分かります。例えば、イーサネット (eth) レイヤーには IPv4 トラフィックが含まれており、それがさらに UDP (DNS を含む)、TCP (HTTP を含む)、ICMP (生成した ping トラフィック) に分類されていることが確認できます。

この統計的なビューは、ネットワークのトラブルシューティングやセキュリティ分析を行う際の優れた出発点となります。

まとめ

おめでとうございます!「Tshark 入門」の実験を無事に完了しました。

この実験では、以下のことを学びました。

  • tshark を使用してライブネットワークトラフィックをキャプチャし、.pcap ファイルに保存する方法。
  • キャプチャファイルを読み込み、プロトコル認識型の表示フィルタを適用して HTTP や DNS トラフィックを抽出する方法。
  • プロトコル階層統計を生成・分析し、ネットワークアクティビティの全体像を把握する方法。

これらの基本的なスキルは、Linux 環境におけるコマンドラインでのネットワーク分析やトラブルシューティングの基礎となります。