SSL 3.0の脆弱性、FirefoxとIEでの対策

最終更新日

POODLE攻撃とは? SSLって何?

POODLE攻撃
(Padding Oracle On Downgraded Legacy Encryption)

SSLv3プロトコルに暗号化データを解読される脆弱性 (POODLE攻撃) - JVN
http://jvn.jp/vu/JVNVU98283300/index.html

上のURLで説明されていますが、なんとなく理解できる…かな。
そこで、自分なりに整理してみました。

  • 暗号化通信のためのプロトコル(通信規約・手順)というものがあり、バージョンが存在する。

    • TLS 1.2 新 (上位)
    • TLS 1.1 ↑
    • TLS 1.0
    • SSL 3.0 ↓
    • SSL 2.0 古 (下位)

    TLS(Transport Layer Security)は、SSL(Secure Sockets Layer)を元にして作られた。

  • 暗号化して通信するには、サーバーとクライアントPCの双方が同じバージョンのプロトコルを使用する。
  • ところが、SSL 3.0でのCBCモード(Cypher Block Chaining)には脆弱性が存在しており、すでに解読が可能。
  • ブラウザ等には、上位(新しい方)のプロトコルで通信できない場合は、下位(古い方)のプロトコルを使用する(ダウングレード)機能を持つものがある。POODLE攻撃はこの機能を利用。

POODLE攻撃の手法

通信の盗聴(中間者攻撃)が可能な環境において、
普段はTLS 1.0以上で行なっている通信をSSL 3.0で行わせ、暗号化された通信内容を解読する。

実は2011年にも、SSL 3.0・TLS 1.0でのCBCモードの脆弱性が見つかっていました。(BEAST攻撃。TLS 1.1以降は関係なし)

当時、Windowsや多くのアプリではCBCの代わりにRC4(ストリーム暗号)を優先的に使う措置がとられましたが、2013年RC4にも脆弱性が見つかりました。

今回はSSL 3.0とCBCモードの組み合わせだけが問題になっていますが、TLS 1.0やRC4他にも注意が必要なようです。

POODLE攻撃対策は、SSL 3.0を使用不可に

この記事の一番上に挙げたURL(JVNのサイト)の内容にある通りです。

(中間者攻撃される環境というのは置いといて)

SSL 3.0を使えないようにすることで、暗号化通信が解読されることを防ごうってことですね。

暗号化されていない通信は……元々読めるってことですが。

