ネットワークインターフェースと基本的なパケットキャプチャ

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

はじめに

ネットワークインターフェースと基本的なキャプチャの実験へようこそ!

あなたのコンピュータを「家」だと想像してください。ネットワークトラフィックは、その家に届いたり、そこから送られたりする「郵便物」のようなものです。何が起きているのかを理解するには、郵便受けを監視する防犯カメラが必要です。Linux の世界において、tcpdump はネットワークのための強力な防犯カメラの役割を果たします。これは、システムに出入りするデータを検査できるコマンドラインツールであり、接続の問題をトラブルシューティングしたり、不審なアクティビティを発見したりするのに役立ちます。

先に進む前に、私たちが観察する基本的な対象を定義しておきましょう。ネットワーク通信は「パケット」と呼ばれる小さな単位に分割されます。パケットは、配送指示と実際のコンテンツの両方を運ぶ小さな情報の束です。配送指示は「ヘッダー」に格納されており、送信元アドレス、宛先アドレス、プロトコル、ポート情報などの詳細が含まれています。実際のコンテンツは「ペイロード」と呼ばれます。この最初の実験では、すべてのフィールドを解読する必要はありません。tcpdump を使って、これらのパケットがシステム内を移動する様子を観察することに慣れるのが目標です。

この実験では、tcpdump を使用する際の非常に基本的な操作を学びます。まずはコンピュータの「ドア」(ネットワークインターフェース)を特定することから始めます。次に、ライブネットワークトラフィックをキャプチャし、収集するデータ量を制御する方法を練習します。最後に、録画したビデオのように、キャプチャしたデータを保存して後で確認する方法を学びます。

ネットワークインターフェースの特定

トラフィックを監視するための「防犯カメラ」を設置する前に、ドアがどこにあるかを知る必要があります。ネットワーキングにおいて、これらのドアは「ネットワークインターフェース」と呼ばれます。ネットワークインターフェースは、コンピュータと外部ネットワークとの接続点です。例えば、一般的な有線接続は多くの場合 eth0 と呼ばれ、内部ループバック接続(コンピュータが自分自身と通信する場所)は lo と呼ばれます。

この区別は重要です。なぜなら、tcpdump は漠然としたグローバルな意味での「インターネット」をキャプチャするわけではないからです。オペレーティングシステム内の特定の観測ポイントでリッスン(待機)します。間違ったインターフェースにキャプチャを接続すると、マシンが非常に忙しく動いていても、何も有用な情報が得られない可能性があります。適切なインターフェースを選択することを学ぶのは、パケット分析における最初の実践的な習慣の一つです。

マシンで利用可能なインターフェースを見つけるために、tcpdump には簡単な発見コマンドが用意されています。-D フラグは「Discover(発見)」または「Display(表示)」の略です。

ネットワークトラフィックを盗聴することは特権的な操作であるため、sudo コマンドを使用して管理者(スーパーユーザー)権限で tcpdump を実行する必要があります。

ターミナルで以下のコマンドを実行して、インターフェースを一覧表示してください。

sudo tcpdump -D

以下のような出力が表示されるはずです。

1.eth0 [Up, Running, Connected]
2.lo [Up, Running, Loopback]
3.any (Pseudo-device that captures on all interfaces) [Up, Running]
4.bluetooth-monitor (Bluetooth Linux Monitor) [none]
5.nflog (Linux netfilter log (NFLOG) interface) [none]
6.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]

このリストを見ると、eth0(または特定の仮想マシン環境によっては eth1)が、仮想マシンを外部ネットワークに接続する主要なドアであることがわかります。lo インターフェースは純粋に内部通信用に使用されます。また、any という特別な擬似デバイスがあることにも気づくでしょう。これは、すべてのアクティブなドアを通過するトラフィックを同時にキャプチャしたい場合に便利なショートカットです。

