2014年 10月 14日 に発表された「Secure Sockets Layer(SSL)」のバージョン 3.0 (SSL 3.0) に存在する脆弱性 (CVE-2014-3566)、通称 「POODLE (Padding Oracle On Downgraded Legacy Encryption)」 ですが、これに関連して、自分で管理している Web サーバ (Apache) の SSL 3.0 を無効にしました。
その設定方法についてと、ついでに自分が使っているブラウザ側でもこの機会に SSL 3.0 を無効にしたので、各ブラウザごとに SSL 3.0 を無効にする方法などをまとめておこうと思います。
CVE-2014-3566 の概要
まずは、今回騒ぎになっている SSL 3.0 の脆弱性 (POODLE) について簡単に概要を。
- SSL 3.0 を CBC (Cipher Block Chaining) モードで使用した際にパディングオラクル攻撃が可能となる
- 暗号化されたトラフィックの一部 (認証 Cookie など) を解読される可能性
- ダウングレード攻撃によってクライアントに SSL 3.0 を強制した上で悪意のあるコードを実行させる可能性
- ただし、攻撃成功には大量の通信が必要など制約 (Google のレポートでは、平均して 256 回のリクエストで暗号文の 1 バイトの解読が可能とのこと) もあり、ただちに SSL 3.0 無効にしないと大変なことになるというわけではない (冷静に)
- 有効な対処法としてはサーバ、クライアントにおける SSL 3.0 の無効化
- TLS 1.0、TLS 1.1、TLS 1.2 には影響なし
上に書いた Google のレポート (PDF) には、今回の脆弱性の詳細が書かれています。重要なのは、この脆弱性を悪用した攻撃を防ぐには、サーバ、クライアント双方で SSL 3.0 を無効にするしかないってことです。
Web サーバ側での対処
SSL 3.0 は 1995 年に発表されてからもう 18年も経っている古いバージョンですし、TLS 1.2 ですら制定から 8年以上経っている状態ですので、すでに SSL 3.0 だけをサポート、つまり TLS 1.0、TLS 1.1、TLS 1.2 に対応しないブラウザはもうこの世に存在しない前提で OK ってことで (IE6 が TLS 1.0 に対応はしていますが、デフォルトでは無効になっていて、SSL 2.0、SSL 3.0 だけを使用するようになっているみたいですね)、今回、問答無用で SSL 3.0 を無効にしました。
設定は簡単で、Apache であれば httpd.conf に下記の設定をするだけです。
SSLProtocol All -SSLv2 -SSLv3
All
(全許可) しておいてからの -SSLv2
-SSLv3
で SSL 2.0、SSL 3.0 を無効にします。SSLProtocol ディレクティブについて詳しくは下記。
下記のように、-All
(全無効) しておいてからの +TLSv1
+TLSv1.1
+TLSv1.2
で TLS 1.0 以降を有効にしても同じことになります。
SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2
Apache 2.4 では SSL 2.0 が最初から非サポートなので、-SSLv2
は不要。
SSLProtocol All -SSLv3
設定を保存したら、Apache を再起動すれば設定が有効になります。
で、SSL 3.0 を無効にした Web サーバに SSL 3.0 しかサポートしていないブラウザアクセスしたらどうなるのかなと思ってやってみました。
さすがにネイティブに SSL 3.0 以下しかサポートしていないブラウザは手元にないので、IE11 のインターネットオプションから、SSL 3.0 のみを一時的に有効にしてアクセスしてみます。
すると、こんな感じ。当たり前ですが門前払い......
ブラウザ側で SSL 3.0 を無効に
次に、各ブラウザで SSL 3.0 を無効にする方法をまとめておきます。すべて、現時点での最新版を前提にしていますので、古いブラウザは知りません。
ただし、Web サーバ側で SSL 3.0 を無効にするぶんには自分のサイトに IE6 などでアクセスできなくなるくらいで大した影響はない (むしろうれし...げふん) ですが、ブラウザ側で SSL 3.0 を無効にする場合は、普段使っている Web サイトが SSL 3.0 しか対応していなかったりすると (そんなサイト使いたくないけど)、アクセスできなくなる可能性がありますので、注意してください。
Internet Explorer
先ほど、一時的に SSL 3.0 のみを有効にした時と同じ、インターネットオプション内の詳細設定から、SSL 3.0 のチェックを外して、TLS 1.0、TLS 1.1、TLS 1.2 にチェックを入れましょう。これで SSL 3.0 は無効になります。
Google Chrome
IE のように設定がないので、起動オプションに -ssl-version-min=tls1
を付けて起動します。Windows であれば、ショートカットのプロパティを表示し、リンク先の部分に、下記のように起動オプションを追加します。
"C:¥...¥chrome.exe" -ssl-version-min=tls1
これで、このショートカットから Chrome を起動すれば、SSL 3.0 が無効になった状態で起動します。ちなみに、Opera も同じ方法で起動オプションを付けてあげれば大丈夫。
Mac 環境の場合は、ターミナルから下記のように Chrome を起動オプション付きで立ち上げればいいと思うんだけど、Automator でシェルスクリプトをアプリケーション化しておくとかじゃないと毎回起動が面倒くさそう。
open -a "/Applications/Google Chrome.app" --args --ssl-version-min=tls1
なお、Google は前述した Google Online Security Blog の記事内で下記のように書いています。
Google Chrome and our servers have supported TLS_FALLBACK_SCSV since February and thus we have good evidence that it can be used without compatibility problems. Additionally, Google Chrome will begin testing changes today that disable the fallback to SSL 3.0. This change will break some sites and those sites will need to be updated quickly.
In the coming months, we hope to remove support for SSL 3.0 completely from our client products.
This POODLE bites: exploiting the SSL 3.0 fallback : Google Online Security Blog から引用
- みんな TLS_FALLBACK_SCSV 使おうぜ
- Google Chrome で SSL 3.0 へのフォールバックを無効にする変更についてテストを開始する予定。
- 今後数ヶ月で、我々のプロダクトから SSL 3.0 のサポートを削除したいと思っている。
ということで、今後リリースされる Chrome では SSL 3.0 のサポートが削除されることが予想されます。
Firefox
Firefox に関しては、about:config
から security.tls.version.min
を設定することで、使用する SSL の最低バージョンを指定することができます。詳しくは下記のナレッジベースに書かれていますが、値を 「1」 (初期値は 「0」) にすれば、TLS 1.0 以降のみを使用し、SSL 3.0 は無効になります。
Mozilla も下記のように発表し、Firefox 34 (現在 Beta チャンネル / 2014年 11月 25日正式リリース予定) で、SSL 3.0 をデフォルトで無効にするとしています。
SSLv3 will be disabled by default in Firefox 34, which will be released on Nov 25. The code to disable it is landing today in Nightly, and will be promoted to Aurora and Beta in the next few weeks. This timing is intended to allow website operators some time to upgrade any servers that still rely on SSLv3.
The POODLE Attack and the End of SSL 3.0 : Mozilla Security Blog から引用
Safari
どうやるんすかね?
SSL 3.0 がブラウザで無効になったかテスト
下記に、アクセスしたブラウザで、SSL 3.0 が有効になっているかどうかをチェックしてくれるサイトがありますので、設定後にアクセスしてみれば確認できます。
アクセスして、フォックス・テリア(?) さんが出迎えてくれたら SSL 3.0 が無効になっているので、設定が正しいことがわかります。プードルさんにお出迎えされたら SSL 3.0 が有効になっていますので注意が必要です。
写真は SSLv3 Poodle Attack Check より引用