FREAK 対策を行う

セキュリティ対策しなきゃ

FREAK 脆弱性のチェック方法。
Webサーバ、及び、Windows クライアントでの対応方法に関して

2015/03/11 一部追記

はじめに

先日暗号化プロトコル「SSL/TLS」の複数のライブラリに脆弱性が存在し、 通信内容を盗聴したり改ざんする中間者攻撃 FREAK ( Factoring attack on RSA-EXPORT Keys ) が可能である旨レポートされましたが、週末には Windows でも影響がある(らしい) 旨報告が出ました。
遅ればせながら、問題の確認等行ったので記しておきます。

Vulnerability Summary for CVE-2015-1637

写真 : 写真素材ぱくたそ ( 使いまわしてます... )

確認/設定方法(サーバ側)

Export Cipher が使われている環境の脆弱性が指摘されているため、これが有効になっている場合に無効化すればよいようです。

  • EXP-DES-CBC-SHA
  • EXP-RC2-CBC-MD5
  • EXP-RC4-MD5
  • EXP-EDH-RSA-DES-CBC-SHA
  • EXP-EDH-DSS-DES-CBC-SHA
  • EXP-ADH-DES-CBC-SHA
  • EXP-ADH-RC4-MD5

脆弱性の確認ですが、SSLv3 の脆弱性 POODLE への対策を行う でも利用した以下サイトでチェックが行えます。

SSL Server Test - QUALYS SSL LABS

某証明機関から確認のためのサイトが通知されてきたので、こちらでも確認してみました。( ※上の SSL Server Test の方がより詳細なテストが行えます )

GeoTrust SSL Toolbox GeoTrust SSL Toolbox

テキスト入力部分にチェック先のURLを入力して [ Check ] ボタンをクリックする事で FREAK 脆弱性があるかどうかチェックしてくれます。
Poodle, Heartbreed に関しても併せてチェックしてくれます。

上記で脆弱性ありの判定がなされた場合、サーバの設定変更を検討する必要があるかと思います。
ちなみに、Apache の場合、SSLCipherSuite 設定で !EXPORT 設定を記述(追記)する事でExport Cipher を無効化できます。( 設定方法はサーバ種類によって異なる )

以下 apache (2.2系) の設定例

SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW

設定例2 ( Cipherの有効/無効を個別に設定 )

SSLCipherSuite  ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on

SSL設定情報生成ツール

SSLCipherSuite の設定は手動で行っても構いませんが、Mozillaが提供している設定情報生成ツールがあるようで、こちらを利用するのが簡単です。

Mozilla SSL Configuration Generator

サーバ種類/バージョン、SSLバージョン、設定のレベル( Modern > Intermediate > Old ) を指定する事で設定情報を出力してくれます。
( Modern がよりセキュアですが、古いタイプのブラウザがサポートされなくなります。 )

確認方法(クライアント側)

FREAK Client Test Tool でブラウザに FREAK 脆弱性があるかチェックできます。 

Tracking the FREAK Attack にクライアント毎の対応状況が記載されています。
IE や MacOS上のChrome/Safari/Opera 等ではパッチが提供されているようです。

OS/クライアント毎に対策方法が異なるため、このあたりは利用環境に応じて対策を行いましょう。

確認/設定方法(Windows)

セキュリティパッチの適用

MSからセキュリティパッチが公開されているので適用しましょう。
マイクロソフト セキュリティ情報 MS15-031 - 重要

Schannel の設定を行う

パッチ適用だけでなく、Schannelの設定を変更し、特定のプロトコルや暗号化方式等を無効にする事も可能です。

※Windows 端末でも対応を行う事が可能ですが、レジストリの編集が必要なため、個々の利用者が設定する事はお勧めしません。設定を行う場合自己責任でどうぞ。

以下 Cipher Suite を無効化します。

  • SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA
  • SSL_RSA_EXPORT1024_WITH_RC4_56_SHA
  • SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5
  • SSL_RSA_EXPORT_WITH_RC4_40_MD5
  • TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA
  • TLS_RSA_EXPORT1024_WITH_RC4_56_SHA
  • TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5
  • TLS_RSA_EXPORT_WITH_RC4_40_MD5

Windowsでこれらを無効にする場合、レジストリ設定を変更します。

参考 : 特定の暗号化アルゴリズムおよび Schannel.dll のプロトコルの使用を制限する方法

手順

※以下手順ではレジストリを変更します。変更した内容に誤りがあった場合にはWindowsの動作に重大な影響が発生する場合がありますので、必ずバックアップを取ってから作業して下さい。

  1. レジストリエディタを起動します。
  2. 以下まで移動します。
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ SecurityProviders\SCHANNEL
    このキー以下を設定する事で作業を行います。

特定のプロトコル単位で無効にする

  1. SCHANNEL\Protocols\<プロトコル名>\Clientキーにある DisabledByDefault の値を 0x1 に変更するか、Enabled の値を 0x0 にします。

