WASNight 2015 Summer 2015/8/20
小林 稔
2015/8/20WASNight 2015 Summer
1
 ISPでセキュリティに関する仕事をしています
 Twitter : @unkn0wnbit
 MINI Hardening Project主催
 Webアプリのことはよく分かりません
2015/8/20WASNight 2015 Summer 2
1. PFSとは
2. PFSなTLS通信を復号する
3. まとめ
2015/8/20WASNight 2015 Summer 3
2015/8/20WASNight 2015 Summer
4
 現状、さまざまなWebサービスでHTTPSによる暗号化が行われている
 暗号化するには暗号鍵(セッションキー)が必要
 クライアントとサーバ間で暗号化に使用される暗号鍵を交換する必要がある
 RSA鍵交換
 サーバのTLS公開鍵を元にセッションキーを交換
 PFS特性を持たない
 Diffie-Hellman(DH)鍵交換
 サーバのTLS公開鍵とは異なるパラメータを元にセッションキーを交換
 PFS特性を持つ
2015/8/20WASNight 2015 Summer 5
 PFS : Perfect Forward Secrecy
 将来において、公開鍵暗号の秘密鍵が漏えい、または公開鍵暗号の危殆化により解読されて
も、通信内容が漏えいしない機能。
 RSA鍵交換
 認証に使用する公開鍵と暗号鍵の交換に使用する公開鍵が同じ
 秘密鍵を取得することができれば、過去の暗号化通信もすべて復号できる
 長期間、鍵のペアが長期間、更新されないので攻撃の時間を十分取ることができる
 DH鍵交換
 認証に使用する公開鍵と暗号鍵の交換に使用する公開鍵が異なる
 認証に使用する秘密鍵が漏えいしても、暗号化通信は復号できない
 セッション毎に鍵交換を行うので、特定の暗号化通信が攻撃により復号されても、他の暗号
化通信は復号できない
2015/8/20WASNight 2015 Summer 6
 2013年6月のエドワード・スノーデンの告発や2014年4月のHeartbleedによって、
Perfect Forward Secrecy (PFS)特性を持つセッションキーを採用する必要性が大きく
増した。
2015/8/20WASNight 2015 Summer 7
 Google ウェブマスター向け公式ブログ: HTTPS をランキング シグナルに使用します
 http://googlewebmastercentral-ja.blogspot.com/2014/08/https-as-ranking-signal.html
2015/8/20WASNight 2015 Summer 8
 HTTP/2のTLS通信において実装が必須な暗号スイート
 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
 Hypertext Transfer Protocol Version 2 (HTTP/2)
 https://tools.ietf.org/html/rfc7540
2015/8/20WASNight 2015 Summer 9
Perfect Forward Secrecy!!
 Let's Encrypt
 https://letsencrypt.org/
 EFF、Mozilla、Cisco、Akamaiなどが立ち上げ。
 誰でも無料で証明書を取得できる。
 Q2 2015にCAを立ち上げ予定。
 Updated Let's Encrypt Launch Schedule
 https://letsencrypt.org/2015/08/07/updated-lets-encrypt-launch-schedule.html
2015/8/20WASNight 2015 Summer 10
2015/8/20WASNight 2015 Summer
11
 通信プロトコルのデバッグ
 通信内容の確認
 利用しているWebサービスがどのような情報を収集しているか
 クライアントが送信している情報
 Potentially Unwanted Application(PUA)など
 など…
2015/8/20WASNight 2015 Summer 12
 暗号化通信をキャプチャしても、もちろん復号できません
 サーバのTLS秘密鍵を使っても、もちろん復号できません
 クライアントとサーバのメモリ上にしかセッションキーが存在しないため
 どうにかしてセッションキーを取り出せばよい
2015/8/20WASNight 2015 Summer 13
 SSLKEYLOGFILE環境変数を設定するとセッションキーをファイルにダンプさせること
ができる。
 SSLKEYLOGFILE=/path/to/sslkeylog.txt
 Wiresharkに上記のファイルを設定する。
 Edit – Preferences – Protocols – SSL – (Pre)-Master-Secret log filename
 暗号化通信をWiresharkでキャプチャして、display filter で “ssl” を設定
 適当な暗号化通信のパケットを右クリックしてして、コンテキストメニューからFollow SSL
Streamを選択
 Packet BytesのDecrypted SSL dataタブ
2015/8/20WASNight 2015 Summer 14
 CLIENT_RANDOM <space> <64 bytes of hex encoded client_random> <space> <96
bytes of hex encoded master secret>
 RSA <space> <16 bytes of hex encoded encrypted pre master secret> <space> <96
bytes of hex encoded pre master secret>
2015/8/20WASNight 2015 Summer 15
2015/8/20WASNight 2015 Summer 16
 メリット
 TLS秘密鍵を持っていなくても復号できる
 Webサービスのユーザが送信内容を確認できる
 暗号鍵の交換方式がRSAでもECDHEでも復号できる
 ローカルProxy型だと問題がある場合(証明書の検証が厳密など)でも復号できる
 Pre-loaded Public Key Pinning / HTTP Public Key Pinning(HPKP)
 デメリット
 セッションキーをダンプできるのは、Firefox, ChromeなどのNetwork Security Services
(NSS)ライブラリを使用しているブラウザやツールのみ
 復号に使用できるツールは、Wiresharkくらい(?)
 TLS秘密鍵をインストールしてリアルタイムに復号しながら監視を行うタイプのネットワー
クセキュリティ製品には応用できない
2015/8/20WASNight 2015 Summer 17
2015/8/20WASNight 2015 Summer
18
 特定の条件下であれば、PFS特性を持つTLSの暗号化通信を復号することは可能
 NSSライブラリを使用するWebブラウザ、ツール
 Firefox / Chrome
 SSLKEYLOGFILE環境変数
 Wireshark(解析)
 ただし、常時、実施することには向いていない
 デバッグ
 送信内容の調査
 設定した覚えがないSSLKEYLOGFILE環境変数がある場合は、端末を調査したほうがい
いかも
2015/8/20WASNight 2015 Summer 19
 NSS Key Log Format
 https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format
 Chrome: From NSS to OpenSSL
 https://docs.google.com/document/d/1ML11ZyyMpnAr6clIAwWrXD53pQgNR-
DppMYwt9XvE6s/edit?pli=1#heading=h.n30fi956cpfk
 SSL/TLS & Perfect Forward Secrecy
 http://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy.html
 ディフィー・ヘルマン鍵共有
 http://ja.wikipedia.org/wiki/%E3%83%87%E3%82%A3%E3%83%95%E3%82%A3%E3%83%BC%E3%
83%BB%E3%83%98%E3%83%AB%E3%83%9E%E3%83%B3%E9%8D%B5%E5%85%B1%E6%9C%89
 Diffie–Hellman key exchange
 http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
2015/8/20WASNight 2015 Summer 20

PFSなTLS通信を復号する