(57)【要約】  様々な実施形態は、コンピューティングデバイス上の仮想環境内で実行されるプログラムを分析するためのコンピューティングデバイス上で実施される方法を含む。方法は、プログラムが仮想環境内で実行されているかどうかをプログラムが検出しようと試みているかどうかを決定するステップと、プログラムが仮想環境内で実行されているかどうかをプログラムが検出しようと試みているとの決定に応じて、コンピューティングデバイスの保護モード内でプログラムを分析するステップとを含んでもよい。
2018534695.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイス上の仮想環境内で実行されるプログラムを分析するための方法であって、
前記プログラムが、それが前記仮想環境内で実行されているかどうかを検出しようと試みているかどうかを決定するステップと、
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているとの決定に応じて、前記コンピューティングデバイスの保護モード内で前記プログラムを分析するステップと
を含む、方法。
【請求項２】
前記保護モードがシステム管理モードである、請求項1に記載の方法。
【請求項３】
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みていないとの決定に応じて、前記仮想環境内の前記プログラムの分析を継続するステップをさらに含む、請求項1に記載の方法。
【請求項４】
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているどうかを決定するステップが、
前記仮想環境のアプリケーションプログラミングインターフェース(API)プロパティへの前記プログラムのアクセスを監視するステップ
を含む、請求項1に記載の方法。
【請求項５】
前記APIプロパティが、モデル固有のレジスタ、命令の長さ、ストア割込み記述子テーブルレジスタ、デバッガ関数、およびホスト-ゲスト通信のための命令からなるグループから選択された少なくとも1つの要素を含む、請求項4に記載の方法。
【請求項６】
前記仮想環境が、仮想マシンまたはエミュレータを含む、請求項1に記載の方法。
【請求項７】
コンピューティングデバイスであって、
動作を実行するためのプロセッサ実行可能命令を備えるプロセッサを含み、前記動作が、
前記コンピューティングデバイス上の仮想環境内で実行されるプログラムが、それが前記仮想環境内で実行されているかどうかを検出しようと試みているかどうかを決定することと、
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているとの決定に応じて、前記コンピューティングデバイスの保護モード内で前記プログラムを分析することと
を含む、コンピューティングデバイス。
【請求項８】
前記保護モードがシステム管理モードである、請求項7に記載のコンピューティングデバイス。
【請求項９】
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みていないとの決定に応じて、前記仮想環境内で前記プログラムの分析を継続することを含む動作を実行するためのプロセッサ実行可能命令を前記プロセッサがさらに備える、請求項7に記載のコンピューティングデバイス。
【請求項１０】
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているかどうかを決定することが、
前記仮想環境のアプリケーションプログラミングインターフェース(API)プロパティへの前記プログラムのアクセスを監視すること
を含むプロセッサ実行可能命令を備える、請求項7に記載のコンピューティングデバイス。
【請求項１１】
前記APIプロパティが、モデル固有のレジスタ、命令の長さ、ストア割込み記述子テーブルレジスタ、デバッガ関数、およびホスト-ゲスト通信のための命令からなるグループから選択された少なくとも1つの要素を含む、請求項10に記載のコンピューティングデバイス。
【請求項１２】
前記仮想環境が、仮想マシンまたはエミュレータを含む、請求項7に記載のコンピューティングデバイス。
【請求項１３】
コンピューティングデバイスのプロセッサに動作を実行させるように構成されたプロセッサ実行可能ソフトウェア命令を記憶した、非一時的コンピュータ可読記憶媒体であって、前記動作が、
前記コンピューティングデバイス上の仮想環境内で実行されるプログラムが、それが前記仮想環境内で実行されているかどうかを検出しようと試みているかどうかを決定することと、
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているとの決定に応じて、前記コンピューティングデバイスの保護モード内で前記プログラムを分析することと
を含む、非一時的コンピュータ可読記憶媒体。
【請求項１４】
前記保護モードが、システム管理モードである、請求項13に記載の非一時的コンピュータ可読記憶媒体。
【請求項１５】
前記記憶されたプロセッサ実行可能ソフトウェア命令が、前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みていないとの決定に応じて、前記仮想環境内の前記プログラムの分析を継続することをさらに含む動作を、前記プロセッサに実行させるように構成される、請求項13に記載の非一時的コンピュータ可読記憶媒体。
【請求項１６】
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているかどうかを決定することが、
前記仮想環境のアプリケーションプログラミングインターフェース(API)プロパティへの前記プログラムのアクセスを監視すること
を含むように、前記プロセッサに動作を実行させるように、前記記憶されたプロセッサ実行可能ソフトウェア命令がさらに構成される、請求項13に記載の非一時的コンピュータ可読記憶媒体。
【請求項１７】
前記APIプロパティが、モデル固有のレジスタ、命令の長さ、ストア割込み記述子テーブルレジスタ、デバッガ関数、およびホスト-ゲスト通信のための命令からなるグループから選択された少なくとも1つの要素を含む、請求項16に記載の非一時的コンピュータ可読記憶媒体。
【請求項１８】
前記仮想環境が、仮想マシンまたはエミュレータを含む、請求項13に記載の非一時的コンピュータ可読記憶媒体。
【請求項１９】
コンピューティングデバイスであって、
前記コンピューティングデバイス上の仮想環境内で実行されるプログラムが、それが前記仮想環境内で実行されているかどうかを検出しようと試みているかどうかを決定するための手段と、
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているとの決定に応じて、前記コンピューティングデバイスの保護モード内で前記プログラムを分析するための手段と
を備える、コンピューティングデバイス。
【請求項２０】
前記保護モードがシステム管理モードである、請求項19に記載のコンピューティングデバイス。
【請求項２１】
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みていないとの決定に応じて、前記仮想環境内の前記プログラムの分析を継続するための手段をさらに備える、請求項19に記載のコンピューティングデバイス。
【請求項２２】
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているどうかを決定するための前記手段が、
前記仮想環境のアプリケーションプログラミングインターフェース(API)プロパティへの前記プログラムのアクセスを監視するための手段
を含む、請求項19に記載のコンピューティングデバイス。
【請求項２３】
前記APIプロパティが、モデル固有のレジスタ、命令の長さ、ストア割込み記述子テーブルレジスタ、デバッガ関数、およびホスト-ゲスト通信のための命令からなるグループから選択された少なくとも1つの要素を含む、請求項22に記載のコンピューティングデバイス。
【請求項２４】
前記仮想環境が、仮想マシンまたはエミュレータを含む、請求項19に記載のコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
デスクトップコンピュータ、ラップトップ、タブレット、およびスマートフォンなどのモバイルコンピューティングデバイスを含む様々なコンピューティングデバイスは、メモリに記憶されたソフトウェア命令に従ってプログラムおよびプロセスを実行する。マルウェアなどのいくつかのプログラムは、コンピューティングデバイス上で動作するとき、悪意のあるコードを実行する。それらのプログラムが悪意のあるものであるか否かを決定するためにプログラムを検出し、分析するための様々な方法がある。
【０００２】
プログラムを分析するための1つの方法は、仮想マシンまたはエミュレータなど、コンピューティングデバイス上の仮想環境内でプログラムを実行することである。仮想環境は、プログラムの実行のための人工自己完結型環境(artificial self-contained environment)を提供する。アンチマルウェアアプリケーション(anti-malware application)または他のプログラムアナライザが、プログラムが悪意のあるものであるか否かを決定するために、仮想環境内のプログラムの挙動を観察および分析する場合がある。
【０００３】
しかしながら、いくつかの悪意のあるプログラムは、プログラムが仮想環境内で実行されているかどうかを検出しようと試みることによって、仮想環境試験を回避しようとする場合がある。たとえば、プログラムは、いくつかの関数の呼出し、または仮想動作環境を示すいくつかのデータ構造へのアクセスを試みる場合がある。プログラムが仮想環境内で実行されていることをプログラムが検出する場合、プログラムは、良性であるようにふるまい、したがって検出を逃れる場合がある。プログラムが解放され、コンピューティングデバイスの通常のオペレーティングシステム内で実行されると、プログラムは悪意をもって作動する場合がある。
【発明の概要】
【課題を解決するための手段】
【０００４】
様々な実施形態は、コンピューティングデバイス上の仮想環境内で実行されるプログラムを分析するためのコンピューティングデバイス上で実施される方法を含む。様々な実施形態の方法は、プログラムが仮想環境内で実行されているかどうかをプログラムが検出しようと試みているかどうかを決定するステップを含んでもよい。プログラムが仮想環境内で実行されているかどうかをプログラムが検出しようと試みているとの決定に応じて、プログラムは、コンピューティングデバイスの保護モード内で分析されてもよい。
【０００５】
いくつかの実施形態では、保護モードは、システム管理モードであってもよい。いくつかの実施形態は、プログラムが仮想環境内で実行されているかどうかをプログラムが検出しようと試みていないとの決定に応じて、仮想環境内のプログラムの分析を継続するステップをさらに含んでもよい。
【０００６】
いくつかの実施形態では、プログラムが仮想環境内で実行されているかどうかをプログラムが検出しようと試みているかどうかを決定するステップは、仮想環境のアプリケーションプログラミングインターフェース(API)プロパティへのプログラムのアクセスを監視するステップを含んでもよい。いくつかの実施形態では、APIプロパティは、モデル固有のレジスタ、命令の長さ、ストア割込み記述子テーブルレジスタ(store interrupt descriptor table register)、デバッガ関数(debugger function)、およびホスト-ゲスト通信のための命令からなるグループから選択された少なくとも1つの要素を含んでもよい。いくつかの実施形態では、仮想環境は、仮想マシンまたはエミュレータであってもよい。
【０００７】
さらなる実施形態は、メモリと、本明細書で説明する方法の動作を実行するためのプロセッサ実行可能命令で構成されたプロセッサとを含むコンピューティングデバイスを含む。さらなる実施形態は、本明細書で説明する方法の動作をプロセッサに実行させるように構成されたプロセッサ実行可能ソフトウェア命令を記憶した非一時的プロセッサ可読記憶媒体を含む。さらなる実施形態は、本明細書で説明する方法の動作の機能を実行するための手段を含むコンピューティングデバイスを含む。
【０００８】
本明細書に組み込まれ、本明細書の一部を構成する添付図面は、例示的な実施形態を示し、上記の一般的な説明および下記の詳細な説明とともに、特許請求の範囲の特徴を説明する役割を果たす。
【図面の簡単な説明】
【０００９】
【図１】様々な実施形態とともに使用するためのコンピューティングデバイスのブロック図である。
【図２】様々な実施形態によるコンピューティングデバイス上の仮想環境内のプログラム分析を示すブロック図である。
【図３】様々な実施形態によるコンピューティングデバイス上の保護モード内のプログラム分析を示すブロック図である。
【図４】様々な実施形態によるコンピューティングデバイス上でプログラムを分析するための方法を示すプロセスフロー図である。
【図５】いくつかの実施形態方法を実施するのに適したモバイルコンピューティングデバイスの構成要素ブロック図である。
【図６】いくつかの実施形態方法を実施するのに適したコンピューティングデバイスの構成要素ブロック図である。
【発明を実施するための形態】
【００１０】
添付の図面を参照して、様々な実施形態を詳細に説明する。可能な限り、同一または同様の部分を指すために、図面全体にわたって同じ参照番号が使用される。特定の例および実装形態についてなされる言及は、説明のためのものであり、記述の範囲または特許請求の範囲を限定するよう意図されていない。
【００１１】
本明細書で使用する「コンピューティングデバイス」という用語は、携帯電話、スマートフォン、パーソナルまたはモバイルマルチメディアプレーヤ、携帯情報端末、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、サーバ、スマートウォッチ、スマートブック、パームトップコンピュータ、ワイヤレス電子メール受信機、マルチメディアインターネット対応携帯電話、ワイヤレスゲームコントローラ、ならびにプログラマブルプロセッサおよびメモリを含む同様の個人または企業の電子デバイスのうちのいずれか1つまたはすべてを指す。
【００１２】
コンピューティングデバイスが、ユーザにいくつかの機能およびサービスを提供するプログラムおよびアプリケーションを実行する。コンピューティングデバイスおよびユーザに提供されるサービスにとっての脅威は、マルウェアであり、マルウェアは、多くの場合悪意のある無許可の動作を実行するように書き込まれた様々なプログラムを指す。たとえば、コンピューティングデバイス上で実行されるマルウェアは、コンピューティングデバイスを制御すること、コンピューティングデバイス上の重要なファイルを削除または破損させること、コンピューティングデバイス上のユーザアクションを密かに探るまたは追跡すること、不要な広告をユーザに提供すること、あるいはお金を払うまたは金融情報もしくは個人情報を暴露するようにユーザに強いるまたはユーザをだますことを行うように、設計される場合がある。したがって、マルウェアを検出し、マルウェアを防ぐ方法が、大いに注目されている。
【００１３】
悪意のあるプログラムを検出するいくつかの方法がある。1つの方法は、仮想マシンまたはエミュレータなど、コンピューティングデバイス上の仮想環境内で潜在的に悪意のあるプログラムを実行することである。仮想環境は、コンピューティングデバイスの通常のオペレーティングシステムと似ている自己完結型環境を提供してもよい。プログラム動作は、それが悪意のある挙動を示すかどうかを決定するために仮想環境内で分析されてもよい。しかしながら、いくつかのマルウェアプログラムは、それらが仮想環境内で実行されているかどうかに応じてそれらの挙動を変えるという危険がある。これらのプログラムは、仮想環境では良性であるようにふるまうが、通常のオペレーティングシステム環境では悪意をもってふるまう場合がある。
【００１４】
概して、様々な実施形態は、コンピューティングデバイス上の仮想環境内で実行されるプログラムを分析するためのシステムおよび方法を提供する。様々な実施形態は、プログラムが仮想環境内で実行されているかどうかをプログラムが検出しようと試みていることを示した動作を、プログラムが実行しているかどうかを決定することを含んでもよい。プログラムが仮想環境内で実行されているかどうかをプログラムが検出しようと試みているとの決定に応じて、プログラムは、コンピューティングデバイスの保護モード内で分析されてもよい。プログラムが仮想環境内で実行されているかどうかをプログラムが検出しようと試みていないとの決定に応じて、プログラムの分析は、仮想環境内で継続してもよい。仮想環境は、仮想マシンまたはエミュレータであってもよい。保護モードは、他のネットワーク構成要素および/または機密情報から隔離された、コンピューティングデバイスまたは別のコンピューティングデバイス上のシステム管理モードであってもよい。
【００１５】
プログラムが仮想環境内で実行されているかどうかをプログラムが検出しようと試みているときを認識するための方法は、仮想環境のアプリケーションプログラミングインターフェース(API)プロパティへのプログラムのアクセスを監視するステップを含んでもよい。監視されるAPIプロパティは、モデル固有のレジスタ、命令の長さ、ストア割込み記述子テーブルレジスタ、デバッガ関数、およびホスト-ゲスト通信のための命令(たとえば、入力/出力ポートからデータにアクセスするためのIN/OUT命令、および仮想環境内の不正オペコードの使用)のうちの少なくとも1つを含んでもよい。
【００１６】
図1は、様々な実施形態を実施するのに適したコンピューティングデバイス100の機能ブロック図である。コンピューティングデバイス100は、とりわけ、デスクトップコンピュータ、ラップトップ、タブレット、任意のタイプのモバイル電子デバイス、サーバ、または任意のタイプの消費者もしくは企業の電子デバイスであってもよい。コンピューティングデバイス100は、ソフトウェア命令を実行するための中央処理装置(CPU)102と、コードおよびデータを記憶するためのメモリ104とを含む。メモリ104は、プロセッサ実行可能命令を記憶する非一時的コンピュータ可読記憶媒体であってもよい。メモリ104は、オペレーティングシステム106を記憶してもよい。
【００１７】
オペレーティングシステム106内に、仮想環境108が作成され、実行されてもよい。仮想環境108は、仮想マシンまたはエミュレータであってもよく、すなわち、仮想環境108は、別のコンピューティングシステムのソフトウェアおよび/またはハードウェア環境ならびに機能をシミュレートするために使用されてもよい。仮想環境108は、仮想環境108がシミュレートしようとしているコンピューティングシステムのコンピュータアーキテクチャ、ハードウェア、および/またはソフトウェアに基づくものであってもよい。仮想環境108は、いくつかの異なる目的に使用されてもよい。仮想環境108の1つの使用は、潜在的に悪意のあるプログラムの挙動を分析するための試験場(testing ground)または人工環境としてであってもよい。
【００１８】
コンピューティングデバイス100はまた、保護モード110を含んでもよい。保護モード110は、起動されると、オペレーティングシステム106の動作をサスペンドする、または場合によってはマルウェアによる悪意のあるアクションからコンピューティングデバイスを隔離する、コンピューティングデバイス100の特殊モードであってもよい。保護モード110は、コンピューティングデバイス100上のハードウェアおよびソフトウェア機能に関する特別特権を有する、CPU102の特定の動作モードであってもよい。保護モード110は、コンピューティングデバイス100上のファームウェアまたはハードウェア支援デバッガ内に実装されてもよい。保護モード110の一例は、システム管理モード(SMM)であり、これは、いくつかのCPUチップセットに設けられる場合がある。SMMは、CPU102上のシステム管理割込み(SMI)ピンをアサートすることによってトリガされてもよい。SMMのためのハンドラは、SMMによってのみアクセス可能な特殊メモリに記憶されてもよい。
【００１９】
保護モード110は、電力管理またはエラー処理などの特殊なタスクを実行するために使用されてもよい。保護モード110は、仮想環境108内のようなシミュレートされたハードウェアではなく、コンピューティングデバイス100上の実際のハードウェア内で動作するという点において、「リアル」コンピューティング環境である。保護モード110はまた、高レベルアクセス(たとえば、ルートアクセス)からプログラムをロックアウトするなど、悪意のあるコードに対するいくつかのセーフガードを与えてもよい。したがって、様々な実施形態では、保護モード110は、特に、潜在的に悪意のあるプログラムが仮想環境108を回避するように設計されている場合、プログラムのための代替試験環境としての機能を果たしてもよい。
【００２０】
コンピューティングデバイス100はまた、図1に示していない様々な他の構成要素を含む場合がある。たとえば、コンピューティングデバイス100は、スピーカ、マイクロフォン、モデム、トランシーバ、加入者識別モジュール(SIM)カード、キーパッド、マウス、ディスプレイスクリーンまたはタッチスクリーン、様々な接続ポート、オーディオまたはグラフィックスプロセッサ、追加のハードドライブ、ならびに当技術分野で知られている多くの他の構成要素などの多数の入力、出力、および処理構成要素を含む場合がある。
【００２１】
図2は、コンピューティングデバイス上の仮想環境を使用したプログラム分析を示すブロック図200を含む。コンピューティングデバイスは、オペレーティングシステム202を含んでもよい。仮想環境204が、オペレーティングシステム202内で動作してもよい。仮想環境204は、オペレーティングシステム202内に、自己完結型コンピューティング環境を提供してもよい。たとえば、仮想環境204は、別のコンピューティングシステムのソフトウェアおよび/またはハードウェア機能をシミュレートする仮想マシンまたはエミュレータであってもよい。仮想環境204は、プログラム206を分析してプログラム206が悪意のあるものであるか否かを決定するために使用されてもよい。仮想環境204内で実行されるプログラム206は、仮想環境の外側のコンピューティングデバイスのオペレーティングシステム202または他のリソースにアクセスすることができない。したがって、プログラム206が悪意のあるものである場合、プログラム206は、仮想環境204が実行されるオペレーティングシステム202またはコンピューティングデバイスを勝手に用いることまたは損害を与えることができない。
【００２２】
仮想環境204は、仮想環境204と対話し、これを制御するためにオペレーティングシステム202によって使用されるアプリケーションプログラミングインターフェース(API)208を含んでもよい。API208は、いくつかの関数、ルーチン、プロトコル、およびデータ構造を含んでもよい。
【００２３】
いくつかの悪意のあるプログラム(たとえば、プログラム206)は、それらが仮想マシン内で実行されているか、それともオペレーティングシステム内で実行されているかを発見しようと試みるように設計される場合がある。そのようなプログラムは、仮想環境204内で実行されているとき良性であるようにふるまう場合があり、したがって、悪意のあるコード検出を逃れる場合がある。プログラムがオペレーティングシステム202に解放されると、プログラムは悪意をもって作動し始める場合がある。
【００２４】
悪意のあるプログラム206は、API208においていくつかの関数を呼び出すこと、またはいくつかのデータ構造にアクセスすることを試みることなどによって、プログラム206が仮想環境204内で実行されているかどうかを発見しようと試みる場合がある。API208の呼び出された関数またはデータ構造からのいくつかの戻り値は、プログラム206が仮想環境204内で実行されていることを確証する場合がある。したがって様々な実施形態では、仮想環境204またはオペレーティングシステム202は、プログラム206が仮想環境204内で実行されているかどうかを発見しようとして、プログラム206がAPI208においていくつかの関数を呼び出している、またはいくつかのデータ構造にアクセスしているかどうかを決定するために、仮想環境204内のプログラム206の動作および挙動を監視するように構成されてもよい。悪意のあるプログラム206が仮想環境を検出しようとして実行する、またはアクセスしようと試みる可能性があり、かつ仮想環境204が検出するように構成されてもよい、いくつかのタイプの関数および/またはデータ構造がある。
【００２５】
悪意のあるプログラム206が実行する可能性があり、かつ仮想環境204が検出するように構成されてもよいアクションの非限定的な例としては、クイックエミュレータ(QEMU: quick emulator)シミュレータ上では有効であるが、実際のコンピューティングデバイスで呼び出されるとき例外を返す、モデル固有のレジスタにアクセスすることがある。
【００２６】
悪意のあるプログラム206が実行する可能性があり、かつ仮想環境204が検出するように構成されてもよいアクションの別の非限定的な例としては、命令の長さにアクセスすることがある。これは、命令の長さは実際のコンピューティングデバイスでは有限となるが、仮想環境では任意の長さであってもよいからである。
【００２７】
悪意のあるプログラム206が実行する可能性があり、かつ仮想環境204が検出するように構成されてもよいアクションの別の非限定的な例としては、ストア割込み記述子テーブルレジスタにアクセスすることがある。これは、仮想環境のベースアドレスは、実際のコンピューティングデバイスとは異なる場合があり、ある関数を超える場合があるからである。
【００２８】
悪意のあるプログラム206が実行する可能性があり、かつ仮想環境204が検出するように構成されてもよいアクションの別の非限定的な例としては、デバッガ関数を呼び出すことがある。たとえば、環境204は、プログラムがIsDebuggerPresent()またはCheckRemoteDebuggerPresent()を呼び出すときを検出するように構成されてもよい。
【００２９】
悪意のあるプログラム206が実行する可能性があり、かつ仮想環境204が検出するように構成されてもよいアクションの別の非限定的な例としては、ホスト-ゲスト通信の間に使用される入力/出力ポートからデータを読み取るまたは書き込むために使用されるINまたはOUT命令を実行することがある。そのようなINまたはOUT命令は、仮想環境内に存在するが、基となるコンピューティングデバイスにおいて呼び出されるとき例外を生成するポートアドレスからデータを読み取る/書き込むことを含んでもよい。
【００３０】
悪意のあるプログラム206が実行する可能性があり、かつ仮想環境204が検出するように構成されてもよいアクションの別の非限定的な例としては、ホスト-ゲスト通信の間に不正オペコードを実行しようとする試みがある。これは、基となるコンピューティングデバイスのエラーハンドラが、不正オペコードへの呼出しを処理する場合があるが、仮想環境にはエラーハンドラがない場合があるからである。たとえば、不正オペコードが、未定義オペコード、または既存オペコードの不正コーディングを含む場合がある。どのオペコードが不正であるかは、特定の仮想環境204および/またはコンピューティングデバイスのハードウェアもしくはソフトウェアによって決まってもよい。
【００３１】
仮想環境204が、プログラムが仮想環境204内で実行されているかどうかをプログラムが検出しようと試みていること(すなわち、プログラムが仮想環境での試験を回避しようとしていること)を検出する場合、仮想環境204は、回避プログラムとしてプログラム206にマーク付けまたはフラグ付けし、プログラム206を終了してもよい。仮想環境204またはオペレーティングシステム202は、次いでコンピューティングデバイスに、プログラム206はコンピューティングデバイス上の保護モード内で実行および分析されるべきであることをシグナリングしてもよい。このことを図3に示す。
【００３２】
図3は、コンピューティングデバイス上の保護モードを使用したプログラム分析を示すブロック図300である。コンピューティングデバイスは、オペレーティングシステム302を含んでもよい。プログラム306などの潜在的に悪意のあるプログラムを分析するために、オペレーティングシステム302内で仮想環境304が動作してもよい。仮想環境304は、図2に関して説明したように、プログラム306が仮想環境304内で実行されているかどうかをプログラム306が検出しようと試みていることを検出する場合がある。仮想環境304は、回避しているものとしてプログラム306にフラグを付け、プログラム306を終了してもよい。コンピューティングデバイスは、次いで、SMMなどの保護モード310を開始してもよい。保護モード310は、SMMのためのSMIなどのシステム割込みによってトリガされてもよい。プログラム306は、保護モード310内で再実行されてもよい。
【００３３】
保護モード310もまた、プログラム306を分析するための自己完結型環境を提供してもよいが、別のコンピューティングデバイスのシミュレーションではなく、実際のコンピューティングデバイスに基づく環境である。これによって、仮想環境304を回避するように設計される場合があるプログラム306は、それが仮想環境で実行されていることを検出せず、したがって、保護モード310を回避するように設計された方法でふるまわない(すなわち、プログラム306は、良性のふりをするのではなく、標準的にふるまう)。保護モード310は、プログラム306がコンピューティングデバイスの重要な部分にアクセスしないようにしてもよく、たとえば、ルートアクセスを防止する。アンチマルウェアアプリケーションまたは別のプログラムアナライザが、プログラムが悪意のあるものであるか否かを決定するために、保護モード310内でプログラム306を分析してもよい。保護モード310は、仮想環境304よりも多くのコンピューティングリソースを利用する場合があり、したがっていくつかの実施形態では、仮想環境304を回避するプログラムのみが、保護モード310内で分析されてもよい。
【００３４】
図4は、様々な実施形態によるコンピューティングデバイス上の仮想環境内で実行されるプログラムを分析するための方法400を示す。図1〜図4に関して、方法400は、仮想環境(たとえば、仮想マシンまたはエミュレータ)および保護モード(たとえば、SMM)を実行することができるコンピューティングデバイス(コンピューティングデバイス100など)のプロセッサ(たとえば、CPU102および/または同様のもの)を用いて実施されてもよい。
【００３５】
ブロック402において、プロセッサは、コンピューティングデバイス上の仮想環境内で実行されるプログラムを分析してもよい。プログラムは、潜在的なマルウェアまたはいずれかの他の未知のプログラムである場合があり、プロセッサは、プログラムが悪意のあるものであるか否かを決定するためにプログラムを分析していてもよい。仮想環境は、別のコンピューティングシステムのソフトウェアおよび/またはハードウェア環境をシミュレートする仮想マシンまたはエミュレータであってもよい。仮想環境は、仮想環境を制御し、これと対話するためにコンピューティングデバイスによって使用されるAPIを含んでもよい。
【００３６】
ブロック404において、プロセッサは、仮想環境のプロパティを明らかにすることができるいくつかのAPIおよびデータ構造へのプログラムによる試みられたアクセスを監視してもよい。そのようなAPIおよび/またはデータ構造プロパティにアクセスするためのプログラムによる試みは、プログラムが仮想環境内で実行されているかどうかをプログラムが検出しようと試みていることを示す場合がある。ブロック404において監視されてもよいAPIプロパティの非限定的な例は、(クイックエミュレータ(QEMU)シミュレータ上で有効であるが、実際のコンピューティングデバイスにおいて呼び出されるとき、例外を返す)モデル固有のレジスタである。ブロック404において監視されてもよいAPIプロパティの別の非限定的な例は、(仮想環境では任意の長さであってもよい)命令の長さである。ブロック404において監視されてもよいAPIプロパティの別の非限定的な例は、ストア割込み記述子テーブルレジスタである(ベースアドレスは仮想環境では異なる場合があり、ある関数を超える場合もある)。ブロック404において監視されてもよいAPIプロパティの別の非限定的な例は、デバッガ関数(たとえば、IsDebuggerPresent()またはCheckRemoteDebuggerPresent())である。ブロック404において監視されてもよいAPIプロパティの別の非限定的な例は、ホスト-ゲスト通信に使用されるIN/OUT命令である。ブロック404において監視されてもよいAPIプロパティの別の非限定的な例は、ホスト-ゲスト通信に使用される不正オペコードである。
【００３７】
決定ブロック406において、プロセッサは、監視された挙動から、プログラムが仮想環境内で実行されているかどうかをプログラムが発見しようと試みているかどうかを決定してもよい。たとえば、プロセッサは、プログラムが、仮想環境に特有のプロパティを明らかにすることができる監視されたAPIにアクセスしようと試みていると決定してもよい。
【００３８】
プログラムが仮想環境内で実行されているかどうかをプログラムが検出しようと試みていないとの決定(すなわち、決定ブロック406=「No」)に応じて、プロセッサは、ブロック408において仮想環境内でプログラムの分析を継続してもよい。すなわち、プログラムが仮想環境試験を回避しようとしていない場合、プロセッサは、仮想環境においてプログラムを引き続き分析してもよい。
【００３９】
プログラムが仮想環境内で実行されているかどうかをプログラムが検出しようと試みているとの決定(すなわち、決定ブロック406=「Yes」)に応じて、プロセッサは、ブロック410においてプログラムを終了し、コンピューティングデバイス上の保護モード内でプログラムを再実行し、分析してもよい。たとえば、プロセッサは、フラグを付けるか、または場合によってはプログラムが回避を有することを確認し、保護モードをトリガしてもよい。保護モードは、コンピューティングデバイス上のSMMであってもよく、SMMはSMIを使用してトリガされてもよい。保護モードは、別のコンピューティングシステムのシミュレーションではなく実際のコンピューティングデバイスに基づく環境において、プログラムの継続した分析を可能にしてもよいが、それは依然として、プログラムがコンピューティングデバイスの重要な部分にアクセスすること、および損害を与えることを防止する。このようにして、方法400は、仮想環境試験を回避する潜在的に悪意のあるプログラムを分析する方法を実現する。
【００４０】
図4に示す実施形態を含む様々な実施形態は、様々なコンピューティングデバイスのいずれにおいても実施される場合があり、そのようなコンピューティングデバイスの一例(たとえば、コンピューティングデバイス500)が、図5に示されている。様々な実施形態によれば、コンピューティングデバイス500は、図1に関して説明したコンピューティングデバイス100と同様のものであってもよい。したがって、コンピューティングデバイス500は、図4の方法400を実施してもよい。
【００４１】
コンピューティングデバイス500は、タッチスクリーンコントローラ504と内部メモリ506とに結合されたプロセッサ502を含むことができる。プロセッサ502は、汎用または特定の処理タスクに指定された1つまたは複数のマルチコア集積回路であってもよい。内部メモリ506は、揮発性または不揮発性メモリであってもよく、また、セキュアおよび/もしくは暗号化メモリ、または非セキュアおよび/もしくは非暗号化メモリ、あるいはそれらの任意の組合せであってもよい。タッチスクリーンコントローラ504およびプロセッサ502はまた、抵抗感知タッチスクリーン、静電容量感知タッチスクリーン、赤外線感知タッチスクリーンなどの、タッチスクリーンパネル512に結合されてもよい。追加として、コンピューティングデバイス500のディスプレイは、タッチスクリーン機能を有する必要がない。
【００４２】
コンピューティングデバイス500は、プロセッサ502とアンテナ510とに結合され、セルラー通信を送り、受信するように構成されたセルラーネットワークトランシーバ508を有することができる。トランシーバ508およびアンテナ510は、様々な実施形態方法を実施するために、上述の回路とともに使用される場合がある。コンピューティングデバイス500は、トランシーバ508および/またはプロセッサ502に結合された1つまたは複数のSIMカード516を含んでもよく、本明細書で説明するように構成されてもよい。コンピューティングデバイス500は、プロセッサがセルラーネットワークを介して通信することを可能にするセルラーネットワークワイヤレスモデムチップ517を含んでもよい。
【００４３】
コンピューティングデバイス500はまた、オーディオ出力を提供するためのスピーカ514を含んでもよい。コンピューティングデバイス500はまた、本明細書で説明した構成要素の全部または一部を含むための、プラスチック、金属、または材料の組合せで構成されたハウジング520を含んでもよい。コンピューティングデバイス500は、使い捨てまたは充電式のバッテリーなどの、プロセッサ502に結合された電源522を含んでもよい。充電式バッテリーは、コンピューティングデバイス500の外部のソースから充電電流を受け取るために、周辺デバイス接続ポートにも結合されてもよい。コンピューティングデバイス500はまた、ユーザ入力を受け取るための物理ボタン524を含んでもよい。コンピューティングデバイス500はまた、コンピューティングデバイス500をオンオフするための電源ボタン526を含んでもよい。
【００４４】
図4に示す実施形態を含む様々な実施形態は、様々なコンピューティングデバイスのいずれにおいても実施される場合があり、そのようなコンピューティングデバイスの一例(たとえば、コンピューティングデバイス600)が、図6に示されている。様々な実施形態によれば、コンピューティングデバイス600は、図1に関して説明したコンピューティングデバイス100と同様のものであってもよい。したがって、コンピューティングデバイス600は、図4の方法400を実施してもよい。
【００４５】
(たとえば、図1のコンピューティングデバイス100に対応する場合がある)コンピューティングデバイス600が、コンピューティングデバイス600のポインティングデバイスとして機能するタッチパッドタッチ面617を含む場合があり、したがって、タッチスクリーンディスプレイを備え、以下で説明するワイヤレスデバイス上で実施されるジェスチャーと同様のドラッグ、スクロール、およびフリックジェスチャーを受け取る場合がある。コンピューティングデバイス600は一般的に、揮発性メモリ612と、フラッシュメモリのディスクドライブ613などの大容量不揮発性メモリとに結合されたプロセッサ611を含む。コンピューティングデバイス600は、プロセッサ611に結合されたフロッピーディスクドライブ614およびコンパクトディスク(CD)ドライブ615を含む場合もある。コンピューティングデバイス600は、ユニバーサルシリアルバス(USB)もしくはFireWire(登録商標)コネクタソケット、またはプロセッサ611をネットワークに結合するための他のネットワーク接続回路など、データ接続を確立するための、または外部メモリデバイスを受け入れるための、プロセッサ611に結合されたいくつかのコネクタポートを含む場合もある。ノートブック構成では、デバイスハウジングは、プロセッサ611にすべて結合された、タッチパッド617、キーボード618、およびディスプレイ619を含む。コンピューティングデバイス600の他の構成は、よく知られているように、(たとえば、USB入力を介して)プロセッサに結合されたコンピュータマウスまたはトラックボールを含む場合があり、それらもまた、様々な実施形態に関連して使用される場合がある。
【００４６】
上記の方法の説明およびプロセスフロー図は、単に説明のための例として提供され、様々な実施形態の動作が提示された順序で実行されなければならないことを要求または暗示するものではない。当業者によって諒解されるように、上記の実施形態における動作の順序は、任意の順序で実行されてもよい。「その後」、「次いで」、「次に」などの単語は、動作の順序を限定するものではなく、これらの単語は単に、方法の説明を通じて読者を導くために使用される。さらに、たとえば、冠詞「a」、「an」、または「the」を使用する単数形でのクレーム要素へのいかなる参照も、要素を単数形に限定するものとして解釈すべきではない。
【００４７】
本明細書で開示する実施形態に関して説明する様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズム動作は、電子ハードウェア、コンピュータソフトウェア、またはその両方の組合せとして実装されてもよい。ハードウェアおよびソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路および動作について、概してそれらの機能に関して上記で説明した。そのような機能がハードウェアとして実装されるのか、またはソフトウェアとして実装されるのかは、具体的な適用例および全体的なシステムに課される設計制約で決まる。当業者は、説明した機能を特定のアプリケーションごとに様々な方法で実装してもよいが、そのような実装の決定は、本実施形態の範囲からの逸脱を生じさせるものとして解釈されるべきではない。
【００４８】
様々な実施形態に関して説明した様々な例示的な論理、論理ブロック、モジュール、および回路を実装するために使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタ論理、個別ハードウェア構成要素、または本明細書で説明した機能を実行するように設計されたその任意の組合せを用いて実装または実行されてもよい。汎用プロセッサはマイクロプロセッサであってよいが、代替として、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシンであってよい。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPおよびマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPコアと連携した1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装されてもよい。代替的に、いくつかの動作または方法は、所与の機能に特有の回路によって実行されてもよい。
【００４９】
1つまたは複数の例示的な実施形態では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装されてもよい。ソフトウェアで実装される場合、機能は、非一時的コンピュータ可読記憶媒体または非一時的プロセッサ可読記憶媒体上に1つまたは複数の命令またはコードとして記憶されてもよい。本明細書で開示する方法またはアルゴリズムの動作は、非一時的コンピュータ可読またはプロセッサ可読記憶媒体上に存在してよいプロセッサ実行可能ソフトウェアモジュールで具現化されてもよい。非一時的コンピュータ可読またはプロセッサ可読記憶媒体は、コンピュータまたはプロセッサによってアクセスされることがある任意の記憶媒体であってもよい。限定ではなく例として、そのような非一時的コンピュータ可読またはプロセッサ可読記憶媒体は、RAM、ROM、EEPROM、フラッシュメモリ、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、または、命令もしくはデータ構造の形態で所望のプログラムコードを記憶するために使用される場合があり、コンピュータによってアクセスされる場合がある任意の他の媒体を含んでもよい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)、およびブルーレイディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、レーザーを用いてデータを光学的に再生する。上記の組合せも、非一時的コンピュータ可読およびプロセッサ可読媒体の範囲に含まれる。さらに、方法またはアルゴリズムの動作は、コンピュータプログラム製品内に組み込まれる場合がある、非一時的プロセッサ可読記憶媒体および/またはコンピュータ可読記憶媒体上に、コードおよび/または命令の1つまたは任意の組合せもしくはセットとして存在してもよい。
【００５０】
様々な実施形態の前述の説明は、当業者が特許請求の範囲を作成または使用することを可能にするために提供される。これらの実施形態に対する様々な変更は、当業者には容易に明らかであり、本明細書で定義される一般原理は、特許請求の範囲から逸脱することなくいくつかの実施形態に適用される場合がある。したがって、本開示は、本明細書で示される実施形態に限定されるものではなく、以下の特許請求の範囲ならびに本明細書で開示された原理および新規の特徴に一致する最大の範囲を与えられるものである。
【符号の説明】
【００５１】
100  コンピューティングデバイス
102  中央処理装置(CPU)
104  メモリ
106  オペレーティングシステム
108  仮想環境
110  保護モード
202  オペレーティングシステム
204  仮想環境
206  プログラム
208  アプリケーションプログラミングインターフェース(API)
302  オペレーティングシステム
304  仮想環境
306  プログラム
310  保護モード
500  コンピューティングデバイス
502  プロセッサ
504  タッチスクリーンコントローラ
506  内部メモリ
508  セルラーネットワークトランシーバ
510  アンテナ
512  タッチスクリーンパネル
514  スピーカ
516  SIMカード
517  セルラーネットワークワイヤレスモデムチップ
520  ハウジング
522  電源
524  物理ボタン
526  電源ボタン
600  コンピューティングデバイス
611  プロセッサ
612  揮発性メモリ
613  ディスクドライブ
614  フロッピーディスクドライブ
615  コンパクトディスク(CD)ドライブ
617  タッチパッド
618  キーボード
619  ディスプレイ
【図１】
2018534695.tif 000003
【図２】
2018534695.tif 000004
【図３】
2018534695.tif 000005
【図４】
2018534695.tif 000006
【図５】
2018534695.tif 000007
【図６】
2018534695.tif 000008
【手続補正書】
【提出日】平成30年5月14日(2018.5.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピューティングデバイス上の仮想環境内で実行されるプログラムを分析するための方法であって、
前記プログラムが、前記プログラムが前記仮想環境内で実行されているかどうかを検出しようと試みているかどうかを決定するステップと、
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているとの決定に応じて、
前記仮想環境内の前記プログラム実行を終了し、
前記コンピューティングデバイスの保護モードで前記プログラムを再実行し、
前記コンピューティングデバイスの前記保護モード内で前記プログラムを分析するステップと
を含む、方法。
【請求項２】
前記保護モードがシステム管理モードである、請求項1に記載の方法。
【請求項３】
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みていないとの決定に応じて、前記仮想環境内の前記プログラムの分析を継続するステップをさらに含む、請求項1に記載の方法。
【請求項４】
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているどうかを決定するステップが、
前記仮想環境のアプリケーションプログラミングインターフェース(API)プロパティへの前記プログラムのアクセスを監視するステップ
を含む、請求項1に記載の方法。
【請求項５】
前記APIプロパティが、モデル固有のレジスタ、命令の長さ、ストア割込み記述子テーブルレジスタ、デバッガ関数、およびホスト-ゲスト通信のための命令からなるグループから選択された少なくとも1つの要素を含む、請求項4に記載の方法。
【請求項６】
前記仮想環境が、仮想マシンまたはエミュレータを含む、請求項1に記載の方法。
【請求項７】
コンピューティングデバイスであって、
プロセッサを含み、前記プロセッサが、
前記コンピューティングデバイス上の仮想環境内で実行されるプログラムが、前記プログラムが前記仮想環境内で実行されているかどうかを検出しようと試みているかどうかを決定することと、
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているとの決定に応じて、
前記仮想環境内の前記プログラム実行を終了し、
前記コンピューティングデバイスの保護モードで前記プログラムを再実行し、
前記コンピューティングデバイスの前記保護モード内で前記プログラムを分析することと
を行うためのプロセッサ実行可能命令を備える、コンピューティングデバイス。
【請求項８】
前記保護モードがシステム管理モードである、請求項7に記載のコンピューティングデバイス。
【請求項９】
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みていないとの決定に応じて、前記仮想環境内で前記プログラムの分析を継続するためのプロセッサ実行可能命令を前記プロセッサがさらに備える、請求項7に記載のコンピューティングデバイス。
【請求項１０】
前記仮想環境のアプリケーションプログラミングインターフェース(API)プロパティへの前記プログラムのアクセスを監視すること
によって、前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているかどうかを決定するためのプロセッサ実行可能命令を前記プロセッサが備える、請求項7に記載のコンピューティングデバイス。
【請求項１１】
前記APIプロパティが、モデル固有のレジスタ、命令の長さ、ストア割込み記述子テーブルレジスタ、デバッガ関数、およびホスト-ゲスト通信のための命令からなるグループから選択された少なくとも1つの要素を含む、請求項10に記載のコンピューティングデバイス。
【請求項１２】
前記仮想環境が、仮想マシンまたはエミュレータを含む、請求項7に記載のコンピューティングデバイス。
【請求項１３】
コンピューティングデバイスのプロセッサに動作を実行させるように構成されたプロセッサ実行可能ソフトウェア命令を記憶した、非一時的コンピュータ可読記憶媒体であって、前記動作が、
前記コンピューティングデバイス上の仮想環境内で実行されるプログラムが、前記プログラムが前記仮想環境内で実行されているかどうかを検出しようと試みているかどうかを決定することと、
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているとの決定に応じて、
前記仮想環境内の前記プログラム実行を終了し、
前記コンピューティングデバイスの保護モードで前記プログラムを再実行し、
前記コンピューティングデバイスの前記保護モード内で前記プログラムを分析することと
を含む、非一時的コンピュータ可読記憶媒体。
【請求項１４】
前記保護モードが、システム管理モードである、請求項13に記載の非一時的コンピュータ可読記憶媒体。
【請求項１５】
前記記憶されたプロセッサ実行可能ソフトウェア命令が、前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みていないとの決定に応じて、前記仮想環境内の前記プログラムの分析を継続することをさらに含む動作を、前記プロセッサに実行させるように構成される、請求項13に記載の非一時的コンピュータ可読記憶媒体。
【請求項１６】
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているかどうかを決定することが、
前記仮想環境のアプリケーションプログラミングインターフェース(API)プロパティへの前記プログラムのアクセスを監視すること
を含むように、前記プロセッサに動作を実行させるように、前記記憶されたプロセッサ実行可能ソフトウェア命令がさらに構成される、請求項13に記載の非一時的コンピュータ可読記憶媒体。
【請求項１７】
前記APIプロパティが、モデル固有のレジスタ、命令の長さ、ストア割込み記述子テーブルレジスタ、デバッガ関数、およびホスト-ゲスト通信のための命令からなるグループから選択された少なくとも1つの要素を含む、請求項16に記載の非一時的コンピュータ可読記憶媒体。
【請求項１８】
前記仮想環境が、仮想マシンまたはエミュレータを含む、請求項13に記載の非一時的コンピュータ可読記憶媒体。
【請求項１９】
コンピューティングデバイスであって、
前記コンピューティングデバイス上の仮想環境内で実行されるプログラムが、前記プログラムが前記仮想環境内で実行されているかどうかを検出しようと試みているかどうかを決定するための手段と、
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているとの決定に応じて、前記仮想環境内で前記プログラム実行を終了させるための手段と、
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているとの決定に応じて、前記コンピューティングデバイスの保護モード内で前記プログラムを再実行するための手段と、
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているとの決定に応じて、前記コンピューティングデバイスの前記保護モード内で前記プログラムを分析するための手段と
を備える、コンピューティングデバイス。
【請求項２０】
前記保護モードがシステム管理モードである、請求項19に記載のコンピューティングデバイス。
【請求項２１】
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みていないとの決定に応じて、前記仮想環境内の前記プログラムの分析を継続するための手段をさらに備える、請求項19に記載のコンピューティングデバイス。
【請求項２２】
前記プログラムが前記仮想環境内で実行されているかどうかを前記プログラムが検出しようと試みているどうかを決定するための前記手段が、
前記仮想環境のアプリケーションプログラミングインターフェース(API)プロパティへの前記プログラムのアクセスを監視するための手段
を含む、請求項19に記載のコンピューティングデバイス。
【請求項２３】
前記APIプロパティが、モデル固有のレジスタ、命令の長さ、ストア割込み記述子テーブルレジスタ、デバッガ関数、およびホスト-ゲスト通信のための命令からなるグループから選択された少なくとも1つの要素を含む、請求項22に記載のコンピューティングデバイス。
【請求項２４】
前記仮想環境が、仮想マシンまたはエミュレータを含む、請求項19に記載のコンピューティングデバイス。
【国際調査報告】
2018534695.tif 000009
2018534695.tif 000010
2018534695.tif 000011