プロトコル単位ではなく暗号化方式単位で制御する

  1. SCHANNEL\Protocols\<プロトコル名>\Clientキーにある DisabledByDefault の値を 0x0 に変更します。( 以下は TLS 1.1, TLS 1.2に関して設定する場合の例 )
    • SCHANNEL\Protocols\TLS 1.1\Client
    • SCHANNEL\Protocols\TLS 1.1\Server
    • SCHANNEL\Protocols\TLS 1.2\Client
    • SCHANNEL\Protocols\TLS 1.2\Server
  2. SCHANNEL\Ciphers\RC4 128/128 サブキー を無効化します。
    RC4 128/128 キーで 128-bit RC4 の設定が行えます。
    無効にする場合 DWORD値 "Enabled" を追加して、"0x0" を設定します。有効にする場合は "0xffffffff" を設定し、デフォルトは有効です。
    これを無効に設定する事で以下を無効に設定できます。
    • SSL_RSA_WITH_RC4_128_MD5
    • SSL_RSA_WITH_RC4_128_SHA
    • TLS_RSA_WITH_RC4_128_MD5
    • TLS_RSA_WITH_RC4_128_SHA
  3. 同様に他暗号方式に関しても設定します。
    上記MSの記事をまとめると下表のような設定になります。
レジストリキー
(SCANNEL\Ciphers 以下)
無効化される暗号化方式
Ciphers\RC4 128/128 SSL_RSA_WITH_RC4_128_MD5
SSL_RSA_WITH_RC4_128_SHA
TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_RC4_128_SHA
Ciphers\Triple DES 168/168 SSL_RSA_WITH_3DES_EDE_CBC_SHA
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
Ciphers\RC2 128/128 記載なし
Ciphers\RC4 64/128 記載なし
Ciphers\RC4 56/128 TLS_RSA_EXPORT1024_WITH_RC4_56_SHA
Ciphers\RC2 56/128 記載なし
Ciphers\RC2 56/56 SSL_RSA_WITH_DES_CBC_SHA
TLS_RSA_WITH_DES_CBC_SHA
Ciphers\RC4 40/128 SSL_RSA_EXPORT_WITH_RC4_40_MD5
TLS_RSA_EXPORT_WITH_RC4_40_MD5
Ciphers\RC2 40/128 SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5
TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5
Ciphers\NULL 全ての暗号化を無効にする場合、Enabled の値を "0xffffffff" に

Hash アルゴリズム単位で制御する

Hash単位で制御する方式に関しても表にまとめます。

レジストリキー
(SCANNEL\Hashes 以下)
無効化される暗号化方式
MD5 SSL_RSA_EXPORT_WITH_RC4_40_MD5
SSL_RSA_WITH_RC4_128_MD5
SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5
TLS_RSA_EXPORT_WITH_RC4_40_MD5
TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5
SHA SSL_RSA_WITH_RC4_128_SHA
SSL_RSA_WITH_DES_CBC_SHA
SSL_RSA_WITH_3DES_EDE_CBC_SHA
SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA
SSL_RSA_EXPORT1024_WITH_RC4_56_SHA
TLS_RSA_WITH_RC4_128_SHA
TLS_RSA_WITH_DES_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA
TLS_RSA_EXPORT1024_WITH_RC4_56_SHA

KeyExchangeAlgorithms 単位で制御する...

これに関しても記述がありますが、、、めんどくさくなってきた、、、

結局何を設定すればいいの?

って話ですが、以下あたりにしておけばよい感じ?
( SSLv2/v3、及び、問題がある(強度が低い) Cipher を無効化 )

レジストリ
(SCHANNEL以下)
設定値
Protocols\SSL 2.0\Client "Enabled" = 0x0 (DWORD)
Protocols\SSL 3.0\Client "Enabled" = 0x0 (DWORD)
※環境によっては"DisabledByDefault"=0x1(DWORD)で妥協するのもあり
Protocols\TLS 1.1\Client "DisabledByDefault" = 0x0 (DWORD)
"Enabled" = 0x1 (DWORD)
Protocols\TLS 1.2\Client "DisabledByDefault" = 0x0 (DWORD)
"Enabled" = 0x1 (DWORD)
Ciphers\NULL "Enabled" = 0x0 (DWORD)
Ciphers\RC2 56/56 "Enabled" = 0x0 (DWORD)
Ciphers\RC2 40/128 "Enabled" = 0x0 (DWORD)
Ciphers\RC2 56/128 "Enabled" = 0x0 (DWORD)
Ciphers\RC2 64/128 "Enabled" = 0x0 (DWORD)
Ciphers\RC2 128/128 "Enabled" = 0x0 (DWORD)
Ciphers\RC4 40/128 "Enabled" = 0x0 (DWORD)
Ciphers\RC4 56/128 "Enabled" = 0x0 (DWORD)
Ciphers\RC4 64/128 "Enabled" = 0x0 (DWORD)
Ciphers\RC4 128/128 "Enabled" = 0x0 (DWORD)

まとめ

試しに Windows の設定もしてみたけど、現状効果のほどは ( 検証してないため ) 不明 ...