注: プライマリインターフェースが eth0 ではなく eth1 である場合は、この実験の以降のすべてのコマンドで eth0 を eth1 に置き換えてください。

ライブトラフィックのキャプチャ

ネットワークのドアがどこにあるか分かったので、そこを通過するパケット(郵便物)のキャプチャを開始できます。メインのネットワーク接続を処理する eth0 インターフェースに焦点を当てます。

初めて tcpdump を使用する場合、各行が 1 つのパケットの簡潔な要約であるため、出力に圧倒されるかもしれません。各行を「迅速なインシデントログエントリ」と考えてください。まだすべてのバイトが表示されるわけではありませんが、誰が誰と通信したか、どのプロトコルが使用されたか、どれくらいのデータが移動したかといった高レベルな質問に答えるには十分な情報が表示されます。セキュリティ業務において、この要約ビューは、システムが正常に動作しているか、異常があるかを判断する最も速い方法であることがよくあります。

tcpdump に監視する特定のインターフェースを指示するには、-i フラグを使用します。これは単に「interface(インターフェース)」の略です。

以下のコマンドを実行して、eth0 でトラフィックのキャプチャを開始します。

sudo tcpdump -i eth0

このコマンドを実行すると、tcpdump は直ちに各パケットに関する情報をターミナルに直接出力し始めます。高速でスクロールするテキストのマトリックスのように見えるでしょう。

tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
10:23:45.123456 IP 192.168.1.10.22 > 192.168.1.20.54321: Flags [P.], seq 1:100, ack 1, win 500, length 99
10:23:45.124567 IP 192.168.1.20.54321 > 192.168.1.10.22: Flags [.], ack 100, win 499, length 0
...

プログラムは継続的に実行され、明示的に停止するように指示するまで、すべてをキャプチャしようとします。これは、Linux の監視ツールにおける一般的な動作です。

キャプチャを停止してターミナルの制御を取り戻すには、Ctrl キーを押しながら C を押します。このキーボードショートカット(Ctrl+C)は、実行中のプログラムを中断およびキャンセルするために Linux で一般的に使用されます。

停止後、tcpdump は正常に終了し、正常にキャプチャされたパケット数やドロップされたパケット数など、何を確認したかの簡単な要約を提供します。

キャプチャサイズの管理(パケット数)

Ctrl+C で手動でパケットキャプチャを停止するのは良いスキルですが、常に実用的とは限りません。混雑したネットワークでは、わずか数秒で数千行のテキストが画面に溢れる可能性があります。時には、何が起きているかを確認するために、トラフィックの小さなサンプルだけで十分な場合もあります。

ここで、アナリストにとって重要な考え方が導入されます。データは、管理可能な状態に保たれていない限り、自動的に有用になるわけではありません。実際の環境では、計画の不十分なキャプチャは画面を圧倒したり、ストレージを埋め尽くしたり、何千もの無関係なパケットの下に興味深いイベントを埋もれさせたりする可能性があります。パケット数を制限することは、スコープ制御の単純な形式です。優れた調査員は、何を見ているのかを明確に考えられるように、常に収集範囲を絞り込みます。

これを解決するために、tcpdump は -c フラグを提供しています。これは「count(カウント)」の略です。このフラグを使用すると、キャプチャするパケット数に厳密な制限を設定できます。その数に達すると、ツールは自動的に停止します。

以下のコマンドを実行して、eth0 インターフェースで正確に 5 つのパケットをキャプチャします。

sudo tcpdump -i eth0 -c 5

画面に正確に 5 つのパケットが表示されます。その後、Ctrl+C を押す必要なく、コマンドプロンプトが自動的に戻ります。

tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
10:28:12.345678 IP 10.0.0.5.443 > 10.0.0.2.34567: Flags [P.], seq 1:50, ack 1, win 256, length 49
...
5 packets captured
5 packets received by filter
0 packets dropped by kernel

