(57)【特許請求の範囲】
【請求項１】
仮想パーティション内のイベントに関するイベント通知を、外部ハンドラで受信する段階と、
前記外部ハンドラで前記イベント通知を受信したことに応じて、前記外部ハンドラが、前記仮想パーティション内のスレッド停止手段に、前記イベントを生じさせた前記仮想パーティション内のプロセスのスレッドを停止させる段階と、
前記仮想パーティション内の補助エージェントに、前記イベントに関するコンテキスト情報を特定するタスクを実行して、前記タスクに基づく結果を前記外部ハンドラに戻すよう命令する段階と、
前記補助エージェントが返した前記結果に基づいて前記仮想パーティション内でポリシーアクションを実行させる段階と
を備える方法。
【請求項２】
前記外部ハンドラは、仮想ホスト又は第２の仮想パーティションで動作する、請求項１に記載の方法。
【請求項３】
前記外部ハンドラは、仮想化プラットフォームの第１の仮想ゲストで動作し、
前記仮想パーティションは、前記仮想化プラットフォームの第２の仮想ゲストである、請求項１に記載の方法。
【請求項４】
前記イベント通知は、仮想化プラットフォームのハイパーバイザエクステンションから受信される、請求項１から３のいずれか一項に記載の方法。
【請求項５】
前記イベントを生じさせた前記スレッドを停止させた後に、前記仮想パーティション内の他のプロセスを再開する段階
をさらに備える、請求項１から４のいずれか一項に記載の方法。
【請求項６】
前記補助エージェントが返した前記結果に基づいて、前記イベントがセキュリティポリシーに違反しているかを判断する段階
をさらに備え、
前記ポリシーアクションを実行させる段階は、前記イベントがセキュリティポリシーに違反していると判断された場合に、前記仮想パーティション内で前記ポリシーアクションを実行させる請求項１から５のいずれか一項に記載の方法。
【請求項７】
前記補助エージェントは、前記タスクによって特定された前記コンテキスト情報を前記外部ハンドラに戻し、
前記イベントがセキュリティポリシーに違反しているかを判断する段階は、前記イベント通知によって通知された前記イベントと、前記補助エージェントから戻された前記コンテキスト情報とに基づいて、前記イベントが前記セキュリティポリシーに違反しているかを判断する請求項６に記載の方法。
【請求項８】
前記補助エージェントから前記外部ハンドラに戻される前記結果は、前記タスクによって特定された前記コンテキスト情報を含む、請求項１から６のいずれか一項に記載の方法。
【請求項９】
前記ポリシーアクションは、前記イベントを生じさせたプロセスを終了することを含む、請求項１から８のいずれか一項に記載の方法。
【請求項１０】
前記補助エージェントは、前記外部ハンドラからの通信を受信するためのスレッドを生成する、請求項１から９のいずれか１項に記載の方法。
【請求項１１】
前記タスクは、前記イベントを生じさせた前記プロセスの前記スレッドが停止している間に、前記イベントを生じさせた前記プロセスの前記スレッドとは異なる、前記仮想パーティション内のスレッドで実行される、請求項１から１０のいずれか１項に記載の方法。
【請求項１２】
前記タスクは、前記イベントを生じさせた前記プロセス内にロードされているモジュールを列挙する
請求項１から１１のいずれか一項に記載の方法。
【請求項１３】
前記仮想パーティション内のプロセス中に埋め込みコンポーネントを生成する段階
をさらに備え、
前記イベントを生じさせた前記仮想パーティション内のプロセスのスレッドを前記スレッド停止手段に停止させる段階は、前記スレッド停止手段に、前記イベントを生じさせた前記プロセスの前記スレッドを、当該プロセス内の前記埋め込みコンポーネントを介して停止させる段階を含む
請求項１から１２のいずれか一項に記載の方法。
【請求項１４】
請求項１から１３のいずれか一項に記載の方法をコンピュータに実行させるためのプログラム。
【請求項１５】
１つ又は複数のプロセッサとメモリとを備えるシステムであって、前記システムは、さらに、
仮想パーティション内のイベントに関するイベント通知を、外部ハンドラで受信する手段と、
前記仮想パーティション内のスレッド停止手段と、
前記外部ハンドラで前記イベント通知を受信したことに応じて、前記外部ハンドラによって、前記スレッド停止手段に、前記イベントを生じさせた前記仮想パーティション内のプロセスのスレッドを停止させる手段と、
前記仮想パーティション内の補助エージェントに、前記イベントに関するコンテキスト情報を特定するタスクを実行して、前記タスクに基づく結果を前記外部ハンドラに戻すよう命令する手段と、
前記補助エージェントが返した前記結果に基づいて前記仮想パーティション内でポリシーアクションを実行させる手段と
を備える、システム。
【請求項１６】
前記外部ハンドラは、仮想ホスト又は第２の仮想パーティションで動作する、請求項１５に記載のシステム。
【請求項１７】
前記外部ハンドラは、仮想化プラットフォームの第１の仮想ゲストで動作し、
前記仮想パーティションは、前記仮想化プラットフォームの第２の仮想ゲストである、請求項１５に記載のシステム。
【請求項１８】
前記イベント通知は、仮想化プラットフォームのハイパーバイザエクステンションから受信される、請求項１５から１７のいずれか一項に記載のシステム。
【請求項１９】
前記補助エージェントが返した前記結果に基づいて、前記イベントがセキュリティポリシーに違反しているかを判断する手段
をさらに備え、
前記ポリシーアクションを実行させる手段は、前記判断する手段によって前記イベントが前記セキュリティポリシーに違反していると判断された場合に、前記仮想パーティション内で前記ポリシーアクションを実行させる請求項１５から１８のいずれか一項に記載のシステム。
【請求項２０】
前記補助エージェントは、前記タスクによって特定された前記コンテキスト情報を前記外部ハンドラに戻し、
前記イベントがセキュリティポリシーに違反しているかを判断する手段は、前記イベント通知によって通知された前記イベントと、前記補助エージェントから戻された前記コンテキスト情報とに基づいて、前記イベントが前記セキュリティポリシーに違反しているかを判断する請求項１９に記載のシステム。
【請求項２１】
前記補助エージェントから前記外部ハンドラに戻される前記結果は、前記タスクによって特定された前記コンテキスト情報を含む、請求項１５から２０のいずれか一項に記載のシステム。
【請求項２２】
前記ポリシーアクションは、前記イベントを生じさせたプロセスを終了することを含む、請求項１５から２１のいずれか一項に記載のシステム。
【請求項２３】
前記補助エージェントは、前記外部ハンドラからの通信を受信するためのスレッドを生成する、請求項１５から２２のいずれか１項に記載のシステム。
【請求項２４】
前記タスクは、前記イベントを生じさせた前記プロセスの前記スレッドが停止している間に、前記イベントを生じさせた前記プロセスの前記スレッドとは異なる、前記仮想パーティション内のスレッドで実行される、請求項１５から２３のいずれか１項に記載のシステム。
【請求項２５】
前記タスクは、前記イベントを生じさせた前記プロセス内にロードされているモジュールを列挙する
請求項１５から２４のいずれか一項に記載のシステム。
【請求項２６】
仮想パーティション外のセキュリティハンドラ、前記仮想パーティション内の補助エージェント及び前記仮想パーティション内のスレッド停止手段に関する命令を実行する１つ又は複数のプロセッサ
を備え、
前記命令は、
前記仮想パーティション内のイベントに関するイベント通知を、前記セキュリティハンドラで受信することと、
前記セキュリティハンドラで前記イベント通知を受信したことに応じて、前記セキュリティハンドラが、前記仮想パーティション内の前記スレッド停止手段に、前記イベントを生じさせた前記仮想パーティション内のプロセスのスレッドを停止させることと、
前記補助エージェントに、前記イベントに関するコンテキスト情報を特定するタスクを実行して、前記タスクに基づく結果を前記セキュリティハンドラに戻すよう命令することと、
前記補助エージェントが返した前記結果に基づいて前記仮想パーティション内でポリシーアクションを実行させることと
を含む処理を前記１つ又は複数のプロセッサに実行させる、装置。
【請求項２７】
前記セキュリティハンドラは、仮想化プラットフォームの第１の仮想ゲストで動作し、
前記仮想パーティションは、前記仮想化プラットフォームの第２の仮想ゲストである、請求項２６に記載の装置。
【請求項２８】
前記イベント通知は、仮想化プラットフォームのハイパーバイザエクステンションから受信される、請求項２６または２７に記載の装置。
【請求項２９】
前記処理はさらに、
前記イベントを生じさせたプロセスのスレッドを停止させた後に、前記仮想パーティション内の他のプロセスを再開させることを含む、請求項２６から２８のいずれか一項に記載の装置。
【請求項３０】
前記処理は、
前記補助エージェントが返した前記結果に基づいて、前記イベントがセキュリティポリシーに違反しているかを判断すること
をさらに含み、
前記ポリシーアクションを実行させることは、前記イベントが前記セキュリティポリシーに違反していると判断された場合に、前記仮想パーティション内で前記ポリシーアクションを実行させることを含む
請求項２６から２９のいずれか一項に記載の装置。
【請求項３１】
前記補助エージェントは、前記タスクによって特定された前記コンテキスト情報を前記セキュリティハンドラに戻し、
前記イベントがセキュリティポリシーに違反しているかを判断する手段は、前記イベント通知によって通知された前記イベントと、前記補助エージェントから戻された前記コンテキスト情報とに基づいて、前記イベントが前記セキュリティポリシーに違反しているかを判断する請求項３０に記載の装置。
【請求項３２】
前記補助エージェントから前記セキュリティハンドラに戻される前記結果は、前記タスクによって特定された前記コンテキスト情報を含む、請求項２６から３１のいずれか一項に記載の装置。
【請求項３３】
前記ポリシーアクションは、前記イベントを生じさせた前記プロセスを終了することを含む、請求項２６から３２のいずれか一項に記載の装置。
【請求項３４】
前記補助エージェントは、前記セキュリティハンドラからの通信を受信するためのスレッドを生成する、請求項２６から３３のいずれか１項に記載の装置。
【請求項３５】
前記タスクは、前記イベントを生じさせた前記プロセスの前記スレッドが停止している間に、前記イベントを生じさせた前記プロセスの前記スレッドとは異なる、前記仮想パーティション内のスレッドで実行される、請求項２６から３４のいずれか１項に記載の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
本明細書は、概して、情報技術セキュリティに関しており、より詳しくは、仮想パーティションを監視するためのシステムおよび方法に関する。
【０００２】
情報技術において仮想技術が進化して、モバイルフォンに埋め込まれたシステムに対してクラウドベースの計算技術をはじめとする様々なアプリケーションが生成された。概して、仮想化によって、コンピューティングプラットフォームのハードウェアの特徴が覆い隠され、替わりに、他のプラットフォーム（完全なオペレーティングシステムを含む）をホストすることができる抽象化されたプラットフォームが提示される。よく利用される仮想化技術の１つに、ハイパーバイザ（仮想マシンマネージャとしても知られている）を利用する技術があり、これにより、ゲストソフトウェア（完全なオペレーティングシステムを含む）を抽象化されたホストプラットフォームと同時に実行可能となる。ハイパーバイザは、ゲストソフトウェアのためのシミュレーションされたコンピューティング環境（「仮想マシン」と称される場合もある）を提供することができる。したがって、複数の異種（disparate）のオペレーティングシステムを、１つのシャーシ上のハイパーバイザのもとで実行することができる。
【０００３】
しかし、仮想マシンは、配置される仮想マシンの数が増えるにつれて、悪意のある攻撃の標的になってしまう可能性が高い。仮想化は数多くの利点を提供するとはいえ、独特のセキュリティ面の課題がある。たとえば、外部のセキュリティソフトウェアが、仮想マシンのイベント（たとえばメモリの読み取り、書き込み、または実行アクセス等）を監視することができるとはいえ、これらイベントのコンテキストを理解するのは実質的に困難である場合がある。イベントのコンテキストを適切に理解しなくては、セキュリティ措置の内容は限られたものとなる。したがい、セキュアな仮想化プラットフォームを提供するためには問題が多い。
【図面の簡単な説明】
【０００４】
本開示の完全な理解、およびその特徴および利点の理解を促すべく、以下では、添付図面を参照しつつ記載が行われるが、図面において、同様の参照番号は同様の部材を示す。
【０００５】
【図１】本明細書により仮想化パーティションを監視することができる仮想化プラットフォームの一実施形態を示す簡略化されたブロック図である。
【０００６】
【図２】仮想化プラットフォームの１つの潜在的な実施形態におけるものであってよいさらなる詳細を示す簡略化されたブロック図である。
【０００７】
【図３Ａ】仮想化プラットフォームの一実施形態におけるものであってよい潜在的な処理を示す簡略化されたフローチャートである。
【図３Ｂ】仮想化プラットフォームの一実施形態におけるものであってよい潜在的な処理を示す簡略化されたフローチャートである。
【発明を実施するための形態】
【０００８】
一実施形態では、外部ハンドラで、仮想パーティションにおけるイベントに関するイベント通知を受信する段階を含む方法が提供される。イベントを生じさせた仮想パーティションのプロセスのスレッドを保留する（park）ことができる他のスレッドおよびプロセスは再開を許され、一方で、セキュリティハンドラが、潜在的な脅威がないかイベントを評価する。仮想パーティション内の補助エージェントに、仮想パーティション内のイベントコンテキストを集める、アセンブルする、等のタスクを実行するよう命令して、タスクに基づく結果を、外部のハンドラに戻すことができる。補助エージェントが返した結果に基づいて、ポリシーアクション（たとえば、補助エージェントに、イベントを生じさせたプロセスを終了させる等）をとってよい。
【０００９】
より具体的な実施形態では、外部のハンドラが、たとえば、第２の仮想パーティションで、仮想ホストで、またはハイパーバイザエクステンションとして動作してよい。仮想パーティションは、仮想化プラットフォームの仮想ゲスト（たとえば、仮想マシンのインスタンス）であってよく、イベント通知をハイパーバイザエクステンションからセキュリティハンドラに送信してよい。
【００１０】
図１は、本明細書により仮想パーティションを監視することができる仮想化プラットフォーム１００の一実施形態を示す簡略化されたブロック図である。仮想化プラットフォーム１００は、ハードウェア１０５、ハイパーバイザ１１０、およびハイパーバイザエクステンションモジュール１１５を含む。概してハードウェア１０５は、データを受け付けたり、データに論理演算を行ったり、データを格納したり、データを表示したりすることができるマシンまたは装置を表しており、これらに限定はされないがプロセッサ１０５ａおよびメモリ１０５ｂを含んでよい。仮想化プラットローム１００は、１を超える数の仮想パーティション（たとえば仮想ゲスト１２０およびセキュリティモニタ１２５等）を有してよい。一部の実施形態では、ハイパーバイザ１１０が、ハードウェア１０５で直接実行されるネーティブの、または、「ベアメタル（bare metal）」のハイパーバイザであってもよいが（図１に示す）、ハードウェア１０５上で実行されるホストソフトウェア（たとえば仮想ホスト）で実行されてもよい。セキュリティモニタ１２５は、登録されているコールバックによってハイパーバイザエクステンション１２０と通信し、且つ、たとえば、補助エージェント２１０と直接、ネットワーク通信によって通信してもよい（つまり、ハイパーバイザエクステンション１２０をバイパスする）。
【００１１】
概して、仮想パーティションは、内部で実行するソフトウェアを有しうる、仮想マシン、サンドボックス、コンテナ、その他の隔離された環境のインスタンスであってよい。ソフトウェアは、オペレーティングシステムとアプリケーションソフトウェアとを含んでよい。しかし、仮想パーティション内で実行されるソフトウェア全てにとって、仮想パーティションは、別の（distinct）物理マシンに見えてよい。
【００１２】
プラットフォーム１００等の仮想化プラットフォームの仮想パーティションを監視する原理を示すためには、これらプラットフォーム内に生じるアクティビティおよび通信を理解することが重要である。以下の基本的な情報は、本開示を適切に説明するための基礎としてみなしてほしい。これら情報は、純粋に説明の目的から提示されているのであって、本開示およびその潜在的な用途の広範な範囲を制限する意図で受け取られるべきではない。
【００１３】
プロセスは通常、常に変わるコンテキスト（または状態）で動作する（たとえば、プロセスレジスタ、制御レジスタ、メモリ、テーブル、またはリストのデータなど）。ここで利用される「プロセス」という用語は、概して、プロセス、アプリケーション、スレッド、タスク、命令セット、コードブロック、その他類似した動作ユニットのことを指す。そのコンテキストは、基礎となるハードウェアおよびオペレーティングシステムソフトウェアに基づくが、一般的には、プロセスに割り込みが入ったときに実行を再開するために必要となる最小限のデータセットが含まれる。しかし、割り込まれたイベントの環境または状況を理解するために有用と思われるいずれの情報のことであっても構わない。あるプロセスのコンテキストデータは、１つのオペレーティング環境内にあるが（例としては仮想パーティション内のプロセス）、そのプロセスのオペレーティング環境外から（たとえば同じ仮想化プラットフォーム上の別の仮想パーティションのプロセスから）のアクセスが難しい、他のプロセス（仮想パーティション内のプロセスを含む）にも簡単に適用することができる。
【００１４】
ハイパーバイザエクステンション、中央処理装置エクステンション、チップセットエクステンション等は、異なるコンテキストをもつプロセスの監視機能を向上させるために利用することができる。たとえば、ハイパーバイザエクステンションは、外部のコンテキスト（たとえばセキュリティモニタとして機能する第２の仮想ゲスト等）からの仮想ゲストの監視機能（たとえば、読み取り、書き込み、または実行アクセスについてのメモリの監視）を向上させることができる。
【００１５】
エクステンションセットはさらに、他のタイプのイベント（他のタイプのメモリアクセスまたはメモリ属性に対する変更（書き込み可能または実行可能な領域の作成等））の監視のサポートを行ってよい。特定のＣＰＵ命令またはメモリのタイプの実行（たとえばＣＰＵ「呼び出し」または「セット」命令）を監視することもできる。監視は、より対象を絞って行うこともできる（たとえば、特定のプロセスがトリガするイベントについて、特定の領域（１または複数）内のコードについて、特定のアドレスの実行について、特定のアドレスへの書き込みについて、ＣＰＵレジストリの変更について、またはＣＰＵリング状態の変更について、など）。
【００１６】
コンテキスト情報のアセンブルには、たとえば、割り込まれたイベントをトリガしたプロセス内にロードされている列挙型モジュール（enumerating module）（たとえばダイナミックリンクライブラリまたは「ＤＬＬ」）が含まれてよい。ゲストオペレーティングシステム（列挙型等）は、オペレーティングシステムのアプリケーションプログラミングインタフェース（ＡＰＩ）セットによりサポートされている可能性が高いので、重要ではない（trivial）ものであることもある。しかしゲストオペレーティングシステムの外部の列挙型モジュールは、モジュールを探すために、一連の内部のオペレーティングシステム構造を検索する（traipse）必要がある場合がある。
【００１７】
ゲストオペレーティングシステム内部の構造のテンプレートは、一部のコンテキストを提供すべく維持することができるが、ゲストオペレーティングシステムそれぞれのテンプレートのバージョンを維持することは非常に負担のかかる作業である。さらに、一部のシステム（たとえばＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標））では文書が入手できないこともあり、これにより負担がさらに増える。
【００１８】
エクステンションセット（たとえばハイパーバイザエクステンション）によりサポートされる監視は、登録されているハンドラまたはエージェントに対するコールバックを含んでよい。したがって、監視メモリ領域内でアクセスが検知される場合、イベントは、イベントコンテキストとともに登録されているコールバックをトリガすることができる。コールバックは、イベントが完了する前、または、完了した後に行われてよい。イベントを生じさせたプロセスは、コールバックを行っている間は停止されていてよく、または、コールバックがイベントの完了と同期されなくてもよい。コールバックに渡される情報は、イベントコンテキスト（イベントの対象物（たとえばアクセス中のメモリ領域）およびイベントをトリガした実行コンポーネント（たとえばプロセス）の実体（identity）（たとえばプロセス識別子、スレッド、またはコードの位置））を含んでよい。
【００１９】
概して、仮想パーティションの監視は、（１）内部イベント処理および（２）外部イベント処理という２つのカテゴリに分類される。内部イベント処理では、監視中のメモリにアクセスする、等の仮想パーティションにおけるイベントに関する通知を、同じ仮想パーティション内のハンドラに、通知をトリガしたイベントとして送信する。これに対して、仮想パーティションの外部監視は、監視中の監視パーティション外で実行されているハンドラに、監視中の仮想パーティションのイベントの通知を提供する。ハンドラは、仮想ホスト（存在する場合）内や、ハイパーバイザ内で実行されてもよいし、別の仮想パーティション内で実行されてもよい。現在のハイパーバイザエクステンションは、ハンドラが、監視中のメモリ外で、たとえばセキュリティモニタとして機能している別の仮想ゲスト内で実行されることを要求してよい。
【００２０】
しかし、ハンドラが、監視中の仮想パーティション外で実行される場合、割り込まれたイベントのコンテキストの理解によって、実質的に問題が生じる場合がある。イベントコンテキストへのアクセスなくして、割り込まれたイベントの正当性に関するセキュリティに関する決定を行うのは難しい場合がある。したがって、割り込まれたイベントの発信元のコンテキスト全体を提供しつつ、仮想化パーティションの監視を外部から行うことにより、多大な価値（significant value）を提供することができる。
【００２１】
イベントのコンテキスト情報をアセンブルする際の問題に加えて、仮想パーティション外で実行している、登録されたコールバックに、監視イベントを提供すると、さらなる問題が生じる場合がある。このイベント提供モードでは、たとえば、監視イベントをトリガした仮想パーティションの仮想プロセッサが、イベントを処理するコールバックハンドラを外部で実行している間に、完全に止まってしまう場合がある。利用可能な仮想プロセッサがこの他にある場合を除いて、仮想パーティションでは他のアクティビティが行われないことになる。他の仮想プロセッサがある場合であっても、これらも監視イベントをトリガする場合には、仮想パーティション全体が停止する可能性が依然としてある。したがって、このタイプの提供によって、ハイパーバイザベースの監視にパフォーマンス上のパネルティが課され、仮想ゲストが、外部のコールバックハンドラの補助（たとえばコンテキスト情報の発見など）を行うことができなくなる可能性がある。
【００２２】
外部イベントハンドラは、内部イベントハンドラに比して、いくつかの利点を提供することができると思われる。利点には、イベントハンドラおよび関連する決定部を、監視中の仮想パーティション内で実行されているマルウェアからの直接の攻撃から守ることができる点が含まれる。他の利点には、セキュリティエージェントを内部に配置せずに、仮想パーティションを保護することができる、エージェントなしのセキュリティを提供することができることが含まれる。したがって、妨害された処理の発信元のより完全なコンテキストを、ここで説明した外部イベントハンドラが典型的に有する数々の問題なしに提供することができる場合には、仮想パーティションの監視の外部からの提供の価値を顕著に高めることが可能となる。
【００２３】
ここに記載する実施形態では、仮想化プラットフォーム１００がこれら（およびその他）の欠点を克服しつつも、同時に、内部のオペレーティングシステムの構造の理解を必要とすることなく外部からの監視を可能とすることで、外部イベント処理の利点を維持することができる。たとえば仮想化プラットフォーム１００は、ハイパーバイザで実行中の監視中の仮想ゲスト等の、監視中の仮想パーティション内で妨害（intercepted）されたイベントの通知を受信することができる外部ハンドラで、ハイブリッド仮想パーティション監視を提供してよい。仮想パーティション内に配置された内部補助エージェントは、外部ハンドラの代わりに一定のタスクを実行することができ、一定のタスクには、妨害されたイベントに関するコンテキスト情報のアセンブル、および、その結果の外部ハンドラへの提供が含まれてよい。内部補助エージェントには、監視中のプロセス内に常駐しているコンポーネント、および、別個に実行可能なコンポーネントが含まれてよい。外部ハンドラは内部エージェントの情報およびアクティビティを利用して、ポリシーの決定（たとえば、セキュリティポリシーに違反している場合にイベントをブロックしたりイベントプロセスまたはスレッドを終了させたりする）を行ってよい。一部の実施形態では、外部ハンドラが、内部エージェントが一定のポリシーアクションを実行するよう、命令（direct）してよい。
【００２４】
仮想化プラットフォーム１００の一部の実施形態では、仮想パーティションの妨害されたイベントに関する処理を、イベントの評価中に保留、停止することで、仮想パーティションで、他のプロセスおよびスレッドを実行させてもよい。関連する処理の停止によって、仮想パーティションに対するパフォーマンスの影響が最小限に抑えられ、さらには、内部エージェントを仮想パーティション内で時刻して、外部ハンドラのタスクを実行させることもできる。さらには、これらのタスクは、妨害されたイベントを生じさせたスレッドとは異なるスレッドで実行されることで、相互運用およびデッドロックの問題を生じさせる危険性を回避することができる。
【００２５】
より具体的な実施形態では、外部セキュリティハンドラまたはエージェントが、拡張されたハイパーバイザに登録されて、仮想ゲストのイベントの通知を受け取ることができる。仮想ゲスト内で実行されている補助エージェントは、セキュリティハンドラからタスク要求を受信するために待ち状態のスレッドを作成することができる。補助エージェントはさらに、監視中のプロセス内にメモリ領域を作成して、セキュリティハンドラと通信するために利用されるデータおよびセキュリティハンドラが制御することができるコードを含む。イベントが妨害されると、セキュリティハンドラは、イベントをトリガするスレッドを保留状態にして（holding state）、補助エージェントが、監視中の仮想ゲスト内で実行するタスクを開始させることができる。
【００２６】
図２を参照すると、図２は、仮想化プラットフォームの１つの潜在的な実施形態におけるものであってよいさらなる詳細を示す簡略化されたブロック図である。図２は、ハイパーバイザエクステンションモジュール１１５、仮想ゲスト１２０、およびセキュリティモニタ１２５を含んでいる。セキュリティモニタ１２５は、ハイパーバイザ１１０内の仮想ゲストであってよい（特に、さらなる特権をもつ、信頼されているゲストであってよい）。仮想ゲスト１２０およびセキュリティモニタ１２５はそれぞれ、仮想プロセッサ２０５ａ‐ｂ、メモリ素子（memory element）２０５ａ‐ｂ、および、様々なソフトウェア素子（実施形態によっては別個のオペレーティングシステムを含む）を含んでよい。より詳しくは、仮想ゲスト１２０が、補助エージェント２１０、イベント保留モジュール２１５、および監視中のプロセス２２０を含んでよい。データ領域２２５は、イベント保留モジュール２１５と通信するために利用されてよい。補助エージェント２１０の埋め込まれたコンポーネント２３０も、監視中のプロセス２２０に常駐していてよい。セキュリティモニタ１２５は、セキュリティハンドラ２３５および検知モジュール２４０を有してよい。ハイパーバイザエクステンション１１５は、監視中のプロセス２２０に対して監視および制御を実行して、イベントが通知をトリガした場合には、セキュリティモニタ１２５にイベントのコールバックを提供してよい。ゲスト内通信メカニズムによって、補助エージェント２１０とセキュリティハンドラ２３５との間で直接通信が実行されてよい。
【００２７】
別の実施形態では、セキュリティモニタ１２５（ハンドラ２３５および検知モジュール２４０を含む）が、ハイパーバイザ１１０内に、または、ハイパーバイザのエクステンションとして、常駐していてよい。また別の実施形態では、たとえばハイパーバイザ１１０が埋め込みハイパーバイザではない場合に、セキュリティモニタ１２５がホストオペレーティングシステムの実行環境内で動作してよい。
【００２８】
仮想化プラットフォーム１００に関する内部構造に関し、ハードウェア１０５が、ここで概要を示す処理で利用される情報を格納するためのメモリ素子（図１に示されている）を含んでよい。加えて、仮想化プラットフォーム１００は、ここで記載するアクティビティを実行するためのソフトウェアまたはアルゴリズムを実行することができるプロセッサと１以上の仮想プロセッサとを含んでよい。これらデバイスはさらに、適宜、および、必要に応じて、任意の適切なメモリ素子（ＲＡＭ、ＲＯＭ，ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＡＳＩＣ等）、ソフトウェア、ハードウェア、または任意の他の適切なコンポーネント、デバイス、素子、またはオブジェクトに情報を保持することができる。ここで説明するメモリ素子はいずれも、広義の「メモリ素子」の範囲内に含まれるものとする。ハイパーバイザ１１０、ハイパーバイザエクステンション１１５、仮想ゲスト１２０、またはセキュリティモニタ２３５が追跡または送信する情報は、任意のデータベース、レジスタ、制御リスト、または格納構造（すべて、任意の適切なタイムフレームにおいて参照することができる）内に提供されてよい。これら格納の選択肢はいずれも、ここで利用される広義の「メモリ素子」の範囲内に含まれるものとする。同様に、ここに記載する潜在的な処理部材、モジュール、およびマシンも、広義の「プロセッサ」の範囲内に含まれるものとする。
【００２９】
一定の実装例では、ここで概略を示した機能は、１以上の有形の非一時的媒体（たとえば、特定用途向け回路（ＡＳＩＣ）、デジタル信号プロセッサ（ＤＳＰ）命令、プロセッサその他の類似したマシンが実行するソフトウェア（オブジェクトコードおよびソースコードを潜在的に含む））、にエンコードされた論理により実装されてよい。これらインスタンスの一部においては、メモリ素子（図１に示す）が、ここで記載する処理のために利用されるデータを格納することができる。これには、ここで記載されるアクティビティを実行するために実行されるソフトウェア、論理、コード、または、プロセッサ命令を格納することができるメモリ素子が含まれる。プロセッサは、ここで詳述する処理を達成するためのデータに関する任意のタイプの命令を実行することができる。一例では、プロセッサ（図１に示す）または仮想プロセッサ（図２に示す）が、素子または物品（たとえばデータ）をある状態または物（thing）から別の状態または物に変換することができる。別の例では、ここで概略を示すアクティビティが、固定論理またはプログラム可能な論理（たとえばプロセッサが実行するソフトウェア／コンピュータ命令）およびここで特定される素子が、デジタル論理、ソフトウェア、コード、電子命令、またはこれらの適切な組み合わせを含む、一定のタイプのプログラム可能なプロセッサ、プログラム可能なデジタル論理（たとえば、フィールドプログラム可能なゲートアレイ（ＦＰＧＡ）、ＥＰＲＯＭ，ＥＥＰＲＯＭ、またはＡＳＩＣ）であってよい。
【００３０】
図３Ａおよび図３Ｂは、仮想化プラットフォーム１００の一実施形態におけるものであってよい潜在的な処理を示す簡略化されたフローチャートである。より詳しくは、図３Ａは、仮想化プラットフォーム１００を構成するために利用可能な予備処理を示しており、図３Ｂは、実行される可能性のある、イベントの評価に関する処理、および、イベントに実行する処理を示している。
【００３１】
図３Ａを参照すると、セキュリティモニタ１２５が、ハイパーバイザエクステンション１１５に登録して（３０５）、特定のイベントのためのイベント通知（たとえばコールバック）を受信してよい。加えて、補助エージェント２１０が、３１０で、ハンドラからのタスク要求（たとえば、ハンドラ２３５からのネットワーク通信による要求）を待つスレッドを生成してよい。イベント保留モジュール２１５およびデータ領域２２５も３１５および３２０で作成されてよい。たとえば、イベント保留モジュール２１５は、オペレーティングシステムがサポートする信号メカニズムを待つことができる。
【００３２】
埋め込みコンポーネント（たとえば埋め込みコンポーネント２３０）も、３２５で、各監視中のプロセス内（各監視中のプロセスのアドレススペース内に常駐しているメモリ領域を含む）に作成されてよい。たとえば、実行中のプロセスに対して実行可能コードを挿入するために、コードインジェクションを用いてよい（code injection）が、これには、プロセスに実行可能なモジュール（たとえばＤＬＬ）をロードすることが含まれてよい。通常は、インジェクションの第１の段階として、インジェクションされたコードが配置および実行されるメモリ領域を作成するプロセスに対して十分なアクセスを確保する。アクセストークンは、実行中のプロセスに対するアクセスを得るために取得される場合が多い。アクセストークンには、プロセス内にメモリを割り当てる、メモリに書き込む、および、メモリの属性を変更するための（たとえば実行を可能とする）特権が含まれてよい。プロセスへのアクセスが得られると、そのプロセス内にメモリが作成されてよい。コードがそのメモリに書き込まれ、メモリ内からの実行を可能とするように属性がセットされる。他の実施形態では、オペレーティングシステムが、プロセスがモジュールを各インスタンスにロードすべきであると特定するためのメカニズムを提供してよい。たとえば、Ｗｉｎｄｏｗｓ（登録商標）のオペレーティングシステムにおける「rundll」レジストリキーは、プロセスに、キーにリストされているすべてのモジュールをロードさせる。
【００３３】
次に、インジェクションされたコードが実行されてよい。モジュールがプロセス開始時にロードされた場合には、インジェクションされたコードは、モジュールのロード時に実行されているはずである。ＤＬＬは、Ｗｉｎｄｏｗｓ（登録商標）の自身の「dllmain」エクスポート内でコードを実行することができる。この代わりに、インジェクションされたコードが、インジェクションされたメモリ領域でコードを実行するためにプロセス内に新たなスレッドを作成することで、開始されてもよい。インジェクションされたコードに実行をリダイレクトするために、コードのフックが利用されてもよい。コードのフックによって、プロセス内のコードの実行を、インジェクションされたメモリ領域内のコードに分岐することができる。たとえば、インタフェースの開始時の命令が、インジェクションされたコード内に実行を転送することができる「ジャンプ」命令に置き換えられてよい。コードのインジェクションおよびコードのフックを利用することで、さもなくば可能とならないプロセスの処理の監視機能を向上させることができる。
【００３４】
図３Ｂを参照すると、プロセス（たとえばプロセス２２０）が、たとえば、セキュリティモニタ１２５がコールバックを受信するよう登録されているメモリ領域に対してアクセスしようと試みることで、監視中のイベントおよびハイパーバイザエクステンション１１５からのコールバックをトリガしてよい（３３０）。セキュリティハンドラ２３５は、３３５でイベントデータとともにコールバックを受信して、ハイパーバイザエクステンション１１５を利用して、仮想プロセッサ２０５ａを、イベント保留モジュール２１５を実行するようダイレクトしてよい（３４０）。コールバックが完了して、仮想ゲスト１２０が実行状態に戻り、プロセス２２０のみが保留されるようにする。ビジーループを利用しないので、システムの残りの部分は通常実行を続けることができ、補助エージェント２１０を実行することができる。
【００３５】
たとえばイベントがデータ領域２２５で特定され、イベント保留モジュール２１５が、埋め込みコンポーネント２３０を介して通信したタスクを実行してよい。たとえばタスクには、命令ポインタまたはスタックを一定の値にセットして、制御転送を実行することが含まれてよい。タスクはさらに、任意の他のレジスタをある値にセットする（たとえばＡＰＩの戻り値を設定する）ことを含んでよい。したがって、補助エージェント２１０は、コールバックをトリガしたスレッドまたはプロセスを保留して、スレッドに、仮想ゲスト１２０（たとえばゲストオペレーティングシステムが提供したＡＰＩ）内で利用可能なメカニズムの利用により、セキュリティハンドラ２３５の代わりにタスクを実行させることができ、これによって、顕著に安定性および互換性を向上させることができる。仮想ゲストは、３４５で、他のプロセス、スレッドの実行を再開してよい。
【００３６】
セキュリティハンドラ２３５は、補助エージェント２１０に、（たとえばゲスト内通信メカニズムを利用して）タスク要求を送信してよい（３５０）。補助エージェント２１０（または、補助エージェント２１０内のスレッド）は、要求を受信して、要求からデータペイロードを取得してよい。データペイロードは、実行するタスクの記述を含んでよい（たとえばプロセッサ内にロードされたすべてのモジュール（たとえばＤＬＬ）を列挙する等）。したがってセキュリティハンドラ２３５は、たとえば、３５０で、イベントのためのコンテキストデータを要求してよい。コンテキストデータの例には、イベントをトリガしたプロセスに関する情報、イベントをトリガしたアクションのタイプ（たとえば特定のメモリ領域に対する書き込みアクセス）、アクセスされた特定のメモリ領域を保持しているプロセス、またはファイル処理に関する詳細（たとえばファイルのサイズ、名称、修正日など）が含まれてよい。補助エージェント２１０は、記述されているタスクを実行して、結果をセキュリティハンドラ２３５に戻すことができる（たとえば、プロセス２２０のためのコンテキストデータを戻す）（３５５）。
【００３７】
コンテキストデータおよびイベントデータに基づいて、検知モジュール２４０は、イベントが悪意のものか、またはセキュリティポリシーに違反しているかを判断してよい。セキュリティポリシーの違反がない場合、セキュリティハンドラ２３５は、ハイパーバイザエクステンション１１５を利用して、３６０で、たとえば仮想プロセッサ２０５ａの命令ポインタをリセットして、トリガイベントが生じた時点から実行を再開するよう、プロセス２２０を続行させる。命令ポインタのリセットによって、プロセス２２０が通常のスレッドで処理されていれば遭遇したであろう問題を最小限に抑えることができるようになる。この代わりに、データ領域２２５が、トリガイベントが生じた時点に実行を戻す値に命令ポインタおよびスタックポインタを戻すコマンドを設定されてもよい。
【００３８】
しかし、検知モジュール２４０が、３５５でセキュリティポリシー違反を特定した場合には、セキュリティハンドラ２３５は、補助エージェント２１０に命令して、アクション（たとえば、プロセス２２０がさらなる実行を行わないようブロックする）を実行させる（３６５）。アクションは、補助エージェント２１０が実行してもよいし、埋め込まれたコンポーネント２３０により実行されてもよい。たとえばトリガ処理のブロックは、埋め込みコンポーネント２３０により実行されると最良であり、監視中のプロセス２２０の終了は、（監視プロセス２２０の外部で実行されている）補助エージェント２１０により実行されると最良であると思われる。イベント保留モジュール２１５は、アクションのタイプに応じて、アクションを実行することもできる。アクション（たとえばプロセスの終了）が非同期である場合には、セキュリティハンドラ２３５は、これを補助エージェント２１０に伝え、トリガイベントの処理を完了させる。アクションが同期性である場合には、アクションを補助エージェント２１０に信号を送るよう、データ領域２５５で示してから、監視中のイベントの処理を完了させてよい。たとえば３７０で、違反をログに記録したり、管理者に電子メールで報告したりすることができる。
【００３９】
添付図面の段階は、仮想化プラットフォーム１００によって、またはこの内部で実行可能なシナリオおよびパターンの一部のみを示していることを理解されたい。ここに記載する教示の範囲内から逸脱しなければ、これら段階の一部は、適宜削除することが可能であり、または、これら段階を修正、変更したりすることも可能である。加えて、これらの処理の多くが、１以上の更なる処理と同時に、または並行して実行されるものとして記載された。しかし、これら処理のタイミングは大幅に変更してもよい。前述した処理フローは、例示および説明の便宜上、提供されたものである。仮想化プラットフォーム１００にはかなり柔軟性を与えることが可能であり、ここに提供する教示の範囲を逸脱しなければ、任意の適切な配置、時間的経緯、構成、およびタイミングメカニズムを提供してもよい。
【００４０】
さらに、ここに記載する原理は、コールバックまたはその他のイベント通知をゲストまたは専用コンテナから、異なるコンテキスト（たとえば、文書制御、監査、犯罪科学（forensic）、パフォーマンス監視等）をもつハンドラに提供することができる他の監視システムに適用することもできる。
【００４１】
当業者には数多くの他の変形例、代替例、変更例等が自明であり、本開示は、添付請求項の範囲に含まれるすべてのこれら変形例、代替例、変更例等を含むことを意図している。米国特許商標庁（ＵＳＰＴＯ）、および、本願に基づいて発行される特許を読む読者たちが、添付されている請求項を理解できるように、出願人は、（ａ）添付請求項のいずれもが、「ための手段」「ための段階」といった言い回しが請求項で明示されている場合を除き、米国特許法１１２条のパラグラフ６に該当しないと理解されることを望み、且つ、（ｂ）添付請求項には反映されていない、明細書のいずれの箇所におけるいかなる他の方法で本開示を制限することがないよう望む。
［項目１］
仮想パーティションのイベントに関するイベント通知を、外部ハンドラで受信する段階と、
前記仮想パーティション内の補助エージェントに、タスクを実行して、前記タスクに基づく結果を前記外部ハンドラに戻すよう命令する段階と、
前記補助エージェントが返した前記結果に基づいてポリシーアクションをとる段階と
を備える方法。
［項目２］
前記外部ハンドラは、第２の仮想パーティションで動作する、項目１に記載の方法。
［項目３］
前記外部ハンドラは、仮想ホストで動作する、項目１に記載の方法。
［項目４］
前記外部ハンドラは、仮想化プラットフォームの第１の仮想ゲストで動作し、
前記仮想パーティションは、前記仮想化プラットフォームの第２の仮想ゲストである、項目１に記載の方法。
［項目５］
前記イベント通知は、仮想化プラットフォームのハイパーバイザエクステンションから受信される、項目１から４のいずれか一項に記載の方法。
［項目６］
前記イベントを生じさせた前記仮想パーティションのプロセスのスレッドを保留する段階と、
前記イベントを生じさせた前記スレッドを保留した後に、前記仮想パーティションの他のプロセスを再開する段階とをさらに備える、項目１から５のいずれか一項に記載の方法。
［項目７］
前記補助エージェントから戻された前記結果は、前記イベントに関するイベントコンテキストを含む、項目１から６のいずれか一項に記載の方法。
［項目８］
前記ポリシーアクションは、前記イベントを生じさせたプロセスを終了することを含む、項目１から７のいずれか一項に記載の方法。
［項目９］
前記ポリシーアクションは、前記イベントを生じさせたプロセスを終了するように、前記補助エージェントに命令することを含む、項目１から８のいずれか一項に記載の方法。
［項目１０］
前記外部ハンドラは、仮想化プラットフォームの第１の仮想ゲストで動作して、
前記仮想パーティションは、前記仮想化プラットフォームの第２の仮想ゲストであり、
前記イベント通知は、前記仮想化プラットフォームのハイパーバイザエクステンションから受信され、
前記仮想パーティションの他のプロセスは、前記イベントを生じさせたプロセスのスレッドを保留した後に再開され、
前記補助エージェントからの前記結果は、前記イベントに関するイベントコンテキストを含み、
前記ポリシーアクションは、前記イベントを生じさせた前記プロセスを終了するように、前記補助エージェントに命令する、項目１に記載の方法。
［項目１１］
１以上のプロセッサとメモリとを備えるシステムであって、さらに、
仮想パーティションのイベントに関するイベント通知を、外部ハンドラで受信する手段と、
前記仮想パーティション内の補助エージェントに、タスクを実行して、前記タスクに基づく結果を前記外部ハンドラに戻すよう命令する手段と、
前記補助エージェントが返した前記結果に基づいてポリシーアクションをとる手段と
を備える、システム。
［項目１２］
前記外部ハンドラは、第２の仮想パーティションで動作する、項目１１に記載のシステム。
［項目１３］
前記外部ハンドラは、仮想ホストで動作する、項目１１に記載のシステム。
［項目１４］
前記外部ハンドラは、仮想化プラットフォームの第１の仮想ゲストで動作し、
前記仮想パーティションは、前記仮想化プラットフォームの第２の仮想ゲストである、項目１１に記載のシステム。
［項目１５］
前記イベント通知は、仮想化プラットフォームのハイパーバイザエクステンションから受信される、項目１１から１４のいずれか一項に記載のシステム。
［項目１６］
前記イベントを生じさせた前記仮想パーティションのプロセスのスレッドを保留する手段をさらに備える、項目１１から１５のいずれか一項に記載のシステム。
［項目１７］
前記補助エージェントから戻された前記結果は、前記イベントに関するイベントコンテキストを含む、項目１１から１６のいずれか一項に記載のシステム。
［項目１８］
前記ポリシーアクションは、前記イベントを生じさせたプロセスを終了することを含む、項目１１から１７のいずれか一項に記載のシステム。
［項目１９］
前記ポリシーアクションは、前記イベントを生じさせたプロセスを終了するように、前記補助エージェントに命令することを含む、項目１１から１８のいずれか一項に記載のシステム。
［項目２０］
仮想パーティション内の補助エージェントと、
前記仮想パーティション外のセキュリティハンドラと、
前記セキュリティハンドラと前記補助エージェントとに関する命令を実行する１以上のプロセッサと
を備える装置であって、
前記命令は、
前記仮想パーティションのイベントに関するイベント通知を、前記セキュリティハンドラで受信することと、
前記イベントを生じさせた前記仮想パーティションのプロセスのスレッドを保留することと、
前記補助エージェントに、前記仮想パーティション内でタスクを実行して、前記タスクに基づく結果を前記セキュリティハンドラに戻すよう命令することと、
前記補助エージェントが返した前記結果に基づいてポリシーアクションをとることと
を含む処理を実行する、装置。
［項目２１］
前記セキュリティハンドラは、仮想化プラットフォームの第１の仮想ゲストで動作し、
前記仮想パーティションは、前記仮想化プラットフォームの第２の仮想ゲストである、項目２０に記載の装置。
［項目２２］
前記イベント通知は、仮想化プラットフォームのハイパーバイザエクステンションから受信される、項目２０または２１に記載の装置。
［項目２３］
前記処理はさらに、
前記イベントを生じさせたプロセスのスレッドを保留した後に、前記仮想パーティションの他のプロセスを再開することを含む、項目２０から２２のいずれか一項に記載の装置。
［項目２４］
前記補助エージェントから戻された前記結果は、前記イベントに関するイベントコンテキストを含む、項目２０から２３のいずれか一項に記載の装置。
［項目２５］
前記ポリシーアクションは、前記イベントを生じさせた前記プロセスを終了することを含む、項目２０から２４のいずれか一項に記載の装置。
［項目２６］
前記ポリシーアクションは、前記イベントを生じさせた前記プロセスを終了するように、前記補助エージェントに命令することを含む、項目２０から２５のいずれか一項に記載の装置。
【図１】
0005861228.tif 000002
【図２】
0005861228.tif 000003
【図３Ａ】
0005861228.tif 000004
【図３Ｂ】
0005861228.tif 000005