はじめに
交通量の多い高速道路を走る赤い車の数を、リアルタイムで数えようとすることを想像してみてください。非常にストレスが溜まり、ミスも起こりやすいでしょう。では、その高速道路の様子をビデオに録画し、家に持ち帰ってから、一時停止や巻き戻し、早送りをして完璧に車を数える様子を想像してみてください。
サイバーセキュリティやデジタルフォレンジックの世界では、専門家が流れていくネットワークトラフィックをリアルタイムで分析することはほとんどありません。その代わりに、彼らは「ビデオを録画」します。生のトラフィックをキャプチャし、パケットキャプチャ(PCAP)ファイルと呼ばれる標準形式で保存するのです。このアプローチにより、ネットワークイベントの永続的かつ改ざんされていない記録が残り、インシデント発生から時間が経過した後でも、ストレスなく詳細な分析を行うことが可能になります。
多くのセキュリティイベントは一瞬で終わってしまうため、このような記録保持の考え方は不可欠です。不審な接続は数秒しか続かないかもしれませんし、マルウェアによるリクエストは一度きりで二度と発生しないかもしれません。発生時にトラフィックを保存していなければ、後からイベントを再構築するチャンスを失ってしまう可能性があります。そのため、PCAP ファイルは、他のフォレンジック調査におけるディスクイメージやログアーカイブと同様の役割をネットワークアクティビティに対して果たします。
この実験では、tcpdump を使用して PCAP ファイルを管理する重要な技術を学びます。ライブネットワークトラフィックをファイルに静かに書き込み、オフラインで確認するためにターミナルへ読み戻し、精密なフィルタを適用して過去のトラフィックを調査し、証拠として共有するために必要な部分だけを抽出する方法を練習します。
トラフィックを PCAP ファイルに書き込む
オフライン分析の第一歩は、実際にデータを記録することです。tcpdump で画面にテキストを高速スクロールさせて表示させるのではなく、すべてを直接ストレージファイルに静かに書き込むように指示することができます。これは、その名の通り -w (write) フラグを使用して実現します。
画面キャプチャと PCAP キャプチャの目的の違いに注目してください。ターミナルに出力する場合、tcpdump は人間が読めるようにパケットを要約しています。PCAP ファイルに書き込む場合、後で他の分析ツールが解析できる形式でパケットデータを保持します。そのため、後で証拠を見直す必要があるかもしれないと考える場合は、ファイルへの書き込みが通常はより良い選択となります。
-w フラグの後にファイル名を指定すると、tcpdump は画面への出力を完全に停止します。ネットワークインターフェースから生のパケットデータを直接取得し、標準的な PCAP 形式で安全にパッケージ化します。
まず、ファイルを保存しても安全なメインプロジェクトディレクトリにいることを確認しましょう。
cd ~/project
それでは、キャプチャを開始します。プログラムが無限に記録を続けてハードドライブを埋め尽くさないように、-c (count) フラグを使用して、正確に 50 パケットで停止するように指示します。また、-i any フラグを使用して、利用可能なすべてのネットワークインターフェースを横断するトラフィックを同時にキャプチャします。
次のコマンドを実行して、50 パケットを取得し、capture.pcap という名前のファイルに保存します。
sudo tcpdump -i any -c 50 -w capture.pcap
ブラウザベースのターミナルは接続を維持するために常に少量のバックグラウンドネットワークトラフィックを生成しているため、キャプチャはすぐに完了するはずです。以下のような短い要約出力が表示されます。
tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
50 packets captured
52 packets received by filter
0 packets dropped by kernel
ここで重要な違いに注目してください。パケットの詳細情報は一切出力されていません。すべての機密データは静かにファイルの中に格納されました。
標準の Linux リストコマンドを使用して、新しい記録が存在することと、その物理的なサイズを確認できます。
ls -lh capture.pcap
capture.pcap ファイルがサイズとともに表示されれば、生のネットワークトラフィックが正常に保存され、分析の準備が整ったことが確認できます。
PCAP ファイルからトラフィックを読み込む
証拠を安全に保存したら、それを確認する方法が必要です。このプロセスは一般的にオフライン分析と呼ばれます。
オフライン分析には、収集と解釈を分離できるという実用上の大きな利点があります。ライブインシデントの最中、防御側はどのパケットが重要かをまだ把握していないことがよくあります。最初の仕事は、可能な限り多くの関連証拠を保存することです。状況が安定した後に初めて、保存されたデータに対して的を絞った質問を投げかけるという、より時間のかかるプロセスを開始します。
PCAP ファイルを開いて読み込むには、-r フラグの後にファイル名を指定して、書き込みから読み込みに切り替えます。このコマンドの素晴らしい点は、tcpdump が保存されたファイルを、まるでパケットが今まさにライブネットワーク上を流れているかのように処理してくれることです。
次のコマンドを実行して、作成した capture.pcap ファイルからパケットをターミナルに読み戻します。
tcpdump -r capture.pcap
注意:ライブトラフィックのキャプチャには深いシステムアクセス権が必要なため sudo を使用しますが、自分が所有する通常のファイルを読み込む場合は不要です。特別な管理者権限なしで安全に読み込みコマンドを実行できます。
先ほど静かにキャプチャした 50 パケットが、ライブキャプチャと全く同じ見た目でターミナル画面に表示されます。
reading from file capture.pcap, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144
10:25:31.123456 IP 10.0.2.100.22 > 10.0.2.2.54321: Flags [P.], seq 1:100, ack 1, win 500, length 99
10:25:31.123500 IP 10.0.2.2.54321 > 10.0.2.100.22: Flags [.], ack 100, win 500, length 0
...
静的なファイルからの読み込みは、アナリストにとって大きな安心感をもたらします。データは時間的に凍結されているため、元の証拠を一切変更することなく、必要なだけ何度でも -r コマンドを実行して時間をかけて分析できます。
分析を効率化するために、-r フラグと他の表示オプションを組み合わせることもできます。例えば、-n フラグを使用すると、tcpdump は IP アドレスをコンピュータ名に変換する処理をスキップします。これにより、ツールが余計なバックグラウンド検索を行うのを防ぎ、より高速な表示と、よりクリーンで技術的な出力を得ることができます。
tcpdump -n -r capture.pcap
既存の PCAP にフィルタを適用する
大量のトラフィックを記録すると、無関係な通信で溢れた巨大なファイルになりがちです。調査を行う際、すべてのパケットを一行ずつ読むことはまずありません。
これが、優れた証拠収集は通常「広範囲」に行われ、優れた証拠分析は通常「狭範囲」に行われる理由です。収集時には、可能な限り取りこぼしがないようにしたいと考えます。分析時には、現在の疑問に答えるパケットに集中できるように、範囲を積極的に絞り込みます。保存された PCAP にフィルタを使用することで、元のキャプチャをやり直すことなく、その両方を行うことができます。
tcpdump の真の魔法は、ライブネットワークで使用する強力な Berkeley Packet Filters (BPF) が、保存されたファイルに対しても全く同じように機能することです。tcpdump はバックグラウンドで PCAP ファイル全体を素早く読み込みますが、選択したフィルタに一致する特定のパケットのみを表示します。
これをテストするために、capture.pcap ファイルをフィルタリングして、TCP トラフィックのみを表示し、それ以外を無視するようにしてみましょう。次のコマンドを実行します。
tcpdump -n -r capture.pcap tcp
出力は明らかに短くなり、TCP プロトコルとして識別されたパケットのみが表示されます。
必要に応じて、さらに精密に指定することも可能です。例えば、セキュアシェル(SSH)サービス(ターミナル環境のバックグラウンドでポート 22 を使用して頻繁に動作しています)に問題があると思われる場合、遡及的にポートフィルタを適用できます。
次のコマンドを実行します。
tcpdump -n -r capture.pcap port 22
画面には、送信元または送信先がポート 22 に一致するパケットのみが表示されます。
reading from file capture.pcap, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144
10:25:31.123456 IP 10.0.2.100.22 > 10.0.2.2.54321: Flags [P.], seq 1:100, ack 1, win 500, length 99
...
この「事後にフィルタを適用できる」という能力は、デジタルフォレンジックにおいて最も重要なスキルと言えるでしょう。現実の危機において、防御側は広範囲に網を張り、-w を使用してネットワーク上のすべてを無差別に記録します。事態が収束した後、-r と複雑な BPF フィルタを使用して、証拠の山を冷静に精査し、攻撃者がシステムに侵入した正確な瞬間を特定するのです。
特定のトラフィックを新しい PCAP に抽出する
キャプチャファイルが大きすぎて他のコンピュータに簡単に転送できない場合や、非常に疑わしいパケットをいくつか隔離して専門のセキュリティチームに送る必要がある場合があります。
証拠はチーム間を移動する必要があることが多いため、この手法は実際の調査で一般的です。最前線のアナリストが巨大なファイルをキャプチャし、そこからマルウェアアナリスト、インシデントレスポンダー、または開発者のために疑わしいトラフィックだけを抽出します。焦点を絞った小さな PCAP は共有しやすく、検査も高速で、他のチームが必要としない無関係なバックグラウンドデータが漏洩するリスクも低くなります。
読み込み (-r)、フィルタリング、書き込み (-w) の各機能を一つのコマンドに組み合わせることで、関連するパケットだけを切り出し、新しい、非常に焦点を絞った PCAP ファイルとして永続的に保存できます。
フォレンジックアナリストとして、元の capture.pcap 証拠ファイルから TCP パケットのみを抽出してみましょう。それらの特定のパケットを tcp_only.pcap という名前の新しいファイルに流し込みます。
次のコマンドを実行します。
tcpdump -r capture.pcap tcp -w tcp_only.pcap
これを実行すると、ターミナルは再び完全に沈黙します。tcpdump は元のファイルを読み込み、tcp フィルタを静かに適用し、承認されたパケットを画面に表示することなく、新しい tcp_only.pcap ファイルに直接安全に書き込みます。
ファイルリストを表示して、新しい特定の証拠ファイルが正常に作成されたことを確認できます。
ls -lh capture.pcap tcp_only.pcap
両方のファイルが並んで表示されます。最初のキャプチャ中にどのようなバックグラウンドトラフィックが発生していたかにもよりますが、tcp_only.pcap は、無関係な非 TCP ノイズが正常に取り除かれたため、マスターの capture.pcap ファイルよりも少し小さくなっているはずです。
新しいファイルに意図したデータのみが含まれていることを保証するために、読み戻してみましょう。
tcpdump -n -r tcp_only.pcap
この単純な抽出技術は、混沌としたデータを整理し、調査に必要な部分だけを安全に共有するために非常に価値があります。
まとめ
おめでとうございます!PCAP ファイル管理の基礎を完全に習得しました。
この実験では、ネットワークトラフィックを記録された証拠として扱う方法を学びました。-w フラグを使用してライブネットワークイベントをストレージファイルに安全にキャプチャする練習をしました。オフライン分析の考え方に切り替え、-r フラグを使用して保存されたパケットをターミナルに読み戻しました。既存のキャプチャファイルに BPF フィルタを遡及的に適用してノイズを素早く取り除く方法を実演し、最後に、簡潔で的を絞った調査のために、非常に特定のデータを新しい PCAP ファイルに抽出する方法を学びました。
これらのファイル管理技術は、デジタルフォレンジック、インシデントレスポンス、および高度なネットワークトラブルシューティングにおける絶対的な標準作業手順です。あなたは今、現代社会を支える目に見えないデータストリームを適切にキャプチャし、分析するためのコアスキルを身につけました。

