Internet Explorer 9 のセキュリティ パート 4: 悪意のある混在したコンテンツからユーザーを保護する

本記事は、マイクロソフト本社の IE チームのブログから記事を抜粋し、翻訳したものです。 

【元記事】Internet Explorer 9 Security Part 4: Protecting Consumers from Malicious Mixed Content (2011/6/24 4:09 AM)

Web の 1 ページ内にさまざまなコンテンツが混在する場合は、中間者 (man-in-the-middle) 攻撃を受ける危険性があります。カフェや空港などで利用可能なフリーの WiFi など、信頼性の低い公共ネットワークを使って Web を閲覧している場合は、その危険性がさらに高まります。

攻撃者は、セキュリティが確保されているとユーザーが想定するページのコンテンツを閲覧できるだけでなく、ユーザーの気づかぬ間にそのコンテンツを変更することもできます。こうした事態は、保護された HTTPS ページに、HTTP で配信されるコンテンツが含まれる場合に、Web サイトが HTTPS のセキュリティ規約を無効にしてしまうために発生します。

IE9 はこのような脆弱性を回避し、ユーザーの安全性を確保します。HTTPS のサイトに、保護されていない HTTP のコンテンツが含まれている場合、IE9 はその保護されていないコンテンツをブロックし、ユーザーの個人情報を保護します。

IE ブログの以前の記事で、私は、HTTPS の Web サイトでよく見られる 2 つの重大な問題を詳しく説明しました。その記事を書いた 6 年前に比べて Web は大きく変化してきたはずですが、残念ながら今でも同じような問題を見かけることがあります。

混在したコンテンツによるリスクとは

攻撃者は、保護されている HTTPS のページ内に含まれる、保護されていない安全性の低い HTTP コンテンツを、"悪意のある" コンテンツに換えてしまうことができます。例として、中間者攻撃が埋め込まれていると仮定して、https://www.youtube.com サイトに複数のブラウザーからアクセスしてみます。ブラウザーによって結果が異なります。下は Chrome 13 のスクリーン ショットです。これを始めとする多くのブラウザーでは、保護されていないコンテンツが単純にそのまま表示されます。つまり、スプーフィング (なりすまし) や情報盗用をする攻撃が可能な状態です。

Page defaced by a man-in-the-middle

Internet Explorer 9 の場合、このページの上部にある保護されていないフレームのコンテンツがブロックされます。これは、このコンテンツがこのページの安全性を損なう危険性があるためです。

Page protected by mixed-content protection

攻撃のしくみ

HTTP 経由で配信される Web ページは、「はがき」にたとえることができます。はがきに書かれている内容は、配達の過程にかかわる人であればだれでも見ることができます。落書きをしたり、メッセージを書き換えることも可能です。一方、HTTPS 経由で配信される Web ページは、「封がされた封筒」にたとえることができます。封筒によって中のメッセージは保護されるので、メッセージの内容が変更されたり、他人に見られることはありません。つまり、1 つのWeb ページ内に HTTPS と HTTP が混在することは、封筒に封がされていないのと同じことであり、HTTPS を使用しているそもそもの意味が失われてしまいます。

スクリプト、スタイルシート、オブジェクト、フレームなど、ページのごく一部にでも HTTPS ではなく HTTP が使用されていれば、HTTPS の効果はなくなります。悪意のあるコンテンツは、ページを書き換えたり、コンテンツを盗んだり、ユーザーを危険な行為に誘導することがあります (たとえば、「プラグインをダウンロードする必要があります」というメッセージを表示し、実際にはマルウェアをダウンロードさせるなど)。

この種の攻撃については、IE Test Drive の混在したコンテンツのデモ Mixed Content のページでさらに詳しく確認することができます。

Mixed Content Demo page showing defaced bank site

保護されていないイメージ

Internet Explorer は 10 年以上にわたって、混在したコンテンツの脆弱性からユーザーを保護してきました。IE9 には、ページに存在する保護されていない参照の種類を区別する優れた機能が追加されています。HTTPS のページに保護されていないイメージが含まれる場合、既定でイメージの表示は許可されます。マイクロソフトでは、保護されていないイメージを使用している Web サイトの多さを考慮して、よりユーザー フレンドリーなエクスペリエンスを提供するためにこのような方針を採用しています。

有名な実際の Web サイトのいくつかで、そこに含まれる保護されていないコンテンツを確認してみると、そうしたコンテンツは、1 つまたはほんの少数のイメージであることがほとんどでした。保護されていないイメージは、混在したコンテンツの中でも最もリスクの低いタイプのものです。その理由としては、攻撃者はイメージそのものの内容を変更することしかできないこと、またそのイメージを使ってそのページの残りの部分を攻撃するスクリプトを実行することはできないことが挙げられます。こうしたイメージの中には、単にビーコンを追跡しているものもありました (これは、IE9 の追跡防止機能で、通知なしでブロックするようにすれば、混在したコンテンツの警告は完全に回避されます)。保護されていないイメージの多くは、製品ロゴや箇条書きのマークといったものでした。

