(57)【要約】      （修正有）【課題】悪意のあるファイルを特定するためのシステムおよび方法を提供する。【解決手段】仮想マシンの（仮想）プロセッサ内のゲストプロセスおよびスレッドの実行を引き起こす仮想マシン内のファイルを開く。第１のスレッドの実行中に、仮想マシンのゲスト物理メモリページの変更を伴うイベントを特定する３１０。ログの分析に基づいて変更されたゲスト物理メモリページを決定し３２０、変更されたゲスト物理メモリページへの制御の転送がいつ発生したかを識別する３３０。分析モジュールは、セキュリティアプリケーションによる分析のための結果ログを生成する３４０。前記結果ログは、変更されたゲスト物理メモリページ内のスレッドの実行中に発生するイベントを示す情報と、スレッドが実行されている仮想プロセッサのコンテキストデータとを含む。その後、分析モジュールは、有害性のためのファイルの分析を実行する３５０。【選択図】図３
2019061636.tif 000002
【特許請求の範囲】
【請求項１】
ファイルのウイルス対策スキャンを実行するためのログを生成するための方法であって、
仮想マシン内でファイルを開くステップであって、仮想マシンの仮想プロセッサ内に第１のスレッドを有するゲストプロセスの実行を含むステップと、
前記第１のスレッドの実行中に、少なくとも１つのゲスト物理メモリページの変更を含む第１のイベントを特定するステップと、
前記ログの分析に基づいて、少なくとも１つの変更されたゲスト物理メモリページを決定するステップと、
少なくとも１つのゲスト物理メモリページへの制御の転送を特定するステップと、
前記ファイルのオープンに関連して前記ログを生成するステップとを備え、
前記ログは、前記第１のイベントを示す情報と、前記第１のスレッドが実行されている仮想プロセッサのコンテキストデータとを含む、方法。
【請求項２】
請求項１に記載の方法であって、
生成された前記ログの分析に基づいて、仮想マシンで開かれたファイルが有害であると判断するステップをさらに含む、方法。
【請求項３】
請求項１に記載の方法であって、
前記少なくとも１つのゲスト物理メモリページへの制御の転送を特定するステップは、さらに、
第２のスレッドが、変更されたゲスト物理メモリページに含まれる仮想アドレスからコードを実行していることを検出するステップを含み、
前記第２のスレッドは、メモリページを変更したスレッドと同じプロセスから起動される、方法。
【請求項４】
請求項１に記載の方法であって、
前記少なくとも１つのゲスト物理メモリページへの制御の転送を特定するステップは、さらに、
第２のスレッドが、変更されたゲスト物理メモリページからコードを実行していることを検出するステップを含み、
前記第２のスレッドは、メモリページを変更したスレッドと異なるプロセスから起動される、方法。
【請求項５】
請求項１に記載の方法であって、
前記第１のスレッドの実行中に、前記少なくとも１つのゲスト物理メモリページの変更を含む前記第１のイベントを特定するステップは、
ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）関数の第１スレッドによるシステムコールを検出するステップを含む、方法。
【請求項６】
請求項１に記載の方法であって、
前記ログの分析に基づいて、前記少なくとも１つの変更されたゲスト物理メモリページを決定するステップは、さらに、
変更されたゲスト物理メモリページの識別子を決定する、方法。
【請求項７】
請求項１に記載の方法であって、さらに、
前記第１のスレッドの実行中に少なくとも１つのゲスト物理メモリページを変更しない第２のイベントを検出することに応答して、第２のイベントをログに記録することを控えるステップを含む、方法。
【請求項８】
ファイルのウイルス対策スキャンを実行するためのログを生成するためのシステムであって、
仮想マシンのゲスト物理メモリページを格納するように構成されたメモリデバイスと、
プロセッサとを備え、
前記プロセッサは、
仮想マシン内でファイルを開くステップであって、仮想マシンの仮想プロセッサ内に第１のスレッドを有するゲストプロセスの実行を含むステップと、
前記第１のスレッドの実行中に、少なくとも１つのゲスト物理メモリページの変更を含む第１のイベントを特定するステップと、
前記ログの分析に基づいて、少なくとも１つの変更されたゲスト物理メモリページを決定するステップと、
少なくとも１つのゲスト物理メモリページへの制御の転送を特定するステップと、
前記ファイルのオープンに関連して前記ログを生成するステップとを実行するように構成され、
前記ログは、前記第１のイベントを示す情報と、前記第１のスレッドが実行されている仮想プロセッサのコンテキストデータとを含む、システム。
【請求項９】
請求項８に記載のシステムであって、
前記プロセッサは、さらに、生成された前記ログの分析に基づいて、仮想マシンで開かれたファイルが有害であると判断するステップを実行するように構成される、システム。
【請求項１０】
請求項８に記載のシステムであって、
前記少なくとも１つのゲスト物理メモリページへの制御の転送を特定するステップを実行するように構成される前記プロセッサは、さらに、
第２のスレッドが、変更されたゲスト物理メモリページに含まれる仮想アドレスからコードを実行していることを検出するステップを実行するように構成され、
前記第２のスレッドは、メモリページを変更したスレッドと同じプロセスから起動される、システム。
【請求項１１】
請求項８に記載のシステムであって、
前記少なくとも１つのゲスト物理メモリページへの制御の転送を特定するステップを実行するように構成される前記プロセッサは、さらに、
第２のスレッドが、変更されたゲスト物理メモリページからコードを実行していることを検出するステップを実行するように構成され、
前記第２のスレッドは、メモリページを変更したスレッドと異なるプロセスから起動される、システム。
【請求項１２】
請求項８に記載のシステムであって、
前記第１のスレッドの実行中に、前記少なくとも１つのゲスト物理メモリページの変更を含む前記第１のイベントを特定するステップは、
アプリケーションプログラミングインタフェース（ＡＰＩ）関数の第１スレッドによるシステムコールを検出するステップを含む、システム。
【請求項１３】
請求項８に記載のシステムであって、
前記ログの分析に基づいて、前記少なくとも１つの変更されたゲスト物理メモリページを決定するステップは、さらに、
変更されたゲスト物理メモリページの識別子を決定する、システム。
【請求項１４】
請求項８に記載のシステムであって、
前記プロセッサは、さらに、
前記第１のスレッドの実行中に少なくとも１つのゲスト物理メモリページを変更しない第２のイベントを検出することに応答して、第２のイベントをログに記録することを控えるステップを実行するように構成される、システム。
【請求項１５】
ファイルのウイルス対策スキャンを実行するためのログを生成するためのコンピュータが実行可能な命令を含む非一時的なコンピュータ可読媒体であって、
仮想マシン内でファイルを開くステップであって、仮想マシンの仮想プロセッサ内に第１のスレッドを有するゲストプロセスの実行を含むステップと、
前記第１のスレッドの実行中に、少なくとも１つのゲスト物理メモリページの変更を含む第１のイベントを特定するステップと、
前記ログの分析に基づいて、少なくとも１つの変更されたゲスト物理メモリページを決定するステップと、
少なくとも１つのゲスト物理メモリページへの制御の転送を特定するステップと、
前記ファイルのオープンに関連して前記ログを生成するステップとを有する命令を含み、
前記ログは、前記第１のイベントを示す情報と、前記第１のスレッドが実行されている仮想プロセッサのコンテキストデータとを含む、コンピュータ可読媒体。
【請求項１６】
請求項１５に記載のコンピュータ可読媒体であって、
生成された前記ログの分析に基づいて、仮想マシンで開かれたファイルが有害であると判断するステップを有する命令をさらに含む、コンピュータ可読媒体。
【請求項１７】
請求項１５に記載のコンピュータ可読媒体であって、
前記少なくとも１つのゲスト物理メモリページへの制御の転送を特定するステップを有する命令は、さらに、
第２のスレッドが、変更されたゲスト物理メモリページに含まれる仮想アドレスからコードを実行していることを検出するステップを有する命令を含み、
前記第２のスレッドは、メモリページを変更したスレッドと同じプロセスから起動される、コンピュータ可読媒体。
【請求項１８】
請求項１５に記載のコンピュータ可読媒体であって、
前記少なくとも１つのゲスト物理メモリページへの制御の転送を特定するステップを有する命令は、さらに、
第２のスレッドが、変更されたゲスト物理メモリページからコードを実行していることを検出するステップを有する命令を含み、
前記第２のスレッドは、メモリページを変更したスレッドと異なるプロセスから起動される、コンピュータ可読媒体。
【請求項１９】
請求項１５に記載のコンピュータ可読媒体であって、
前記第１のスレッドの実行中に、前記少なくとも１つのゲスト物理メモリページの変更を含む前記第１のイベントを特定するステップを有する命令は、
アプリケーションプログラミングインタフェース（ＡＰＩ）関数の第１スレッドによるシステムコールを検出するステップを有する、コンピュータ可読媒体。
【請求項２０】
請求項１５に記載のコンピュータ可読媒体であって、
前記ログの分析に基づいて、前記少なくとも１つの変更されたゲスト物理メモリページを決定するステップを有する命令は、さらに、
変更されたゲスト物理メモリページの識別子を決定するステップを有する、コンピュータ可読媒体。
【請求項２１】
請求項１５に記載のコンピュータ可読媒体であって、さらに、
前記第１のスレッドの実行中に少なくとも１つのゲスト物理メモリページを変更しない第２のイベントを検出することに応答して、第２のイベントをログに記録することを控えるステップを有する命令を含む、コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、悪意のあるファイルを識別する解決方法、より詳細には、ファイルのウイルス対策スキャンを実施するためのログを形成するシステムおよび方法に関する。
【背景技術】
【０００２】
近年、悪質なソフトウェアに感染したユーザーのデータと電子デバイスのユーザーとの両方に被害を及ぼすことを目的とした、悪意のあるソフトウェア（コンピュータウイルス、トロイの木馬、インターネットワームなど）が増加している。この被害は、ユーザーファイルの損傷または除去、仮想通貨の「採掘」のためのユーザーのコンピューティングデバイスのリソースの不正利用、ユーザーの電子機密データ（例えば、書状、画像、ログイン情報、パスワード、銀行カード情報）の盗難、および他の動作によって引き起こされる可能性がある。さらに、悪意のあるソフトウェアは、絶えず変化している。これは、セキュリティアプリケーションに対する新しい攻撃および防御メカニズムを用いるからである。悪意のあるコードの難読化（元のテキストまたは実行可能プログラムコードをその機能は保持しつつ、分析、動作アルゴリズムの理解、または、逆コンパイル中の修正ができない形にすること）やエミュレーションの相殺メカニズムの使用（たとえば、悪意あるソフトウェアはエミュレーションでいつ実行されたかを認識する機能を備え、その悪意ある行為は明示しない）など、さまざまなメカニズムが使用されている。
【０００３】
さらに、悪意のあるソフトウェアは、しばしば、その悪意のある挙動をすぐには示さない。そのかわりに、たくさんのＡＰＩ機能の呼び出し（たとえば、数百万回）や、多数のサイクル（たとえば、数十億回の繰り返し）の実行をし、実行を開始してから一定の時間が経過すると即座にその実行を停止する（たとえば、１時間が経過すると当該「スリープ機能」が作動する）。今日のユーザーのコンピューティングデバイスは、高性能およびマルチコアプロセッサ（マルチプロセッサシステムもある）を有しているので、ユーザーは、コアのうちの１つの負荷状態には気付かないか、またはコアのうちの１つの負荷状態を重視することはできない。さらに、ユーザーは、通常、電源をオンにして１時間以上経過してからデバイスを使用する。したがって、悪意のあるソフトウェアは、起動された場合にすぐにその挙動を示す必要はない。
【０００４】
このようなアプローチに対処するために、セキュリティアプリケーション（ウイルス対策アプリケーションなど）のメーカーは、ファイルの安全な実行のために独立した環境の形で仮想マシンを使用する技術を採用している。多くの場合、そのような仮想マシンはサンドボックスとして知られている。そのような仮想マシンを制御するハイパーバイザーは、そこで実行されるアプリケーションによって呼び出される機能を中断するためのメカニズムを含む。
【０００５】
セキュリティアプリケーションは、例えば署名および／またはヒューリスティック分析などの技術のような、悪意のあるソフトウェアを検出するための様々な方法を採用することに留意されたい。分析プロセスでファイルの有害性がないとは判断されなかった場合（たとえば、信頼できるソフトウェアメーカーのデジタル署名がない場合）、セキュリティアプリケーションは、前述の仮想マシンでの動作を分析するためにそのファイルを引き渡す。転送されたファイルは仮想マシン内で実行され、さまざまな機能の呼び出しによって実行されるそのアクションおよびイベントは、その実行中に中断され、中断されたイベントおよびアクションはログに保存され、その後セキュリティアプリケーションまたはコンピュータセキュリティの専門家によって分析される。
【０００６】
したがって、イベントおよびアクションをインターセプトおよび集約するための既知のシステムは、２つのステップで動作する。第１のステップでは情報が集められ、第２番のステップでは情報が分析される。
【０００７】
既知のシステムおよび方法の欠点の１つは、ファイルの実行プロセス中に実行プロセスに影響を与えないことである。たとえば、分析中のファイルから起動されたプロセス（または、分析中のファイルを開いたアプリケーションから起動されたプロセス）は、１時間実行を停止し、保存されたパスワードを持つファイルにアクセスして電子メールクライアントまたはメッセンジャー（メッセージを交換するためのプログラム）を攻撃する。しかし、攻撃されたプログラムが仮想マシンに存在しないため、ファイルの有害な動作は特定されない。これは、パスワードを有する必要なファイルが見つからないため、悪意のあるファイルが実行自体を終了し、悪意のある挙動を示さないためである。
【発明の概要】
【０００８】
したがって、ファイルのウイルス対策スキャンを実行するためのログを形成することによって、悪意のあるファイルを特定するためのシステムおよび方法がここに開示される。本開示において説明されるシステムおよび方法は、有害性のためのファイルの分析中に仮想マシン内のファイルの実行プロセスに影響を及ぼすことを可能にする。
【０００９】
例示としての１つの形態では、ファイルのウイルス対策スキャンを実行するためのログを生成するための方法であって、仮想マシン内でファイルを開くステップであって、仮想マシンの仮想プロセッサ内に第１のスレッドを有するゲストプロセスの実行を含むステップと、第１のスレッドの実行中に、少なくとも１つのゲスト物理メモリページの変更を含む第１のイベントを特定するステップと、ログの分析に基づいて、少なくとも１つの変更されたゲスト物理メモリページを決定するステップと、少なくとも１つのゲスト物理メモリページへの制御の転送を特定するステップと、ファイルのオープンに関連してログを生成するステップとを備え、ログは、第１のイベントを示す情報と、第１のスレッドが実行されている仮想プロセッサのコンテキストデータとを含む方法が提供される。
【００１０】
例示としての１つの形態では、生成されたログの分析に基づいて、仮想マシンで開かれたファイルが有害であると判断するステップをさらに含む方法が提供される。
【００１１】
例示としての１つの形態では、前記少なくとも１つのゲスト物理メモリページへの制御の転送を特定するステップは、さらに、第２のスレッドが、変更されたゲスト物理メモリページに含まれる仮想アドレスからコードを実行していることを検出するステップを含み、前記第２のスレッドは、メモリページを変更したスレッドと同じプロセスから起動される方法が提供される。
【００１２】
例示としての１つの形態では、前記少なくとも１つのゲスト物理メモリページへの制御の転送を特定するステップは、さらに、第２のスレッドが、変更されたゲスト物理メモリページからコードを実行していることを検出するステップを含み、前記第２のスレッドは、メモリページを変更したスレッドと異なるプロセスから起動される方法が提供される。
【００１３】
例示としての１つの形態では、前記第１のスレッドの実行中に、前記少なくとも１つのゲスト物理メモリページの変更を含む前記第１のイベントを特定するステップは、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）関数の第１スレッドによるシステムコールを検出するステップを含む方法が提供される。
【００１４】
例示としての１つの形態では、前記ログの分析に基づいて、前記少なくとも１つの変更されたゲスト物理メモリページを決定するステップは、さらに、変更されたゲスト物理メモリページの識別子を決定する方法が提供される。
【００１５】
例示としての１つの形態では、さらに、第１のスレッドの実行中に少なくとも１つのゲスト物理メモリページを変更しない第２のイベントを検出することに応答して、第２のイベントをログに記録することを控えるステップを含む方法が提供される。
【００１６】
例示としての１つの形態では、ファイルのウイルス対策スキャンを実行するためのログを生成するためのシステムであって、仮想マシンのゲスト物理メモリページを格納するように構成されたメモリデバイスと、プロセッサとを備え、前記プロセッサは、仮想マシン内でファイルを開くステップであって、仮想マシンの仮想プロセッサ内に第１のスレッドを有するゲストプロセスの実行を含むステップと、前記第１のスレッドの実行中に、少なくとも１つのゲスト物理メモリページの変更を含む第１のイベントを特定するステップと、前記ログの分析に基づいて、少なくとも１つの変更されたゲスト物理メモリページを決定するステップと、少なくとも１つのゲスト物理メモリページへの制御の転送を特定するステップと、前記ファイルのオープンに関連して前記ログを生成するステップとを実行するように構成され、前記ログは、前記第１のイベントを示す情報と、前記第１のスレッドが実行されている仮想プロセッサのコンテキストデータとを含むシステムが提供される。
【００１７】
例示としての１つの形態では、ファイルのウイルス対策スキャンを実行するためのログを生成するためのコンピュータが実行可能な命令を含む非一時的なコンピュータ可読媒体であって、仮想マシン内でファイルを開くステップであって、仮想マシンの仮想プロセッサ内に第１のスレッドを有するゲストプロセスの実行を含むステップと、前記第１のスレッドの実行中に、少なくとも１つのゲスト物理メモリページの変更を含む第１のイベントを特定するステップと、前記ログの分析に基づいて、少なくとも１つの変更されたゲスト物理メモリページを決定するステップと、少なくとも１つのゲスト物理メモリページへの制御の転送を特定するステップと、前記ファイルのオープンに関連して前記ログを生成するステップとを有する命令を含み、前記ログは、前記第１のイベントを示す情報と、前記第１のスレッドが実行されている仮想プロセッサのコンテキストデータとを含むコンピュータ可読媒体が提供される。
【００１８】
上述した実施形態の簡単な概要は、本発明の基本的な理解を提供するのに役立つ。この説明は、全ての考えられる態様の詳細な概要ではなく、全ての態様の鍵となるものや重要な要素を特定することを意図していないし、本発明の全ての態様を描写することも意図していない。その唯一の目的は、前置きとして、１つ又は複数の態様を表し、その後、本発明のより詳細な説明を導くものである。これを達成するため、本発明の１つ又は複数の態様が説明され、特許請求の範囲において主張される。
【図面の簡単な説明】
【００１９】
添付の図面は、本明細書に組み込まれ、本明細書の一部を構成し、本開示の１つ以上の例示としての態様を示し、詳細な説明とともに、それらの原理および実施形態を説明する役割を果たす。
【００２０】
図１は、仮想マシン内の有害性についてファイルを分析するための例示としての動作を示すブロック図である。
【００２１】
図２は、例示としての態様による、ファイルのウイルス対策スキャンを行うためのログを生成するシステムを示すブロック図である。
【００２２】
図３は、例示としての態様によるファイルのウイルス対策スキャンを行うためのログを生成する方法を示すフローチャートである。
【００２３】
図４は、分析のために隔離された環境において１つ以上の仮想マシンの実行を支援するように構成されたコンピュータシステムを示すブロック図である。
【００２４】
図５は、開示されたシステムおよび方法が例示としての態様に従って実装され得る汎用コンピュータシステムのブロック図である。
【発明を実施するための形態】
【００２５】
例示としての態様は、本明細書において、例示としての態様によるシステム、方法、およびコンピュータプログラム製品に関連して説明される。当業者であれば、以下の説明は例示としてのものにすぎず、何らかの限定をすることを意図するものではないことを理解するであろう。他の態様は、本開示の恩恵を受ける当業者には容易に示唆されるであろう。添付図面に図示された例示の態様に対する詳細な参照が施されており、同一の参照符号は、図面および以下の説明にわたって可能な限り、同一または類似の項目を参照するために使用される。
【００２６】
仮想マシンにおける有害性のためにファイルを分析するためのシステムモジュールは、本開示では、現実世界のデバイス、システム、コンポーネント、およびハードウェアの使用によって実現されるコンポーネントのグループを意味する。それは、たとえば、集積マイクロ回路（特定用途向け集積回路、ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、マイクロプロセッサシステムおよびプログラム命令のセットのようなソフトウェアとハードウェアの組合せの形態、または、神経シナプスチップなどを指す。そのようなシステムモジュールの機能は、ハードウェアのみによって実現されてもよく、また、システムモジュールの機能のいくつかがソフトウェアによって実現され、残りがハードウェアによって実現されるような組み合わせの形態で実現されてもよい。ある態様では、モジュールの一部または全部は、（図５に示されているような）汎用コンピュータのプロセッサ上で実行されてもよい。システムコンポーネント（各モジュール）は、単一のコンピューティングデバイス内で実現されてもよく、いくつかの相互接続されたコンピューティングデバイス間に展開されてもよい。
【００２７】
図１は、仮想マシン内の有害性についてファイルを分析するための例示としての動作を示すブロック図である。システム１０１は、ファイル１００の有害性の分析を実行するように構成されたセキュリティモジュール１１０を含むことができる。システム１０１は、コンピューティングデバイス上の仮想マシン１２０の実行をサポートするように構成されたハイパーバイザー１１５を含むことができる。ファイルの安全な実行のための環境としての形態の仮想マシン１２０は、ホストオペレーティングシステムのリソースをゲストオペレーティングシステムに提供するハードウェアとソフトウェアのセット（複合体）であり、ゲストオペレーティングシステムは、ホストオペレーティングシステムへのリンクを有しない。
【００２８】
一般的に、有害性を分析するために、ファイル１００は、ファイルの実行のための隔離された環境の形態として仮想マシン１２０内で開かれる。セキュリティモジュール１１０は、ファイル１００を仮想マシン１２０に転送する。例示としての一態様では、仮想マシン１２０は、セキュリティモジュール１１０によって構築される。別の例示としての態様では、仮想マシン１２０は、セキュリティモジュール１１０によって以前に構築された仮想マシンから選択される。
【００２９】
ファイル１００は、システム１０１の記憶装置に離散的にデータを記録するための任意のコンピュータ資源であってもよい。例えば、ファイル１００は、
−  実行可能なファイル形式のプログラム、
−  プログラムによって使用されるデータ、たとえばダイナミックライブラリ、
−  任意のインタプリタによって実行されるスクリプト（ＭｉｃｒｏｓｏｆｔＰｏｗｅｒＳｈｅｌｌ(登録商標)ファイルなど）、
−  実行スクリプトを含むファイル（ＭｉｃｒｏｓｏｆｔＯｆｆｉｃｅ(登録商標)またはＡｄｏｂｅＡｃｒｏｂａｔ(登録商標)ファイル形式など）、
−  文書に埋め込まれた、または、（例えば、スクリプト要素の"ｓｒｃ"属性を介した）参照リンクによってインポートされた、実行可能コード（ＪａｖａＳｃｒｉｐｔなど）を含むマークアップ言語（ＨＴＭＬ）の文書などのウェブページ、
−  画像、
−  使用時（たとえば、他のアプリケーションによって実行または開かれた時）にコンピューティングデバイスのユーザーのデータに害を及ぼすことが知られている他の種類のファイル、などであってもよい。
例示としての一態様では、ファイル１００は、リンク（ＵＲＬまたはインジケータなど）であってもよい。
【００３０】
一般的には、ファイル１００の分析は、仮想マシン１２０のオペレーティングシステムにおけるファイルのオープン後に行われる。ファイル１００のオープンは、以下のいずれかを意味する。
−ファイル１００が実行可能である場合、ファイル１００の実行、
−ファイル１００が実行可能でない場合、アプリケーションによりファイル１００を開くこと。
ファイル１００のオープンにより、プロセス１２２が生成され、仮想マシン１２０内でプロセス１２２の実行が開始される。このプロセス１２２に対して少なくとも１つのスレッドが生成される。
【００３１】
１つの例示としての態様では、セキュリティモジュール１１０および仮想マシン１２０のモニター（以下、ハイパーバイザー１１５とする）は、ユーザーのコンピューティングデバイス上で実行される。仮想マシン１２０は、ハイパーバイザー１１５の制御下で動作する。１つの例示としての態様では、セキュリティモジュール１１０は、コンピューティングデバイス上で実行されるセキュリティアプリケーションまたは他のソフトウェアコンポーネント（例えば、プラグインや拡張機能）であってもよい。そのようなアプリケーションとして、たとえば、アンチウィルスアプリケーション、マルウェア対策アプリケーション、トロイの木馬ウイルスメールフィルタなどが挙げられる。別の態様では、セキュリティモジュール１１０およびハイパーバイザー１１５は、リモートサーバー（または異なるサーバー）上で、またはクラウドサービスとして実行される。この場合、セキュリティモジュール１１０は、外部資源から（例えば、ユーザーのコンピューティングデバイス上で動作するセキュリティモジュール１１０から）ファイル１００を取得し、ファイル１００のオープンが発生する仮想マシン１２０に転送する。
【００３２】
１つの例示としての態様では、ハイパーバイザー１１５は、インターセプトモジュール１３０を含む。インターセプトモジュール１３０は、ハイパーバイザー１１５のモジュール、コンポーネントまたは機能部分であってもよい。インターセプトモジュール１３０は、仮想マシン１２０におけるファイル１００のオープン時に生成されるプロセス１２２のスレッドによるＡＰＩ関数の呼び出しを傍受し、ＡＰＩ関数を呼び出したスレッドが実行されるプロセッサのコンテキストを読み取る。プロセッサのコンテキストは少なくともプロセッサのレジスタの値を含むことに注意すべきである。ある態様では、インターセプトモジュール１３０は、以前に読み取られたデータを使用して、コールスタックも読み取る。以前に読み取られたデータは、コールスタックに対応するプロセッサのレジスタ（例えば、スタックポインタレジスタ（％ＥＳＰ）とベースポインタレジスタ（％ＥＢＰ）からのアドレスのメモリ）に含まれる。さらに、インターセプトモジュール１３０は、上記データを集約するように構成される。インターセプトモジュール１３０は、上記データを、例えば後述するデータベースやログ１５０に保存する。そして、インターセプトモジュール１３０は、上記データを、ファイル１００のオープン時に生成されたプロセス１２２の実行後に、セキュリティモジュール１１０に送信する。セキュリティモジュール１１０は、次に、ファイル１００の有害性に関して、インターセプトモジュール１３０からのデータに基づいて判定する。一般的に、判定は、保存されたデータの分析の後に行われる。その判定は、例えば、ファイル１００のオープン時に生成されるプロセス１２２のスレッドによるＡＰＩ関数の呼び出しに使用されるシーケンスおよびパラメータに基づく。１つの例示としての態様では、判定が行われない場合、インターセプトモジュール１３０によってセーブされたデータは、セキュリティモジュール１１０によって、コンピュータセキュリティの専門家などの第三者を含む外部のリソースまたはサービス（図１に示さず）に送信される。
【００３３】
図２は、本開示の例示としての態様による、ファイルのウイルス対策スキャンを行うためのログ１５０を生成するシステム２００を示すブロック図である。
【００３４】
提案されたシステム２００は、インターセプトモジュール１３０と共に分析モジュール１４０も含むという点が、本開示の特徴である。１つの例示としての態様では、ハイパーバイザー１１５は、分析モジュール１４０を含む。別の例示としての態様では、分析モジュール（モジュール１４１として示す）は、セキュリティモジュール１１０のコンポーネント（モジュール、または機能部品）であってもよい。
【００３５】
一般的には、インターセプトモジュール１３０は、ファイル１００のオープン時に生成されたプロセス１２２のスレッド内のイベントを傍受するように構成される。
【００３６】
インターセプトできるイベントは、たとえば、以下を含む。
−スレッドによるＡＰＩ関数の呼び出し、
−ＡＰＩ関数からの戻り値、
−システムコール、すなわち、特定の操作を実行するための、スレッドによる（ゲスト）オペレーティングシステムのカーネルへのアクセス、
−システムコールからの戻り値、
−ゲストオペレーティングシステムからのメッセージや通知などの警告（たとえば、スレッドの生成、プロセスの生成、モジュールのロードなどに関して）。
【００３７】
イベントを傍受すると、インターセプトモジュール１３０によってスレッドの実行が停止される。この傍受は、仮想マシン１２０のゲストオペレーティングシステムにおいて、システムのハードウェアの分離とユーザーの権限レベルとを実現する様々な防衛リングで可能であることに留意されたい。つまり、イベントの傍受は、カーネルレベル（カーネルモード）またはアプリケーションレベル（ユーザーモード）で発生し得る。スレッドの実行は、スレッドの命令の実行を停止することによって停止してもよい。
【００３８】
一般的には、ファイル１００のオープン時に生成されるプロセス１２２のスレッドの実行中に、インターセプトモジュール１３０は、スレッドによって呼び出されるＡＰＩ関数のコーディングルールを決定するように構成されていることに留意されたい。これにより、呼び出されたＡＰＩ関数へのパラメータの送信のためのプロセッサのレジスタの使用を明確に決定することができる。したがって、例えば、コールのパラメータは、汎用レジスタＥＣＸ（第１パラメータ）およびＥＤＸ（第２パラメータ）の内部で見つけることができ、その他のパラメータはスタック（レジスタＥＳＰ）の内部で見つけることができる。さらに、コーディングルールにより、戻り値を明確に決定することができる。たとえば、ＡＰＩ関数が  "０"の値を返す場合、これは汎用レジスタＥＡＸ内で行われる処理となる。説明のために、本開示は特定のレジスタ（ＥＡＸ、ＥＳＰなど）およびインテル（登録商標）ｘ８６アーキテクチャの命名法を参照するが、本開示の態様は他のプラットフォームの類似のデータ構造と共に使用され得る。
【００３９】
傍受されたイベントおよびプロセッサのコンテキストは、インターセプトモジュール１３０によってログ１５０に保存される。保存後、ログ１５０は、インターセプトモジュール１３０によって分析モジュール１４０に送信される。
【００４０】
分析モジュール１４０は、テンプレートのセットを使用するように構成されてもよい。１つの例示としての態様では、テンプレートはデータ構造（ツリーなど）に保存される。テンプレートは、仮想マシン１２０の起動中に分析モジュール１４０によってデータ構造に追加されてもよい。別の例示としての態様では、テンプレートは、分析モジュール１４０によってデータベースから選択される。
【００４１】
一般的には、テンプレートには１つ以上のルールが含まれる。ある態様では、各ルールに優先度が割り当てられる。  他の態様では、ルールは体系的にテンプレートに追加される。
【００４２】
ルールは、論理オペランド（たとえば、条件分岐または論理和）の使用に基づく論理条件を表す。さらに、ルールは互いに関連していてもよい。１つの例示としての態様では、ルールは保存されたプロセッサのコンテキストを使用する。別の例示としての態様では、ルールは、プロセッサのコンテキストの変更のロジックと、プロセッサのコンテキストを変更するためのデータとを含む。さらに別の態様では、ルールは、分析モジュール１４０が、オープンされたファイル１００を有害であると認識するロジックを含む。
【００４３】
前述のルールの例を以下に示す。
ルール１：もし、ＦｉｌｅＯｐｅｎ（"＄  ＳｙｓｔｅｍＤｒｉｖｅ：￥  ＜ランダム名＞"）が呼び出された場合、処理を継続する。
ルール２：もし、ルール１が満たされ、かつ、ＦｉｌｅＷｒｉｔｅ（"＄  ＳｙｓｔｅｍＤｒｉｖｅ：￥  ＜ランダム名＞"、テキスト文字列）が呼び出された場合、処理を継続する。
【００４４】
上記のルールセットと一致する例では、ファイル１００のオープン時に生成されるプロセス１２２のスレッドは、システムディスクのルートにあるランダムな（要求された）第２のファイル１００Ｂにアクセスする。この第２のファイル１００Ｂは、プログラムによって生成された、ランダムに生成された文字および文字列からなる名前（例えば、"＜ランダム名＞"）を有することができる。要求されたファイル１００Ｂを生成する（または読み取る）イベントは、それ自体は有害ではないが、しばしば悪意のある機能の開始であるとされている。したがって、分析モジュール１４０は、上記のルール１および２に基づいて、そのスレッドの実行を継続することを決定する。その後、要求されたファイル１００Ｂは、ＦｉｌｅＷｒｉｔｅ（）ＡＰＩ関数の呼び出しを介して書き込まれる。要求されたファイル１００Ｂのタイプ、およびそこに書き込まれた情報によって、要求されたファイル１００Ｂは悪意のある機能を有する可能性がある。
【００４５】
システムの動きおよびルールについてのより詳細な例を以下に示す。
ルール１０：ファイル１００が署名されていない場合、処理を継続する。
ルール１１：ルール１０が満たされ、かつ、ファイル１００がＦｉｌｅＯｐｅｎ（  "＄  ＳｙｓｔｅｍＤｒｉｖｅ：￥  ＜ランダム名＞"）を呼び出した場合、戻り値を  "成功"に置き換えて処理を継続する。
ルール１２：ルール１１が満たされ、かつ、ファイル１００がＦｉｌｅＷｒｉｔｅ（  "＄  ＳｙｓｔｅｍＤｒｉｖｅ：￥  ＜ランダム名＞"）を呼び出し、ファイル１００のオープン時に生成されたプロセスによってメモリバッファが使用されている場合、ファイル１００を有害であると認識し、処理を終了する。
【００４６】
上記ルールの例では、「ファイル１００」がより規則的で明確なルールの表現に使用されていることに留意すべきである。一般的な場合、ルールは、ファイル１００のオープン時に生成されたプロセスのスレッドを使用する。
【００４７】
上記のルール１０〜１２を満たす例示としてのシナリオでは、ファイル１００は（ファイルの真正性および完全性を暗号的に検証するための既知の技術を使用して）デジタル署名されていない。すなわち、ファイル１００の提供者（作成者）は不明である。その後、実行プロセスにおいてファイル１００のオープン時に生成されたプロセス１２２のスレッドは、システムディスクのルートにあるランダムな（第２の）ファイル１００Ｂにもアクセスする。しかし、（ゲスト）オペレーティングシステムは通常、システムディスクのルートにファイルを作成することを禁じている（悪意のあるファイルは、ファイルが作成されるまで他のルートを試すことができる）。したがって、分析モジュール１４０は、ルールに基づいて、戻り値を「成功」に置き換えることを決定する。戻り値は、インターセプトモジュール１３０によって置き換えられる。そして、ファイル１００のオープン時に生成されたプロセスのスレッドの実行を継続する。その後、作成したファイル１００Ｂに書き込みを行う。作成されたファイルにメモリバッファが書き込まれた場合、そのファイルは有害な（つまり、悪意のある機能を持つ）可能性がある。分析モジュール１４０は、（第１の）ファイル１００の分析を中止することが望ましいと判断することができる。そして、作成された（第２の）ファイル１００Ｂについて分析を行い、その分析結果に基づいて、ファイル１００の有害性を判断する。
【００４８】
上記ルールは、例示にすぎないことに留意すべきである。一般的な場合、ルールはより大量になり得る。例えば、異なるパスによるファイルの作成を追跡し、作成されたファイルの拡張子を追跡し、作成されたファイルのタイプを分析し、ファイルの作成を許可し、ファイル１００を開くときに作成されたプロセスのスレッドのさらなる挙動（例えば、既知の方法でオペレーティングシステムの自動起動リストに作成されたファイルを追加すること等）を追跡し、ファイル１００と他のファイルとの両方のスレッドによる属性の変更を追跡し、インターネットへのスレッドのアクセスを追跡する。
【００４９】
１つの例示としての態様では、分析モジュール１４０は、別個のデータベースに保持された、分析に特化したデータで動作する。このデータは、テンプレートのルールで使用してもよい。
【００５０】
そのようなルールは、例えば、以下のようになる。
ルール２１：ファイル１００がウェブリソースにアクセスし、かつ、ウェブリソースが悪意のあるカテゴリに割り当てられている場合、ファイル１００を悪意があると認識する。
【００５１】
なお、上記の例では、以下に留意すべきである。すなわち、仮想マシンにおけるファイル１００のオープン時に生成されるプロセスのスレッドによってアクセスされるウェブリソースのカテゴリは、既知の分類方法によって予め決定され（割り当てられ）、別個のデータベースに保存される。
【００５２】
１つの例示としての態様では、ルールは、分析の深さ、またはイベントの集約の深さの条件を含む。
例えば：
ルール３１：ファイル１００がサイクルを実行し、かつ、ＡＰＩ関数の呼び出しのイベントのコンテキストが変化しない場合、ＡＰＩ関数からの戻りのイベントを傍受しない。
【００５３】
この例（ルール３１）では、イベントの傍受およびコンテキストの読み取りの回数を減らすことにより、ファイル１００の実行を高速化することが可能となる。ファイル１００のオープン時に生成されたプロセス１２２のスレッドが、１０億回の繰り返しのオーダーの継続時間を有するサイクルを呼び出した場合、例えば、ＣｒｅａｔｅＷｉｎｄｏｗ（）、またはＣｌｏｓｅＷｉｎｄｏｗ（）の呼び出しで構成されている場合、システムはＲｕｌｅ３１を使用して各イベントのコンテキストを傍受して保存することを控えることができる。つまり、上記に対応したインターセプトモジュール１３０は、少なくとも４０億回（ここで、サイクルは２つのＡＰＩ関数を呼び出し、イベントはＡＰＩ関数の呼び出し、および戻りであるとする。）の処理を省略し、プロセッサのコンテキストを数回程度読み取ることとなる。
【００５４】
１つの例示としての態様では、ルールはサイクル変数を増加させるための条件を含む。例えば、
ルール４１：ファイル１００がサイクルを実行し、かつ、ＡＰＩ関数の呼び出しのイベントのコンテキストが変化しない場合、サイクル変数の値を１０回の繰り返しごとに５回増加させる。
【００５５】
上記の例のルール４１は、仮想マシン１２０内でファイル１００のオープン時に生成されるプロセスのスレッドによるサイクルの実行をスピードアップするために使用することができる。分析モジュール１４０は、実行中のスレッドが循環的に特定のイベントを呼び出すと判断する。この場合、アンチエミュレーションのための既知のシナリオの１つであるため、何も発生しない。ファイル１００のオープン時に生成されたプロセスのスレッドがその機能を可能な限り完全に明示するためには、サイクルをできるだけ速く終了し、処理を続行する必要がある。  上記のルールのおかげで、サイクルは数倍速く終了する。
【００５６】
１つの例示としての態様では、インターセプトモジュール１３０は、ファイル１００のオープン時に生成されたプロセスのスレッドの実行中に、仮想メモリ内（以下、テキスト内、またはメモリ内と記載する）のページの変更を伴うイベントの発生を発見する。一般的に、メモリ内のページの変更を伴うイベントはスレッドによるＡＰＩ関数の呼び出しを構成する。メモリページ内のデータの変更は、例えば、ＷｒｉｔｅＰｒｏｃｅｓｓＭｅｍｏｒｙ（）の呼び出しによって、あるいはＳｅｔＷｉｎｄｏｗＬｏｎｇ（）を使用してデータを書き込むことによって、直接的に行うことができる。この場合、たとえば、ウィンドウの記述子（ハンドル）を発見することが可能である。別のプロセスのメモリへの書き込みは、オペレーティングシステムの観点からは完全に正当な動作になる可能性があることに留意されたい。しかし、悪意のあるプログラムは、悪意のあるコードを挿入するためにこのようなメカニズムを採用することが非常に多いことが判明している。メモリページおよびプロセッサのコンテキストの変更を伴うイベントは、インターセプトモジュール１３０によってログ１５０に保存される。
【００５７】
分析モジュール１４０は、どの（ゲスト物理）メモリページが変更されたかを決定するように構成することができる。メモリページの変更に関連するイベントが保存されたログ１５０とプロセッサのコンテキストとを分析することにより、分析モジュール１４０は、変更されたメモリページの識別子（アドレスまたは番号など）を発見することができる。
【００５８】
１つの例示としての態様では、分析モジュール１４０は、変更されたメモリページの識別子をインターセプトモジュール１３０に送信するように構成される。インターセプトモジュール１３０は同様に、分析モジュール１４０から識別子を受信した変更されたページのいずれか１つに対する制御の転送を識別する。制御をメモリページに転送することは、一般に、スレッドがそのメモリページに含まれる仮想アドレスによってコードを実行していることを意味する。１つの例示としての態様では、変更されたページからのコードを実行しているスレッドが、メモリページを変更したスレッドと同じプロセスから起動された場合に、制御の転送の識別が行われる。別の例示としての態様では、変更されたページからのコードを実行しているスレッドが、スレッドがメモリページを変更したプロセスとは異なるプロセスから起動された場合に、制御の転送の識別が行われる。したがって、ファイル１００のオープン時に生成されたプロセス１２２のスレッドがメモリページを変更した場合であって、このページが同じプロセス（自身のメモリページの変更は、署名解析への防御や実行可能コードの静的解析に対する対策として悪意のあるアプリケーションによって使用される）、または異なるプロセス（たとえば、ｅｘｐｌｏｒｅｒ．ｅｘｅ）に属している場合、変更されたメモリページに制御が転送されるときにプロセスのイベントを傍受する必要がある。
【００５９】
一般的には、変更されたメモリページへの制御の転送が行われた後、インターセプトモジュール１３０および分析モジュール１４０は、上記の動作を実行する。
【００６０】
上記の例として、
規則５１：ファイル１００のオープン時に生成されたプロセスが少なくとも１つのメモリページ内のデータを変更する場合、データが変更されたページの少なくとも１つに制御を移したときにイベントを傍受する。
【００６１】
規則５１を呼び出す方法は、他のアプリケーションのメモリページを変更するアプリケーションの分析中にシステムリソースを節約することを可能にする。例えば、上述したアンチエミュレーションシナリオ（ユーザーのデータに損害を与えない多数のＡＰＩファンクション・コール）は分析されず、分析モジュール１４０は、ログ１５０内にすべてのコールを保存しない（すなわち、保存を控える）。この場合、唯一の分析は、変更されたメモリページに制御が転送されるかどうか、および仮想メモリの変更されたページ内のコードに悪意があるかどうかである。インターセプトモジュール１３０によって定式化されたログ１５０は、メモリページを変更するイベント、および、変更されたメモリページからのコードを実行する際に発生するイベントを得ることに終始する。ログ１５０を生成するこのアプローチの技術的成果は、潜在的に悪意のあるファイルの挙動を、より効率的な分析のために、かつ現在の防御策およびアンチエミュレーション技術を克服するような方法で、ログファイルに記録することである。
【００６２】
したがって、インターセプトモジュール１３０からログ１５０を取得した後の分析モジュール１４０は、発生したイベント、すなわちログ１５０に（現在および以前に）保存されているイベントおよびイベントの発生したデータ（例えば、特定の事象に対応するプロセッサのコンテキスト）を分析するように構成されている。分析は、起こっているイベントとテンプレートとの比較を含むことができる。  イベントは、テンプレート内に保存された各ルールと（テンプレート内のルールの順序または優先順位に応じて）順次比較される。比較に基づいて、分析モジュール１４０は、少なくとも１つの決定を行うことができる。
−ファイル１００を悪意があると認識する決定、
−ファイル１００のオープン時に生成されたプロセスの実行を中止する決定、
−プロセッサのコンテキストを変更する決定、
−次のイベントを待つ決定。
【００６３】
分析モジュール１４０は、前述の決定を組み合わせることが可能であることに留意すべきである。たとえば、ファイル１００は悪意があると認識された場合、ある態様では、ファイル１００のオープン時に生成されたプロセスの実行を中止することができる。別の態様では、ファイル１００のオープン時に生成されたプロセスの実行を継続することができる。すなわち、プロセスのスレッドの動作をさらに分析するために、次のイベントを待ち、ログ１５０を生成することができる。ある態様では、ファイル１００は悪意があると認識されるが、プロセッサのコンテキストが変更され、次のイベントが待たれる。このような一連の動作は、ファイル１００の機能のより完全な開示のために必要とされる。たとえば、ファイル１００は、悪意があるコードを含むさらに別のファイルが分析プロセスで作成された後に、悪意があると認識される。しかし、特定の場合（たとえば、スレッドが悪質なウェブリソースから何かをダウンロードしようとする場合など）、イベントを傍受し続けること、および、ファイル１００のオープン時に生成されるプロセスのスレッドの後続の挙動を分析するためにログ１５０をとりつづけることは、合理的である。さらに別の態様では、たとえファイル１００が悪意あるものとして認識されていなくても（たとえば、実行中にウインドウが開き、ユーザーからの入力を待って）、ファイル１００のオープン時に生成された処理の実行を停止することが決定される。
【００６４】
行われた決定は、分析モジュール１４０によってインターセプトモジュール１３０に送られる。インターセプトモジュール１３０は、行われた決定に対応するアクションを実行するように構成されてもよい。分析モジュール１４０が次のイベントを待つことを決定した場合、インターセプトモジュール１３０によって中断されたスレッドの実行が再開される。
【００６５】
ある態様では、分析モジュール１４０は、仮想マシン１２０の再起動を開始する。例えば、ファイル１００の分析の過程で新しいファイルが作成され、そのファイルへのパスが仮想マシン１２０のゲストオペレーティングシステムの自動起動に追加された場合、分析モジュール１４０は、作成されたファイルの有害性の機能を精査するために、再起動する。
【００６６】
一般的には、仮想マシン１２０内のファイル１００の分析を完了した後、インターセプトモジュール１３０は、ログ１５０をセキュリティモジュール１１０に送信してもよい。ファイル１００の分析は、自然な方法（ファイル１００のオープン時に生成されたプロセスのスレッド自体がそれらの実行を終了したときに）、または分析モジュール１４０の決定（ファイル１００のオープン時に生成されたプロセスを停止する決定）によって終了してもよい。
【００６７】
したがって、上述のシステムは、分析モジュール１４０からの決定、より具体的にはファイル１００を悪意があると認識したかどうかの決定に基づいて、ファイル１００の有害性を明らかにすることができる。
【００６８】
図３は、例示としての態様による、ファイルのウイルス対策スキャンを実行するためのログを生成する方法を示すフローチャートである。例示された方法の以下の説明は、上記のシステムおよび構成要素を参照することに留意されたい。ファイルのウイルス対策スキャンを実行するためのログを生成する一般的な場合には、セキュリティモジュール１１０は、ファイル１００を仮想マシン１２０に送信する。ファイル１００の分析は、仮想マシン１２０のオペレーティングシステムでのファイル１００のオープン後に行われる。いくつかの例示としての態様では、ファイル１００のオープンは、ファイルが実行可能であれば、ファイルの実行を含むことができる。他の態様では、ファイルのオープンは、ファイルが実行可能でない場合、仮想マシン１２０で実行されるゲストアプリケーションによってファイルを開くことを含むことができる。
【００６９】
最初のステップ３１０において、インターセプトモジュール１３０は、上記ファイルのオープン時に生成されたプロセスのスレッドの実行中に、少なくとも１つのメモリページの変更を伴うイベントの発生を識別する。一般的には、メモリページの変更を伴うイベントは、スレッドによるＡＰＩ関数の呼び出しであってもよい。そのイベントおよびプロセッサのコンテキストは、インターセプトモジュール１３０によってログ１５０に保存される。
【００７０】
ステップ３２０において、分析モジュール１４０は、ログ１５０に保存されたデータの分析によって、少なくとも１つの変更されたメモリページを決定することができる。１つの例示としての態様では、変更されたページの識別子が変更されたメモリページを決定するために使用される。変更されたページの識別子は、分析モジュール１４０によってインターセプトモジュール１３０に送られる。
【００７１】
ステップ３３０において、インターセプトモジュール１３０は、ファイルのオープン時に生成されたプロセスのスレッドの実行中に、少なくとも１つの変更されたメモリページへの制御の転送を識別することができる。メモリページへの制御の転送は、一般的に、スレッドがそのメモリページに含まれる仮想アドレスからコードを実行していることを意味する。１つの例示としての態様では、変更されたページからコードを実行しているスレッドが、メモリページを変更したスレッドと同じプロセスによって起動された場合に、制御の転送の識別が行われる。別の例示としての態様では、変更されたページからコードを実行しているスレッドが、スレッドがメモリページを変更したプロセスとは異なるプロセスによって起動された場合に、制御の転送の識別が行われる。
【００７２】
ステップ３４０において、分析モジュール１４０は、以下が保存されるログ１５０を生成することができる。
上記のファイルのオープン時に生成されたプロセスのスレッドの実行中に、変更されたメモリページで発生するイベント。
ログファイルに保存されたイベントの発生中に読み取られた、上述のファイルのオープン時に生成されたプロセスのスレッドが実行されているプロセッサのコンテキスト。
【００７３】
１つの例示としての態様では、ステップ３４０でログ１５０を生成した後のステップ３５０において、分析モジュール１４０によって分析され、仮想マシン１２０でオープンされているファイルの有害性が決定される。
【００７４】
図４は、分析のために隔離された環境で、１つ以上の仮想マシンの実行を支援するように構成された例示としてのシステム４００を示すブロック図である。図示のように、システム４００は、一般的に、１つ以上の物理コンピュータ４０１を含む。仮想マシン１２０は、システムハードウェア４０２およびハイパーバイザー１１５（仮想マシンモニタまたはバーチャライザとも呼ばれる）を含む物理コンピュータのホストプラットフォーム上に構築することができる。ハイパーバイザー１１５は、仮想マシン１２０のゲストオペレーティングシステム４２２に仮想オペレーティングプラットフォーム（仮想ハードウェア４３０として示す）を提供し、ゲストオペレーティングシステム４２２の実行を管理する。ハイパーバイザー１１５は、基礎となるシステムハードウェア４０２上で、またはシステムハードウェア４０２上にインストールされたホストオペレーティングシステム（図示せず）内で動作するアプリケーションまたはコンポーネントとして、直接実行することができる。
【００７５】
物理コンピュータ４０１は、物理的なサーバー、ホスト、コンピュータサーバー、デスクトップ、ラップトップ、ハンドヘルドデバイス、または本明細書で説明される仮想化を実施するのに十分な任意の他の電子デバイスとすることができる。図示のように、物理コンピュータ４０１のシステムハードウェア４０２は、コンピュータ処理装置（ＣＰＵ）４０４、メモリ４０６（例えば、ランダムアクセスメモリ）、および記憶装置４０８（例えば、ハードディスクドライブ）を含むことができる。システム４００は、当業者には理解されるように、追加のデバイス、ソフトウェアモジュールなどを含むことができるが、本開示の態様を不必要に不明瞭にしないように本明細書では示されていない。
【００７６】
例示としての態様では、仮想マシン１２０は、ゲストＯＳ４２２を含む仮想システムハードウェア４３０およびゲストシステムソフトウェアを含む。ハイパーバイザー１１５は、１つまたは複数のゲストアプリケーション４２４およびゲストＯＳ４２２を含むＶＭ１２０内で実行するゲストソフトウェアと、ホストマシンの基礎となるシステムハードウェアプラットフォーム４０２内のハードウェアコンポーネントおよびデバイスとの間のインターフェースとして機能する。仮想システムハードウェア４３０は、仮想ＣＰＵ４３１、仮想メモリ４３２、仮想ディスク４３４、および仮想ネットワークインターフェース（図示せず）などの他の仮想ハードウェアコンポーネントを含む。当業者には理解されるように、仮想マシン１２０のすべての仮想ハードウェアコンポーネントをソフトウェアで実装して、対応する物理コンポーネントをエミュレートすることができることに留意されたい。
【００７７】
図４に示すように、ファイル１００は、仮想ディスク４３４に格納されてもよい。仮想マシン１２０内のファイル１００をオープンすることで、ゲストオペレーティングシステム４２２によってプロセス１２２が生成される。このプロセス１２２のために（仮想ＣＰＵ４３１上で実行される）少なくとも１つのスレッド４３５が生成される。ファイル１００が実行可能である場合、ファイル１００のオープンは、ゲストオペレーティングシステム４２２によるファイル１００の実行を含み、この場合、プロセス１２２はファイル１００のプログラムコードを含む。ファイル１００が実行可能でない場合、ファイル１００のオープンは、ゲストアプリケーション４２４によりファイル１００を開くことを含み、この場合、プロセス１２２は、ゲストアプリケーション４２４のインスタンスである。
【００７８】
動作中、インターセプトモジュール１３０は、スレッド４３５の実行中に、ｖＲＡＭ４３２の少なくとも１つのゲスト物理メモリページ４３７の変更を伴うイベントの発生を識別することができる。このイベントは、システムコール（ＡＰＩ関数）を行うスレッド４３５に関連する可能性がある。そのイベントおよびプロセッサのコンテキスト（ｖＣＰＵ４３１）は、インターセプトモジュール１３０によってログ１５０に保存される。分析モジュール１４０は、ログ１５０の分析に基づいて、少なくとも１つの変更された（ゲスト物理）メモリページ４３７、およびそれらのそれぞれの識別子を決定することができる。インターセプトモジュール１３０は、スレッド４３５の実行中に、少なくとも１つの変更されたメモリページへの制御の転送を識別することができる。メモリページへの制御の転送は、一般に、スレッドがその（ゲスト）物理メモリページに含まれる（ゲスト）仮想メモリアドレスからコードを実行していることを意味する。分析モジュール１４０は、以下の情報を保存することを含むログ１５０を生成することができる。その情報とは、変更されたメモリページ４３７内の前述のファイル１００のオープン時に生成されたプロセス１２２のスレッド４３５の実行中に発生するイベントと、ログに保存されているイベントの発生中に読み取られた、プロセス１２２のスレッド４３５が実行される仮想プロセッサ４３１のコンテキストとを含む。分析モジュール１４０は、ログ１５０に基づいて、仮想マシン１２０内でオープンされているファイルの有害性を判定する。
【００７９】
図５は、ファイルのウイルス対策スキャンを実行するためのログを生成するシステム及び方法の態様が例示としての態様に従って実施され得る汎用コンピュータシステム２０を示すブロック図である。コンピュータシステム２０は、例えば、先に説明したシステム１０１、２００、および物理サーバー４０１に対応する。
【００８０】
図示のように、コンピュータシステム２０（パーソナルコンピュータ又はサーバ）は、ＣＰＵ２１と、システムメモリ２２と、ＣＰＵ２１に関連付けられたメモリを含む様々なシステムコンポーネントを接続するシステムバス２３とを含む。当業者に理解されるように、システムバス２３は、バスメモリ又はバスメモリコントローラ、周辺バス、及び他のバスアーキテクチャと相互作用するローカルバスを含むことができる。システムメモリは、永久メモリ（ＲＯＭ）２４及びランダムアクセスメモリ（ＲＡＭ）を含む。基本入出力システム（ＢＩＯＳ）２６は、ＲＯＭ２４を使用してオペレーションシステムをロードする際のように、コンピュータシステム２０の要素間で情報を転送するための基本的な手順を記憶する。
【００８１】
ハードディスク２７、磁気ディスクドライブ２８、及び光学式のドライブ３０は、ハードディスクインターフェース３２、磁気ディスクインターフェース３３、及び光学式のドライブインターフェース３４それぞれを介してシステムバス２３と接続される。ドライブ及び対応するコンピュータ情報メディアは、コンピュータ命令、データ構造体、プログラムモジュール、及びコンピュータシステム２０の他のデータを蓄積するための電源依存のモジュールである。
【００８２】
当業者であれば、コンピュータによって読み取り可能な形式でデータを記憶することのできる任意のタイプのメディア５６（ソリッド・ステート・ドライブ、フラッシュメモリカード、デジタルディスク、ランダムアクセスメモリ（ＲＡＭ）等）を使用できることが理解されよう。
【００８３】
コンピュータシステム２０は、オペレーティングシステム３５が格納されるファイルシステム３６と、追加のプログラムアプリケーション３７と、他のプログラムモジュール３８と、プログラムデータ３９とを有する。コンピュータシステム２０のユーザーは、キーボード４０、マウス４２、又は当業者に知られた任意の他の入力デバイス（非限定的な例：マイクロフォン、ジョイスティック、ゲームコントローラ、スキャナ等）を用いて命令を入力する。このような入力デバイスは、典型的には、シリアルポート４６を介してコンピュータシステム２０に接続され、シリアルポートはシステムバスに接続される。ただし、当業者であれば、入力デバイスを、パラレルポート、ゲームポート、又はユニバーサル・シリアル・バス（ＵＳＢ）など（これらに限定されない）を介して接続することができることを理解するであろう。モニタ４７又は他のタイプの表示装置もまた、ビデオアダプタ４８などのインタフェースを介してシステムバス２３に接続することができる。パーソナルコンピュータは、モニタ４７に加えて、ラウドスピーカやプリンタなどの他の周辺出力装置（図示せず）を備えていても良い。
【００８４】
コンピュータシステム２０は、１つ又は複数のリモートコンピュータ４９へのネットワーク接続により、ネットワーク環境で動作することができる。リモートコンピュータ（又は複数のコンピュータ）４９は、コンピュータシステム２０の性質を説明する上で前述した要素のほとんど又は全てを含むローカルコンピュータワークステーション又はサーバであっても良い。ルータ、ネットワークステーション、ピアデバイス、又は他のネットワークノードなどの他のデバイスも、コンピュータネットワークに存在することができるが、これに限定されるものではない。
【００８５】
ネットワーク接続は、ローカルエリアコンピュータネットワーク（ＬＡＮ）５０及びワイドエリアコンピュータネットワーク（ＷＡＮ）を形成することができる。このようなネットワークは、企業のコンピュータネットワーク及び社内ネットワークで使用され、一般にインターネットにアクセスする。ＬＡＮ又はＷＡＮネットワーク内では、パーソナルコンピュータ２０は、ネットワークアダプタ又はネットワークインタフェース５１を介してローカルエリアネットワーク５０に接続される。ネットワークが使用される場合、コンピュータ２０は、モデム５４又はインターネットなどのワイドエリアコンピュータネットワークとの通信を可能にする当業者に周知の他のモジュールを使用することができる。モデム５４は、内部又は外部のデバイスとすることができ、シリアルポート４６によってシステムバス２３に接続される。上記のネットワークシステムが、通信モジュールを使用して１つのコンピュータが他のコンピュータへの接続を確立するための多くの周知の方法のうちの非限定的な例であることは、当業者には理解されるだろう。
【００８６】
様々な実施形態において、ハードウェア、ソフトウェア、ファームウェア、又はこれらのあらゆる組み合わせにより、ここで説明されたシステム及び方法を実施し得る。ソフトウェアにおいて実装される場合は、方法は非一時的コンピュータ可読媒体の１つ又は複数の命令又はコードとして保存され得る。コンピュータ可読媒体は、データストレージを含む。あくまでも例であり限定するものではないが、そのようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、フラッシュメモリ、若しくは他のタイプの電気、磁気、光学式の記憶媒体、又はその他のメディアであってもよい。すなわち、これらによって命令又はデータ構造体という形で、要求されたプログラムコードを運ぶか又は保存することができ、汎用コンピュータのプロセッサによってアクセスすることができる。
【００８７】
様々な実施形態で、本願のシステム及びメソッドはモジュールとして実装され得る。ここで用語「モジュール」は、実世界の機器、コンポーネント、又はハードウェアを用いて実装されたコンポーネント配置であり、例えばＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）等の、又は例えばモジュールの機能を実行するマイクロプロセッサシステムや命令セットによる等、ハードウェアとソフトウェアの組み合わせとして実装され得る。これらは、実行中にマイクロプロセッサシステムを特定の機器に変換する。モジュールは、ハードウェア単体により促進される一定の機能とハードウェア及びソフトウェアの組み合わせによって促進される他の機能という２つの組み合わせとして実施されてもよい。モジュールの少なくとも一部又は全部は、汎用コンピュータのプロセッサにおいて実行できる（図５を用いて上記において詳述したもの等）。したがって、各モジュールは様々な適当な構成で実現することができて、ここに例示した特定の実装に限られるものではない。
【００８８】
なお、実施形態の通常の機能のうちの全てをここで開示しているわけではない。本発明のいずれの実施形態を開発する場合においても、開発者の具体的な目標を達成するためには実装に係る多くの決定が必要であり、これらの具体的な目標は実施形態及び開発者ごとに異なることに留意されたい。このような開発努力は、複雑で時間を要するものであるが、本発明の利益を享受し得る当業者にとっては当然のエンジニアリングであると理解されたい。
【００８９】
さらに、本明細書で使用される用語又は表現は、あくまでも説明のためであり、限定するものではない。つまり、本明細書の用語又は表現は、関連する技術分野の当業者の知識と組み合わせて、ここに示される教示及び指針に照らして当業者によって解釈されるべきであると留意されたい。明示的な記載がない限り、明細書又は特許請求の範囲内における任意の用語に対して、一般的でない又は特別な意味を持たせることは意図されていない。
【００９０】
本明細書で開示された様々な態様は、例示のために本明細書に言及した既知のモジュールの、現在及び将来の既知の均等物を包含する。さらに、複数の態様及び用途を示し、説明してきたが、本明細書に開示された発明の概念から逸脱することなく、上述したよりも多くの改変が可能であることが、この開示の利益を有する当業者には明らかであろう。
【図１】
2019061636.tif 000003
【図２】
2019061636.tif 000004
【図３】
2019061636.tif 000005
【図４】
2019061636.tif 000006
【図５】
2019061636.tif 000007
【外国語明細書】
2019061636000001.pdf