rainit2006 / Anything

0 stars 0 forks source link

网络抓包工具 #19

Open rainit2006 opened 4 years ago

rainit2006 commented 4 years ago
rainit2006 commented 3 years ago

Wireshark

HTTPS

https://please-sleep.cou929.nu/decrypting-tls-traffic-packet-capture.html

curl の場合の例

$ export SSLKEYLOGFILE=/tmp/pre-master-secret.log curl https://example.com/

Note:  ターミナルを開いて実行すると、SSLKEYLOGFILEをエクスポート...コマンドの場合、同じ端末(より正確には、その端末内の同じシェルプロセス)から生成されたアプリケーション(プロセス)のみが環境変数を参照します。実行した場合google-chrome(-stable)その端末から、SSLKEYLOGFILE変数を指定して、指定したファイルに書き込みます。

2. Wireshark/tshark などのパケットキャプチャツールで pre-master-secret のログを読み込む

Wireshark: Preferences > Protocols > TLS に (Pre)-Master-Secret log filename という項目があり、ここにログのパスを指定すれば良い。

この状態で通信するとパケットキャプチャツールが TLS を復号化してくれる。

Tshark

keylog_file とネットワークインタフェースを指定しキャプチャ。表示は http2 に絞り込み

$ sudo tshark -i en9 \ -o "tls.keylog_file:/tmp/pre-master-secret.log" \ -o "tls.debug_file:/tmp/tls-debug.log" \ -Y "http2"

curl で SSLKEYLOGFILE を指定しつつリクエスト

$ SSLKEYLOGFILE=/tmp/pre-master-secret.log curl -v https://example.com

tshark の出力例

123 2.894499 2606:28...(snip) → 2409:10...(snip) HTTP2 196 WINDOW_UPDATE[0] 126 2.894768 2409:10...(snip) → 2606:28...(snip) HTTP2 139 Magic 127 2.894770 2409:10...(snip) → 2606:28...(snip) HTTP2 142 SETTINGS[0] 128 2.894780 2409:10...(snip) → 2606:28...(snip) HTTP2 128 WINDOW_UPDATE[0] 129 2.894829 2409:10...(snip) → 2606:28...(snip) HTTP2 152 HEADERS[1]: GET / 130 2.894937 2409:10...(snip) → 2606:28...(snip) HTTP2 124 SETTINGS[0] 145 3.014397 2606:28...(snip) → 2409:10...(snip) HTTP2 124 SETTINGS[0] 148 3.015336 2606:28...(snip) → 2409:10...(snip) TLSv1.2 1294 [TLS segment of a reassembled PDU] 149 3.015338 2606:28...(snip) → 2409:10...(snip) HTTP2 413 DATA[1] (text/html)


tcpdump

tcpdump でキャプチャしファイルに落とす

$ sudo tcpdump -i en9 -n port 443 -w /tmp/tmp.pcap

curl で SSLKEYLOGFILE を指定しつつリクエスト

$ SSLKEYLOGFILE=/tmp/pre-master-secret.log curl -v https://example.com

keylog_file を指定すれば、tcpdump でとったファイルでも復号できている

$ sudo tshark -r /tmp/tmp.pcap \ -o "tls.keylog_file:/tmp/pre-master-secret.log" \ -o "tls.debug_file:/tmp/tls-debug.log" \ -Y "http2" 1462 3.152672 2606:28...(snip) → 2409:10...(snip) HTTP2 196 WINDOW_UPDATE[0] 1465 3.152970 2409:10...(snip) → 2606:28...(snip) HTTP2 139 Magic 1466 3.152980 2409:10...(snip) → 2606:28...(snip) HTTP2 142 SETTINGS[0] 1467 3.152992 2409:10...(snip) → 2606:28...(snip) HTTP2 128 WINDOW_UPDATE[0] 1468 3.153039 2409:10...(snip) → 2606:28...(snip) HTTP2 152 HEADERS[1]: GET / 1469 3.153106 2409:10...(snip) → 2606:28...(snip) HTTP2 124 SETTINGS[0] 1471 3.243603 2606:28...(snip) → 2409:10...(snip) HTTP2 124 SETTINGS[0] 1474 3.244215 2606:28...(snip) → 2409:10...(snip) TLSv1.2 1294 [TLS segment of a reassembled PDU] 1475 3.244216 2606:28...(snip) → 2409:10...(snip) HTTP2 414 DATA[1] (text/html)



- Wiresharkに秘密鍵を登録しても解読できないのにSSLKEYLOGFILEを使えば解読できる理由
https://www.khstasaba.com/?p=686

### iOS などのモバイルアプリの場合
mitmproxy でキャプチャ
1. まず iPhone 側にプロキシと証明書の設定をする
2. Safari で mitm.it にアクセスし証明書をダウンロード
3. Settings > General > Profiles mitmproxy を選択しインストール
4. Settings > General > About > Certificate Trust Settings より mitmproxy のトグルを有効化
5. ホストの PC で mitmproxy を起動する: "$ mitmproxy"