(57)【要約】      （修正有）【課題】脆弱性を有するファイルの実行中にログを作成するためのシステム及び方法を提供する。【解決手段】システムにおいて、方法は、ファイルを開いたときに作成されたプロセスのスレッドの実行中のトリガのアクティブ化を発見することと、トリガはファイルの脆弱性を利用しようとする試みに関連するイベントに付随する条件を記述し、さらに、ファイルを開いたときに作成されたプロセスのスタックを分析し、呼出しとリターンアドレスのシーケンスの形をとる、イベントに先行する関数呼び出しのチェーンを発見し、発見された関数呼び出しのチェーンが脆弱性を利用しようとする試みに関連するトリガの条件を満足するか分析し、トリガの条件が満足される場合、関数呼び出しのチェーンに関する情報をログに保存することと、を含む。【選択図】図３
2020109649.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシンにおいて脆弱性を有するファイルの実行中にログを作成する方法であって、
インターセプタにより、ファイルを開いたときに作成されたプロセスのスレッドの実行中のトリガのアクティブ化を発見し、当該トリガは、ファイルの脆弱性を利用しようとする試みに関連するイベントに付随する一つまたは複数の条件を記述し、
インターセプタにより、ファイルを開いたときに作成されたプロセスのスタックを分析し、呼出しとリターンアドレスのシーケンスの形をとる、イベントに先行する関数呼び出しのチェーンを発見し、
インターセプタにより、発見された関数呼び出しのチェーンが脆弱性を利用しようとする試みに関連するトリガの条件を満足するか分析し、
ファイルの脆弱性を利用しようとする試みに関連するトリガの条件が満足される場合、インターセプタにより、関数呼び出しのチェーンに関する情報をログに保存する、
ことを含む方法。
【請求項２】
トリガの条件が満足されたことに関連するメモリ領域のダンプを、ログに保存する
ことをさらに含む、請求項１に記載の方法。
【請求項３】
前記イベントは、
プロセスのスレッドの実行中のAPI関数の呼び出し、
API関数からのリターン、
システムコール、
システムコールからのリターン、および
オペレーティングシステムからの通知の受信、
のうち少なくとも一つを含む、請求項１に記載の方法。
【請求項４】
前記トリガは、前記ファイルの脆弱性を利用しようとする試みに関連するイベントおよび当該イベントに付随する条件を一つまたは複数記述し、
リターン指向プログラミング（ROP）を利用する呼出しチェーンからのイベントの生成、
ヒープ上での実行によるイベントの生成、
スタック上での実行によるイベントの生成、
スタックの変更、
オペレーティングシステム内のプロセスの権利および特権を記述するデータ構造の変更、
メモリページからの最初の実行によって生成されたイベント、および、
メモリの動的割当、および、動的に割り当てられたメモリへのオブジェクトの配置、
である、請求項１に記載の方法。
【請求項５】
前記ファイルを開くことは、
ファイルが実行可能な場合は、当該ファイルの実行、または、
ファイルが実行不可能な場合は、アプリケーションによって当該ファイルを開くこと、
のうち一つを含む、請求項１に記載の方法。
【請求項６】
セキュリティモジュールは、
仮想マシンの起動、または、
以前に作成された仮想マシンからのセキュリティモジュールの選択、
のうち、少なくとも一つを実行する、請求項１に記載の方法。
【請求項７】
前記トリガは、発生により前記トリガをアクティブ化する実際のイベントと、前記ファイルの脆弱性を利用しようとする試みに関連する実際のイベントに付随するトリガの条件とを記述する、請求項１に記載の方法。
【請求項８】
コンピューティングデバイス上でインスタンス化された仮想マシンにおいて脆弱性を有するファイルの実行中にログを作成するためのシステムであって
インターセプタにより、ファイルを開いたときに作成されたプロセスのスレッドの実行中のトリガのアクティブ化を発見し、当該トリガは、ファイルの脆弱性を利用しようとする試みに関連するイベントに付随する一つまたは複数の条件を記述し、
インターセプタにより、ファイルを開いたときに作成されたプロセスのスタックを分析し、呼出しとリターンアドレスのシーケンスの形をとる、イベントに先行する関数呼び出しのチェーンを発見し、
インターセプタにより、発見された関数呼び出しのチェーンが脆弱性を利用しようとする試みに関連するトリガの条件を満足するか分析し、
ファイルの脆弱性を利用しようとする試みに関連するトリガの条件が満足される場合、インターセプタにより、関数呼び出しのチェーンに関する情報をログに保存する
よう構成される少なくとも一つのプロセッサを備えるシステム。
【請求項９】
前記プロセッサはさらに、トリガの条件が満足されたことに関連するメモリ領域のダンプを、ログに保存するよう構成される、請求項８に記載のシステム。
【請求項１０】
前記イベントは、
プロセスのスレッドの実行中のAPI関数の呼び出し、
API関数からのリターン、
システムコール、
システムコールからのリターン、および
オペレーティングシステムからの通知の受信、
のうち少なくとも一つを含む、請求項８に記載のシステム。
【請求項１１】
前記トリガは、前記ファイルの脆弱性を利用しようとする試みに関連するイベントおよび当該イベントに付随する条件を一つまたは複数記述し、
リターン指向プログラミング（ROP）を利用する呼出しチェーンからのイベントの生成、
ヒープ上での実行によるイベントの生成、
スタック上での実行によるイベントの生成、
スタックの変更、
オペレーティングシステム内のプロセスの権利および特権を記述するデータ構造の変更、
メモリページからの最初の実行によって生成されたイベント、および、
メモリの動的割当および動的に割り当てられたメモリへのオブジェクトの配置、
である、請求項８に記載のシステム。
【請求項１２】
前記ファイルを開くことは、
ファイルが実行可能な場合は、当該ファイルの実行、または、
ファイルが実行不可能な場合は、アプリケーションによって当該ファイルを開くこと、
のうち一つを含む、請求項８に記載のシステム。
【請求項１３】
セキュリティモジュールは、
仮想マシンの起動、または
以前に作成された仮想マシンからのセキュリティモジュールの選択、
のうち、少なくとも一つを実行する、請求項８に記載のシステム。
【請求項１４】
前記トリガは、発生により前記トリガをアクティブ化する実際のイベントと、前記ファイルの脆弱性を利用しようとする試みに関連する実際のイベントに付随するトリガの条件とを記述する、請求項８に記載のシステム。
【請求項１５】
仮想マシンにおいて脆弱性を有するファイルの実行中にログを作成するためのコンピュータ実行可能命令を記憶する非一時的コンピュータ可読媒体であって、
ファイルを開いたときに作成されたプロセスのスレッドの実行中のトリガのアクティブ化を発見し、当該トリガは、ファイルの脆弱性を利用しようとする試みに関連するイベントに付随する一つまたは複数の条件を記述し、
ファイルを開いたときに作成されたプロセスのスタックを分析し、呼出しとリターンアドレスのシーケンスの形をとる、イベントに先行する関数呼び出しのチェーンを発見し、
発見された関数呼び出しのチェーンが脆弱性を利用しようとする試みに関連するトリガの条件を満足するか分析し、
ファイルの脆弱性を利用しようとする試みに関連するトリガの条件が満足される場合、関数呼び出しのチェーンに関する情報をログに保存する、
ための命令を含む、非一時的コンピュータ可読媒体。
【請求項１６】
前記命令はさらに、トリガの条件が満足されたことに関連するメモリ領域のダンプを、ログに保存するための命令を含む、請求項１５に記載の非一時的コンピュータ可読媒体。
【請求項１７】
前記イベントは、
プロセスのスレッドの実行中のAPI関数の呼び出し、
API関数からのリターン、
システムコール、
システムコールからのリターン、および
オペレーティングシステムからの通知の受信、
のうち少なくとも一つを含む、請求項１５に記載の非一時的コンピュータ可読媒体。
【請求項１８】
前記トリガは、前記ファイルの脆弱性を利用しようとする試みに関連するイベントおよび当該イベントに付随する条件を一つまたは複数記述し、
リターン指向プログラミング（ROP）を利用する呼出しチェーンからのイベントの生成、
ヒープ上での実行によるイベントの生成、
スタック上での実行によるイベントの生成、
スタックの変更、
オペレーティングシステム内のプロセスの権利および特権を記述するデータ構造の変更、
メモリページからの最初の実行によって生成されたイベント、および、
メモリの動的割当、および、動的に割り当てられたメモリへのオブジェクトの配置、
である、請求項１５に記載の非一時的コンピュータ可読媒体。
【請求項１９】
前記ファイルを開くことは、
ファイルが実行可能な場合は、当該ファイルの実行、または、
ファイルが実行不可能な場合は、アプリケーションによって当該ファイルを開くこと、
のうち一つを含む、請求項１５に記載の非一時的コンピュータ可読媒体。
【請求項２０】
セキュリティモジュールは、
仮想マシンの起動、または、
以前に作成された仮想マシンからのセキュリティモジュールの選択、
のうち、少なくとも一つを実行する、請求項１５に記載の非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、コンピュータセキュリティを改善するために悪意のあるファイルを特定する分野に関し、より具体的には、仮想マシンにおいて脆弱性を有するファイルを実行するときに実行ログを作成するためのシステムおよび方法に関する。
【背景技術】
【０００２】
現在、悪意のあるソフトウェア（コンピュータウィルス、トロイの木馬、インターネットワームなど）は、ユーザデータと、悪意のあるソフトウェアに感染した電子デバイスの実際のユーザとの両方に害を及ぼすように設計されたものが増えている。危害は、ユーザファイルを損傷または削除することによって、暗号通貨を「マイニング」するためにユーザのコンピューティングデバイスのリソースを使用することによって、電子的かつ秘密のユーザデータ（通信文、画像、ログイン、パスワード、銀行カードデータ）を盗むことによって、ならびに他のアクションによって引き起こされ得る。さらに、悪意のあるソフトウェアは絶えず変化しており、悪意のあるソフトウェアの作成者は、より新しい攻撃メカニズムに頼り、セキュリティアプリケーションに対してより新しい防御技術を採用している。様々なメカニズムが用いられているが、その例としては、（例えば、元のテキストまたは実行可能プログラムコードを、その機能は維持されるが、分析、作業アルゴリズムの理解、およびデコンパイル中の修正を妨げる形式に変更することによる）悪意のあるコードの難読化、またはエミュレーションに抵抗するためのメカニズムの使用（例えば、悪意のあるソフトウェアがエミュレータ内で実行されている間に悪意のあるソフトウェアがその悪意のあるアクティビティを表示しないように、悪意のあるソフトウェアがエミュレータ内で実行されているときを認識するための機能を悪意のあるソフトウェア内に含めることによる）などがある。
【０００３】
さらに、悪意のあるソフトウェアは、起動された直後に悪意のあるアクティビティを露わにしないことが多いが、その代わりに、アプリケーションプログラムインターフェース（API）関数を多数呼び出し（数百万のオーダーでAPI関数を呼び出し）たり、膨大なサイクル（数十億の反復のオーダー）を実行したり、起動された直後に所定の時間（例えば、「Sleep（）」関数を使用することによって１時間）にわたり動作を停止したりする。現在のユーザ・コンピューティングデバイスは、高性能でマルチコアプロセッサ（マルチプロセッサシステムもある）を有するので、ユーザはコアの１つの作業負荷に気付かないか、またはそれを重視しない可能性がある。さらに、ユーザは通常、デバイスがオンにされた後、１時間より長い間デバイスを使用する。したがって、悪意のあるプログラムは起動された場合、すぐに活動を表す必要はない。
【０００４】
オペレーティングシステムの他のプログラムまたはコンポーネントおよびモジュールの脆弱性を用いた（すなわち、脆弱性を利用した）悪意のあるプログラムおよびアプリケーションも使用されている。脆弱なプログラムがユーザのコンピューティングデバイスにインストールされていないか、または脆弱なプログラムの誤ったバージョンがインストールされている限り、悪意のあるアプリケーションはいずれにせよ、そのアクティビティを表すことはないだろう。
【０００５】
上述の技術と戦うため、セキュリティアプリケーション（アンチウイルスアプリケーションなど）のメーカは、ファイルを安全に実行するため、隔離された環境の形の仮想マシンを使用した方法を用いる。このような仮想マシンはしばしば、サンドボックスとして知られている。このような仮想マシンはハイパーバイザの制御下で動作し、ハイパーバイザは、内部で実行されているアプリケーションによって呼び出される関数をインターセプトするためのメカニズムを含む。
【０００６】
セキュリティアプリケーションは、シグネチャおよび／またはヒューリスティック分析など、悪意のあるソフトウェアを決定するための様々な方法を使用することに留意すべきだろう。分析の過程で、ファイルについて悪意があると決定されなかった場合、当該ファイルは、セキュリティアプリケーションによって、その挙動の分析のために前述の仮想マシンに渡されてもよい。例えば、セキュリティアプリケーションが信頼できるソフトウェアメーカのデジタルシグネチャを有していない場合、ファイルは、分析のために仮想マシンに渡されてもよい。仮想マシンに渡されたファイルは次に仮想マシンで実行され、実行中に、異なる関数を呼び出して実行されているファイルのアクションおよびイベントがインターセプトされる。インターセプトされたイベントおよびアクションは、ログに保存される。次に、ログにあるイベントおよびアクションは、セキュリティアプリケーションによって、または情報セキュリティの専門家によって分析される。このように、この技術によれば、イベントおよびアクションのインターセプトおよび集約のためのシステムは２ステップで動作する。第１のステップでは情報が収集され、第２のステップでは情報が分析される。
【０００７】
上記技術の欠点の１つは、この方法は、ファイルの実行中に実行プロセスに影響を与えないことである。例えば、分析されているファイルから（または分析されているファイルを開いたアプリケーションから）起動されたプロセスが、１時間その実行を停止した場合、または保存されたパスワードでファイルにアクセスして電子メールクライアントやメッセンジャ（メッセージを交換するためのプログラム）を攻撃している場合、攻撃されているプログラムは仮想マシン上には存在せず、プロセスの挙動に悪意があることは明らかにならない。言い換えれば、悪意のあるプロセスがパスワードを有する必要なファイルを見つけられない場合、悪意のあるプロセスはそれ自体でその実行を終了し、有害なアクティビティを表すことがない。さらに、悪意のあるアプリケーションがユーザのコンピューティングデバイス上に存在し、当該悪意のあるアプリケーションが他のプログラムまたはオペレーティングシステムのコンポーネントの脆弱性を利用するものである場合、このユーザのコンピューティングデバイスはセキュアであるとは見なせないため、上述の他のプログラムの脆弱性が利用される前に、かかるアプリケーションを特定することも必要である。さらに、脆弱なアプリケーションの誤ったバージョンがユーザのコンピューティングデバイス上にインストールされており、コンピューティングデバイスがアプリケーションの脆弱性を利用する悪意のあるプログラムを含む場合、かかる悪意のあるプログラムを特定することは困難であり、（脆弱なアプリケーションの誤ったバージョンがインストールされている等のため）悪意のあるプログラムは悪意のあるアクションを実行したり、脆弱性を利用したりすることなく終了する。
【０００８】
したがって、ファイルが仮想マシンで実行されているときにイベントをどのように収集するかを改善する必要がある。
【発明の概要】
【０００９】
本開示の態様は、コンピュータセキュリティの分野に関し、より具体的には、仮想マシンにおいて脆弱性を有するファイルを実行しているときに実行ログを作成するためのシステムおよび方法に関する。
【００１０】
一つの例示的な態様では、方法は、ハードウェアプロセッサを備えるコンピュータにおいて実現され、当該方法は、ファイルを開いたときに作成されたプロセスのスレッドの実行中のトリガのアクティブ化を発見し、当該トリガは、ファイルの脆弱性を利用しようとする試みに関連するイベントに付随する条件を記述し、ファイルを開いたときに作成されたプロセスのスタックを分析し、呼出しとリターンアドレスのシーケンスの形をとる、イベントに先行する関数呼び出しのチェーンを発見し、発見された関数呼び出しのチェーンが脆弱性を利用しようとする試みに関連するトリガの条件を満足するか分析し、トリガの条件が満足される場合、関数呼び出しのチェーンに関する情報をログに保存する、ことを含む。
【００１１】
本開示の一態様によれば、仮想マシンにおいて脆弱性を有するファイルを実行するときに実行ログを作成するためのシステムが提供され、当該システムは、ファイルを開いたときに作成されたプロセスのスレッドの実行中のトリガのアクティブ化を発見し、当該トリガは、ファイルの脆弱性を利用しようとする試みに関連するイベントに付随する条件を記述し、ファイルを開いたときに作成されたプロセスのスタックを分析し、呼出しとリターンアドレスのシーケンスの形をとる、イベントに先行する関数呼び出しのチェーンを発見し、発見された関数呼び出しのチェーンが脆弱性を利用しようとする試みに関連するトリガの条件を満足するか分析し、トリガの条件が満足される場合、関数呼び出しのチェーンに関する情報をログに保存する、よう構成されるハードウェアプロセッサを備える。
【００１２】
一つの例示的な態様では、仮想マシンにおいて脆弱性を有するファイルを実行するときに実行ログを形成するための一組の命令を記憶する非一時的なコンピュータ可読媒体が提供され、当該一組の命令は、ファイルを開いたときに作成されたプロセスのスレッドの実行中のトリガのアクティブ化を発見し、当該トリガは、ファイルの脆弱性を利用しようとする試みに関連するイベントに付随する条件を記述し、ファイルを開いたときに作成されたプロセスのスタックを分析し、呼出しとリターンアドレスのシーケンスの形をとる、イベントに先行する関数呼び出しのチェーンを発見し、発見された関数呼び出しのチェーンが脆弱性を利用しようとする試みに関連するトリガの条件を満足するか分析し、トリガの条件が満たされる場合、関数呼び出しのチェーンに関する情報をログに保存するための命令を含む。
【００１３】
一態様では、本方法は、トリガの条件が満足されたことに関連するメモリ領域のダンプを、ログに保存することをさらに含む。
【００１４】
一態様では、イベントは、プロセスのスレッドの実行中のAPI関数の呼び出し、API関数からのリターン、システムコール（例えば、スレッドがオペレーティングシステムのカーネルにアクセスして何らかの動作を実行すること）と、システムコールからのリターン、および、オペレーティングシステムからの通知の受信、のうちの少なくとも一つを含む。
【００１５】
一態様では、トリガは、ファイルの脆弱性を利用しようとする試みに関連するイベントおよび当該イベントに付随する条件を一つまたは複数記述し、リターン指向プログラミング（ROP）を利用する呼出しチェーンからのイベントの生成と、ヒープ上での実行によるイベントの生成と、スタック上での実行によるイベントの生成と、スタックの変更と、オペレーティングシステム内のプロセスの権利および特権を記述するデータ構造の変更と、メモリページからの最初の実行によって生成されたイベントと、メモリの動的割当、および、動的に割り当てられたメモリへのオブジェクトの配置と、である。
【００１６】
一態様では、ファイルを開くことは、ファイルが実行可能な場合は、当該ファイルの実行、または、ファイルが実行不可能な場合は、アプリケーションによって当該ファイルを開くことのうち一つを含む。
【００１７】
一態様では、セキュリティモジュールは、仮想マシンの起動、または、以前に作成された仮想マシンからのセキュリティモジュールの選択、のうち、少なくとも一つを実行する。
【００１８】
一態様では、トリガは、発生によりトリガをアクティブ化する実際のイベントと、ファイルの脆弱性を利用しようとする試みに関連する実際のイベントに付随するトリガの条件とを記述する。
【００１９】
本開示の教示による、脆弱性を有するファイルを実行するときの実行ログの形成は、コンピュータセキュリティを改善する。この改善は、ファイルを開いたときに作成されたプロセスのスレッドの実行中のトリガのアクティブ化を発見し、トリガは、ファイルの脆弱性を利用しようとする試みに関連するイベントに付随する条件を記述し、ファイルを開いたときに作成されたプロセスのスタックを分析し、呼出しとリターンアドレスのシーケンスの形をとる、イベントに先行する関数呼び出しのチェーンを発見し、発見された関数呼び出しのチェーンが脆弱性を利用しようとする試みに関連するトリガの条件を満足するか分析し、トリガの条件が満足される場合、関数呼び出しのチェーンに関する情報をログに保存することによって達成される。
【図面の簡単な説明】
【００２０】
本明細書に組み込まれてその一部を構成する添付の図面は、本開示の１つまたは複数の例示的な態様を示し、詳細な説明とともに、それらの原理および実施形態を説明する役割を果たす。
【００２１】
【図１】図１は、本開示の態様による、仮想マシンにおけるファイルの悪意分析の一例を示すブロック図である。
【図２】図２は、本開示の態様による、仮想マシンにおいて脆弱性を有するファイルを実行するときに実行ログを作成するための例示的なシステムを示すブロック図である。
【図３】図３は、仮想マシンにおいて脆弱性を有するファイルの実行中にログを作成するための例示的な方法を示す流れ図である。
【図４】図４は、本開示の態様を実施することができる汎用コンピュータシステムの一例を示す図である。
【発明を実施するための形態】
【００２２】
以下に、例示的な態様を、仮想マシンにおいて脆弱性を有するファイルの実行中にログ（すなわち、実行ログ）を作成するためのシステム、方法、およびコンピュータプログラムの文脈で説明する。当業者であれば、以下の説明は単に例示的なものであり、決して限定的なものではないことを理解するであろう。他の態様は、本開示の利益を有する当業者に容易に示唆されるであろう。ここで、添付の図面に示されるような例示的な態様の実施形態を詳細に参照する。図面および以下の説明を通じて、同一または類似の要素を参照するために、可能な限り同一の参照符号を使用する。
【００２３】
本開示の教示を明確に提示するために、本開示の様々な態様を説明する際に使用する、いくつかの用語および概念をここで定義する。
【００２４】
安全なファイル実行のための環境の形態をとる仮想マシンは、ホストオペレーティングシステム（OS）のリソースをゲストOSに提供するソフトウェアおよびハードウェアのセット（複合体）を備え、ゲストOSはホストOSへのリンクを有さない。
【００２５】
仮想マシンにおけるファイルの悪意分析のためのシステムのモジュールは、集積マイクロ回路（例えば、特定用途向け集積回路（ASIC）またはフィールドプログラマブルゲートアレイ（FPGA））などのハードウェアの使用により、または、マイクロプロセッサシステムおよびプログラム命令のセットなどのソフトウェアおよびハードウェアの組合せの形で、さらにはニューロシナプスチップに基づいて実現される、実際のデバイス、システム、コンポーネント、およびコンポーネントのグループを含む。かかるシステムの上記モジュールの機能は、ハードウェアのみによって実現されてもよく、また、機能のいくつかがソフトウェアによって、いくつかがハードウェアによって実現される組み合わせの形で実現されてもよい。いくつかの変形態様では、モジュールのいくつかまたはモジュールのすべてを、（図４に示すような）汎用コンピュータのプロセッサ上に実現することができる。さらに、システムの構成要素（各モジュール）は、単一のコンピューティングデバイス内で実現されてもよく、またはいくつかの相互接続されたコンピューティングデバイス間に分散されてもよい。
【００２６】
図１は、本開示の態様による、仮想マシンにおけるファイル１００の悪意分析の一例を示すブロック図である。セキュリティモジュール１１０は、ファイル１００を仮想マシン１２０に送信する。すると分析を行うため、ファイル１００は、ファイルの実行のための隔離された環境という形をとる仮想マシン１２０上で開かれる。一態様では、仮想マシン１２０は、セキュリティモジュール１１０によって起動される。一態様では、それまでに作成された仮想マシンの中から、仮想マシン１２０がセキュリティモジュール１１０により選択される。
【００２７】
本開示のファイル１００は、実行可能ファイル、ダイナミックライブラリ、インタプリタによって実行されるスクリプト（例えば、拡張子.ps1を有するMicrosoft  PowerShell（登録商標）ファイル）、実行のためのスクリプトを含むファイル（例えば、Microsoft  Office（商標）またはAdobe  Acrobat（登録商標）フォーマットのファイル）、ウェブページ、画像、利用されるとき（例えば、他のアプリケーションによって実行されるときまたは開かれるとき）にコンピューティングデバイスのユーザのデータに害を及ぼす可能性がある、他の標準的なファイルのうちの一つまたは複数を備えることができる。一態様では、ファイル１００は、リンク（ユニバーサルリソースロケータ（URL）など）を含んでもよい。
【００２８】
本開示の一般的な態様では、ファイル１００の悪意分析は、ファイルが仮想マシン１２０のOS内で開かれた後に行われる。ファイル１００を開くことは、以下の一つを実行することを含む：
−ファイル１００が実行可能である場合には、ファイル１００を実行すること。
−ファイル１００が実行可能でない場合には、アプリケーションによってファイル１００を開くこと。
【００２９】
ファイル１００を開くことの結果は、プロセスの作成、および、仮想マシン１２０における実行のための作成されたプロセスの起動である。実行中に少なくとも一つのスレッドが作成される。
【００３０】
一態様では、セキュリティモジュール１１０および仮想マシンのモニタ１１５（以下、「ハイパーバイザ」と呼ぶ）は、ユーザのコンピューティングデバイス上に実現される。仮想マシン１２０は、ハイパーバイザ１１５の制御下で動作する。一態様では、セキュリティモジュール１１０は、（アンチウイルスアプリケーションなどの）セキュリティアプリケーションである。別の態様では、セキュリティモジュール１１０およびハイパーバイザ１１５は、リモートサーバ（または異なるサーバ）上に実現され、または、クラウドサービスとして実現される。セキュリティモジュール１１０がリモートサーバ上で実現される場合、またはクラウドサービスとして実現される場合には、セキュリティモジュール１１０は、（例えば、ユーザのコンピューティングデバイス上で実行中のセキュリティモジュール１１０等）のサードパーティからファイル１００を取得し、それを仮想マシン１２０に渡す。そして、ファイル１００は仮想マシン上で開かれる。
【００３１】
一態様では、ハイパーバイザ１１５はインターセプタ１３０を含む（インターセプタ１３０は、ハイパーバイザ１１５のモジュール、コンポーネント、または機能部である。）。インターセプタ１３０は、仮想マシン１２０内でファイル１００が開かれたときに作成されるプロセスのスレッドによるAPI関数の呼び出しをインターセプトし、API関数を呼び出したスレッドが実行されているプロセッサのコンテキストを読み出す。
【００３２】
プロセッサのコンテキストは、少なくともプロセッサレジスタの値を含むことが留意される。一態様では、インターセプタ１３０はまた、スタックに関係する、プロセッサレジスタに含まれそれまでに読み取られたデータ（例えば、レジスタ拡張スタックポインタ（ESP）および拡張ベースポインタ（EBP）からのメモリアドレス）を使用して、関数呼び出しのスタックの内容を読み取る。さらに、インターセプタ１３０は、上記データを集約し、集約したデータを（例えば、データベースやログ１５０に）保存し、ファイル１００を開いた際に作成されたプロセスを実行した後、保存したデータをセキュリティモジュール１１０に送信する。これに対して、セキュリティモジュール１１０は、インターセプタ１３０からのデータに基づいて、ファイル１００の悪意に関する判定を行う。本開示の態様では、保存されたデータの分析後に判定が行われる。例えば、判定は、ファイル１００を開いたときに作成されたプロセスのスレッドによるAPI関数の呼び出しに使用されるシーケンスおよびパラメータに依存し得る。一態様では、判定が行われていない場合、インターセプタ１３０により保存されたデータはセキュリティモジュール１１０によって、分析のため情報セキュリティ専門家（図１に図示せず。）に送られる。
【００３３】
図２は、本開示の態様による、仮想マシンにおいて脆弱性を有するファイルを実行するときに実行ログを作成するための例示的なシステム２００を示すブロック図である。本開示のシステムはファイル１００が安全であるという点で有利であり、提案されるシステムはインターセプタ１３０に加え分析モジュール１４０を含む。一態様では、ハイパーバイザ１１５は分析モジュール１４０を含む。別の態様では、分析モジュール１４０はセキュリティモジュール１１０の構成要素（モジュール、機能部）である。
【００３４】
本開示の態様では、ファイル１００を開いたときに作成されるプロセスのスレッド内のイベントをインターセプタ１３０がインターセプトする。一態様では、イベントは以下の一つまたは複数である：
−プロセスのスレッドの実行中のAPI関数の呼び出し；
−API関数からのリターン；  
−システムコール（つまり、スレッドがOSのカーネルにアクセスして何らかの動作を実行すること）;
−システムコールからのリターン；および
−OSからのメッセージ（たとえば通知）（たとえば、スレッドの作成、プロセスの作成、モジュールのロードを示すメッセージ等）。
【００３５】
イベントのインターセプトの場合、スレッドの実行はインターセプタ１３０によって停止される。スレッドの実行は、スレッドの命令の実行を停止することによって停止される。
【００３６】
なお、仮想マシン１２０のOSがシステムおよびユーザの特権レベルをハードウェアで分割している場合、仮想マシン１２０のOS保護のための異なるリング上でインターセプトを行うことができる。一態様では、OS保護の異なるリング上でのインターセプトは、カーネルレベル（カーネルモード）および／またはユーザレベル（ユーザモード）でのイベントのインターセプトを提供することができる。
【００３７】
本開示の一態様では、ファイル１００を開いたときに作成されるプロセスのスレッドの実行中に、インターセプタ１３０は、スレッドによって呼び出されているAPI関数のコーディング規約を決定する。コーディング規約の決定により、呼び出されているAPI関数にパラメータを送信するためのプロセッサのレジスタの使用を明確に決定することができる。このため、呼出しパラメータはたとえば、第１のパラメータを含む拡張カウントレジスタ（ECX）、第２のパラメータを含む拡張データレジスタ（EDX）、および残りのパラメータを含む拡張スタックポインタ（ESP）用レジスタ内に見出される。さらに、コーディング規約の決定により、リターン値の明確な決定が可能となる。たとえば、API関数が値「０」を返す場合、これはレジスタEAX(拡張アキュムレータレジスタ）で行われる。
【００３８】
図２に戻り、悪意のあるアプリケーション１９０はファイル１００の脆弱性を利用している。しかしながら、悪意のあるアプリケーション１９０は、ハッカーによって元々考えられていたように、上述の悪意のあるコードが元々対象として設計されたものとは異なるバージョンのファイル１００上では、自身の存在を明らかにしない可能性がある。たとえば、Microsoft  Office（商標）  version  2013.1の脆弱性を利用する所与の悪意のあるアプリケーション１９０は、Microsoft  Office  version  2013.2上では、悪意のあるアクティビティを明らかにしないだろう。この場合、悪意のあるアプリケーション１９０またはMicrosoft  Office自体は、例外を伴って終了するか、または、悪意のあるアプリケーション１９０がうまく工夫されている場合、悪意のあるアプリケーション１９０は、脆弱性の利用についてチェックした後その作業を終了しいかなるアクティビティ（イベント）も生成しない。また、悪意のあるアプリケーション１９０がうまく機能する場合でも、追加のプロセスを起動せず、利用されているアプリケーション（ファイル１００を開いたときに作成されたプロセス）内で機能するかもしれない。この場合、ファイル１００の脆弱性を利用することができる悪意のあるアプリケーション１９０は、悪意のあるアクションをまだ実行してはいないが、ユーザのコンピューティングデバイスが安全であるとはみなすことができない。悪意のあるアプリケーション１９０のアクションの結果および成功にかかわらず、ファイル１００の脆弱性の存在を利用して、かつ、その後のファイル１００の利用によって実現される、悪意のあるアプリケーション１９０によって実行されるアクションのインスタンスを特定することが必要である。さらに、本開示の方法は、カーネルレベルでのイベントのインターセプトを可能にするので、カーネルレベルでのイベントを使用して、オペレーティングシステムのコンポーネント（ファイル）の脆弱性を利用する悪意のあるアプリケーション１９０を特定することができる。
【００３９】
一態様では、インターセプタ１３０はトリガのセットを利用する。一態様では、トリガはデータベースに保持され、仮想マシンの起動時にデータベースから選択される。本開示の態様では、トリガは、その発生がトリガをアクティブ化する実際のイベントと、実際のイベントに付随する条件とを記述し、条件は脆弱性を利用する試みに関連する。したがって、トリガはたとえば、特定のAPI関数のセット、システムコール、およびオペレーティングシステムの通知、ならびに脆弱性を利用するときに用いることができるそれらの発生の条件を記述する。
【００４０】
一態様では、トリガは、脆弱性を利用する試みに関連するイベントに付随する少なくとも以下のイベントおよび条件を記述する：
−リターン指向プログラミング（ROP）を利用する呼出しチェーンからのイベント生成;
−ヒープ上でのコードの実行によるイベントの生成;
−スタック上でのコードの実行によるイベントの生成;
−スタックの変更;
−オペレーティングシステム内のプロセスの権利および特権を記述するデータ構造の変更（悪意のあるアプリケーション１９０がオペレーティングシステムのカーネルの脆弱性を利用している場合、その結果、いずれかのアプリケーションがそれまでは有していなかった権利を取得する可能性がある）;
−メモリページからの最初の実行によって生成されたイベント；および
−メモリの動的割当およびその中へのオブジェクトの配置。
【００４１】
発生がトリガをアクティブ化するイベントと、トリガの付随条件が満足されたことと、を、インターセプタ１３０が発見したことは、悪意のあるアプリケーション１９０によるセキュアファイル１００の脆弱性を利用しようとする試みと同じではないが、ファイル１００が脆弱性を有し、悪意のあるアプリケーション１９０がかかる脆弱性を利用しようとしていることを高い確率で示す。本開示の方法は、正当なコード（例えば、ファイル１００およびこのファイルがその実行中に使用するモジュールに含まれるセキュアコード）の実行中にトリガがアクティブ化されたかどうか、またはファイル１００を開いたときに作成されたプロセスのスレッドの実行中にトリガがアクティブ化されたかどうか、または、たとえば、スタック上に保持されたデータの上書き、ヒープオーバーフローなどの別の方法で制御移行が行われたかどうか、を発見することを可能にする。
【００４２】
トリガのアクティブ化の場合、インターセプタ１３０は、ファイル１００を開いたときに作成されたプロセスのスタックを分析し、イベントに先行する関数呼び出しのシーケンスを特定する。つまり、インターセプタ１３０は、呼び出しおよびリターンアドレスのシーケンスの形をとる、関数呼び出しのシーケンスを特定する。次に、インターセプタ１３０は、特定された関数呼び出しのシーケンスが、トリガの条件（たとえば、ファイル１００を開いたときにロードされたモジュールに属さない呼出しのアドレス等）を満たすか否か分析する。
【００４３】
トリガの条件が満たされた場合、インターセプタ１３０は、特定された関数呼び出しのシーケンスに関するデータ（情報）をログ１５０に保存する。
【００４４】
一態様では、インターセプタ１３０はまた、トリガの付随条件が満足されたことに関連するメモリ領域のダンプをログ１５０に保存する。
【００４５】
上記教示を説明するため、本システムの動作の例を以下に示す。
【００４６】
（例１）
インターセプタ１３０がイベントを発見する：  API関数が呼び出され、それに対してトリガがアクティブ化された。インターセプタ１３０はESPレジスタをチェックし、関数呼び出しのアドレスを一つずつ特定し、API関数の呼び出し元を決定する。API関数を呼び出したコードが、ファイル１００を開いたときに作成されたプロセスのアドレス空間にロードされたモジュールまたはダイナミックライブラリに見つからない場合（すなわち、コードが異常なアドレスに位置する場合）、上述のアクション、すなわち、呼び出しの異常なアドレスを含む、特定された呼び出しのシーケンスに関する情報をログ１５０に保存すること、および、異常なアドレスの周りのメモリ領域のダンプをログ１５０に保存すること、を実行する必要がある。
【００４７】
（例２）
インターセプタ１３０がイベントを発見する：  API関数が呼び出され、それに対してトリガがアクティブ化された。インターセプタ１３０はESPレジスタをチェックし、スタック上のリターン指向プログラミング（ROP）チェーンの存在をチェックする。チェーンが見つかった場合、メモリダンプ（スタック）は、さらなる分析のためにログ１５０に保存される。
【００４８】
（例３）
インターセプタ１３０がイベントを発見する：  それに対してトリガがアクティブ化されたAPI関数からのリターンである。インターセプタは、API関数のリターンアドレスをチェックする。リターンアドレスがヒープまたはスタックを示す場合、リターンアドレスとヒープまたはスタックのダンプとがログ１５０に保存される。
【００４９】
（例４）
インターセプタ１３０がイベントを発見する：  あるメモリページ上の実行の第１のインスタンスである。インターセプタはメモリページを分析する。ページが、ロードされたモジュールおよびライブラリに対応しない場合、そこから実行の第１のインスタンスが発生したメモリページのアドレスを保存することができ、さらに、メモリページ自体の内容をさらに分析するため、たとえばログ１５０に保存することができる。
【００５０】
（例５）
脆弱性の利用がいくつかのステップで行われる場合、悪意のあるアプリケーション１９０はまず、メモリオブジェクト（データ構造、実行可能コードなど）が配置されることになる、ある量のメモリを割り当て（例えば、ヒープの割振り）、次に、このメモリに制御を移す試みが行われる。インターセプタ１３０はイベントを発見する:  すなわち、動的メモリ割り当てである。（たとえば、脆弱なファイル１００のバージョンが一致しないため）制御が移されなかった場合であっても、インターセプタ１３０は、オブジェクトが配置された、割り当てられたメモリのダンプを記録し、さらなる分析のために記録されたダンプを送信する。
【００５１】
（例６）
インターセプタ１３０はイベントを発見する：  オペレーティングシステム内のプロセスの特権を記述するデータ構造が変更されている。この場合、オペレーティングシステムのカーネルの脆弱性が利用される可能性が高い。インターセプタ１３０はさらなる分析のために、ログ１５０に、インターセプトされたイベントを生成した関数呼び出しのスタック、プロセスの特権を記述するデータ構造、およびプロセスのメモリダンプを保存する。
【００５２】
種々の態様の説明に戻ると、インターセプタ１３０が各イベントについて上述のアクションすべてを実行することは、仮想マシンにおけるファイル１００実行中の性能の大幅な低下とログ１５０のサイズの大幅な増加とをもたらすので、望ましくないことを理解されたい。したがって、トリガの付随する条件が満たされなければならない。インターセプトされたイベント、プロセッサのコンテキスト、およびタグのアクティブ化の結果として得られたデータは、インターセプタ１３０によってログ１５０に保存される。保存された後、ログ１５０はインターセプタ１３０によって分析モジュール１４０に送られる。
【００５３】
本開示の態様では、インターセプタ１３０によりログ１５０に保存されたデータを分析するために、分析モジュール１４０は当技術分野で通常知られている方法（シグネチャまたはヒューリスティック分析など）を使用する。
【００５４】
このように、図２のシステムは、インターセプタ１３０によって作成されたログ１５０に基づき、仮想マシン内で、ファイル１００またはオペレーティングシステムのコンポーネントの脆弱性を利用する悪意のあるアプリケーション１９０の存在を検知する。
【００５５】
図３は、仮想マシンにおいて脆弱性を有するファイルの実行中にログを作成するための例示的な方法３００を示す流れ図である。
【００５６】
本開示の態様では、ログ１５０を作成するために、セキュリティモジュール１１０はセキュアファイル１００を仮想マシン１２０に送信する。ログ１５０の作成は、仮想マシン１２０のオペレーティングシステムにおいてファイル１００が受信され開かれた後に行われる。方法３００はステップ３０５で開始し、ステップ３０７に進む。
【００５７】
ステップ３０７において、本方法はファイル、例えば、ファイル１００を受信して開く。
【００５８】
一態様では、ファイル１００を開くことは、以下の一つを含む：ファイルが実行可能である場合は、当該ファイルの実行；または、ファイルが実行可能でない場合は、アプリケーションによって当該ファイルを開くこと。
【００５９】
ステップ３１０において、方法３００は、インターセプタ１３０により、受信されたファイル、例えば、ファイル１００を開いたときに作成されたプロセスのスレッドの実行中のトリガのアクティブ化を発見する。トリガは、ファイルの脆弱性を利用する試みに関連するイベントの一つまたは複数の付随条件を記述する。
【００６０】
一態様では、イベントは、少なくとも以下のうち一つを含む：
−プロセスのスレッド実行中のAPI関数の呼び出し;
−API関数からのリターン;
−システムコール（例えば、スレッドがオペレーティングシステムのカーネルにアクセスして何らかの動作を実行すること）;
−システムコールからのリターン；および
−オペレーティングシステムからの通知の受信。
【００６１】
本開示の態様では、トリガは、（i）その発生がトリガをアクティブ化する、実際のイベント、および、（ii）ファイルの脆弱性を利用しようとする試みに関連する、実際のイベントに付随する条件を記述する。
【００６２】
一態様では、トリガは、ファイルの脆弱性を利用しようとする試みに関連するイベントと当該イベントに付随する条件のうちの一つまたは複数を記述する：
−リターン指向プログラミング（ROP）を利用する呼出しチェーンからのイベントの生成;
−ヒープ上での実行によるイベントの生成;
−スタック上での実行によるイベントの生成;
−スタックの変更;
−オペレーティングシステム内のプロセスの権利および特権を記述するデータ構造の変更;
−メモリページからの最初の実行によって生成されたイベント；および
−メモリの動的割当、および、動的に割り当てられたメモリへのオブジェクトの配置。
【００６３】
ステップ３２０において、方法３００は、インターセプタ１３０により、ファイルを開いたときに作成されたプロセスのスタックを分析し、呼出しおよびリターンアドレスのシーケンスの形の、イベントに先行する関数呼び出しのチェーンを発見する。
【００６４】
ステップ３３０において、方法３００は、インターセプタ１３０により、発見された関数呼び出しのチェーンが、脆弱性を利用しようとする試みに関連するトリガの条件を満たすか、分析する。
【００６５】
ステップ３４０において、ファイル１００の脆弱性を利用する試みに関連するトリガの条件が満たされると、方法３００は、インターセプタ１３０により、関数呼出しのチェーンに関する情報をログ１５０に保存する。言い換えれば、ステップ３３０の分析の結果がログ１５０に保存される。
【００６６】
一態様では、インターセプタ１３０はまた、ログ１５０内のトリガの条件を満たすことに関連するメモリ領域のダンプを保存する。
【００６７】
上述のように、本開示は、コンピュータのセキュリティを改善するためのシステムおよび方法を説明する。本開示の方法の一つの利点は、仮想マシンにおいて脆弱性を有するファイルを実行することであり、実行ログは、そのファイルの脆弱性の可能な利用に関連するイベントに関するデータを含むように作成される。
【００６８】
図４は、仮想マシンにおいて脆弱性を有するファイルの実行中にログを作成するためのシステムおよび方法の態様が例示的な態様に従って実装され得る、コンピュータシステム２０を示すブロック図である。コンピュータシステム２０は例えば、前述のように、コンピューティングデバイス上の仮想マシンに対応することができることに留意されたい。コンピュータシステム２０は、複数のコンピューティングデバイス、または単一のコンピューティングデバイス、たとえば、デスクトップコンピュータ、ノートブックコンピュータ、ラップトップコンピュータ、モバイルコンピューティングデバイス、スマートフォン、タブレットコンピュータ、サーバ、メインフレーム、埋め込みデバイス、および他の形態のコンピューティングデバイスとすることができる。
【００６９】
図示されるように、コンピュータシステム２０は、中央処理装置（CPU）２１と、システムメモリ２２と、中央処理装置２１に関連するメモリを含む様々なシステムコンポーネントを接続するシステムバス２３とを含む。システムバス２３は、バスメモリまたはバスメモリコントローラ、周辺バス、および他の任意のバスアーキテクチャとインタラクトすることができるローカルバスを含むことができる。バスの例としては、PCI、ISA、PCI−Express、HyperTransport（商標）、InfiniBand（商標）、Serial  ATA、I2C、および他の好適な相互接続を含むことができる。中央処理装置２１（プロセッサとも呼ばれる）は、単一または複数のコアを有する単一または複数のプロセッサ群を含むことができる。プロセッサ２１は、本開示の技術を実現する一つまたは複数のコンピュータ実行可能コードを実行することができる。システムメモリ２２は、ここで使用されるデータおよび／またはプロセッサ２１によって実行可能なコンピュータプログラムを記憶するための任意のメモリとすることができる。システムメモリ２２は、ランダムアクセスメモリ（RAM）２５などの揮発性メモリ、および読取り専用メモリ（ROM）２４、フラッシュメモリなどの不揮発性メモリ、またはそれらの任意の組合せを含むことができる。基本入出力システム（BIOS）２６は、ROM２４を使用してオペレーティングシステムをロードするときのような、コンピュータシステム２０の要素間で情報を転送するための基本手順を記憶することができる。
【００７０】
コンピュータシステム２０は、一つまたは複数のリムーバブル記憶装置２７、一つまたは複数の非リムーバブル記憶装置２８、またはそれらの組合せなどの一つまたは複数の記憶装置を含むことができる。一つまたは複数のリムーバブル記憶装置２７および非リムーバブル記憶装置２８は、ストレージインタフェース３２を介してシステムバス２３に接続される。一態様では、記憶装置および対応するコンピュータ可読記憶媒体は、コンピュータシステム２０のコンピュータ命令、データ構造、プログラムモジュール、および他のデータを記憶するための独立電源型モジュールである。システムメモリ２２、リムーバブル記憶装置２７、および非リムーバブル記憶装置２８は、様々なコンピュータ可読記憶媒体を使用することができる。コンピュータ可読記憶媒体の例には、キャッシュ、SRAM、DRAM、ゼロキャパシタRAM、ツイントランジスタRAM、eDRAM、EDO  RAM、DDR  RAM、EEPROM、NRAM、RRAM（登録商標）、SONOS、PRAMなどの機械メモリ、ソリッドステートドライブ（SSD）またはフラッシュドライブなどのフラッシュメモリまたは他のメモリ技術、ハードディスクドライブまたはフロッピーディスクなどの磁気カセット、磁気テープ、および磁気ディスクストレージ、コンパクトディスク（CD−ROM）またはデジタル多用途ディスク（DVD）などの光ストレージ、ならびに所望のデータを記憶するために使用することができ、コンピュータシステム２０によってアクセスすることができる任意の他の媒体が含まれる。
【００７１】
コンピュータシステム２０のシステムメモリ２２、リムーバブル記憶装置２７、および非リムーバブル記憶装置２８を使用して、オペレーティングシステム３５、追加のプログラムアプリケーション３７、他のプログラムモジュール３８、およびプログラムデータ３９を記憶することができる。コンピュータシステム２０は、キーボード、マウス、スタイラス、ゲームコントローラ、音声入力デバイス、タッチ入力デバイスなどの入力デバイス４０からデータを通信する周辺インタフェース４６、または、シリアルポート、パラレルポート、ユニバーサルシリアルバス（USB）などの一つまたは複数のI/Oポートを経由するプリンタもしくはスキャナなどの他の周辺デバイス、または他の周辺インタフェースを含むことができる。一つまたは複数のモニタ、プロジェクタ、または統合ディスプレイなどの表示装置４７も、ビデオアダプタなどの出力インタフェース４８を介してシステムバス２３に接続することができる。コンピュータシステム２０は、表示装置４７に加え、ラウドスピーカおよび他のオーディオビジュアル装置のような他の周辺出力装置（図示せず）を装備することができる。
【００７２】
コンピュータシステム２０は、一つまたは複数のリモートコンピュータ４９へのネットワーク接続を使用して、ネットワーク環境で動作することができる。リモートコンピュータ４９は、コンピュータシステム２０の性質を説明する上述の要素の大部分またはすべてを含むローカルコンピュータワークステーションまたはサーバとすることができる。ルータ、ネットワーク局、ピアデバイス、または他のネットワークノードなどの他のデバイスも、コンピュータネットワーク内に存在し得るが、これらに限定されない。コンピュータシステム２０は、ローカルエリアコンピュータネットワーク（LAN）５０、ワイドエリアコンピュータネットワーク（WAN）、イントラネット、およびインターネットなどの一つまたは複数のネットワークを介してリモートコンピュータ４９と通信する一つまたは複数のネットワークインタフェース５１またはネットワーク・アダプタを含むことができる。ネットワークインタフェース５１として、例えば、イーサネット（登録商標）インタフェース、フレームリレーインタフェース、SONETインタフェース、無線インタフェース等が挙げられる。
【００７３】
本開示の態様は、システム、方法、および/またはコンピュータプログラム製品であってもよい。コンピュータプログラム製品は、プロセッサに本開示の態様を実行させるためのコンピュータ可読プログラム命令が格納されたコンピュータ可読記憶媒体（または複数の媒体）を含むことができる。
【００７４】
コンピュータ可読記憶媒体は、コンピュータシステム２０などのコンピューティングデバイスのプロセッサによってアクセスすることができる命令またはデータ構造の形態のプログラムコードを保持し、記憶することができる有形デバイスとすることができる。コンピュータ可読記憶媒体は、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、またはそれらの任意の適切な組合せとすることができる。例えば、このコンピュータ可読記憶媒体は、ランダムアクセスメモリ（RAM）、リードオンリメモリ（ROM）、EEPROM、ポータブルコンパクトディスクリードオンリメモリ（CD−ROM）、デジタル多用途ディスク（DVD）、フラッシュメモリ、ハードディスク、ポータブルコンピュータディスケット、メモリスティック、フロッピーディスク、または、パンチカード若しくは命令が記録された溝内の隆起構造などの機械的に符号化されたデバイスを含むことができる。本明細書で使用されるように、コンピュータ可読記憶媒体は、電波または他の自由に伝播する電磁波、導波管または伝送媒体を通って伝播する電磁波、または有線で伝送される電気信号など、一時的な信号そのものであると解釈されるべきではない。
【００７５】
本明細書で説明するコンピュータ可読プログラム命令は、例えば、インターネット、ローカルエリアネットワーク、ワイドエリアネットワーク、および/またはワイヤレスネットワークなどのネットワークを介して、コンピュータ可読記憶媒体からそれぞれのコンピューティングデバイスに、または外部コンピュータもしくは外部記憶デバイスにダウンロードすることができる。ネットワークは、銅線伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ、および/またはエッジサーバを含むことができる。各コンピューティングデバイス内のネットワークインタフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティングデバイス内のコンピュータ可読記憶媒体に記憶するために、コンピュータ可読プログラム命令を転送する。
【００７６】
本開示の処理を実行するためのコンピュータ可読プログラム命令は、アセンブリ命令、命令セットアーキテクチャ（ISA）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはオブジェクト指向プログラミング言語および従来の手続き型プログラミング言語を含む一つまたは複数のプログラミング言語の任意の組合せで書かれたソースコードまたはオブジェクトコードのいずれかとすることができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンソフトウェアパッケージとして、部分的にユーザのコンピュータ上で、部分的にリモートコンピュータ上で、または完全にリモートコンピュータまたはサーバ上で実行することができる。後者のシナリオでは、リモートコンピュータは、LANまたはWANを含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または（例えば、インターネットを介して）外部コンピュータに接続されてもよい。いくつかの実施形態では、例えば、プログラマブル論理回路、フィールドプログラマブルゲートアレイ（FPGA）、またはプログラマブル論理アレイ（PLA）を含む電子回路は本開示の態様を実行するために、電子回路をパーソナル化するためにコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行することができる。
【００７７】
様々な態様では、本開示で説明されるシステムおよび方法はモジュールによって対処することができる。本明細書で使用される「モジュール」という用語は、例えば、特定用途向け集積回路（ASIC）またはFPGAなどのハードウェアを使用して実装される、あるいは、マイクロプロセッサシステムおよび（実行されている間に）マイクロプロセッサシステムを専用デバイスに変換するモジュールの機能を実装するための命令セットなどのハードウェアおよびソフトウェアの組合せとして実装される、現実世界のデバイス、コンポーネント、または構成要素の構成を指す。また、モジュールは二つの組み合わせとして実装されてもよく、特定の機能はハードウェアのみによって促進され、他の機能はハードウェアとソフトウェアとの組み合わせによって促進される。いくつかの実装形態ではモジュールの少なくとも一部、および場合によってはすべてが、コンピュータシステムのプロセッサ（上記の図４でより詳細に説明したものなど）上で実行され得る。したがって、各モジュールは、様々な適切な構成で実現されてもよく、本明細書で例示される任意の特定の実施形態に限定されるべきではない。
【００７８】
明確にするために、本明細書では態様の一般的な特徴のすべてを開示しているわけではない。本開示の任意の実際の実装の開発において、開発者の特定の目標を達成するために、多数の実装固有の決定が行われなければならず、これらの特定の目標は、異なる実装および異なる開発者によって異なることが理解されるのであろう。そのような開発努力は複雑で時間がかかる可能性があるが、それにもかかわらず、本開示の恩恵を受ける当業者にとっては日常的なエンジニアリングの仕事であることが理解される。
【００７９】
さらに、本明細書で使用される語法または用語は説明を目的としたものであり、限定を目的としたものではない。したがって、本明細書の語法または用語は、関連技術の当業者の知識と組み合わせて、本明細書で提示される教示およびガイダンスに照らして、当業者によって解釈されるべきであることを理解されたい。さらに、明細書または特許請求の範囲におけるいかなる用語も、そのように明示的に記載されていない限り、一般的ではない意味または特別な意味に帰することを意図していない。
【００８０】
本明細書で開示される様々な態様は、例示として本明細書で言及される既知のモジュールに対する現在および将来の既知の同等物を包含する。さらに、態様および用途が示され、説明されてきたが、本明細書に開示された発明概念から逸脱することなく、上記よりも多くの変形例が可能であることは本開示の恩恵を受ける当業者には明らかであろう。
【図１】
2020109649.tif 000003
【図２】
2020109649.tif 000004
【図３】
2020109649.tif 000005
【図４】
2020109649.tif 000006
【外国語明細書】
2020109649000001.pdf