(だからこそ、中間者攻撃対策として暗号化することが重要です。大事な送信内容は暗号化して盗み見されないにします。
個人情報、ID、パスワード等を入力し送信する際は、アドレスがhttps://で始まっているか、偽サイトではないか、等をちゃんと確認しましょう)

また、今やSSL 3.0はほとんど使う必要がなく、TLS 1.0以上で十分ってことらしいです。

SSL 2.0もはるか昔にダウングレードの脆弱性があったとか。今は使われなくなっているはずですが、古いブラウザ等ではSSL 2.0が利用可能になっているかもしれません。

SSL 2.0、SSL 3.0両方とも使用不可にしておきましょう。

Firefox ― 対策済み

[2016/09/01追記]
すでに対策がとられ、デフォルトでSSL3.0は使わないようになっています。最新バージョンを使っていれば、気にする必要はありません。

Firefoxで使用しているSSL・TLSバージョンの確認方法

  1. Firefoxを起動。
  2. アドレスバーに about:config と入力して、Enterキーを押す。
  3. 検索ボックスに tls と入力。
  4. 「security.tls.version.min」と「security.tls.version.min」の数字を確認する。

「security.tls.version.min」は使用するTLS(SSL)バージョンの下限、「security.tls.version.max」は使用するTLS(SSL)バージョンの上限です。

  • 0 = SSL 3.0
  • 1 = TLS 1.0
  • 2 = TLS 1.1
  • 3 = TLS 1.2

Firefox 48.0.2では、デフォルトで「security.tls.version.min」が1、「security.tls.version.max」が3になっています。
つまり、TLS 1.0、TLS 1.1、TLS1.2 が使用可能です。

IE・Microsoft Edge ― 対策済み (旧環境は要注意)

Windows Vista以降で、Windows Updateで最新の状態にしてあれば、SSL 2.0とSSL 3.0は使わないようになっていますが、念のため設定を確認してください。。

XP以前については、設定を変更する必要があります。

グループポリシーが使える場合は、グループポリシーだけ設定しておけば大丈夫です。
Homeエディション等、グループポリシーを利用できない場合は、インターネットオプションの設定とレジストリの変更(次の記事)をしてください。

グループポリシーエディターで設定

  • Windows OSのバージョンやエディションによっては、グループポリシーエディターが(デフォルトでは)使えないことがあります。
  • ローカルコンピューターの全ユーザー共通の設定として固定されます。そのため、インターネットオプションからはSSL・TLSの項目は変更できなくなります。
  • 変更は、IEの再起動後に反映されます。
  1. gpedit.mscを起動する。
  2. コンピューターの構成→管理テンプレート→Windowsコンポーネント→Internet Explorer→インターネットコントロールパネル→詳細設定
  3. [暗号化サポートを無効にする]をダブルクリック、または右クリック→編集
  4. 有効にする。
  5. 「安全なプロトコルの組み合わせ」の下の行をクリック。
  6. 表示されるリストの中の下の方にある「TLS 1.0、TLS 1.1、および TLS 1.2を使用」を選択→OK

インターネットオプションの設定

  • ユーザー毎に行う必要があります。
  • 変更は、IEの再起動後に反映されます。
  1. コントロールパネル、またはIEのメニュー「ツール」→インターネットオプション
  2. 詳細設定タブ

    • SSL 2.0を使用: チェックを外す
    • SSL 3.0を使用: チェックを外す
    • TLS 1.0を使用: チェックを入れる
    • TLS 1.1の使用: チェックを入れる
    • TLS 1.2の使用: チェックを入れる

IE8では、SSL 2.0、SSL 3.0、TLS 1.0の3項目だけでした。なのでTLS 1.0のみチェック。

ブラウザの設定を変更できない、または前の状態に戻ってしまう時

使用中のブラウザのアドオンやセキュリティソフトにブラウザ保護機能があれば、それをオフにしてからブラウザの設定変更を行ってみてください。

それでも直らない場合。

マルウェアの中には、ブラウザの設定を勝手に変更、ユーザーによる変更を拒否するものがあるようです。
念のためウイルススキャンすることをお勧めします。

今使っているセキュリティソフトでマルウェアが検出されなくても、他のソフトでは検出されることがあります。
オンラインスキャンを使うのも一つの手です。

Javaでの対策 Javaコントロールパネルで設定

  1. 「Javaコントロールパネル」を起動。
  2. 詳細設定タブ→「SSL 2.0互換の…」「SSL 3.0…」のチェックを外す。

Javaコントロールパネルの起動方法はOSによって異なります。
Windowsでは、検索またはコントロールパネル(アイコン表示)からアクセスできます。

その他のブラウザ、ソフト、Apple、Linuxでの対策の必要性の有無

下のURLのリンク一覧を参照してください。

OpenSSLおよびその他の製品で使用されるSSLプロトコルにおける平文データを取得される脆弱性
http://jvndb.jvn.jp/ja/contents/2014/JVNDB-2014-004670.html

新しいバージョンでは対策がなされているはずですが、古いバージョンのまま使っていたり、更新が止まっているものについては、脆弱性が放置されている可能性があります。

もしSSL・TLSのバージョンが、サーバーとクライアントで異なったら

https:// で始まるページが表示されなくなります。

その場合、クライアント(エンドユーザー)側が、相手のサーバーで使っているプロトコルバージョンに合わせます。

IE10の場合 タブ名「このページは表示できません」

IE10プロトコル無効 このページは表示できません

Firefox 33.0の場合 タブ名「ページ読み込みエラー」

Firefox33プロトコル無効 安全な接続ができませんでした

上の例では、
相手のサーバーではTLS 1.0をサポート、TLS 1.1とTLS 1.2が非サポート。私のPCではTLS 1.0を無効、TLS 1.1とTLS 1.2を有効にしていました。
そこで、私のPCのウェブブラウザでTLS 1.0を許可したところ、該当ページが正常に表示されるようになりました。

TLS 1.0も無効にしてもいいかなーと思ったのに、ナンテコッタ。
TLS 1.1以上に対応していないサーバーに時々遭遇します。

関連記事