Kali で tcpdump を使ってネットワーク通信を観測する

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

はじめに

サービス名やポートレポートは、ネットワークの観測を要約します。パケットキャプチャでは、その背後にある実際の通信を、エンドポイント、接続制御、アプリケーションメッセージまで調べられます。

Kali のループバックインターフェースで、小規模な許可された HTTP 通信を一つキャプチャします。前の実習のプロセス制御と HTTP のスキルを使い、実際の pcap を保存して tcpdump で調べます。

小規模なローカル HTTP 通信をキャプチャする

このステップでは、提供された演習サービスへの HTTP リクエストについて、数を限定したパケットをキャプチャします。

Kali に入り、共有ワークスペースを選びます。

kali
cd /home/labex/project

HTTP エンドポイントは http://127.0.0.1:8080/capture.txt です。このアドレスは Kali 内のループバックなので、通信はホストのネットワークインターフェースではなく lo を使います。この環境のパケットキャプチャには昇格した権限が必要です。sudo は、必要なキャプチャと分析コマンドだけに使います。

tcpdump はパケットをキャプチャします。-i lo はループバックを選び、-c 8 は一致した 8 パケットで停止し、-w training.pcap はバイナリのキャプチャファイルを書きます。引用符内のフィルター tcp port 8080 は、演習サービスのポートに関わる TCP 通信を選びます。末尾の & はバックグラウンドで開始し、同じターミナルで要求を生成できるようにします。

sudo tcpdump -i lo -c 8 -w training.pcap 'tcp port 8080' &

シェルはジョブ番号を表示します。tcpdump が待ち受け開始のメッセージを表示する場合があります。以前練習した sleep で、初期化に 1 秒を与えます。

sleep 1

学習済みの curl リクエストを送り、応答本文を保存します。

curl -sS http://127.0.0.1:8080/capture.txt > captured-response.txt

要求と応答では、接続の確立やアプリケーションデータを含む複数の TCP パケットが生成されます。wait は、このシェルのバックグラウンドジョブが終了するのを待ちます。

wait

tcpdump は設定したパケット数で停止し、キャプチャ概要を表示するはずです。バイナリの pcap は構造化されたパケットファイルなので、テキストのように cat で読まないでください。アプリケーションの応答を別に調べます。

cat captured-response.txt

想定される出力:

Local capture practice.

pcap と応答本文は、同じローカル通信を別の形で表します。キャプチャは提供されたインターフェースとエンドポイントに限定してください。

保存したパケットを読んで解釈する

このステップでは、キャプチャを読み、パケットのエンドポイントを HTTP リクエストと応答に結び付けます。

-r はライブの待ち受けの代わりに、保存したキャプチャを読みます。-nn はアドレスとポートの両方を数値に保ち、名前検索で実際のエンドポイントが見えにくくなるのを防ぎます。

sudo tcpdump -nn -r training.pcap

各行にはタイムスタンプ、エンドポイント、トランスポート情報があります。両側の 127.0.0.1 と、サービス側のポート 8080 を探してください。もう一方の TCP ポートはクライアントのもので、変わる場合があります。TCP フラグは接続制御とアプリケーションデータの両方のパケットを説明するため、すべての行に HTTP メッセージがあるわけではありません。

-A を追加して、パケット内容を ASCII テキストで表示します。

sudo tcpdump -nn -A -r training.pcap

バイナリのように見えるプロトコルフィールドの中から、要求 GET /capture.txt HTTP/1.1 と成功した HTTP 応答ステータスを探してください。これは平文 HTTP です。暗号化された HTTPS では、基本的なパケット表示で同じような読み取れるアプリケーション内容は見えません。

読みやすい分析を、元の pcap とは別に保存します。

sudo tcpdump -nn -A -r training.pcap > packet-details.txt

tcpdump のキャプチャファイルの説明は、引き続き標準エラー出力に表示される場合があります。パケット詳細はリダイレクトされたファイルに入ります。grep で要求行を探します。

grep 'GET /capture.txt' packet-details.txt

一致する行は、パケットの証拠と自分で生成した要求を結び付けます。後のツール用のバイナリキャプチャと、すぐに確認できる読みやすい表示を保持できました。

まとめ

キャプチャのインターフェースとフィルターを選び、パケット数を制限し、バックグラウンドのキャプチャと HTTP リクエストを連携させ、できた pcap を読みました。数値のエンドポイントと TCP パケットを、実際の要求と応答に結び付けました。