はじめに
サービス名やポートレポートは、ネットワークの観測を要約します。パケットキャプチャでは、その背後にある実際の通信を、エンドポイント、接続制御、アプリケーションメッセージまで調べられます。
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 パケットを、実際の要求と応答に結び付けました。

