web-dev-qa-db-ja.com

TLS_DHEを復号化するようにWiresharkを設定する

パケットが暗号スイートで暗号化されているクライアント/サーバーのパッシブスニッフィングトラフィックダンプがあります

Cipher Suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x009e)

Logjam攻撃により、DH秘密鍵を見つけることができました。

パケットを復号化するようにWiresharkを設定するにはどうすればよいですか?

3
Sirt

この投稿 に記載されているように、WiresharkはTLS復号化を有効にするシークレットを提供するためのいくつかのオプションをサポートしています。この場合、ランダムなバイトをClient HelloメッセージからプリマスターシークレットにマップするPMS_CLIENT_RANDOMキーの使用をお勧めします(両方が16進エンコードされています)。

DH鍵交換の場合、プリマスターシークレットは共有DHシークレットです。プライベートDH値と、ServerKeyExchangeメッセージからのパブリックパラメータと値( RFC 5246、page 51 を参照)を使用して、共有シークレットを計算できます。 (これは、有限フィールドを使用する一時的なDHを想定しています。ECDHEについては、代わりに RFC 4492、セクション5.4を参照してください。

次に、共有シークレットを計算した後、それを適切にエンコードする必要があります( RFC 5246、セクション8.1.2。 を参照):

従来のDiffie-Hellman計算が実行されます。ネゴシエートされたキー(Z)はpre_master_secretとして使用され、上記のようにmaster_secretに変換されます。すべてゼロのビットを含むZの先頭バイトは、pre_master_secretとして使用される前に取り除かれます。

秘密を見つけたとすると、次のようなテキストファイルを作成できます。

PMS_CLIENT_RANDOM 9c39b93ced5c48db094a502f7ed4ef6b77a1ccb751964c04cac8c7e75837ddc8 2b1f6108824ef0c7e38443dda437c43177d8a1ac73221b6515c9df7d854bc503                                                                                                                            

次に、 "(Pre)master secret log filename" SSLプロトコル設定を使用して、通常どおりWiresharkを構成します。失敗した場合は、SSLプロトコル設定でデバッグオプションを設定し、それを読んでさらにヒントを得ることができます。

1
Lekensteyn