こんにちは、日本 Internete Explorer サポートチームの厳 (ゲン) です。
今回のブログでは、拡張保護モードについて紹介します。
拡張保護モードの前に、保護モードをおさらい
保護モードが最初に登場したのは Windows Vista の IE7 です。インターネット オプションで各ゾーンのセキュリティ設定で [保護モードを有効にする] とのオプションが追加されました。
図1: 保護モードを設定する箇所
保護モードの既定値:
インターネット | ローカル イントラネット | 信頼済み サイト | 制限付き サイト | |
IE7 | 有効 | 有効 | 無効 | 有効 |
IE8以後 | 有効 | 無効 | 無効 | 有効 |
* Windows XP/Windows Server 2003 上の IE7/IE8 には設定項目はありません。保護モード未対応です。
保護モードの本質:
保護モードは OS のプロセス整合性モデル (Integrity Level 以下 IL) を利用した セキュリティを強化するための機能です。
IL とは簡単に言うと、OS 上のプロセスを [高] (High) - [中] (Medium) - [低](Low) の三段階でレベル付けし、レベルが高ければ高いほど OS での読み込み・書き込み権限が強い、低ければ低いほど権限が弱いという仕組みです。
IE は保護モードが有効のサイトを表示する際時は IL が [低] の IE プロセスで処理します。保護モードが無効のサイトは IL が [中] のプロセストで処理します。こうして、インターネット上のサイトを権限の低いプロセスでホストして、仮にサイト内に OS への意図しない箇所への書き込み、読み込み処理が実装されていても、操作は権限制限によって失敗するので、悪意のサイトから OS のデーターを保護できます。
ちなみに、プロセスがどの IL で動作しているのか、Process Explorer ツールで確認できます。
図2: Process Monitor ログからプロセス整合性レベルを確認します。
保護モードが効かないパターン
この IL という仕組みはユーザーアクセス制御 (UAC)が有効の OS でしか対応できませんので、以下のシナリオで起動した IE は IL=Low になりませんので、保護モードは実質無効です
- OS の UAC 機能を無効に設定している場合 (IL=High )
- ビルトインの管理者 (ユーザー名: Administrator) でログオンした場合(IL=High )
- IE を右クリックして [管理者として起動] で起動する場合。(IL=High )
- IE の LCIE プロセスモデルを無効 ( TabProcGrowth=0 ) にした場合 (IL=Medium)
- Windows XP / Windows Server 2003 上の IE7 / IE8 (IL を対応しない)
拡張保護モード
Windows 8 以後 [低] よりも権限が制限された IL レベル: AppContainerを追加しました。この AppContainer は Windows ストア アプリ (Windows 8 でタイル状のアイコンから起動するアプリケーション) が動作するセキュリティ基盤となります。Windows 8 上の IE10 ももちろんこの AppContainer で動作できるために [拡張保護モード] を登場させました。
拡張保護モードの設定箇所:
モダン UI の IE (タイル アイコンから起動する IE) は常に拡張保護モードが有効です。設定を変更する項目はありません。
デスクトップの IE は、拡張保護モードはインターネット オプションの [詳細設定] タグで一箇所で設定します。
図3: Windows 8 の IE10 で見る拡張保護モードの設定画面
図4: Windows 8.1 (64bit) の IE11 で見る設定画面
図面に示されるように、64bit OS の IE11 は [拡張保護モードで 64 ビット プロセッサを有効にする] という項目が追加されています。これは拡張保護モードが有効の場合、IE のコンテンツプロセスを 64 bit にするかどうかを設定する項目です。
この項目は IE10 で設けていない理由は、IE10 は拡張保護モードを有効になると、必ずコンテンツ プロセスを 32bit -> 64bit に変更しているからです。IE11 では拡張保護モード状態のプロセスビット数ををユーザーが選択できるようにするため、この項目を追加しました。
この拡張保護モードとビット数の関係は煩わしいのですが、拡張保護モードの既定値の由来を理解するのにとっても重要です。詳しくは後述の [拡張保護モードとプロセス ビット数] で説明します。
拡張保護モードの本質
拡張保護モードが有効の場合、保護モードが有効のサイトは、IL が [Low] よりも低い [AppContainer] のプロセスで表示されます。保護モードが無効のサイトは、引き続き IL が [Medium] のプロセスで表示されますので、影響を受けません。
AppContainer でページをホストする際にはページ上の ActiveX コントロールもこの AppContainer 内で動作できるようにデザインされていない限り、動作できません。現行の殆どの ActiveX コントロールは対応できていない状況から、拡張保護モードが有効だとページに ActiveX コントロールが含まれますと殆ど動作できません。(ちなみに Flash は AppContainer でも動作できます) 。
このような場合、IE はサイトの下部に警告を表示して、ユーザーが [許可] を選択すると、このサイトを Low で開き直します。
図5: 拡張保護モードで ActiveX コントロールが動作しない警告メッセージ
もちろんほかにも Appcontainer による Cookie の分離や、ファイル I/O の制限など、さまざまのセキュリティ上の強化効果がありますが、詳細はまた今度のブログにて紹介します。
拡張保護モードとプロセス ビット数
まずは Windows 8 以後の OS (AppContainer 対応可能) での IE プロセスモデルを見てみましょう。
図6: 64bit OS の IE10 / IE11 プロセスモデル (Windows 8 以後)
なお、32bit OS なら、64bit プロセスを作れないので、 [拡張保護モードで 64 ビット プロセッサを有効にする] という項目はありません。プロセス モデルはこんな感じです。
図7: 32bit OS の IE10 / IE11 プロセスモデル (Windows 8 以後)
じゃ、Appcontainer を対応しない Windows 7 / 2008R2 はどうなるか?Windows XP が IL を対応できないので保護モードの項目自体がないので、Windows 7 も Appcontainer を対応しないなら、拡張保護モードの項目も設ける必要はないよね?答えは、いいえ、64bit の Windows 7 / 2008R2 [拡張保護モードを有効にする]項目を設けています
その理由は、IE10 を設計当時、拡張保護モードが ON になると、IE プロセスが 32bit -> 64bit に自動的に切り替わるようにデザインしているため、 64bit の Windows 7 / 2008 R2 では AppContainer を提供できないものの、32bit -> 64 bit にプロセスを切り替えることができるという考えからです。 [拡張保護モードを有効にする] が ON にすると、コンテンツ プロセスのビット数は 32bit から 64bit に切り替わるだけで、IL は Low のままです。この設計は Windows 7 上の IE11 にも踏襲しています。
つまり、こんな感じです。
図8: 64bit の IE10 / IE11 プロセスモデル (Windows 7/2008R2)
じゃ、32bit の Windows 7 / Windows Server 2008 R2 はどうなるの? 64bit <-> 32bit の切り替えすらできないですよね。そうなんです。項目があっても ON・OFF には何も変わりようがないので、32bit の Windows 7 / Windows Server 2008 R2 では拡張保護モードの設定項目がなく、拡張保護機能を対応しません。
拡張保護モードの既定値
現行拡張保護モードを対応する全 OS ・全 IE バージョンの既定値、および拡張保護モードの ON/OFF の違テーブルに纏めてみました。拡張保護モードの ON・OFF により変化する部分をハイライトしています。
これだけを見ると確かに煩わしいですよね。:-) 図6,7,8と比較しながら見ていただけると分かりやすいと思います。
| 項目1: [拡張保護モードを有効 にする] 既定値 | 項目2: [拡張保護モードで 64 ビット プロセッサを有効にする] 既定値 | 拡張保護モードを無効のとき IE のコンテンツ プロセスはどうなる? | 拡張保護モードを有効のとき IE のコンテンツ プロセスはどうなる? |
IE11 on Windows 8.1(x86) | OFF(※補足あり) | N/A (項目なし) | 32bit Low | 32bit AppContainer |
IE11 on Windows 8.1(x64) / Windows Server 2012 R2 (x64) | OFF(※補足あり) | OFF | 項目2 が ON : 32bit Low 項目2 が OFF: 32bit Low | 項目2 が ON : 64bit AppContainer 項目2 が OFF: 32bit AppContainer |
IE11 on Windows 7 (x86) | N/A (項目なし) | N/A (項目なし) | N/A (Non-Support) | N/A (Non-Support) |
IE11 on Windows 7 (x64) / Windows Server 2008 R2 (x64) | OFF | N/A (項目なし) | 32bit Low | 64bit Low |
IE10 on Windows 8 (x86) | OFF | N/A (項目なし) | 32bit Low | 32bit AppContainer |
IE10 on Windows 8 (x64) / Windows Server 2012 (x64) | OFF | N/A (項目なし) | 32bit Low | 64bit AppContainer |
IE10 on Windows 7 (x86) | N/A (項目なし) | N/A (項目なし) | N/A (Non-Support) | N/A (Non-Support) |
IE10 on Windows 7 (x64) / Windows Server 2008 R2 (x64) | OFF | N/A (項目なし) | 32bit Low | 64bit Low |
* IE11 on Windows 8 は存在しません。IE11 は Windows 8.1/2012R2 または Windows 7/2008R2 にしか作っていません。
* Windows Server 2012 x86、Windows Server 2008 x86 は存在しません。Windows 2008 以後のサーバー OS は 64bit しか作っていません。
(※補足)
IE11 リリース当初は、 [拡張保護モードを有効にする] 既定値が ON の状態でリリースされていました。その後各方面からのフィードバックを受け、日本時間の 2013 年 11 月 13 日 (米国時間の 2013 年 11 月 12 日)、IE11における拡張保護モードの既定値を"オフ"にするセキュリティ更新プログラムがリリースされました。この更新プログラムを適用された後に、既定値は OFF になります。
◇マイクロソフト セキュリティ情報 MS13-088 - 緊急
Internet Explorer 用の累積的なセキュリティ更新プログラム (2888505)
http://technet.microsoft.com/ja-jp/security/bulletin/ms13-088
拡張保護モードが効かないパターン
保護モードが効かないパターンなら、拡張保護モードも効きません。( 前述の 「保護モードが効かないパターン」をご参照ください)
もちろん Windows 7/ 2008 R2 環境かの拡張保護モードは本物の「拡張保護」ではない (Bit 数を変えるだけ) のも念頭に入れてくださいね。
それては、ちょっと話が長くなりましたが、最後に少し参考情報をご紹介して、終わりにします。また次回お会いしましょう。
Understanding Enhanced Protected Mode
拡張保護モード
http://blogs.msdn.com/b/ie_ja/archive/2012/03/21/enhanced-protected-mode.aspx
保護モードの Internet Explorer の理解と機能
http://msdn.microsoft.com/ja-jp/library/bb250462(v=vs.85).aspx