web-dev-qa-db-ja.com

DovecotTLS接続ハンドシェイクChangeCipherSpec

今日、メールサーバーに仮想ドメインを追加してから、DovecotTLS接続のセキュリティをチェックしました。テストは、Thunderbirdを使用してリモートホストから実行されました。 tcpdumpで接続をキャプチャし、それをssldumpに渡しました。また、許可された暗号を確認するためにnmapを使用しました。それはすべてPastebinにあります ここ

サーバー->クライアントChangeCipherSpecTLS_RSA_WITH_RC4_128_MD51 10 0.5695を使用すると表示されます)がわかりませんTLS接続の設定方法について混乱しているかもしれませんが、RC4タイプの暗号が有効になっていないので(またはなんでこんなことが起こっているの?

1
TrustNoOne

私は最近この問題に自分で遭遇しました。 ssldumpopenssl s_clientを同時に実行します-opensslは、アクティブな暗号がAES256-SHAであることを示しますが、ssldumpは出力にTLS_RSA_WITH_RC4_128_MD5を出力します。

バグを見つけたと思いますssldumpに。ソースコードを調べてみると、次のことがわかりました。

  • SSLハンドシェイクパケットは、ssl/ssl_enum.c:20の関数decode_ContentType_handshake()でデコードされます。
  • 次に、この関数はssl_decode_switch(ssl,HandshakeType_decoder,t,dir,seg,data)を呼び出します。ここで、HandshakeType_decoderdecoder構造体の配列です\
  • ssl_decode_switch(ssl,dtable,value,dir,seg,data)ssl/ssl_print.c:204)は、type == valueまたはtype == -1( "not found")のdtableエントリが見つかるまで、decoder配列を繰り返し処理します。
  • ただし、HandshakeType_decoderssl/ssl_enum.c:212の定義を見ると、配列はtype == -1を含むdecoder構造体で終了していません-最後に0があります
  • また、HandshakeType_decoder定義の直後には、同じ構造体decoderの配列であるcipher_suite_decoderssl/ssl_enum.c:266)の定義があります。この配列には、暗号のリストが含まれています。
  • つまり、SSLハンドシェイクタイプがHandshakeType_decoderで見つからない場合、ssl_decode_switch()cipher_suite_decoderデータの直後のメモリにあるため、HandshakeType_decoderで検索を続行します。
  • そして、これは私の場合に起こっていることがわかりました。何らかの理由で、decode_ContentType_handshake()はハンドシェイクパケットを4タイプにデコードしましたが、ssl_decode_switch()HandshakeType_decoderで見つかりませんでした。ただし、偶然にも、4は、cipher_suite_decoderエントリのtype値とname == TLS_RSA_WITH_RC4_128_MD5です。

この問題を調査する時間がなくなったため、ssldumpが無効なタイプのハンドシェイクパケットをデコードしようとしている理由がわかりません。ただし、オーバーランを防ぐために、HandshakeType_decoder配列は-1で終了する必要があると確信しています。

2
piit79

SSLDumpがそこで何をしているのかわかりません。

ただし、クライアントは2つの暗号スイートのサポートのみを通知し、サーバーはラベルの付いたものを選択します

cipherSuite         Unknown value 0xc014

そして この16進値はにデコードされます

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

したがって、RC4はありません。

0
StackzOfZtuff