-c フラグを使用することは、不慣れなネットワークを探索する際に非常に優れた習慣です。ターミナルが圧倒されるのを防ぎ、自分のペースで分析できる管理可能なデータチャンクを提供してくれます。

出力の停止と確認

リアルタイムでテキストがスクロールするのを監視するのは、特に特定の詳細を見つけようとしている場合には困難です。はるかに優れたアプローチは、ネットワークトラフィックをファイルに記録し、後で注意深く確認することです。これは、防犯映像をテープに録画するのと全く同じです。

この「ライブ視聴」から「保存された証拠」への移行は、サイバーセキュリティ業務における大きな転換点です。ライブキャプチャは即時のトラブルシューティングに役立ちますが、保存されたキャプチャこそが、慎重な分析、コラボレーション、およびインシデントの再構築を可能にします。トラフィックがファイルに保存されれば、それを繰り返し再生したり、チームメイトと共有したり、元のイベントを再度発生させることなく後から新しいフィルターを適用したりできます。

これらの記録は通常、.pcap 拡張子で保存されます。これは「packet capture(パケットキャプチャ)」の略です。

PCAP ファイルは単なるテキストログではありません。分析ツールが理解できる構造化されたバイナリ形式でパケットデータを保存します。そのため、専門家はターミナルの出力をメモにコピーするよりも PCAP を好みます。このファイルは、元のタイミングと生のバイトを十分に正確に保持しているため、他のツールが後で同じ証拠を異なる方法で再解釈できます。

出力を保存するには、-w フラグを使用します。これは「write(書き込み)」の略です。これを便利な -c フラグと組み合わせて、5 パケットのクイックサンプルを取得し、capture.pcap という名前のファイルに書き込みます。

以下のコマンドを実行してください。

sudo tcpdump -i eth0 -c 5 -w capture.pcap

今回は、ターミナルが異常に静かに感じられるでしょう。-w を使用すると、tcpdump はパケットの詳細を画面に出力しません。その代わり、生のバイナリデータを現在のディレクトリにある capture.pcap ファイルに静かに書き込みます。

トラフィックが保存されたので、再生できます。-r フラグ(「read(読み取り)」の略)を使用してファイルを開きます。自分が所有するファイルを読み取るだけなので、このステップでは sudo 権限は必要ありません。

以下のコマンドを実行して、保存したパケットを読み取ります。

tcpdump -r capture.pcap

先ほどキャプチャした 5 つのパケットがターミナルにきれいに表示され、それらを調べるために必要なすべての時間を確保できます。

reading from file capture.pcap, link-type EN10MB (Ethernet), snapshot length 262144
10:35:22.111222 IP 10.0.0.2.22 > 10.0.0.5.55555: Flags [P.], seq 1:100, ack 1, win 300, length 99
...

キャプチャを PCAP ファイルに保存することは、専門的なネットワーク分析の礎です。これにより、信頼できる記録を保持し、アクションを一時停止し、複雑な問題を調査する際にチームメイトとトラフィックログを簡単に共有できるようになります。

まとめ

おめでとうございます!ネットワーク分析への第一歩を無事に踏み出しました。

この実験では、強力な観測ツールとして tcpdump を展開する方法を学びました。-D フラグを使用してネットワークインターフェースを特定し、-i フラグを使用して特定のインターフェースでライブトラフィックをキャプチャする練習をしました。また、-c フラグを使用してパケット数を制限し、出力ボリュームを制御する方法も学びました。最後に、-w フラグを使用して生のネットワークデータを永続的な .pcap ファイルに保存し、-r フラグを使用して注意深く確認するために読み戻す方法を発見しました。

これらの基本的なコマンドは、ネットワークのトラブルシューティングとセキュリティ調査の絶対的な基盤です。これらの基本を習得することで、システム全体で発生している目に見えない会話を理解するための道が開かれます。練習を続けていけば、流れるデータがすぐに完璧に理解できるようになるはずです!