マイクロソフトは、2012 年 1 月SSL/TLS の脆弱性 (CVE-2011-3389) を解決するセキュリティ更新プログラム MS12-006 を公開しました。この脆弱性は、SSL プロトコルと TLS プロトコルに関するもので、業界全体で対応が進められています。しかし、残念ながら、脆弱性の修正により互換性の問題が生じ、Internet Explorer を含むブラウザーで一部の Web サイトに対する HTTPS 接続ができなくなるなどの影響が出ました。そもそも、この脆弱性はどういった内容で、なぜ問題が起きたか、問題が起きた後にはどう対処すればよいかについて解説します。

脆弱性の概要

SSL/TLS の CBC (ブロック暗号化) モードの脆弱性の存在は、10 年ほど前から知られていました。しかし、理論上は暗号を破ることが可能なものの効率的な攻撃方法は見つかっていませんでした。ところが最近、Juliano Rizzo、Thai Duong の両氏によって SSL/TLS で保護された通信に対する情報解読攻撃について詳述した論文が公開されました。これは、下記の条件が整っている場合、HTTPS 通信の一部の内容が解読可能になるというものです。

  • 攻撃者はクライアントに任意の HTTPS パケット送信させることが可能 (何らかの方法で)
  • 攻撃者は HTTPS 通信を盗聴可能
  • SSL/TLS で CBC モードが選択されている

CBC モード (データをブロック単位で暗号化する方式) でブロック内のデータのすべてが不明な場合、解読は非常に困難ですが、1 バイトだけ不明で残りのデータは判明している場合、1 バイトの情報をブルートフォース (総当たり攻撃) で解読することが可能です。そして今回発表された攻撃方法は、SSL/TLS で暗号化されていてもパケットの中身が推測可能という HTTP 通信の特徴を利用して、1 バイト解読を繰り返すことで、一定時間内に Cookie などの短いデータを解読するというものです。

MS12-006 では、レコード分割方式 (Split) にするという方法で修正しています。Google Chrome など SSL/TLS をサポートするブラウザーも同じ方法で修正されています。

適用後なぜ問題が発生したか

MS12-006 で行われた修正は、RFC 2246RFC 6101 に基づいた修正であるため、すべてのアプリケーション、ハードウェア機器が正しく実装されていれば問題は発生しません。しかし、現実問題として、プロトコルの動作変更をしているため動作しなくなるアプリケーションが見つかる可能性が十分にあります。そのため、マイクロソフトは社内および SUVP (Security Update Validation Program) と呼ばれるパートナー プログラムを通じで多くのアプリケーションおよびデバイスとの互換性評価を行ってきました。しかし、残念ながら、MS12-006 一般公開後、ある特定の環境でレコード分割方式に対応できず、HTTPS 通信ができなくなる問題が報告されました。

対処方法

HTTPS 通信ができなくなる問題が発生した場合、次のいずれかの対処方法が有効です。

  • サーバーを RFC 2246RFC 6101 の Fragmentation のセクションに対応させる
    原因が Web サーバーが RFC 2246RFC 6101 の Fragmentation のセクションに対応していない場合、RFC に準拠するよう根本対策が必要です。IIS においては、Http.sys でレコード分割方式を処理するため、IIS で構成された Web サーバーは影響を受けません。
  • サーバー側で RC4 を優先するよう設定する (Windows Server 2008, Windows Server 2008 R2)
    暗号化スイートはクライアントとサーバー間のネゴシエーションによって決定されます。クライアントから送信される Client Hello パケットの中の暗号化スイートの一覧から、サーバーが RC4 を優先して選択するよう構成することで、レコード分割方式にならないようにすることができます。詳細は、MS12-006 の回避策のセクションをご確認ください。
  • TLS 1.1 を使用する
    TLS 1.1 には脆弱性は存在しません。クライアントとサーバーがそれぞれで TLS 1.1 を有効にする必要があります。TLS 1.1 をサポートしないクライアント (例: Internet Explorer 6) は、TLS 1.1 を利用することはできませんので注意が必要です。詳細は、MS12-006 の回避策のセクションをご確認ください。

一時的な回避策 (上記対処が完了するまでの間)

  • 回避策としてクライアントに Fix it を適用する
    一時的に MS12-006 の機能を無効にすることができるレジストリ設定 (SendExtraRecord) があります。Fix it を使うことで手動でレジストリを編集することなく MS12-006 の機能を無効または有効にすることができます。ただし、MS12-006 を無効にすると、クライアントが脆弱な状態になるので注意が必要です。詳細については、KB2643584 をご参照ください。

その他参考資料