説明

実行可能コード変更の防止

実行可能コード変更の防止が、既存のメモリが支援するコードページを割り当て、変更する動作を、非常に特権的なOS(オペレーティングシステム)関数にすることによって、提供される。また、読み込まれたコードの完全性も、オプションとして、OSカーネル内で読み込み時点に検査される。システムにおける特権検査が、実行可能ページが割り当てられた、または変更された際に呼び出される。この特権は、オペレーティングシステムカーネル、およびオペレーティングシステムにおける極めて信頼されるIDだけに割り当てられる。

【発明の詳細な説明】
【背景技術】
【0001】
今日、悪意のあるソフトウェアコード(すなわち、マルウェア)が、CPUプロセッサを支配して、次に、悪意のあるCPU命令(コード)を実行することによってコンピューティングシステムに損害を生じさせる。マルウェアに対処する今日のアプローチは、完全には効果的ではない。ウイルスに対処する1つの一般的なアプローチは、シグネチャベースのウイルス検出ツールを使用することである。残念ながら、このアプローチは、同一の攻撃の次の変種を検出しない。これらのウイルスは、急速に広がるため、ウイルス検出に対する事後対応のアプローチは、多くのタイプのウイルスを阻止することに効果的ではない。このため、新たな、より侵害的なコードが、より広まるにつれ、悪意のあるコードの実行の防止がますます重要になっている。
【0002】
また、現在のオペレーティングシステムは、特権のないユーザコードに、実行可能ページを割り当てること、および変更することの自由な支配を許す。このため、攻撃者が、既存のプログラムに侵入することができる場合(例えば、バッファオーバフローまたは他のプログラミングエラッタを通じて)、その攻撃者は、メモリの中で侵入されたプログラムを変更する、または新たなCPU命令をディスクまたは他の媒体から実行させることが自由にできる。
【発明の開示】
【発明が解決しようとする課題】
【0003】
このため、必要とされるのは、従来技術の欠点に対処するプロセスおよびシステムである。
【課題を解決するための手段】
【0004】
この概要では、詳細な説明において後段でさらに説明される選定された概念を簡略化された形態で概説する。この概要は、主張される主題の重要な特徴、または不可欠な特徴を特定することは意図しておらず、また、特許請求の範囲の技術的範囲を確定する際の助けとして使用されることも意図していない。
【0005】
当技術分野の以上に特定された欠点を考慮して、実行可能コード変更の防止、および許可のないコード読み込みの防止が提供される。いくつかの実施形態に関して、実行可能コード変更の防止のための方法は、実行可能コードをメモリに読み込む関数を、コンピュータのOS(オペレーティングシステム)の特権リングに限定することを含む。また、この方法は、実行可能コードのページレベル保護を実施することをさらに含むことが可能である。また、実行可能コードの実行可能ページが割り当てられる際に、または実行可能ページの属性が変更される際に、特権検査が呼び出されることも可能である。特権検査は、例えば、実行可能ページの割り当て、または実行可能ページの属性の変更を許す前に、OSの特権リングだけに割り当てられた特権が存在するかどうかを判定する。以上に加えて、または以上の代替として、実行可能コードが、メモリに読み込まれる前、または読み込まれた後に、実行可能コードの完全性を検査することが、実行される。
【0006】
代替として、実行可能コードだけでなく、データページをメモリに読み込む関数を、コンピュータのオペレーティングシステムの特権リングに限定することを含むデータページの変更の防止の方法が、使用される。
【0007】
本発明のその他の利点および特徴が、後段で説明される。
【0008】
実行可能コード変更の防止が、添付の図面を参照してさらに説明される。
【発明を実施するための最良の形態】
【0009】
本発明の様々な実施形態の徹底的な理解をもたらすように、いくつかの特定の詳細が、以下の説明および図において示される。コンピューティング技術およびソフトウェア技術にしばしば関連する、いくつかのよく知られている詳細は、本発明の様々な実施形態を不必要に不明瞭にするのを回避するように、以下の開示において示していない。さらに、当業者は、後段で説明されている1つまたは複数の詳細な説明なしで本発明の他の実施形態を実施することができることが、当業者には理解されよう。最後に、様々な方法が、以下の開示におけるステップおよびシーケンスに関連して説明されるが、説明自体は、本発明の実施形態の明確な実施を与えることに向けられ、それらのステップ、およびステップのシーケンスは、本発明を実施するのに必要なものと解釈されるべきではない。
(例示的なコンピューティング環境)
図1を参照すると、示されているのは、前述したプロセスを実施することに関連して使用するのに適した例示的なコンピューティングデバイスを示すブロック図である。例えば、実行可能コード変更の防止のためのプロセスおよび方法を実行するコンピュータ実行可能命令が、図1に示されるようなコンピューティング環境に存在し、さらに/または実行されることが可能である。コンピューティングシステム環境220は、適切なコンピューティング環境の一例に過ぎず、本発明の用法または機能の範囲について何ら限定を示唆することは意図していない。また、コンピューティング環境220が、例示的な動作環境220に示されるコンポーネントのいずれか1つ、または組合せと関係する依存関係または要件を有すると解釈すべきでもない。例えば、コンピュータゲームコンソールが、前述したプロセスを実施することに関連して使用するために、後段で説明されるアイテムのようなアイテムを含むことも可能である。
【0010】
本発明の態様は、他の多数の汎用または専用のコンピューティングシステム環境またはコンピューティングシステム構成で機能する。本発明で使用するのに適する可能性がある、よく知られているコンピューティングシステム、コンピューティング環境、および/またはコンピューティング構成の例には、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドデバイスまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル家庭用電子機器、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、以上のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれるが、以上には限定されない。
【0011】
本発明の態様は、コンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的な文脈で実施されることが可能である。一般に、プログラムモジュールには、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、解釈されるコード、データ構造などが含まれる。また、本発明の態様は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される、分散コンピューティング環境において実施されることも可能である。分散コンピューティング環境では、プログラムモジュールは、メモリストレージデバイスを含むローカルコンピュータストレージ媒体とリモートコンピュータストレージ媒体の両方の中に配置されることが可能である。
【0012】
本発明の態様を実施するための例示的なシステムには、コンピュータ241の形態の汎用コンピューティングデバイスが含まれる。コンピュータ241のコンポーネントには、処理装置259、システムメモリ222、ならびにシステムメモリを含む様々なシステムコンポーネントを処理装置259に結合するシステムバス221が含まれることが可能であるが、以上には限定されない。システムバス221は、様々なバスアーキテクチャのいずれかを使用する、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含め、いくつかのタイプのバス構造のいずれであってもよい。例として、限定としてではなく、そのようなアーキテクチャには、ISA(Industry Standard Architecture)バス、MCA(Micro Channel Architecture)バス、EISA(Enhanced ISA)バス、VESA(Video Electronics Standards Associate)ローカルバス、およびメザニン(Mezzanine)バスとしても知られるPCI(Peripheral Component Interconnect)バスが含まれる。
【0013】
コンピュータ241は、通常、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ241によってアクセスされることが可能な任意の利用可能な媒体であることが可能であり、揮発性媒体と不揮発性媒体、リムーバブルな媒体とリムーバブルでない媒体の両方を含む。例として、限定としてではなく、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含むことが可能である。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報の格納のために任意の方法または技術で実装された、揮発性媒体と不揮発性媒体、リムーバブルな媒体とリムーバブルでない媒体がともに含まれる。コンピュータ記憶媒体には、RAM、ROM、EEPROM、フラッシュメモリまたは他のメモリ技術、CD−ROM、DVD(デジタルバーサタイルディスク)または他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気ストレージデバイス、あるいは所望される情報を格納するのに使用することができ、コンピュータ241がアクセスすることができる他の任意の媒体が含まれるが、以上には限定されない。通信媒体は、通常、搬送波などの変調されたデータ信号、または他のトランスポート機構で、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを実体化し、あらゆる情報配信媒体を含む。「変調されたデータ信号」という用語は、信号内に情報を符号化するように特性の1つまたは複数が設定または変更された信号を意味する。例として、限定としてではなく、通信媒体には、有線ネットワークまたは直接有線接続などの有線媒体、ならびに音響媒体、RF媒体、赤外線媒体、およびその他の無線媒体などの無線媒体が含まれる。また、以上の媒体のいずれかの媒体の組合せも、コンピュータ可読媒体の範囲内に含められなければならない。
【0014】
システムメモリ222は、ROM(読み取り専用メモリ)223やRAM(ランダムアクセスメモリ)260などの揮発性メモリおよび/または不揮発性メモリの形態でコンピュータ記憶媒体を含む。起動中などにコンピュータ241内部の要素間で情報を転送するのを助ける基本ルーチンを含むBIOS(基本入出力システム)224が、通常、ROM223の中に格納される。RAM260は、通常、処理装置259が、即時にアクセスすることができ、さらに/または現在、処理しているデータおよび/またはプログラムモジュールを含む。例として、限定としてではなく、図1は、オペレーティングシステム225、アプリケーションプログラム226、他のプログラムモジュール227、およびプログラムデータ228を示す。
【0015】
また、コンピュータ241は、その他のリムーバブルな/リムーバブルでない、揮発性/不揮発性のコンピュータ記憶媒体も含むことが可能である。単に例として、図1は、リムーバブルでない不揮発性の磁気媒体に対して読み取りまたは書き込みを行うハードディスクドライブ238、リムーバブルな不揮発性の磁気ディスク254に対して読み取りまたは書き込みを行う磁気ディスクドライブ239、およびCD−ROMまたは他の光媒体などのリムーバブルな不揮発性の光ディスク253に対して読み取りまたは書き込みを行う光ディスクドライブ240を示す。例示的な動作環境において使用されることが可能な、その他のリムーバブルな/リムーバブルでない、揮発性/不揮発性のコンピュータ記憶媒体には、磁気テープカセット、フラッシュメモリカード、デジタルバーサタイルディスク、デジタルビデオテープ、ソリッドステートRAM、ソリッドステートROMなどが含まれるが、以上には限定されない。ハードディスクドライブ238は、通常、インタフェース234のような、リムーバブルでないメモリインタフェースを介してシステムバス221に接続され、磁気ディスクドライブ239および光ディスクドライブ240は、通常、インタフェース235のような、リムーバブルなメモリインタフェースでシステムバス221に接続される。
【0016】
前述し、図1に示されるドライブ、および関連するコンピュータ記憶媒体により、コンピュータ可読命令、データ構造、プログラムモジュール、および他のデータのストレージが、コンピュータ241に提供される。図1で、例えば、ハードディスクドライブ238が、オペレーティングシステム258、アプリケーションプログラム257、その他のプログラムモジュール256、およびプログラムデータ255を格納しているのが示されている。これらのコンポーネントは、オペレーティングシステム225、アプリケーションプログラム226、その他のプログラムモジュール227、およびプログラムデータ228と同一であることも、異なることも可能であることに留意されたい。オペレーティングシステム258、アプリケーションプログラム257、その他のプログラムモジュール256、およびプログラムデータ255に、ここでは、少なくとも、それらが異なるコピーであることを示すために異なる符号が与えられる。ユーザは、キーボード251や、マウス、トラックボール、またはタッチパッドと一般に呼ばれるポインティングデバイス252などの入力デバイスを介して、コマンドおよび情報をコンピュータ241に入力することができる。その他の入力デバイス(図示せず)には、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどが含まれることが可能である。これら、およびその他の入力デバイスは、しばしば、システムバスに結合されたユーザ入力インタフェース236を介して処理装置259に接続されるが、パラレルポート、ゲームポート、またはUSB(ユニバーサルシリアルバス)などの他のインタフェースおよびバス構造で接続されてもよい。また、モニタ242、または他のタイプのディスプレイデバイスも、ビデオインタフェース232のようなインタフェースを介して、システムバス221に接続される。モニタに加え、コンピュータは、出力周辺インタフェース233を介して接続されることが可能な、スピーカ244やプリンタ243などの他の周辺出力デバイスも含むことが可能である。
【0017】
コンピュータ241は、リモートコンピュータ246のような1つまたは複数のリモートコンピュータに対する論理接続を使用する、ネットワーク化された環境において動作することができる。リモートコンピュータ246は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス、またはその他の一般的なネットワークノードであることが可能であり、通常、コンピュータ241に関連して前述した要素の多く、またはすべてを含むが、メモリストレージデバイス247だけが図1に示される。図1に示される論理接続は、LAN(ローカルエリアネットワーク)245およびWAN(ワイドエリアネットワーク)249を含むが、その他のネットワークも含むことが可能である。そのようなネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネット、およびインターネットで一般的である。
【0018】
LANネットワーキング環境で使用される場合、コンピュータ241は、ネットワークインタフェースまたはネットワークアダプタ273を介してLAN245に接続される。WANネットワーキング環境で使用される場合、コンピュータ241は、通常、インターネットなどのWAN249を介して通信を確立するためのモデム250、またはその他の手段を含む。内部にあることも、外部にあることも可能なモデム250は、ユーザ入力インタフェース236、またはその他の適切な機構を介してシステムバス221に接続されることが可能である。ネットワーク化された環境において、コンピュータ241に関連して示されるプログラムモジュール、またはプログラムモジュールの諸部分は、リモートメモリストレージデバイスの中に格納されることが可能である。例として、限定としてではなく、図1は、リモートアプリケーションプログラム248が、メモリデバイス247上に存在するのを示す。図示されるネットワーク接続は、例示的であり、コンピュータ間で通信リンクを確立する他の手段が使用されてもよいことが理解されよう。
【0019】
本明細書で説明される様々な技術は、ハードウェアまたはソフトウェアに関連して、あるいは、適宜、ハードウェアとソフトウェアの両方に関連して実施されることが可能であることを理解されたい。このため、本発明の方法および装置、または本発明の方法および装置のいくつかの態様、もしくはいくつかの部分は、フロッピー(登録商標)ディスケット、CD−ROM、ハードドライブ、または他の任意のマシン可読記憶媒体などの、実体のある媒体として実現されたプログラムコード(すなわち、命令)の形態をとることが可能であり、このプログラムコードが、コンピュータなどのマシンに読み込まれ、マシンによって実行されると、そのマシンが、本発明を実施するための装置となる。プログラミング可能なコンピュータ上のプログラムコード実行の場合、コンピューティングデバイスは、一般に、プロセッサと、そのプロセッサによって読み取り可能な記憶媒体(揮発性および不揮発性のメモリおよび/または記憶要素を含む)と、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを含む。例えば、API、再使用可能なコントロールなどの使用を介して、本発明に関連して説明されるプロセスを実施する、または利用することができる1つまたは複数のプログラムが挙げられる。そのようなプログラムは、好ましくは、高レベルの手続き言語またはオブジェクト指向プログラミング言語で実装されて、コンピュータシステムと通信する。しかし、それらの(1つまたは複数の)プログラムは、所望される場合、アセンブリ言語または機械語で実装されることも可能である。いずれにしても、言語は、コンパイルされる言語、または解釈される言語であることが可能であり、ハードウェア実施形態と組み合わせられることが可能である。
【0020】
例示的な実施形態は、1つまたは複数のスタンドアロン型コンピュータシステムの文脈で本発明の態様を利用することについて述べることが可能であるが、本発明は、そのように限定されず、むしろ、ネットワーク環境または分散コンピューティング環境などの、任意のコンピューティング環境に関連して実施されることが可能である。さらに、本発明の態様は、複数の処理チップもしくは処理デバイスにおいて、またはそのような処理チップもしくは処理デバイスにまたがって実施されてもよく、格納も同様に、複数のデバイスにまたがって実施されてもよい。そのようなデバイスには、パーソナルコンピュータ、ネットワークサーバ、ハンドヘルドデバイス、スーパコンピュータ、または自動車や飛行機などの他のシステムに組み込まれたコンピュータが含まれることが可能である。
【0021】
図1で与えられる一般的なフレームワークに従って構築されることが可能である多様なコンピューティング環境に鑑みて、本明細書で提供されるシステムおよび方法は、いかなる形においても或る特定のコンピューティングアーキテクチャに限定されると解釈することはできない。そうではなく、本発明は、いずれの単一の実施形態にも限定されるべきではなく、むしろ、添付の特許請求の範囲による広がりと範囲で解釈されるべきである。
【0022】
次に図2を参照すると、示されているのは、前述したプロセスを実行する多くのコンピュータ化されたプロセスが実施されることが可能である、例示的なネットワーク化されたコンピューティング環境である。例えば、並列コンピューティングが、実行可能コード変更の防止を使用し、さらに/または実施する図2のネットワーク上の様々なクライアントを有する、そのようなネットワーク化された環境の一部であることが可能である。ネットワークは、任意のコンピュータ、または他のクライアントもしくはサーバデバイスを、あるいは分散コンピューティング環境において接続することができることを当業者なら理解することができる。これに関して、任意の数の処理装置、メモリ装置、または記憶装置、および同時に行われる任意の数のアプリケーションおよびプロセスを有する任意のコンピュータシステムまたはコンピュータ環境が、提供されるシステムおよび方法に関連して使用されるのに適すると考えられる。
【0023】
分散コンピューティングは、コンピューティングデバイスとシステムの間の交換によってコンピュータリソースおよびコンピュータサービスの共有をもたらす。これらのリソースおよびサービスには、情報の交換、キャッシュ格納、およびファイルに関するディスク格納が含まれる。分散コンピューティングは、ネットワーク接続を利用して、クライアントが、集合的な能力を活用して、企業全体を利することを可能にする。これに関して、様々なデバイスが、本明細書で説明されるプロセスが関与することが可能なアプリケーション、オブジェクト、またはリソースを有する可能性がある。
【0024】
図2は、例示的なネットワーク化されたコンピューティング環境または分散コンピューティング環境の概略図を与える。この環境は、コンピューティングデバイス271、272、276、および277、ならびにオブジェクト273、274、および275、ならびにデータベース278を含む。これらのエンティティ271、272、273、274、275、276、277、および278のそれぞれは、プログラム、メソッド、データストア、プログラマブルロジックなどを含む、または利用することが可能である。エンティティ271、272、273、274、275、276、277、および278は、PDA,オーディオ/ビデオデバイス、MP3プレーヤ、パーソナルコンピュータなどの同一のデバイス、または異なるデバイスの複数の部分にわたることが可能である。各エンティティ271、272、273、274、275、276、277、および278は、通信ネットワーク270を介して別のエンティティ271、272、273、274、275、276、277、および278と通信することができる。これに関して、任意のエンティティが、データベース278または他の記憶要素の保持および更新を担うことが可能である。
【0025】
このネットワーク270は、それ自体、図2のシステムにサービスを提供する他のコンピューティングエンティティを含むことが可能であり、それ自体、複数の互いに接続されたネットワークを表すことが可能である。本発明の態様によれば、各エンティティ271、272、273、274、275、276、277、および278は、API、または他のオブジェクト、ソフトウェア、ファームウェア、および/またはハードウェアを利用して、その他のエンティティ271、272、273、274、275、276、277、および278の1つまたは複数のエンティティのサービスを要求することが可能なディスクリートの機能プログラムモジュールを含むことが可能である。
【0026】
また、275のようなオブジェクトが、別のコンピューティングデバイス276上でホストされてもよいことも理解されることが可能である。このため、図示される物理的環境は、接続されたデバイスをコンピュータとして示すことが可能であるが、そのような図示は、単に例示的であり、PDA、テレビ、MP3プレーヤなどの様々なデジタルデバイス、インタフェース、COMオブジェクトなどのソフトウェアオブジェクトを含む物理的環境が、代替として、図示される、または説明されることも可能である。
【0027】
分散コンピューティング環境をサポートする様々なシステム、コンポーネント、およびネットワーク構成が存在する。例えば、コンピューティングシステムは、有線システムまたは無線システムによって、ローカルネットワークまたは広く分散したネットワークによって一緒に接続されることが可能である。現在、多くのネットワークが、インターネットに結合されており、これにより、広く分散したコンピューティングのためのインフラストラクチャが提供され、多くの異なるネットワークが包含される。任意のそのようなインフラストラクチャが、インターネットに結合されているか否かにかかわらず、提供されるシステムおよび方法に関連して使用されることが可能である。
【0028】
ネットワークインフラストラクチャは、クライアント/サーバアーキテクチャ、ピアツーピアアーキテクチャ、または混成アーキテクチャなどの、多数のネットワークトポロジを可能にすることができる。「クライアント」とは、クライアントが関係していない別のクラスまたはグループのサービスを使用するクラスまたはグループのメンバである。コンピューティングにおいて、クライアントは、別のプログラムによって提供されるサービスを要求するプロセス、すなわち、大ざっぱに言って、命令セットまたはタスクセットである。クライアントプロセスは、他方のプログラム、またはサービス自体についての実用上の詳細を全く「知る」必要なしに、要求されるサービスを利用する。クライアント/サーバアーキテクチャ、特にネットワーク化されたシステムにおいて、クライアントは、通常、別のコンピュータ、例えば、サーバによって提供される共有ネットワークリソースにアクセスするコンピュータである。図2の例において、任意のエンティティ271、272、273、274、275、276、277、および278が、状況に応じて、クライアント、サーバ、またはその両方と考えられることが可能である。
【0029】
サーバは、通常、必然的にではないが、インターネットなどの、リモートネットワークまたはローカルネットワークを介してアクセス可能なリモートコンピュータシステムである。クライアントプロセスは、第1のコンピュータシステムにおいて活性であることが可能であり、サーバプロセスは、第2のコンピュータシステムにおいて活性であることが可能であり、通信媒体を介して互いに通信し、このため、分散機能を提供し、複数のクライアントが、サーバの情報収集能力を利用することを可能にする。任意のソフトウェアオブジェクトが、複数のコンピューティングデバイスまたはコンピューティングオブジェクトにわたって分散されることが可能である。
【0030】
(1つまたは複数の)クライアントと(1つまたは複数の)サーバは、(1つまたは複数の)プロトコル層によって提供される機能を利用して互いに通信する。例えば、HTTP(ハイパーテキスト転送プロトコル)が、WWW(World Wide Web)、つまり、「Web」に関連して使用される一般的なプロトコルである。通常、IP(インターネットプロトコル)アドレスなどのコンピュータネットワークアドレス、またはURL(ユニバーサルリソースロケータ)などの他のリファレンスが、互いにサーバまたはクライアントを識別するのに使用されることが可能である。ネットワークアドレスは、URLアドレスと呼ばれることが可能である。通信は、通信媒体を介して提供されることが可能であり、例えば、(1つまたは複数の)クライアントと(1つまたは複数の)サーバは、大容量通信のために(1つまたは複数の)TCP/IP接続を介して互いに結合されることが可能である。
【0031】
図2で提供される一般的なフレームワークに従って構築されることが可能である多様なコンピューティング環境、および図2のネットワーク環境のようなネットワーク環境でコンピューティングに生じる可能性があるさらなる多様化に鑑みて、本明細書で提供されるシステムおよび方法は、或る特定のコンピューティングアーキテクチャに限定されると解釈されることは全く可能でない。そうではなく、本発明は、いずれの単一の実施形態にも限定されるべきではなく、むしろ、添付の特許請求の範囲による広がりと範囲で解釈されるべきである。
(実行可能コード変更のハードウェア防止およびオペレーティングシステム防止)
次に図3を参照すると、示されているのは、特権検査を使用する実行可能コード変更の防止のプロセスを示す図である。実行可能メモリページの属性を割り当てる際、または変更する際に、呼び出し元が特権を有するかどうかを検査するサポートが、OS(オペレーティングシステム)メモリマネージャに追加される。Modern x64 CPUおよびAMD(登録商標)CPUが、実行可能ページのハードウェアベースの実施および追跡を可能にする。例えば、Windows XP(登録商標)Service Pack2から始まって、Windows(登録商標)の32ビットバージョンは、AMD(登録商標)によって規定されるNX(no−execute page−protection)プロセッサフィーチャ、またはIntel(登録商標)によって規定されるExecute Disableビットフィーチャを利用する。これらのプロセッサフィーチャを使用するため、プロセッサは、PAE(物理アドレス拡張)モードで実行されていなければならない。Windows XP(登録商標)の64ビットバージョンは、64ビット拡張上のNXプロセッサフィーチャ、およびIPFプロセッサ上のアクセス権PTE(ページテーブルエントリ)のいくつかの値を使用する。
【0032】
Execute Disable Bit能力は、32ビットIntel(登録商標)アーキテクチャの強化である。Execute Disable Bit能力を有するIA−32プロセッサは、コードを実行するように悪意のあるソフトウェアによって使用されることから、データページを保護することができる。このプロセッサは、以下のモードのいずれかでページ保護を提供する。すなわち、
PAE(物理アドレス拡張)が、イネーブルにされる場合、レガシー保護モード。
Intel(登録商標)Extended Memory 64 Technology(Intel(登録商標)EM64T)がイネーブルにされる場合、IA−32eモード。
【0033】
IA−32eモードに入ることは、PAEをイネーブルにすることを要求することに留意されたい。Execute Disable Bit能力は、新たな命令を導入することはしないが、オペレーティングシステムが、PAE対応の環境で動作し、メモリに関してページ粒状保護ポリシーを確立することを要求する。
【0034】
ソフトウェアは、EAXにおいて入力値80000001Hを有するCPUID命令を使用してExecute Disable Bit能力の存在を検出することができる。存在は、EDXにおいて戻される値によって示される。EDXのビット20が、設定される場合、Execute Disable Bitは、利用可能である。CPUID拡張関数80000001Hが、Execute Disable Bit能力が利用可能であり、PAEがイネーブルにされていることを報告する場合、ソフトウェアは、IA32_EFER MSR(アドレスC0000080H)においてNXEビットを1に設定することにより、Execute Disable Bit能力をイネーブルにすることができる。IA32_EFERは、CPUID拡張関数80000001Hによって戻されるEDXレジスタのビット20またはビット29が、1である場合、利用可能である。
【0035】
物理アドレス拡張が、イネーブルにされると(IA−32eモードまたはレガシー保護モードにおいて)、Execute Disable Bit能力は、IA32_EFERのビット11を1に設定することによってイネーブルにされる。CPUID拡張関数80000001Hが、Execute Disable Bit能力が利用可能ではないことを報告した場合、IA32_EFERのビット11が、予約されている。IA32_EFER.NXEへの書き込みは、#GP例外をもたらす。また、Microsoft Windows(登録商標)メモリマネージャも、割り当てられたメモリページ上のページ属性を追跡する。
【0036】
図3を再び参照すると、実行可能メモリページが、割り当てられる、または実行可能メモリページの属性が変更される場合305、呼び出し元が、メモリページ割り当てまたはメモリページ属性変更を行う正しい特権を有するかどうかを判定315する特権検査が実行される310。正しい特権が存在する場合、メモリページの割り当てまたは属性変更は、OSによって許される。存在しない場合、メモリページの属性の割り当てまたは変更は、OS325によって許されない。
【0037】
コードが実行されるにはまず、オブジェクトコードのすべてが、実行可能コードに変換される必要がある。オブジェクトコードは、一緒にまとめられ、各ルーチンが、その他のルーチンをどのように参照することができるか、および各ルーチンが呼び出すシステム関数についての情報が、追加される。多くのソフトウェア環境において、オブジェクトコードのすべては、一緒にリンクされて、ルーチンのすべてを含み、ディスク上に格納される大きい機械語コードである、単一の「実行可能イメージ」にされる。実行時に、この1つの大きい実行可能イメージが、メインメモリに読み込まれ、次に、実行される。実行可能コード変更の防止の別の態様において、実行可能イメージを読み込むことなどの関数が、ユーザモードからカーネルモードに移される。
【0038】
次に図4を参照すると、示されているのは、オペレーティングシステムのユーザモードフィーチャおよびカーネルモードフィーチャの例示的なアーキテクチャを示すブロック図である。例えば、カーネルモード405は、Microsoft NT(登録商標)のコアが実行されるところであり、コンポーネントが、メモリ、デバイス、およびプロセスを含むコンピュータのリソースの管理を実行するハードウェアおよびサービスへの直接のアクセスを有するのは、カーネルモード405においてである。このため、ユーザモード410において実行されているプログラムが、I/O割り当てを実行する、仮想メモリの割り当てもしくは割り当て解除を行う、スレッドもしくはプロセスを開始する、またはグローバルリソースと対話することを望む場合にはいつでも、そのプログラムは、カーネルモード405において活きている1つまたは複数のサービス445を呼び出さなければならない420。
【0039】
ネイティブAPI(アプリケーションプログラミングインタフェース)を直接に呼び出すKERNEL32 425関数には、KERNEL32 425のI/O(例えば、CreateFile()、ReadFile()、WriteFile())関数、同期(例えば、WaitForSingleObject()、SetEvent())関数、およびメモリ管理(例えば、VirtualAlloc()、VirtualProtect())関数のすべてが含まれる。実際、KERNEL32 425のエクスポートされるルーチンの大半は、ネイティブAPIを直接に使用する。図4は、Win32呼び出し(CreateFile())を実行するWin32アプリケーション430から、KERNEL32 425、NTDLL435を通って、制御が、NtCreateFile440システムサービスに移されるカーネルモード405に入る制御の流れを示す。
【0040】
次に図5を参照すると、示されているのは、カーネルモード実行においてセキュリティ検査を使用する実行可能コード変更の防止のプロセスを示す図である。実行可能イメージを読み込むことなどの関数をユーザモードからカーネルモード405に移す際、実行可能コードイメージ505を読み込む関数が、呼び出された場合、カーネルモード405への切り替えが行われて510、適切なセキュリティ検査が行われることが可能であるようにされる515。呼び出されなかった場合、アプリケーションの実行は、ユーザモード410に留まる。通常のユーザモードコードは、実行可能コードページを割り当てる十分な特権を有さない。ほとんどのコードは、自己書き換え型ではなく、したがって、このことは、例えば、Microsoft Windows(登録商標)ベースのシステムにわたって相当に広く実施されることが可能である。
【0041】
次に図6を参照すると、示されているのは、図5に示される実行可能コード変更の防止のプロセスにおいて使用される例示的なセキュリティ検査を示す図である。アプリケーションが、実行可能コードイメージ505の読み込みをトリガした場合、OSによってカーネルモード405への切り替えが行われ510、したがって、コード完全性検査、シグネチャ検査、またはその他のセキュリティポリシー検査などの適切なセキュリティ検査が、カーネル内で行われることが可能である605。例えば、コード完全性検査は、或るファイルに割り当てられ、後日にそのファイルを「試験」して、そのファイルに含まれるデータが、悪意のある仕方で変更されていないことを検証するのに使用される数学的値(チェックサムと呼ばれる)である暗号チェックサムであることが可能である。暗号チェックサムは、ファイルの中のデータを、チェックサムとして後で使用される、ハッシュ値と呼ばれる固定の数字ストリングに変換する一連の複雑な数学的操作(暗号アルゴリズムとして知られる)を実行することによって作成される。いずれの暗号アルゴリズムが、ハッシュ値を作成するのに使用されたかを知ることなしには、許可されていない個人が、対応するチェックサムを意図せずに変化させることなしにデータを変更することができる可能性は、極めて低い。また、暗号チェックサムは、メッセージ認証コード、完全性検査値、変更検出コード、またはメッセージ完全性コードとしても知られる。
【0042】
シグネチャは、オブジェクトの中のデータの暗号化された数学的要約である。したがって、シグネチャは、検証中のオブジェクトの中のデータが、オブジェクトに署名が行われた際のオブジェクトの中のデータと合致した場合、合致し、有効であると考えられる。無効なシグネチャは、オブジェクトに署名が行われた際に作成された、暗号化された数学的要約と、シグネチャ検証中に行われる暗号化された数学的要約との比較に基づいて、判定される。シグネチャ検証プロセスは、この2つの要約値を比較する。これらの値が同一ではない場合、オブジェクトの内容は、オブジェクトに署名が行われて以来、変化しており、そのシグネチャは、無効であると考えられる。図6を再び参照すると、コード完全性検査またはシグネチャ検査に合格した場合610、モジュール読み込みが行われることが許される615。合格しなかった場合、モジュール読み込みが行われることは許されない620。また、本明細書で説明されるプロセスは、実行可能ページに固有である必要はなく、例えば、読み取り専用データページ、および読み込まれるモジュールの他の任意の態様に拡張されることも可能であることに留意することも重要である。
【0043】
さらなるセキュリティポリシー検査の例には、モジュールのタイプ、または読み込まれるモジュールの出所を制限することがかかわることが可能である。例えば、Microsoft Windows(登録商標)Systemサービスは、ネイティブフォーマットにおけるMicrosoft実行可能コードが読み込まれることだけしか許さないように構成されることが可能である。
【0044】
本明細書で説明される様々なシステム、方法、および技術は、ハードウェアで、またはソフトウェアで、あるいは、適宜、その両方の組合せで実施されることが可能である。このため、本発明の方法および装置、または本発明の方法および装置のいくつかの態様、もしくはいくつかの部分は、フロッピー(登録商標)ディスケット、CD−ROM、ハードドライブ、または他の任意のマシン可読記憶媒体などの、実体のある媒体として実現されたプログラムコード(すなわち、命令)の形態をとることが可能であり、このプログラムコードが、コンピュータなどのマシンに読み込まれ、マシンによって実行されると、そのマシンが、本発明を実施するための装置となる。プログラミング可能なコンピュータ上のプログラムコード実行の場合、コンピュータは、一般に、プロセッサと、そのプロセッサによって読み取り可能な記憶媒体(揮発性および不揮発性のメモリおよび/または記憶要素を含む)と、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを含む。1つまたは複数のプログラムは、好ましくは、高レベルの手続き言語またはオブジェクト指向プログラミング言語で実装されて、コンピュータシステムと通信する。しかし、(1つまたは複数の)プログラムは、所望される場合、アセンブリ言語または機械語で実装されることも可能である。いずれにしても、言語は、コンパイルされる言語、または解釈される言語であることが可能であり、ハードウェア実施形態と組み合わせられることが可能である。
【0045】
また、本発明の方法および装置は、電気配線またはケーブル配線を介する、光ファイバを介する、または他の任意の形態の伝送を介するなどの、何らかの伝送媒体を介して伝送されるプログラムコードの形態で実施されることも可能であり、このプログラムコードが、EPROM、ゲートアレイ、PLD(プログラマブルロジックデバイス)、添付の図に示されるようなクライアントコンピュータ、ビデオレコーダなどのマシンによって受信されて、読み込まれ、そのようなマシンによって実行されると、そのマシンが、本発明を実施するための装置となる。汎用プロセッサ上で実施されると、このプログラムコードは、プロセッサと一緒になって、本発明の索引付け機能を実行するように動作する独特な装置をもたらす。
【0046】
本発明は、様々な図の好ましい実施形態に関連して、説明されてきたが、本発明を逸脱することなしに、他の同様な実施形態が使用されてもよく、あるいは本発明と同一の機能を実行するために、説明される実施形態に変形または追加が行われてもよいことを理解されたい。さらに、ハンドヘルドデバイスオペレーティングシステム、および他のアプリケーション固有のハードウェア/ソフトウェアインタフェースシステムを含む様々なコンピュータプラットフォームが、特に、無線ネットワーク化されたデバイスの数が増加しつづけるなかで、本明細書において企図されることが、強調されなければならない。したがって、本発明は、いずれの単一の実施形態にも限定されるべきではなく、むしろ、添付の特許請求の範囲による広がりと範囲で解釈されるべきである。
【0047】
最後に、本明細書で説明される、開示される実施形態は、他のプロセッサアーキテクチャ、コンピュータベースのシステム、またはシステム仮想化において使用されるように適合されることが可能であり、そのような実施形態は、本明細書で行われる開示によって明確に予期されており、このため、本発明は、本明細書で説明される特定の実施形態に限定されるべきではなく、むしろ、最も広く解釈されなければならない。
【図面の簡単な説明】
【0048】
【図1】実行可能コード変更の防止に関連して使用するのに適した例示的なコンピューティングデバイスを示すブロック図である。
【図2】実行可能コード変更の防止を実行する多数のコンピュータ化されたプロセスが実施されることが可能である例示的なネットワーク化されたコンピューティング環境を示す図である。
【図3】特権検査を使用する実行可能コード変更の防止のプロセスを示す図である。
【図4】オペレーティングシステムのユーザモードフィーチャおよびカーネルモードフィーチャの例示的なアーキテクチャを示すブロック図である。
【図5】カーネルモード実行においてセキュリティ検査を使用する実行可能コード変更の防止のプロセスを示す図である。
【図6】図5に示される実行可能コード変更の防止のプロセスにおいて使用される例示的なセキュリティ検査を示す図である。

