サーバの秘密鍵を使わず
SSL/TLS を解読する方法
2015/01/29
#pakeana 24
@otsuka752 (@twovs)
agenda
• 自己紹介
• サーバの秘密鍵を使う場合
• サーバの秘密鍵を使わない場合• サーバの秘密鍵を使わない場合
• 実行例(Win/Linux/OS X)
about me
• @otsuka752 (@twovs)
• ネコ2人+奥さん1人+可愛い娘
• 無線LAN装置の開発(1999~2004)• 無線LAN装置の開発(1999~2004)
• オンラインゲームのシステム管理者(2004~)
• ただし,ゲームには全く興味無し
• ZFS 最高 !!! beadm 便利 !!!
サーバの秘密鍵を使う場合
• サーバは RSA を使う設定に
(DH/ECC/DSA などを使わない設定に)
• サーバ証明書の公開鍵のペアの秘密鍵を
Wireshark に読み込ませる
(秘密鍵は PKCS#8/PEM/パスワード無し)
• そのサーバとの通信だけが解読可能
サーバの秘密鍵を使わない場合
• クライアントPC (Win/Mac) だけでも簡単に
• Google も Facebook も Yahoo も解読可能
• ただし Chrome や Firefox の通信だけ• ただし Chrome や Firefox の通信だけ
• NSS(Network Security Services)の機能を使う
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format
サーバの秘密鍵を使わない場合
• Chrome や Firefox で Key log を出力させ
• Key log を Wireshark に読み込ませる
• どこかでパケットをキャプチャ• どこかでパケットをキャプチャ
(Key log を出す PC 上でなくても OK)
実行例(Win/Chrome)
• Key log の出力先を c:¥sslkey_chrome.txt に
• chrome.exe を起動
実行例(Win/Chrome)
起動した Chrome で起動した Chrome で
HTTPS なページを閲覧
実行例(Win/Firefox)
• Key log の出力先を c:¥sslkey_firefox.txt に
• firefox.exe を起動
実行例(Win/Firefox)
起動した Firefox で起動した Firefox で
HTTPS なページを閲覧
実行例(Linux/curl)
• Key log の出力先を sslkey_curl.txt に
• curl を実行
実行例(Linux/curl)
実行例(OS X)
• Key log の出力先を sslkey_OSX.txt に
• Chrome や Firefox を普通に(Dock から)起動
実行例(OS X)
Dock からブラウザ起動
HTTPS なページを閲覧HTTPS なページを閲覧
サンプルファイルで
解読してみる
解読できない場合の一例
SSL/TLS の Key Log を出力する前に
SSL/TLS の handshake が完了していて
セッション再開時のパケットだけをセッション再開時のパケットだけを
見ている場合(該当する Key Log が無い場合)
ClientHello -> Session ID Length: 0
で handshake している時の Key Log が必要
サンプルファイル
• 通信開始時刻 2015/01/01 00:00:00'00
• 通信元
MAC Addr 00:11:22:33:44:55
IP Addr 10.0.0.1IP Addr 10.0.0.1
Port 10000
• 通信先
MAC Addr 00:aa:bb:cc:dd:ee
IP Addr (google/facebook/yahoo)
Port 443 (HTTPS)
サンプルファイルは…
• Tcpreplay で各種ヘッダを書き換えて配布
• tcprewrite ¥
--enet-smac=00:11:22:33:44:55 ¥--enet-smac=00:11:22:33:44:55 ¥
--enet-dmac=00:aa:bb:cc:dd:ee ¥
--pnat=x.x.x.x/32:10.0.0.1/32 ¥
--portmap=yyyyy:10000 ¥
-i origin.pcap ¥
-o sample.pcap
お知らせ
• 日本語サイト始めてみました!
• http://tcpreplay.jp/
• https://github.com/otsuka752/
• Web site in English
• http://tcpreplay.appneta.com/
• https://github.com/appneta/tcpreplay/
ENDEND

how to decrypt SSL/TLS without PrivateKey of servers