Hebikuzure's Tech Memo

2011年3月18日

IE Blog: Internet Explorer 9 セキュリティー Part 1: 拡張されたメモリー保護

Filed under: IE Blog — hebikuzure @ 12:23 PM

Internet Explorer 9 Security Part 1: Enhanced Memory Protections
http://blogs.msdn.com/b/ie/archive/2011/03/07/internet-explorer-9-security-part-1-enhanced-memory-protections.aspx

3 月 14 日 (日本時間 15 日) の Internet Explorer 9 製品版の公開に向けて、IE Blog にも多くの POST が上がっています。順次私訳しようと思っていたら震災と停電の影響でバタバタして、少し遅くなってしまいました。まず「Internet Explorer 9 Security」のパート 1 からパート 3 までを掲載します。

以下の文章は IE Blog の 3/10 の記事 Internet Explorer 9 Security Part 1: Enhanced Memory Protections を hebikuzure が私的に試訳したものです。翻訳については Microsoft Corporation および日本マイクロソフト株式会社とは無関係に hebikuzure が公開情報に基づき独自に行ったものであり、この文書の内容についての文責は公開者である hebikuzure にあります。翻訳の内容および技術的内容については正確を期すよう十分な注意を払っておりますが、誤りや不正確な部分が含まれている可能性がありますので、本文書を利用される際には原文も併せてご確認ください。


Internet Explorer 9 セキュリティー Part 1: 拡張されたメモリー保護

2001137 午前1153

Internet Explorer は、ユーザーが時に悪意のある Web を巡回する際に直面する三つの主な脅威のクラスのそれぞれについて、緩和したり保護するための多層的な防御を提供します:

  1. オペレーティング システムやブラウザーの攻略のための技術的な攻撃
  2. Web サイトの脆弱性を攻略するための Web 攻撃
  3. ユーザーの信頼に対するソーシャル エンジニアリング攻撃

本日の記事では、このうちの第一のクラスの脅威に対してブラウザーがどのようにメモリーを保護するのかについて解説します。

確度の高い操作を防ぐ

メモリー保護機能の目的は、メモリー関連の脆弱性に対して確度の高い操作を防ぐことです。以下の “アルファベット スープ” の頭文字で示されているテクノロジーのいずれも、悪意のあるコードが実行される前にブラウザーのタブを安全に閉じるための方法です。Internet Explorer 9 は、メモリー関連の脆弱性がブラウザーやそのアドオンに発見されても、攻撃者のコードが実行されるのを防ぐための最新のメモリー保護テクノロジーを利用しています。

DEP/NX (Data Execution Prevention [データ実行防止] / No eXecute) は Internet Explorer 8 および 9 で既定で有効になっており、ブラウザーにおけるメモリー保護の基盤です。DEP/NX はシステムのプロセッサーと共に機能してコードとデータを識別し、攻撃者によって配置されたデータからの実効を防止します。プロセッサーが適切にマークされていないメモリーのブロックからの実行の指示を検出すると、当該の命令が実行される前に安全にプロセスを終了させます

ASLR (Address Space Layout Randomization [アドレス空間レイアウトのランダム化]) はプロセスのメモリー スペースを予測不可能な方法で配置する事による防御です。ASLR は、“Return Oriented Programming” と呼ばれる攻撃者がブラウザーやオペレーティング システムの一部である関数を悪用して既存のコード ロケーションへのジャンプを攻撃としてセットアップする方法によって、容易に DEP/NX を回避する事ができないようにします。例えば、よくある仕掛けはメモリーをデータではなく “コード” としてマークできる VirtualProtect 関数へのジャンプを試みる物で、これが成功すると DEP/NX を効果的に回避できます。VirtualProtect やその他の関数が予測不可能な位置となるようにする事で、攻略コードは実行に成功せず、通常アクセス違反でクラッシュしてしまいます。

IE9 ではメモリー マッピングが予測可能とならないよう、メモリー レイアウトのランダム化を強化しています。しかしながら ASLR は個々の DLL ごとに有効化されるので、いくつかの古いブラウザー アドオンはこの緩和策を適切に受け入れません。SysInternals の Process Explorer ツールを使うと、プロセスに読み込まれている DLL のそれぞれについて DEP/NX 防護が首尾よく機能しているか確認するための調査が行えます。例えば以下に示すスクリーンショットのように、防御がされていない一つの ActiveX コントロールを除き、Internet Explorer のタブのプロセスに読み込まれたすべての DLL で ASLR が有効である事が確認できます。もとこの DLL が攻撃者にとって有益なコード セグメントを露出している場合、ASLR ランダム化の欠如はメモリー保護の回避への足掛かりとなり得ます。

注: 詳しい方であればプロセス中のすべての DLL に EMET (Enhanced Mitigation Experience Toolkit) を使って ASLR の適用を強制する事ができます。これは Microsoft Security Research and Defense によって提供されているセキュリティー ツールで、最先端のセキュリティー緩和策のプロトタイプです。ASLR を予期していない DLL にこれを強制適用すると、互換性の問題が発生する場合があります。そのためこのツールを利用する場合にはこの点に留意してください。

SafeSEH (Safe Structured Exception Handling [安全な構造化例外処理ハンドリング]) は、例外処理ハンドリング チェインに悪意のある構造化例外処理を挿入される事を防止するための、コンパイラー オプションです。すべての 64 ビット コード及びすべての Internet Explorer のコードは SafeSEH フラグを付けてコンパイルされています。ただし、ASLR と同様、この緩和策も DLL 単位で有効化されるため、包括的な防御のためにはアドオンもこのフラグを付けてコンパイルされている必要があります。

SafeSEH のこの限界は、Windows 7 上の Internet Explorer 9 では緩和されています。IE9 はプロセス単位で有効化される新機能 SEHOP (Structured Exception Handler Overwrite Protection [構造化例外処理の上書き保護]) が有効になっているため、個々の DLL でのオプト インは不要です。SEHOP は例外のディスパッチの前に例外処理ハンドリング チェインの整合性を検証する事で機能しています。これにより、SafeSEH が利用できるよう再コンパイルされていないような古いブラウザー アドオンを動作させているような場合でも、構造化例外ハンドリングが攻撃回路としてできない事を確実にします。

最後に、Internet Explorer 9 は Visual Studio 2010 に含まれる最新の C++ コンパイラーでコンパイルされています。このコンパイラーには Enhanced GS またはスタック バッファ オーバーラン検出と呼ばれる機能が含まれています。これはスタックの破損を検出し、そのような破損が発生した場合にもコードの実行を防止します。最新のコンパイラーでは、既存の GS 機能は幅広い領域の攻撃をブロックするよう拡張され、どのような機能が保護を必要としているのか判断するためにより良いヒューリスティック機能を利用します。この拡張により、Internet Explore のパフォーマンスへの影響は最小化され、保護は最大化されます。

詳細情報

ソフトウェア開発者は、自身の製品のセキュリティーを強化するためこれらの 3 つのテクニックをどのように利用するのかを含めた Internet Explorer の防御について、MSDN の Windows ISV Software Security Defenses whitepaper で詳細情報を得る事ができます。

Web を安全にするための皆さんのご助力に感謝します。

—Eric Lawrence, 上級プログラム マネージャー, Internet Explorer

コメントする »

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

WordPress.com で無料サイトやブログを作成.

%d人のブロガーが「いいね」をつけました。