【特許請求の範囲】
【請求項1】
実行可能コード(305)をメモリ(232)に読み込む関数(505)を、コンピュータのOS(オペレーティングシステム)(258)の特権(310)リングに限定するステップを含む実行可能コード(305)変更の防止のための方法。
【請求項2】
前記実行可能コードのページレベル保護を実施するステップをさらに含む請求項1に記載の方法。
【請求項3】
前記実行可能コードの実行可能ページが割り当てられる際に、または前記実行可能ページの属性が変更される際に特権検査を呼び出すステップをさらに含む請求項2に記載の方法。
【請求項4】
前記特権検査は、前記実行可能ページの前記割り当て、または前記実行可能ページの前記属性の変更を許す前に、前記OSの前記特権リングだけに割り当てられた特権が存在するかどうかを判定する請求項3に記載の方法。
【請求項5】
前記実行可能コードが読み込まれた後、前記実行可能コードの完全性を検査するステップをさらに含む請求項4に記載の方法。
【請求項6】
前記ページレベル保護は、ハードウェアベースの実施、および実行可能ページの追跡を使用して実行される請求項5に記載の方法。
【請求項7】
請求項1に記載のステップを実行するための命令を有するコンピュータ可読媒体。
【請求項8】
請求項2に記載のステップを実行するための命令を有するコンピュータ可読媒体。
【請求項9】
請求項3に記載のステップを実行するための命令を有するコンピュータ可読媒体。
【請求項10】
請求項4に記載のステップを実行するための命令を有するコンピュータ可読媒体。
【請求項11】
請求項5に記載のステップを実行するための命令を有するコンピュータ可読媒体。
【請求項12】
請求項6に記載のステップを実行するための命令を有するコンピュータ可読媒体。
【請求項13】
実行可能コード(305)をメモリ(232)に読み込む関数(505)を、コンピュータのOS(オペレーティングシステム)(258)の特権(310)リングに限定するための手段を含む実行可能コード(305)変更の防止のためのシステム。
【請求項14】
前記実行可能コードのページレベル保護を実施するための手段をさらに含む請求項13に記載のシステム。
【請求項15】
前記実行可能コードの実行可能ページが割り当てられる際に、または前記実行可能ページの属性が変更される際に特権検査を呼び出すための手段をさらに含む請求項14に記載のシステム。
【請求項16】
前記特権検査を呼び出すための前記手段は、前記実行可能ページの前記割り当て、または前記実行可能ページの前記属性の変更を許す前に、前記OSの前記特権リングだけに割り当てられた特権が存在するかどうかを判定する請求項15に記載のシステム。
【請求項17】
前記実行可能コードが読み込まれた後、前記実行可能コードの完全性を検査するための手段をさらに含む請求項16に記載のシステム。
【請求項18】
ページレベル保護を実施するための前記手段は、ハードウェアベースの実施、および実行可能ページの追跡のための手段を含む請求項17に記載のシステム。
【請求項19】
データ(255)ページをメモリ(232)に読み込む関数(505)を、コンピュータのOS(オペレーティングシステム)(258)の特権(310)リングに限定するステップを含むデータ(255)ページの変更の防止のための方法。
【請求項20】
請求項19に記載のステップを実行するための命令を有するコンピュータ可読媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図6】
image rotate


【公表番号】特表2009−528632(P2009−528632A)
【公表日】平成21年8月6日(2009.8.6)
【国際特許分類】
【出願番号】特願2008−557407(P2008−557407)
【出願日】平成19年2月28日(2007.2.28)
【国際出願番号】PCT/US2007/005398
【国際公開番号】WO2007/103192
【国際公開日】平成19年9月13日(2007.9.13)
【出願人】(500046438)マイクロソフト コーポレーション (3,165)
【Fターム(参考)】