SSL 3.0に、プロトコル自体の脆弱性がGoogleによって発見されました。”Paddning Oracle On Downgrade Legacy Encryption”略してPOODLEと呼ばれています。
検証サイト https://www.poodletest.com/ が立ち上がっており、脆弱性の詳細に関する元ソースへのリンクもあります。
今回の脆弱性はサーバー、クライアントともに対策が必要になります。とり急ぎ自分の周りにあるSSL/TLSを使うサービスに対策を施しました。
Apache+mod_ssl
SSL_Engine onとしているセクション内で、以下の設定をしました。
SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
SSL 2.0, 3.0を無効にし、利用可能な暗号からMD5, 3DES等を外しています(参考: httpsだからというだけで安全?調べたら怖くなってきたSSLの話!?)。
Postfix
smtpd_use_tls=yes smtpd_tls_mandatory_protocols = !SSLv3, !SSLv2 smtpd_tls_mandatory_exclude_ciphers = aNULL, MD5, RC4
Courier-imapd
##NAME: TLS_PROTOCOL:0 # # TLS_PROTOCOL sets the protocol version. The possible versions are: # # OpenSSL: # # SSL3 - SSLv3 # SSL23 - either SSLv2 or SSLv3 (also TLS1, it seems) # TLS1 - TLS1 # # Note that this setting, with OpenSSL, is modified by the TLS_CIPHER_LIST # setting, below. # # GnuTLS: # # SSL3 - SSLv3 # TLS1 - TLS 1.0 # TLS1_1 - TLS 1.1 # # When compiled against GnuTLS, multiple protocols can be selected as follows: # # TLS_PROTOCOL="TLS1_1:TLS1:SSL3" # # DEFAULT VALUES: # # SSL23 (OpenSSL), or "TLS_1:TLS1:SSL3" (GnuTLS) TLS_PROTOCOL="TLS1"
Debianのcourier-imapdはOpenSSLをリンクしているのでTLS1のみ設定しています。
確認方法
OpenSSLのs_clientを利用することで、任意のバージョンのSSL/TLSを使った接続を試すことができます。
$ openssl s_client -connect target.server.example.jp:443 -ssl3 (略) SSL handshake has read 2844 bytes and written 289 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : SSLv3 Cipher : ECDHE-RSA-AES256-SHA (略) $ openssl s_client -connect example.jp:443 -ssl3 -cipher `openssl ciphers RC4` (略) New, TLSv1/SSLv3, Cipher is ECDHE-RSA-RC4-SHA Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : SSLv3 Cipher : ECDHE-RSA-RC4-SHA
上記サンプルでは、1回目はSSLv3, AESでの接続、2回目はSSLv3, RC4での接続ができています(参考: 私が愛した openssl (SSL/TLS 編))。設定が正しくできれば、以下のような結果となりネゴシエーションに失敗します。
SSL handshake has read 7 bytes and written 0 bytes --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE SSL-Session: Protocol : SSLv3 Cipher : 0000
STARTTLSを使う場合は-starttlsオプションが利用できます。
$ openssl s_client -connect example.jp:587 -ssl3 -cipher `openssl ciphers RC4` -starttls smtp (略) SSL handshake has read 2128 bytes and written 264 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-RC4-SHA Server public key is 2048 bit Secure Renegotiation IS supported Compression: zlib compression Expansion: zlib compression SSL-Session: Protocol : SSLv3 Cipher : ECDHE-RSA-RC4-SHA
Debianでの対応状況(2014/10/16朝頃)
- w3mはSSLv3を無効化するパッチの当たったバージョンがsidにアップロードされています
- SSLv3が無効にされたOpenSSL 1.0.1jがリリースされており、sidにもアップロードされています。