HTTPS に保護されていないイメージが含まれている場合、すべてのコンテンツが保護された状態で配信されているわけではないことをユーザーに示すために、アドレス バーにあった鍵のアイコンが削除されます。たとえば左下のページ (参照リンク) は HTTPS 経由で配信され、同じく HTTPS 経由で配信されるイメージを含んでいます。一方、右下のページ (参照リンク) は、"保護されていない" イメージを含んでいます。イメージ自体は表示されますが、鍵のアイコンはアドレス バーから削除されています。

The Lock is only shown when all content is secure

ユーザーはこの動作を変更できます。つまり、Internet Explorer が、保護されているページに含まれる保護されていないイメージを表示しないように設定することも可能です。それには IE で [ ツール ] > [ インターネットオプション ] > [ 詳細設定 ] に移動し、[セキュリティ] セクションの [ 他の混在したコンテンツを持つ保護されていないページをブロックする ] チェックボックスをオンにします。

「子孫ルール」による保護の強化

Internet Explorer 9 では、混在したコンテンツの脆弱性に対する保護機能がさらに強化されています。HTTPS 経由で配信されるフレームに含まれる保護されていないコンテンツは、最上位のページそのものが保護されていない場合もブロックされます。

Insecure subframes are blocked

HTTPS のサブフレーム内で、保護されていないコンテンツが実行される状態は危険であるため、この保護はとても重要です。

こうしたコンテンツは、HTTPS で配信されるフレームの cookies や HTML ストレージを盗用/改ざんしたり、クロスサイト リクエスト フォージェリ攻撃を実行したり、その他の有害な動作を引き起こす可能性があります。Web 開発者であれば、HTTP ページ上での [セキュリティで保護されているコンテンツのみ表示されます。] という警告に驚かされたこともあるでしょう。この下のテストページのように、HTTPS フレームが非表示になっている場合は特にそうです。

Insecure script in secure subframe triggers block notification

この警告のしくみを、私は「混在したコンテンツの子孫ルール」と呼んでいます。これは、HTTPS 経由で配信されるフレーム内のすべての子孫リソースは HTTPS 経由で配信されなければならず、そうでない場合はブラウザーが混在したコンテンツに対する保護を実行する、というルールです。

しかし残念なことに、このルールによる保護は、人気のソーシャル ネットワークのあるウィジェットを使用する多くのサイトで、一時的ながら障害を引き起こしています。このウィジェットは、HTTPS サブフレームを使用しながら、その中に HTTP サブフレームを含んでいます (このアーキテクチャは、簡単なクロスドメイン通信メカニズムの一部として使用されています)。このウィジェットは、保護されていないサブフレームを取り除くように現在更新されているところです。ウィジェットのフレームと親ページとの間の通信には、代わりとして、HTML5 の postMessage API が使用される予定です。

F12 開発者ツールによる混在したコンテンツのトラブルシューティング

Internet Explorer 9 では F12 開発者ツールの [コンソール] を使用することで、Web 開発者が混在したコンテンツの警告が表示される原因を確認することができます。ブラウザーは、保護されているページ内で保護されていないリソースを見つけたときに、コンソール内に警告メッセージを表示します。このメッセージには、以下のように問題となっている保護されていないリソースの URL も含まれます。

F12 Developer tools flagging blocked content

この機能はページ内のどのコンテンツが保護されていないのかを特定するプロセスを大幅に簡素化するものであり、これによって、IE8 を使用する Web 開発者が最も頭を悩ませていた問題が解決されました。開発者はコンテンツを修正し、保護されていない参照を削除することで、ページがブロックされないようにし、鍵のアイコンも表示されるようにすることができます。

ヒント: ページによっては、HTTP と HTTPS の両方からアクセス可能な場合があります。こうした場合、Web 開発者は、ユーザーが HTTPS 経由でページにアクセスしたとき以外、HTTPS を使用しないことを想定しています。このようなときに便利なのが、プロトコル相対ハイパーリンク ("//example.com/image.gif" のような形式) を使用して、ページ内のリソースのソースを指定することです。ユーザーがこのような参照を含む "保護された" ページ (たとえば、https://example.com/page.htm) にアクセスすると、結果の URI は https://example.com/image.gif と評価されます。また、ユーザーが HTTP 経由で同じページにアクセスすると、結果の URI は https://example.com/image.gif と評価されます。このようにすれば、混在したコンテンツによる脆弱性を招くことなく、HTTP と HTTPS のいずれを経由しても適切に動作するページを簡単に作成することができます。

IE9 のセキュリティ保護に関する情報をさらに詳しく知りたい方は、このブログ シリーズの過去の記事 (パート 1パート 2パート 3) をご覧ください。今後も Web のセキュリティ保護にぜひご協力をお願いいたします。

Eric Lawrence、プログラム マネージャー