(57)【特許請求の範囲】
【請求項１】
第１のオペレーティング環境にロードされた第１のソフトウェアコンポーネントを実行することと、
前記第１のソフトウェアコンポーネントの動作に関するランタイム情報と、前記第１のオペレーティング環境で実行されている全てのソフトウェアコンポーネントのリストとを含む前記第１のオペレーティング環境で前記ランタイム情報を収集し、前記第１のソフトウェアコンポーネントのインポートアドレステーブルおよびエクスポートポインタの状態データ一式を記憶することと、
前記第１のオペレーティング環境から隔離された第２のオペレーティング環境の第２のソフトウェアコンポーネントに、コード、データ、外部シンボルテーブル、およびリロケーション情報のうち１以上を含む前記収集されたランタイム情報を伝達することと、
前記収集されたランタイム情報を、前記第１のソフトウェアコンポーネントに関する有効な情報一式と比較することと、
前記比較により前記第１のソフトウェアコンポーネントが有効であると検証されたかを決定して、前記状態データを前記第１のソフトウェアコンポーネントに関する前記有効な情報一式と比較することと、
前記収集されたランタイム情報が前記有効な情報一式と整合しない場合、警告を発令することと、を含む方法。
【請求項２】
記憶装置から、有効なインポートオフセットおよびエクスポートオフセットを含む検証済みの割り込みハンドラエントリ一式を読み出すことと、
実行状態の割り込みハンドラエントリ一式が、前記有効なインポートオフセットおよびエクスポートオフセットを示すことを検証することと、を含む、請求項１に記載の方法。
【請求項３】
前記第１のソフトウェアコンポーネントの１以上の従属ソフトウェアコンポーネントを検証することを含む、請求項２に記載の方法。
【請求項４】
前記第１のオペレーティング環境は仮想化されており、前記第２のオペレーティング環境は仮想マシンマネージャである、請求項２または３に記載の方法。
【請求項５】
前記第１のオペレーティング環境は、仮想化されていないオペレーティングシステムである、請求項２または３に記載の方法。
【請求項６】
前記収集されたランタイム情報を伝達することは、前記収集されたランタイム情報を前記第２のオペレーティング環境の共有メモリを介して伝達することを含む、請求項２から請求項５の何れか１項に記載の方法。
【請求項７】
第１のオペレーティング環境で実行される第１のソフトウェアコンポーネントと、
前記第１のソフトウェアコンポーネントの動作に関するランタイム情報と、前記第１のオペレーティング環境で実行されている全てのソフトウェアコンポーネントのリストとを含む前記第１のオペレーティング環境で実行され、前記ランタイム情報を収集し、前記第１のソフトウェアコンポーネントのインポートアドレステーブルおよびエクスポートポインタの状態データ一式を記憶し、コード、データ、外部シンボルテーブル、およびリロケーション情報のうち１以上を含む前記収集されたランタイム情報を伝達する第２のソフトウェアコンポーネントと、
前記第１のオペレーティング環境から隔離された第２のオペレーティング環境で実行され、前記収集されたランタイム情報を受信し、前記収集されたランタイム情報を、前記第１のソフトウェアコンポーネントに関する有効な情報一式と比較し、前記第１のソフトウェアコンポーネントが有効であると検証されたかを決定して、前記状態データを前記第１のソフトウェアコンポーネントに関する前記有効な情報一式と比較する、第３のソフトウェアコンポーネントと、を備えるシステム。
【請求項８】
前記第３のソフトウェアコンポーネントは、記憶装置から、有効なインポートオフセットおよびエクスポートオフセットを含む検証済みの割り込みハンドラエントリ一式を読み出し、実行状態の割り込みハンドラエントリ一式が、前記有効なインポートオフセットおよびエクスポートオフセットを示すことを検証する、請求項７に記載のシステム。
【請求項９】
前記第３のソフトウェアコンポーネントは、前記第１のソフトウェアコンポーネントの１以上の従属ソフトウェアコンポーネントを検証する、請求項８に記載のシステム。
【請求項１０】
前記第１のオペレーティング環境は仮想化されている、請求項８または９に記載のシステム。
【請求項１１】
前記第１のソフトウェアコンポーネントは、前記収集されたランタイム情報を前記第２のオペレーティング環境の共有メモリを介して伝達する、請求項８から請求項１０の何れか１項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
ルートキットおよび他のマルウェアは、ソフトウェアプラットフォーム上のセキュリティソフトウェアの動作による検出を逃れる場合がある。ひとたび構築されると、ルートキットは、ユーザアクティビティを観察し、ユーザアクションを回避し、他の悪意ある、あるいは望ましくないアクティビティを行うことがある。個々のソフトウェアのエンティティを計測することでソフトウェアのエンティティのインテグリティの提起、その存在のチェックは行いうるが、該ソフトウェアのエンティティが回避されていないという確証を与えることはできない。
【図面の簡単な説明】
【０００２】
発明の主題は、明細書の最終部分に特に指摘および明確に請求されている。しかし、発明は、その目的とともに動作の機構および方法、およびその特徴および利点の両方に関して、以下の詳細な記載を、添付された図面とともに参照することで最善の理解がなされよう。
【０００３】
【図１】本発明の一実施形態によるコンピューティングプラットフォームの概略図である。
【０００４】
【図２】本発明の一実施形態によるコンピューティングプラットフォームのホワイトリストアーキテクチャを表す図である。
【０００５】
【図３】本発明の一実施形態によるホワイトリストサービスが取り込んだコンポーネントイメージのサンプルのデータ構造を表す図である。
【０００６】
【図４】本発明の一実施形態によるソフトウェアコンポーネントをホワイトリストに登録する方法のフローチャートである。
【発明を実施するための最良の形態】
【０００７】
例示の簡略化および明瞭化目的で、図面に示す部材は必ずしも原寸に比例して描かれていない。例えば、部材のなかには、明瞭を期して他の部材に比べて大きく描かれているものもあるであろうし、一つの機能ブロックまたは部材の中に幾らかの物理的コンポーネントが含まれている場合もあろう。さらには、適切と考えられる場合に、図面を跨いで参照番号を繰り返して、対応するまたは類似する部材であることを示している場合もあろう。さらには、図面に描かれたブロックの幾らかを単一の機能として組み合わせることもできる。
【０００８】
以下の詳細な記載において、幾多もの実施形態を記載して、本発明の完全な理解を促す。しかし、本発明の当業者であれば理解するように、本発明はこれら特定の詳細無しに実行することができる。また反対に、本発明を曖昧にしないように、公知の方法、手順、コンポーネント、および回路を詳細には示していない場合もある。
【０００９】
特にそうではないと明記していない場合を除いて、以下の説明から明らかなように、明細書の説明全体にわたり、「処理」「コンピューティング」「計算」「決定」などの用語の利用は、コンピューティングシステムのレジスタおよび／またはメモリ内の物理量（例えば電子）として表されるデータを、コンピューティングシステムのメモリ、レジスタ、または他の情報記憶・送信・ディスプレイデバイス内の物理量で同様に表される他のデータに操作および／または変換する、コンピュータまたはコンピューティングシステム、または類似の電子コンピューティングデバイスの行うアクションおよび／またはプロセスのことを言う。さらに、「複数の」という用語を明細書にわたり利用して、２以上のコンポーネント、デバイス、部材、パラメータなどを記載している。
【００１０】
ここで利用される「コンポーネント」という用語は、所望の結果を取得すべく利用されうるプログラム言語および関連するデータのことを言う場合がある。コンポーネントという用語は、「モジュール」または「エージェント」という用語と同義であり、ハードウェアまたはファームウェアで、またはエントリポイントおよび終了ポイントを有する可能性があり、例えばＣ＋＋、インテルアーキテクチャ６４ビット（ＩＡ‐６４）実行可能コードなどのプログラム言語で書かれうるソフトウェア命令の集合体で具現化されうるプログラム言語のことを言う場合がある。さらには、コンポーネントは、他のコンポーネントから、または自分自身から呼び出されてよく、および／または検出されたイベントまたは割り込みに呼応して呼び出されてもよい。例えば、コンポーネントは、１以上のプロセッサが実行するソフトウェアパッケージ、モジュールまたはエージェントであってよい。
【００１１】
本発明の実施形態は、オペレーティングシステム環境においてソフトウェアコンポーネントをホワイトリストに登録する方法およびシステムを提供しうる。一実施形態においては、第１のオペレーティング環境下において、ロードされ実行される第１のソフトウェアコンポーネントに関するランタイム情報が収集されうる。収集された情報は、第１のオペレーティング環境から隔離された第２のオペレーティング環境の第２のソフトウェアコンポーネントに伝達されうる。収集されたランタイム情報は、第１のソフトウェアコンポーネントに関する有効な情報一式と比較されうる。
【００１２】
図１を参照すると、本発明の一実施形態による、ホワイトリストが動作しているソフトウェアコンポーネントを実装または実行することのできるコンピューティングプラットフォーム１００の概略が示されている。幾らかの実施形態においては、コンピューティングプラットフォーム１００は、例えば、パソコン（ＰＣ）、デスクトップコンピュータ、モバイルコンピュータ、ラップトップコンピュータ、ノート型コンピュータ、端末、ワークステーション、サーバコンピュータ、携帯情報端末（ＰＤＡ）デバイス、ネットワークデバイス、または、実行環境１０４をホストすることのできる他の適切なコンピューティングデバイスであってよく、またはそれらを含んでよい。
【００１３】
本発明は、この点に限定はされないが、コンピューティングプラットフォーム１００は、例えば、実行環境１０４、管理モジュール１１６、およびプラットフォームハードウェア１１８を含んでよく、プラットフォームハードウェア１１８は、例えば、プロセッサ１２０、ネットワークインタフェースコントローラ（ＮＩＣ）１２４、記憶装置１２８、および／またはメモリ１３２を含みうる。コンピューティングプラットフォーム１００はさらにネットワーク１４０に接続されえ、外部コンピューティングプラットフォームおよび他のデバイスと通信しうる。ネットワーク１４０は、ローカルエリアネットワーク（ＬＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、または、２以上のネットワークノード間の通信リンクを有する他の類似したネットワークであってよい。
【００１４】
幾らかの実施形態においては、実行環境１０４は、実行オペレーティングシステム（ＯＳ）１０８をホストしてよい。ＯＳ１０８は、実行環境１０４内の他のコンポーネントの一般的な動作を実行および制御する、例えばソフトウェアコンポーネント１１２のようなソフトウェアコンポーネントであってよい。場合によっては、実行環境１０４は、コンポーネントが動作する仮想実行環境を提供することもある。または、実行環境１０４は仮想化されていなくてもよい。
【００１５】
幾らかの実施形態においては、ソフトウェアコンポーネント１１２は、例えばカーネルコンポーネントのような監視レベルコンポーネントであってよい。カーネルコンポーネントは、ローダ、スケジューラ、メモリマネージャなどのサービス；ネットワークカード、ユニバーサルシリアルバス（ＵＳＢ）インタフェース、ディスクドライブなどのエクステンション／ドライバ；またはコード実行を監視する進入検出器などのサービスドライバハイブリッドであってもよく、またはそれらを含んでよい。
【００１６】
管理モジュール１１６は、例えば１以上のプロセッサ１２０、ＮＩＣ１２４、記憶装置１２８、および／またはメモリ１３２のようなハードウェアまたは他の資源への一般的なコンポーネントアクセスを調停してよい。幾らかの実施形態においては、管理モジュール１１６の機能は、ＯＳ１０８が仮想化されるか否かによって変化してよい。
【００１７】
プロセッサ１２０は、例えば、中央処理装置（ＣＰＵ）、デジタル信号プロセッサ（ＤＳＰ）、マイクロプロセッサ、コントローラ、チップ、マイクロチップ、または任意の適切な多目的の、または特定用途のプロセッサまたはコントローラであってよく、またはそれらを含んでよい。幾らかの実施形態においては、例えば、プロセッサ１２０は、プログラミング命令を実行してよく、あるいは、コンピューティングプラットフォーム１００上のコンポーネントの動作に利用されうる計算動作を実行してもよい。
【００１８】
記憶装置１２８は、例えばディスクおよび関連のドライブ、ＵＳＢ記憶デバイス、フラッシュメモリ、読み出し専用メモリ（ＲＯＭ）、不揮発性半導体デバイスまたはプラットフォーム１００上のコンポーネントの実行に利用されるべき永続的なコンテンツを記憶するのに適した他の適切な記憶デバイスなどの、集積および／または周辺記憶デバイスを含んでもよい。幾らかの実施形態においては、記憶装置１２８は、プラットフォーム１００の物理的部分である記憶資源であってよく、または、プラットフォーム１００によりアクセスされうるが、必ずしもプラットフォーム１００の一部ではなくてもよい。例えば、記憶装置１２８は、ネットワークコントローラ１２４を介してネットワーク１４０上でプラットフォーム１００によりアクセスされうる。
【００１９】
メモリ１３２は、例えば、ランダムアクセスメモリ（ＲＡＭ）、ＲＯＭ、ダイナミックＲＡＭ（ＤＲＡＭ）、同期型ＤＲＡＭ（ＳＤ−ＲＡＭ）、フラッシュメモリ、揮発性メモリ、不揮発性メモリ、キャッシュメモリ、バッファ、短期メモリ装置、長期メモリ装置、または、ＯＳ１０８および／またはソフトウェアコンポーネント１１２などのデータおよび／またはコンポーネントを記憶するのに適した他のメモリ装置を含みうる。幾らかの実施形態においては、メモリ１３２は、自身に記憶されるコンテンツを、幾らかのメモリ位置グループに組織化してよい。それらの組織化グループは、固定サイズおよび／または可変サイズを有してよく、ＯＳ１０８が仮想化されている場合には仮想メモリ管理を促してよい。ＯＳ１０８が仮想化されない場合、メモリ１３２は異なる組織化構造を有してもよい。
【００２０】
図２を参照すると、本発明の一実施形態によるコンピューティングプラットフォーム２００のホワイトリストアーキテクチャが示されている。ここで利用されているように、ホワイトリストは、例えば、ソフトウェア部材（例えばコード、コンポーネント、モジュール、エージェント、スクリプトなど）が安全に実行あるいは利用できること、例えばマルウェアまたは他の破損がないこと、を検証するプロセスのことを称してよい。幾らかの実施形態においては、コンピューティングプラットフォーム２００は、プラットフォーム１００に類似していてよく、および実質的な互換性があってよい。さらに、以下に示す部材は、上述の同様の名称の部材と類似していてよく、および実質的な互換性があってよく、その逆の場合も同様である。
【００２１】
コンピューティングプラットフォーム２００は、オペレーティング環境２０６、プラットフォームハードウェア２０８、およびバイナリイメージ記憶装置２１０を管理する管理モジュール２０４を含んでよい。管理モジュール２０４または管理モジュール２０４の部分は、オペレーティング環境２０６から独立して実行されてよく、オペレーティング環境２０６から独立してコードを実行してよく、オペレーティング環境２０６からセキュアに隔離されてよい。幾らかの実施形態においては、管理モジュール２０４は、公知のようにオペレーティング実行環境２０６に対して、例えば１以上のプロセッサ２２０、ＮＩＣ２２４、記憶装置２２８、および／またはメモリ２３２などの、プラットフォームハードウェア２０８の多数の抽象および／または図を提示、または表してよい。さらに、幾らかの実施形態においては、管理モジュール２０４は、例えばファームウェアなどの命令を実行することのできるオペレーティング実行環境を含んでよく、例えば管理エンジン（manageability engine）であってよい。これらの場合において、オペレーティング環境２０６は、例えばネイティブの、伝統的な、またはレガシーの（例えば仮想化されていない）ＯＳ環境であってよい。または、管理モジュール２０４は仮想マシンモニタ（ＶＭＭ）であってよく、オペレーティング環境２０６は例えば仮想マシン（ＶＭ）またはゲストＯＳであってよい。これらの場合において、管理モジュール２０４は、ハードウェア２０８へのＶＭアクセスを管理してよい。管理モジュール２０４は、ソフトウェア（例えば、１以上のコントローラまたはプロセッサが実行する、独立プログラム、および／またはホストオペレーティングシステムのコンポーネント）ハードウェア、ファームウェア、および／またはそれらの任意の組み合わせに実装されてよい。
【００２２】
管理モジュール２０４は、オペレーティング環境２０６で動作するコンポーネントのインテグリティまたは有効性確認特徴（validating characteristics）を検証するインテグリティ計測マネージャ（integrity measurement manager）（ＩＭＭ）２１２を含みうる。オペレーティングコンポーネントのインテグリティを検証するには、ＩＭＭ２１２は、コンポーネント２１４のような、ロードされ、予期される（例えば認証された）サービスを、例えばバイナリイメージ記憶装置２１０内にオンディスクに記憶されうるオペレーティングコンポーネントの記録イメージと比較しうる。記憶されたイメージは、例えばコード、データの各部分、外部シンボルテーブル、およびリロケーション情報を含む、コンポーネントに関する情報を含みうる。コンポーネントの他の情報も含めることができる。ＩＭＭ２１２は、バイナリイメージ記憶装置２１０に記憶されているイメージからサービス用のインテグリティ・マニフェスト（integrity manifest）を生成または抽出してよい。インテグリティ・マニフェストは、例えば、コンポーネントの有効なまたは正当なバージョンがランタイムにおいて（例えば実行中に）メモリにどのように現れるべきかを示す要約的記載またはリストであってよい。幾らかの実施形態において、インテグリティ・マニフェストは、生成中に署名されて、不正変更あるいは認証されていない修正を回避して、コードおよびデータの部分についての情報、リロケーション情報、シンボルテーブル情報、およびマニフェスト自体のインテグリティを検証する他の情報などの、サービスに関する有効な情報一式を含みうる。メモリ２３２などの、コンポーネント２１４のメモリ内のイメージは、このインテグリティ・マニフェストを参照して有効性を判断される。
【００２３】
オペレーティング環境２０６が仮想化されている幾らかの実施形態においては、Ｖｉｒｔｕａｌｉｚｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ｉｎｔｅｇｒｉｔｙ  Ｓｅｒｖｉｃｅｓ（ＶＴＩＳ）コンポーネント（不図示）も、管理モジュール２０４内に存在しうる。ＶＴＩＳコンポーネントは、オペレーティング環境２０６のコンポーネント２１４などの現在実行されているコンポーネントの一部であるインテグリティが検証されたコードまたはデータを含む管理モジュール２０４のメモリのページを保護しうる。保護されたデータを、オペレーティング環境２０６から隔離すべく、ＶＴＩＳコンポーネントは、インテグリティが検証されたコードまたはデータへの排他的アクセスを有しうる。幾らかの実施形態においては、オペレーティング環境２０６で実行されるコンポーネントまたはモジュールは、ロードまたは他の類似イベントにおいてＶＴＩＳコンポーネントにより登録されることができる、例えばインテグリティを検証されることができる。
【００２４】
オペレーティング環境２０６が仮想化されている場合、ＩＭＭ２１２はＶＭＭ（例えば管理モジュール２０４）で実行されうる。また、ＩＭＭ２１２はオペレーティング環境２０６で実行されうる。ＩＭＭ２１２がオペレーティング環境２０６で実行される場合、ＩＭＭ２１２は管理モジュール２０４によりセキュアにされることで、２以上のオペレーティング環境２０６により利用される物理アドレス空間がオーバーラップしないことを保証してよい。さらに、ＩＭＭ２１２は、起動時に管理モジュール２０４のＶＴＩＳコンポーネントに登録されてよく、ＶＴＩＳコンポーネントにより有効性を確認されてもよい。
【００２５】
オペレーティング環境２０６が仮想化されていない場合、ＩＭＭ２１２は管理エンジンの一部としてファームウェアに実装されてよい。
【００２６】
オペレーティング環境２０６は、コンポーネント２１４、カーネルディレクトリサービス（ＫＤＳ）２１６、およびホワイトリストマネージャ（ＷＬＭ）２１８などの、オペレーティング環境２０６内で実行される１以上のコンポーネントを含む。他のコンポーネントが含まれてもよい。コンポーネント２１４は、例えばカーネルサービス、モジュール、またはドライバなどの、オペレーティング環境２０６で実行される任意のソフトウェアコンポーネントであってよく、それらを含みうる。例えばルートキットなどのマルウェアは、オペレーティング環境２０６にフィルタをかけ得、例えばコンポーネント２１４を修正し得、コンポーネント２１４の正規の実行を迂回させ得（例えばフック）、または、オペレーティング環境２０６の有効なコンポーネントとして動作しようとすることすらある。本発明の実施形態においては、オペレーティング環境２０６の既知のコンポーネントの有効性を確認、チェック、またはホワイトリストに登録することで、且つ、これらコンポーネント間およびコンピューティングプラットフォーム２０６上の他のエンティティとの間の全ての相互作用の有効性を確認することで、コンピューティングプラットフォーム２００のようなコンピューティングプラットフォームをセキュアにすることができる。
【００２７】
ＫＤＳ２１６は、仮想化マシン用のＯＳまたはゲストＯＳで実行されるエージェントまたはサービスなどのコンポーネントを含んでよく、またはそれらであってよく、オペレーティング環境２０６で現在実行されているコンポーネントまたはサービス（例えばコンポーネント２１４）をリストにすることができてよい。幾らかの実施形態においては、ＫＤＳ２１６は例えばリング０サービス（ring-0 service）を実行してよい。
【００２８】
ＷＬＭ２１８は、コンポーネント２１４などの単一のＯＳサービスまたはエージェントが他のＯＳサービスまたはエージェントへ作成した外部参照上の全ての情報を収集することができる、仮想化マシン用のＯＳまたはゲストＯＳで実行されるコンポーネントであってよく、またはそれらを含んでよい。幾らかの実施形態においては、ＷＬＭ２１８およびＩＭＭ２１２は単一のモジュールとして組み合わせられてよいが、他の機能部材を利用してもよい。単一のＯＳサービスまたはエージェントが作成する外部参照上の全ての情報を収集することは、ここではコンポーネントのイメージを取り込むこととして称されてもよい。ＷＬＭ２１８は、バイナリイメージ記憶装置２１０に記憶されるコンポーネント２１４のイメージのインポートテーブル構造を参照することで、どの情報を収集するか決定しうる。インポートテーブル構造は、例えば、コンポーネントがエクスポートしたエントリポイントに機能アドレスをインポートしたリストであってよく、それを含みうる。ＷＬＭ２１８はさらに、他の記憶イメージデータのことであってもよい。
【００２９】
オペレーティング環境２０６で実行されうるコンポーネントを決定すべく、ＷＬＭ２１８は、バッファまたは共有メモリを介してＫＤＳ２１６と通信しうる。共有メモリは、管理モジュール２０４のメモリ空間であってよい。オペレーティング環境２０６が仮想化されている実施形態においては（例えばＶＭ）、共有メモリはバッファリングされて、ＶＴＩＳコンポーネントにより保護されうる。オペレーティング環境が仮想化されていない実施形態においては、共有メモリはバッファリングされて、Ｈｏｓｔ  Ｅｍｂｅｄｄｅｄ  Ｃｏｎｔｒｏｌｌｅｒ  Ｉｎｔｅｒｆａｃｅ（ＨＥＣＩ）、または、公知の管理エンジンの他のインタフェースを介してアクセスされうる。
【００３０】
図３を参照すると、ＷＬＭ２１８が取り込みうるコンポーネントイメージのサンプルのデータ構造３００を表す図が示されている。図３は、取り込みうるコンポーネント３１２のリスト３１０を示す。ここで利用されているように、コンポーネント３１２は、図２のコンポーネント２１４と同じ、または実質的に類似していてよい。各コンポーネント３１２について、リスト３１０は例えばコンポーネント名称、メモリのベースアドレス、インテグリティ・マニフェスト名称、インポートリスト３２２およびエクスポートリスト３３２（例えばエクスポートハッシュマニフェスト）を含みうる。コンポーネント３１２に関する他の情報を含めることもできる。インポートリスト３２２は、例えばアドレス、参照、またはコンポーネント３１２が利用するアドレスへのポインタのリストを含みうる、または該リストであってもよい。他の情報を含めることもできる。エクスポートリスト３３２は、例えばアドレス、参照、またはコンポーネント３１２が利用するアドレスへのポインタのリストを含みうる、または該リストであってもよい。他の情報を含めることもできる。
【００３１】
ＫＤＳ２１６が提供する情報を利用して、ＷＬＭ２１８およびＩＭＭ２１２は組み合わせられて、コンポーネントの記録イメージと対応するデータとを、先に記憶されている参照から抽出されたマニフェストと比較することで、１以上のオペレーティングコンポーネント２１４のインテグリティを検証するよう動作してよい。幾らかの実施形態においては、ＫＤＳ２１６およびＷＬＭ２１８の登録後および／または検証後、検証は例えば３つの段階を含みうる。第１段階においては、コンポーネント２１４のコードおよびデータの部分は、インテグリティ・マニフェストと比較されて、インポート・エクスポートポインタアドレスの状態データを記憶してよい。第２段階においては、この記憶された状態データをインテグリティ・マニフェストのインポート・エクスポートポインタと比較してよい。コンポーネントが第２段階をパスした場合、コンポーネントの割り込みハンドラを、検証の第２段階をパスした他のコンポーネントまたはモジュールの位置と比較してよい。３段階全ての検証が成功した場合、コンポーネントのインテグリティが検証されたとしてよい。成功しなかった場合、例えば遠隔ＩＴコンソールに対して警告を発令してよい。
【００３２】
図４を参照すると、本発明の一実施形態による、コンポーネント２１４または他の類似するコンポーネントまたはモジュールなどのソフトウェアコンポーネントの有効性を確認、チェック、またはホワイトリストに登録する方法のフローチャートが示されている。方法の実施形態は、例えば、図１のコンピューティングプラットフォーム１００により、または実行環境１０４をホストすることのできる他の適切なコンピューティングデバイスにより、利用、または実装されうる。方法の実施形態では、図２のホワイトリストアーキテクチャ、および図３のデータ構造を、ホワイトリストサービスが取り込んだコンポーネントのイメージまたは他の適切なデータ構造に対して利用することもできる。
【００３３】
動作４０２が示すように、例えばＩＭＭ２１２のようなＩＭＭが実行開始してもよい。幾らかの実施形態においては、管理モジュール２０４のような管理モジュールを動作させてもよい。管理モジュール２０４がＶＭＭである場合、ＩＭＭ２１２は内部から動作してもよく、管理モジュール２０４によりセキュアにされてもよい。または、ＩＭＭ２１２はオペレーティング環境２０６などのゲストＯＳの一部として動作してもよく、ロードにおける保護目的で管理モジュール２０４のＶＴＩＳコンポーネントに登録されてもよい。管理モジュールがＶＭＭではない場合、ＩＭＭ２１６はチップセット内のＭａｎａｇｅｍｅｎｔ  Ｍｏｄｕｌｅファームウェアに存在してよく、例えばＫＤＳ２１６などのＫＤＳに起因する機能全てを行ってよい。
【００３４】
動作４０４においては、ＫＤＳ２１６およびＷＬＭ２１８などのＫＤＳおよびＷＬＭは、ＩＭＭ２１２に登録されうる。動作４０６においては、ＷＬＭ２１８は共有メモリ通信チャネルを構築してＫＤＳ２１６と通信してよい。共有メモリチャネルは、オペレーティング環境２０６が仮想化されているか否かに依ってよい。オペレーティング環境２０６が仮想化されている場合、共有メモリは、管理モジュール２０４などの、ＶＭＭ内のＶＴＩＳ保護位置であってよい。他の実施形態においては、共有メモリは、例えばＨＥＣＩインタフェースを介してアクセス可能であってよく、バッファリングされてよい。オペレーティング環境２０６で実行されるコンポーネントから保護される他の共有メモリチャネルを利用することもできる。
【００３５】
ＫＤＳ２１６は、ＷＬＭ２１８にランタイム情報（例えば、オペレーティング環境２０６で現在実行されているモジュール、カーネルサービス、またはエージェントなどの１以上のコンポーネントに関する仮想ベースアドレス）を伝達してもよい（動作４０８）。他のランタイム情報を含めてもよい。
【００３６】
ひとたびＷＬＭ２１８が全てのモジュールのリストを有すると、動作４１０において、ＷＬＭ２１８は、イメージに関するランタイム情報を収集、および／またはイメージを記録してもよい（例えば、検証を目的としたこれらモジュールの１以上に関する動作スナップショット）。記録されたイメージは、コードおよびデータの部分、外部シンボルテーブル、およびリロケーション情報、および他の適切なデータを含みうる。幾らかの実施形態においては、データは、インポートリスト３２２のようなインポートリスト、およびエクスポートハッシュテーブル３３２のようなエクスポートテーブルを含みうる。他の情報を含めてもよい。幾らかの実施形態においては、ＷＬＭ２１８は、例えばバイナリイメージ記憶装置２１０のようなバイナリイメージ記憶装置に記憶されるバイナリファイルから、モジュールのオンディスクのイメージをロードすることで、どの参照を記録すべきか決定してよい。オンディスクイメージには他の記憶手段を利用してもよい。例えば、イメージは、ネットワーク１４０などのネットワークがコンピューティングプラットフォーム１００に接続する外部ハードドライブまたは他の記憶デバイスに記憶してもよい。
【００３７】
動作４１２においては、ＷＬＭ２１８はＩＭＭ２１６を呼び出して、モジュールのコードおよび静止データの部分のインテグリティを検証してよい。幾らかの実施形態においては、ＩＭＭ２１６は、バイナリイメージ記憶装置２１０に記憶されているモジュールのオンディスクイメージを利用して検証対象のモジュールのインテグリティ・マニフェストを作成してよい。または、インテグリティ・マニフェストは、例えばサーバなどのネットワーク１４０上の別の位置に記憶されてもよい。ＩＭＭ２１６はこのマニフェストを利用して、動作４１０で記録したモジュールのイメージまたは収集されたランタイム情報と比較して検証してよい。動作４１２の一部として、ＩＭＭ２１６はさらに、例えば他のモジュールなどのモジュールの従属物（dependency）のコードおよびデータの部分を検証してよい。インポートアドレステーブル（ＩＡＴ）およびエクスポートテーブル（ＥＴ）のエントリに関する計測値は、他の動作での利用目的で記憶されうる。
【００３８】
テスト済みの部分の全てがこの当初のインテグリティテストをパスするのに成功した場合（動作４１４）、方法は第２の検証動作へ移ってよい。動作４１６においては、ＩＭＭ２１６は、モジュールとその従属物との間のリンク（機能ポインタなど）が有効であると検証してよい。幾らかの実施形態においては、ＩＭＭ２１６は、動作４１０で収集したＥＴおよびＩＡＴエントリ値を、マニフェストおよび他のデータからのインポートルックアップテーブル（ＩＬＴ）と比較してよい。これらエクスポート・インポート値（例えばオフセット値）は、インポートまたはエクスポートエントリのアドレスを取得して、計算されたランタイムアドレス（例えばベースアドレスに相対仮想アドレス（ＲＶＡ）を加えたもの）が検証対象のモジュールのリニアアドレス空間に存在することを確認することで、決定される。ＩＬＴの全てのエントリ、およびそれらに対応するＥＴエントリを比較しうる。ＩＡＴのエントリが、ＩＬＴから計算されたランタイムアドレスに整合するか否かを決定するチェックを行ってもよい。この検証動作により、コンポーネントがルートキットにフックされていないことを確証する助けとなりうる。
【００３９】
動作４１６の検証が成功であった場合（動作４１８）、第３の検証、つまり動作４２０を行いうる。動作４２０においては、割り込みハンドラエントリ（例えばポインタ）を、それらの有効性を検証するのに動作４１６で計算されたような、検証済みモジュールまたはコンポーネントなどのコードの検証済みの部分のメモリ位置と比較してよい。ＩＭＭ２１６は、オペレーティング環境２０６の一部であるデータ構造でありえ検証対象のモジュールの実行時に割り込みまたは例外が起こりうる場合に必要となるポインタを記憶するべく利用されうる割り込みデスクリプタテーブル（ＩＤＴ）から、エントリを読み出しうる。ＩＤＴエントリは１以上の他のロードされたモジュールを示しえ、または割り込み中に呼び出されうるオペレーティング環境２０６の他の実行コンポーネントを示しうる。幾らかの実施形態においては、オペレーティング環境２０６で実行されるモジュールの幾らかまたは全てが、動作４２０に先立つ動作４１６のような動作により既に検証されている場合もある。これらの場合、動作４１６が検証したモジュールを示すＩＤＴポインタは、有効なポインタと考えられてよい。
【００４０】
全てのモジュール割り込みハンドラが検証されると（動作４２２）、モジュールはインテグリティ検証テストをパスしたとみなされうる（動作４２４）。しかし、動作４１４、４１８、および４２２の１以上においては、モジュールはそれぞれ動作４１２、４１６、および４２０の検証テストをパスしてはおらず、モジュールのインテグリティが損なわれている場合がある（動作４２６）、つまり、ルートキットまたは他のマルウェアがオペレーティング環境２０６の正規の動作に影響を与えている場合がある。これらの場合においては、警告の発令または他の適切な対抗措置を講じてよい。
【００４１】
動作４０６−４２６は、オペレーティング環境２０６で動作する各コンポーネントまたはモジュールについて繰り返されて、オペレーティング環境２０６のセキュリティが完全な状態であることを保証してよい。続いてロードされうる他のコンポーネントについては、これら動作は新たなコンポーネントまたは全てのコンポーネントに対して、ロードの際または他の類似したイベントのときに実行されうる。さらに、動作４０６−４２６は、システム再起動、ＩＤＴへの変更、等の他のトリガとなるイベントに呼応して繰り返されてもよい。
【００４２】
他のオペレーションまたは一連のオペレーションを利用してもよい。さらに、他の数の、または他の種類のインテグリティチェックまたは検証チェックを行うこともできる。
【００４３】
本発明を限られた数の実施形態に関して記載してきた。本発明については多数の変形例、変更例、および他の用途を考えられることは理解されたい。本発明の実施形態には、プロセッサまたはコントローラにより実行されると本明細書で開示した方法を実行するメモリ、ディスクドライブ、またはＵＳＢまたは他のフラッシュメモリなどのコンピュータ読み取り可能媒体が含まれてよい。本発明の実施形態は、さらに、開示した動作を行う他のシステムを含みうる。これらシステムには教示された部材が集積されてもよく、同じ目的を実行する代替的なコンポーネントが含まれてもよい。当業者であれば、本発明の真の精神に含まれるこのような変形例および変更例を添付の請求項が網羅することを理解しよう。
【図１】
0004901842.tif 000002
【図２】
0004901842.tif 000003
【図３】
0004901842.tif 000004
【図４】
0004901842.tif 000005