【誤訳訂正書】
【提出日】令和2年11月4日(2020.11.4)
【誤訳訂正１】
【訂正対象書類名】明細書
【訂正対象項目名】全文
【訂正方法】変更
【訂正の内容】
【発明の詳細な説明】
【発明の名称】ファイル中の悪意のあるコードの検出システム及び方法
【技術分野】
【０００１】
本開示は、一般にデータセキュリティの分野に関連し、より詳細には、ファイル中の悪意のあるコードを検出するシステム及び方法に関するものである。
【背景技術】
【０００２】
従来のシグネチャ分析では、特に多形ウィルス、悪意のあるファイルの改竄されたバージョン、シェルコード等の悪意のあるファイルが検出されない場合がある。したがって、現代のアンチウィルスアプリケーションは、プロセスの安全な実行のためのコンピュータ環境である、いわゆる「サンドボックス」を使用してスキャンを実行する。サンドボックスは、ファイルシステム及びレジストリの部分的な仮想化、ファイルシステム及びレジストリへのアクセス方法、又は（それらの）ハイブリッドアプローチに基づいて、例えば仮想マシンの形で実現することができる。スキャンされたファイルは、サンドボックス内で実行される。ファイルから起動されたプロセスの実行の結果として生じるイベントは、プロセスとＯＳの両方によって実行される様々な工程の傍受という方法によってログに保存することができる。そして、アンチウィルスアプリケーションは、前記の保存されたログを分析することができる。ログは通常、実行中に前述のプロセスによって作成されたＡＰＩ関数呼び出しと、呼び出されたＡＰＩ関数からの戻り値（戻りアドレスでの制御の転送）を保存する。サンドボックス内のファイルの実行は、通常、限られた期間（数十秒まで）で実行される。これは、サンドボックス内のファイルの実行と、アンチウィルスアプリケーションによるＡＰＩ関数呼び出しの傍受とが、ファイルの実行速度を大幅に低下させるためである。同時に、シェルコードを含むファイルがサンドボックス内で実行されると、ＡＰＩ関数呼び出しログの解析による検出が困難になることがある。これは、シェルコードがプロセスのメモリにロードされる可能性があるためであるが、実際には、サンドボックス内のプロセスの実行は、シェルコードを含むメモリセクションに制御を移すべきときよりも早く終了している。この場合、メモリダンプを保存し分析する必要が生じる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
先行技術の分析によれば、本発明によって解決される欠点を有する従来の技術、即ちファイル内の悪意のあるコードの検出のためのシステム及び方法を使用することは、効果的でなく、場合によっては不可能であることもあるという結論に至る。
【課題を解決するための手段】
【０００４】
本発明によれば、コンピュータによって実行される、ファイル中の悪意のあるコードを検出するための方法であって、傍受ステップと、検出ステップと、転送ステップと、識別ステップとを備え、前記傍受ステップでは、計算機器のファイルから起動されたプロセスの実行中に、プロセッサが１つ又は複数のＡＰＩ呼び出しを傍受し、前記検出ステップでは、前記プロセッサが前記プロセスの終了条件の存在を検出し、前記転送ステップでは、１つ又は複数の第１型シグネチャを識別し、且つ実行のために計算機器の１つ又は複数の保存されたメモリダンプをエミュレータに転送し、前記識別ステップでは、計算機器の転送されたメモリダンプの実行結果に少なくとも基づいて、１つ又は複数の第２型シグネチャを検出することに応答して、ファイル内の悪意のあるコードを識別する、方法が提供される。
【０００５】
好ましくは、前記計算機器にインストールされたアンチウィルスアプリケーションの制御を介して、前記計算機器の仮想マシン内のファイルから起動されたプロセスを実行するステップを更に含む。
好ましくは、前記傍受されたＡＰＩ呼び出しの連続するレコードを決定し、そのレコードを前記計算機器の前記仮想マシンの第１ログに格納するステップを更に含む。
好ましくは、前記検出ステップは、前記プロセスが完了したことの表示、 指定された時間の経過、プロセスによって実行された命令の数が特定の閾値を超えたこと、検出された疑わしいイベントの数が選択した閾値を超えたこと、のうち少なくとも１つを終了条件として含む。
【０００６】
好ましくは、前記傍受されたＡＰＩ呼び出しに基づき、前記プロセスの実行中に発生する１つ又は複数の疑わしいイベントを検出するステップと、前記１つ又は複数の疑わしいイベントを検出し、更に前記傍受されたＡＰＩ呼び出しの連続するレコードを前記第１ログに格納することに応答して、前記プロセスのメモリダンプを前記計算機器の前記仮想マシンのデータベースに格納するステップと、を更に含む。
好ましくは、少なくとも前記第１ログ内の連続するレコードに基づいて実行される、前記第１型シグネチャを１つ又は複数識別するというステップにおいて、前記第１型シグネチャそれぞれが、傍受されたＡＰＩ呼び出し又は検出された１つ又は複数の疑わしいイベントに関する情報を備えるデータ構造を含む。
【０００７】
好ましくは、前記エミュレータ内の前記計算機器の前記１つ又は複数の保存されたメモリダンプを実行するステップにおいて、前記１つ又は複数の保存されたメモリダンプに含まれる１つ又は複数の実行可能コードを逆アセンブルするステップと、前記エミュレータの仮想環境内で前記１つ又は複数の実行可能コードを実行するステップと、前記１つ又は複数の実行可能コードの実行中に前記１つ又は複数のＡＰＩ呼び出しのアドレスへのジャンプを決定するステップと、前記第２ログにおいて前記１つ又は複数のＡＰＩ呼び出しのレコードを連続して維持するステップとを含む。
【０００８】
好ましくは、前記第２ログ内の各レコードが、ＡＰＩ関数呼び出しの名前と、対応するファイルから起動されたプロセスのＰＩＤ識別子と、 前記プロセスのアドレス空間の命令を実行するスレッドのＴＩＤ識別子と、ＡＰＩ関数の引数のセットと、に関する情報を含む。
好ましくは、前記第２ログが、前記プロセッサ上で実行中断されていない一連の命令と、各命令を実行する際における前記プロセッサの内部状態のスナップショットと、を含む前記エミュレータの実行経過を維持し記録するように構成されることを含む。
好ましくは、前記１つ又は複数の第２型シグネチャが、前記１つ又は複数のＡＰＩ呼び出しに関する情報と、プロセッサ命令と、 プロセッサの内部状態のスナップショットという前記第２ログ内のレコードのうち少なくとも１つを備えるデータ構造を持つことを含む。
【０００９】
本発明によれば、ファイル中の悪意のあるコードを検出するためのシステムであって、少なくとも１つのプロセッサが、傍受ステップと、検出ステップと、転送ステップと、識別ステップとを実行するように構成され、前記傍受ステップでは、計算機器のファイルから起動されたプロセスの実行中に、プロセッサが１つ又は複数のＡＰＩ呼び出しを傍受し、前記検出ステップでは、前記プロセッサが前記プロセスの終了条件の存在を検出し、前記転送ステップでは、１つ又は複数の第１型シグネチャを識別し、且つ実行のために計算機器の１つ又は複数の保存されたメモリダンプをエミュレータに転送し、前記識別ステップでは、計算機器の転送されたメモリダンプの実行結果に少なくとも基づいて、１つ又は複数の第２型シグネチャを検出することに応答して、ファイル内の悪意のあるコードを識別する、システムが提供される。
【００１０】
本発明によれば、ファイル中の悪意のあるコードを検出するためのコンピュータ実行可能命令を格納するコンピュータ上で読み取り可能な不揮発性媒体であって、前記命令は、傍受ステップと、検出ステップと、転送ステップと、識別ステップを備え、前記傍受ステップでは、計算機器のファイルから起動されたプロセスの実行中に、プロセッサが１つ又は複数のＡＰＩ呼び出しを傍受し、前記検出ステップでは、前記プロセッサが前記プロセスの終了条件の存在を検出し、前記転送ステップでは、１つ又は複数の第１型シグネチャを識別し、且つ実行のために計算機器の１つ又は複数の保存されたメモリダンプをエミュレータに転送し、前記識別ステップでは、計算機器の転送されたメモリダンプの実行結果に少なくとも基づいて、１つ又は複数の第２型シグネチャを検出することに応答して、ファイル内の悪意のあるコードを識別する、媒体が提供される。
【００１１】
本発明の例示的な側面に係る上述の簡略化した概要は、本発明の基本的な理解を提供するように機能するものである。この概要は、全ての企図された側面の広範な概要ではなく、全ての側面の重要な又は重要な要素を特定することも本発明の任意の又は全ての側面の範囲を描写することも意図されていない。唯一の目的は、以下の本発明のより詳細な説明の前置きとして、１つ又は複数の側面を簡略化した形で提示することである。前述の目的を達成するために、本発明の１つ又は複数の側面が記載され、これは特に特許請求の範囲において主張される特徴を含むものである。
【図面の簡単な説明】
【００１２】
【図１】本発明に係り、ファイル内の悪意のあるコードを検出するための例示的なシステムを示す。
【図２】本発明に係り、ファイル内の悪意のあるコードを検出するための例示的な方法を示す。
【図３】本発明に係り、エミュレータ上でプロセスを実行するためのより詳細な例示的な方法を示す。
【図４】ファイル内の悪意のあるコードを検出するシステム及び方法の実施形態を実装することができる汎用コンピュータシステムの一例を示す。
【発明を実施するための形態】
【００１３】
本発明の様々な側面を説明する際に、多くの用語及び定義を使用する。当業者であれば、以下の説明は例示的なものに過ぎず、決して限定するものではないことを理解するであろう。他の側面は、本開示の利益を有する当業者に容易に示唆されるであろう。以下、添付の図面に例示されている例示的な実装形態を詳細に参照する。同一の符号は、図面全体にわたって可能な範囲で使用され、以下の説明は、同じ又は同様の項目を参照するために使用される。
【００１４】
図１は、本発明に係り、ファイル内の悪意のあるコードを検出するための例示的なコンピュータシステムを示す。一例では、悪意のあるコードはシェルコードを含むことがある。シェルコードは、通常、ファイルからロードされたプロセスのメモリに埋め込まれ、その後、スタック上のバッファオーバーフローを含むバッファオーバーフロー等によって、制御がそこに転送される。シェルコードの実行の結果として、ハッカーはコンピュータ上で悪意のある動作を実行することができる。例えば、実行可能な悪意のあるファイルをネットワークからロードし、被害者のコンピュータに保存することができる。サンドボックス１３０は、プロセスの安全な実行のためのコンピュータ環境であってもよい。サンドボックスは、ファイルシステム及びレジストリの部分的な仮想化、ファイルシステム及びレジストリへのアクセスの規則、又はハイブリッドアプローチに基づいて、例えば仮想マシンの形で実現される。図１は、ＯＳ１３１がインストールされた仮想マシンの形のサンドボックスの実現例を示している。サンドボックス１３０は、アンチウィルスアプリケーション１１０の制御下で、ファイル１３４から起動されたプロセスを実行するように構成されていてもよい。ファイル１３４は、任意の所与のデータフォーマットのファイルであってもよく、所与のデータを含むことができることに留意されたい。例えば、ファイル１３４は、脆弱性の影響を最も受けやすいオフィスアプリケーション（Ｍｉｃｒｏｓｏｆｔ Ｗｏｒｄ、Ｅｘｃｅｌ、ＰｏｗｅｒＰｏｉｎｔ、Ａｃｃｅｓｓ、Ａｄｏｂｅ Ａｃｒｏｂａｔなど）のファイルであってもよい。したがって、この場合、ファイル１３４から起動されるプロセスは、対応するアプリケーションのプロセス（Ｍｉｃｒｏｓｏｆｔ  Ｗｏｒｄアプリケーションのプロセスに対するＷＩＮＷＯＲＤ．ＥＸＥ等）となる。別の例では、ファイル１３４は、ＰＥ（Ｐｏｒｔａｂｌｅ  Ｅｘｅｃｕｔａｂｌｅ）ファイル等の実行可能ファイルであってもよい。
【００１５】
サンドボックス内には、ロギングモジュール１３３に接続されたスキャンモジュール１３２が含まれる。プロセスの実行中に、ロギングモジュール１３３は、ＡＰＩ関数呼び出しを傍受し、サンドボックス１３０内に同様に位置する第１ログ１３７にそのレコードを連続して入力することができる。ロギングモジュール１３３によるＡＰＩ関数呼び出しの傍受の瞬間に、スキャンモジュール１３２は、プロセスのメモリダンプをダンプデータベース１３６に保存することができる。
【００１６】
一例では、ＡＰＩ関数呼び出しに関する第１ログ１３７の各レコードには、以下のような情報が含まれる：
・前記ファイル１３４から起動されたプロセスのＰＩＤ識別子
・プロセスのアドレス空間の命令を実行するスレッドのＴＩＤ識別子
・前述の関数の引数のセット
【００１７】
また、ロギングモジュール１３３は、傍受されたＡＰＩ関数呼び出しをスキャンモジュール１３２に送信することができ、スキャンモジュール１３２は、ＡＰＩ関数呼び出しに基づいて、疑わしいイベントデータベース１３５に格納された疑わしいイベントのリストと照らし合わせることで、プロセスの実行中に発生する疑わしいイベントを判定する。疑わしいイベントには、ＡＰＩ関数のプロセスによる呼び出しの結果として発生し、実行されている悪意のあるコードに特有のイベントが含まれる。したがって、疑わしいイベントは、ＡＰＩ関数呼び出し、プロセッサの内部状態のスナップショット、プロセッサのレジストリ、及びスタックの内容に基づいて判定することができる。例えば、疑わしいイベントとして、ＷｉｎＥｘｅｃ、ＣｒｅａｔｅＰｒｏｃｅｓｓ、ＧｅｔＦｉｌｅＳｉｚｅ等の疑わしいＡＰＩ関数のリストからのＡＰＩ関数呼び出しが挙げられる。疑わしいイベントのリストは、アンチウィルスアナリストによって事前に作成され、疑わしいイベントのデータベースに配置され得る。疑わしいイベントの他の詳細な例を以下に考察することができる。
【００１８】
スキャンモジュール１３２は、疑わしいイベントの検出の瞬間、又はロギングモジュール１３３によるＡＰＩ関数呼び出しの傍受の瞬間に、第１ログ１３７内に、疑わしいイベントに関するレコードを入力し、プロセスのメモリダンプをダンプデータベース１３６に保存するように働くこともできる。一例では、スキャンモジュール１３２は、次のような要領でプロセスのメモリダンプを保存することができる。即ち、疑わしいイベント又はＡＰＩ関数の呼び出しが起こり、それらがボトムページの境界でもって均等化されるような「開始アドレス」から、開始アドレスに関連する特定の数によって増加された、疑わしいイベントの検出又はＡＰＩ関数呼び出しの傍受における「終了アドレス」まで保存する。例えば、メモリダンプには、疑わしいイベント又はＡＰＩ関数呼び出しが発生したアドレスから始まる１６ページが含まれる、といった具合である。別の例では、開始メモリアドレスを更に指定された数だけ減少させることができる。更に別の例では、開始アドレスと終了アドレスのより正確な計算のために、手順ＺｗＱｕｅｒｙＶｉｒｔｕａｌＭｅｍｏｒｙを呼び出すことができる。この手順は、メモリ領域に関する情報を返すことができ、特に、処理が成功すれば、領域のベースアドレス及び領域のサイズを得ることができる。この場合、メモリダンプの開始アドレスは、メモリ領域のベースアドレス及びメモリダンプの予め指定された開始アドレスのうち最大の値となる。そして、メモリダンプの終了アドレスは、メモリ領域のサイズだけ増加した、メモリダンプの終了アドレス及びメモリ領域のベースアドレスの以前に計算された値のうち最小の値として決定され、計算される。
【００１９】
本発明によれば、スキャンモジュール１３２は、サンドボックス１３０におけるその実行が完了する瞬間に、プロセスのメモリダンプを保存するように更に構成されていてもよい。更に別の例では、スキャンモジュール１３２は、サンドボックス内のプロセスの実行が完了する瞬間に、プロセスのコンテキストを保存するように更に構成されていてもよく、アンチウィルスアプリケーションは、プロセスのメモリダンプをエミュレータ１１１において実行する際に、上記保存されたプロセスのコンテキストを利用することができる。或いは、スキャンモジュール１３２は、疑わしいイベントの検出時にプロセスのコンテキストを保存するように更に構成されていてもよく、アンチウィルスアプリケーションは、（保存された）プロセスのコンテキストに対応するプロセスを、エミュレータ１１１において実行する際に、保存されたプロセスのコンテキストを利用することができる。
【００２０】
スキャンモジュール１３２は、前のステップの実行（メモリダンプの保存）の後に終了条件をチェックするように構成されていてもよい。一例では、終了条件には次のようなものがある：
・プロセスの完了
・指定された時間の経過
・前のステップが特定回数（例えば３回といった具合）繰り返し実行されたこと
・プロセスによって実行された命令の数が、指定された閾値（例えば１０００００回の命令といった具合）を超えたこと
・スキャンモジュールによって判定された疑わしいイベントの数が、特定の閾値（例えば３つの疑わしいイベントといった具合）を超えたこと
【００２１】
終了条件が満たされていない場合、スキャンモジュール１３２は、前のステップの繰り返しを開始するように構成されていてもよい（図２についての詳細を参照）。
【００２２】
終了条件が満たされた場合、即ちファイル１３４から起動されたプロセスの実行がサンドボックス１３０で完了した場合、アンチウィルスアプリケーション１１０は、サンドボックスに含まれる第１ログ１３７のレコードを、アンチウィルスアプリケーション１１０が動作しているオペレーティングシステムに含まれる第１ログ１２２に保存することができる。
【００２３】
更に別の例では、ロギングモジュール１３３は、ネットワーク、レジストリ、ファイルシステム、ＲＡＭ、プロセス及びスレッドの処理を担うシステムコールに関する情報を含むレコードを傍受し、更に第１ログ１３７に入力を行うことができる。
【００２４】
ロギングモジュール１３３がＡＰＩ関数呼び出しを傍受する場合、ロギングモジュール１３３は、呼び出しのスタック及びプロセッサ上で実行されている命令へのアクセス権を有することに留意されたい。一例では、ロギングモジュール１３３は、例外的な状況のレコードと、プロセッサ上で実行されている命令とを第１ログ１３７に保存し、スキャンモジュール１３２に送ることができる。
【００２５】
疑わしいイベントには、例えば、次のようなものがある：
・不審なＡＰＩ関数のリストからのＡＰＩ関数の呼び出し（例えば、ＷｉｎＥｘｅｃ、ＣｒｅａｔｅＰｒｏｃｅｓｓ、ＧｅｔＦｉｌｅＳｉｚｅ等のＡＰＩ関数がリストに含まれている可能性がある）
・プロセスを実行する際における例外的な状況の発生
・プロセスによる動的メモリの（特定回数の）繰り返し（例えば２００回の繰り返し、といった具合）の実行
・スタック上のプログラムコードのプロセスによる実行
・ｒｅｔ命令の前に呼び出し命令がないこと
・プロセスによる、例外的なハンドラーの変更
・コール命令実行時のアクセス権侵害
・プロセスのスタックポインタが、ＴＥＢ（スレッド環境ブロック）に示されている領域の境界を超えていること。
【００２６】
例えば、「ｒｅｔ命令の前に呼び出し命令がない」というイベントが疑わしいイベントである可能性がある。というのも、コール命令（スタック内のリターンポイントのアドレスを保存してプロシージャに制御を移す命令）の後には必ずｒｅｔ命令（スタックに退避された復帰アドレスの呼び出し元プログラムへの制御の復帰命令）が来るためである。
【００２７】
更に別の例では、ロギングモジュール１３３は、以下の例外的状況を識別するように構成されていてもよい：
・コール命令実行時のアクセス権侵害
・メモリへの書き込み時のアクセス権侵害
・プログラムカウンタアドレス、及びプログラムカウンタアドレスと所定の精度で一致するアドレス上でメモリから読み込む際のアクセス権侵害
・データの実行を防止するためのポリシー違反
・スタック上のバッファオーバーフロー
・ヒープの損傷（ヒープの破損）
・禁止された、正しくない、又は特権のある命令を実行しようとしたこと
【００２８】
例えば、ロギングモジュール１３３は、レジストリの内容、システム構造、ＡＰＩ関数（ＫｉＵｓｅｒＥｘｃｅｐｔｉｏｎＤｉｓｐａｔｃｈｅｒ）呼び出しの傍受の際の呼び出しのスタックの解析を行うことで、「メモリへの書き込み時のアクセス権の侵害」という例外的な状況を識別することができる 。
【００２９】
アンチウィルスアプリケーション１１０は、そのメイクアップにエミュレータ１１１を含むことができる。また、アンチウィルスアプリケーション１１０は、そのリストが第１型シグネチャのデータベース１２３に含まれるような第１型シグネチャの数から、１つ又は複数の第１型シグネチャを第１ログ１２２において識別するように構成される。第１型シグネチャは、ＡＰＩ関数呼び出しに関する情報と、疑わしいイベントに関する情報のうち少なくとも１つのレコードを含み得るデータ構造を含むことができる。
【００３０】
別の例では、第１型シグネチャは、この同じシグネチャの他のレコードに課せられた条件、即ち、ＡＰＩ関数呼び出し及び疑わしいイベントに関する情報を更に含むことができる。そのような条件には、例えば、シグネチャのレコード数のチェック、シグネチャのレコードのシーケンスのチェック等が含まれる。
【００３１】
第１型シグネチャを識別した後、アンチウィルスアプリケーション１１０は、実行のために少なくとも１つの保存されたメモリダンプをエミュレータ１１１に転送することができる。エミュレータ１１１は、メモリダンプに含まれる実行可能コードを逆アセンブルし、その仮想環境で実行することができる。実行中、エミュレータ１１１は、ＡＰＩ関数呼び出しのアドレスへのジャンプ（例えば、ＣｒｅａｔｅＦｉｌｅ呼び出しオペレータ、ＣｒｅａｔｅＦｉｌｅ  ＡＰＩ関数への制御転送）を判定することができる。次に、エミュレータ１１１は、ＡＰＩ関数呼び出しのレコードを第２ログ１２５に連続して入力することができる。
【００３２】
例示的な側面では、ＡＰＩ関数呼び出し上の第２ログ１２５の全てのレコードは、以下の情報を含むことができる：
・前記ファイル１３４から起動されたＰＩＤ識別子
・プロセスのアドレス空間の命令を実行するスレッドのＴＩＤ識別子
・前述の関数の引数のセット
【００３３】
例示的な側面では、アンチウィルスアプリケーション１１０は、エミュレータ１１１上のプロセスの実行中にプロセスの実行トレースを第２ログ１２５に書き込むように更に構成されていてもよい。プロセスの実行トレースには、プロセッサ上で実行中の傍受されていない命令シーケンスと、各命令を実行するときのプロセッサの内部状態のスナップショットとが含まれていてもよい。
【００３４】
更に別の例では、チェック済のファイル１３４から起動されたプロセスに関する命令のみが、実行トレースから選択される得る。オペレーティングシステムのプロセスの実行に関する命令は、プロセスの実行トレースから削除されうる。
【００３５】
アンチウィルスアプリケーション１１０は、第２ログ１２５において１つ又は複数の第２型シグネチャの識別を行う際に、ファイル１３４内の悪意のあるコード（シェルコードなど）を第２型シグネチャのデータベース１２４から判定することができる。
第２型シグネチャは、ＡＰＩ関数呼び出しに関する情報と、プロセッサ命令と、及びプロセッサの内部状態のスナップショットの記録という３つのレコードのうち少なくとも１つを備えるデータ構造を含むことができる。別の例では、第２型シグネチャは、以下のイベントのうち１つ以上を含むことができる：
・システムライブラリのディスクリプタのアドレス（ｋｅｒｎｅｌ３２．ｄｌｌ、ｎｔｄｌｌ．ｄｌｌ等）の取得
・メモリの割り当て
・ システム構造（プロセス環境ブロック―ＰＥＢ）の読み取り
・ファイルディスクリプタの連続的な取得。
【００３６】
メモリへのプロセスアクセスというイベントは、プロセスの実行トレースから判定される。これは、例えば以下のような「ｍｏｖ  ｅａｘ，  ［ｅｂｘ］」のタイプの命令を含んでいればよい：
"mov         eax, fs:
[00000030]
mov         eax, [eax]
[0C]
mov         eax, [eax]
[0C]
mov         edx, eax
cmp         w,[eax]
[2C]
, 00018"
【００３７】
更に別の例では、第２型シグネチャは、以下のような、プロセスの実行トレースのレコードを含むことができる：
#ReadModuleMemory(0 -> "USER32.dll",77d83452, "UserRegisterWowHandlers" + 0x2,accessor eip - 10002315);
> [0x77d83452]
= 0x00005068
10002315             66 3B 10                      cmp dx, [eax]
EAX: 77D83452  EBX: 00000000  ECX: 77D836A0  EDX: 000040C7  ESI: 77D51324
EDI: 77D5025E  EBP: 00624FB8  ESP: 00624F5C  EIP: 10002318  EFLAGS: 00000297
CS: 001B  DS: 0023  ES: 0023  SS: 0023  FS: 003B  GS: 0000  Flags: .......I.S..A.P.C
Stack:
00624F5C  CB 1C 00 10-01 00 00 00|B0 4F 62 00-30 00 00 00  E.......°Ob.0...
00624F6C  23 00 00 00-20 22 00 10|00 00 00 00-00 00 00 00  #... "..........
FS:[0]
:
00625000  EC 4F 62 00     
【００３８】
プロセスの実行トレースの上記の記録は、メモリの読取りがアドレスＵＳＥＲ３２．ｄｌｌ（レジスタＥＡＸはライブラリＵＳＥＲ３２．ｄｌｌのアドレスを含む）で行われたことを示すことができる。
【００３９】
別の例示的な側面では、第２型シグネチャは、ＡＰＩ関数呼び出し及びプロセッサ命令に関する情報を含むレコードと、プロセッサの内部状態のスナップショットのレコードとを同時に含むことができる。
【００４０】
更に別の例示的な側面では、第２型シグネチャは、この同じシグネチャの他のレコードに課せられた条件、即ち、ＡＰＩ関数呼び出し、プロセッサ命令、及びプロセッサの内部状態のスナップショットの記録とを更に含むことができる。そのような条件には、例えば、シグネチャのレコード数のチェック、シグネチャのレコードのシーケンスのチェック等が含まれる。
【００４１】
前述の条件を含むような、第２型シグネチャの例には、次のようなものがある。
・ＡＰＩ関数ＧｅｔＦｉｌｅＳｉｚｅの呼び出しが１０回実行されたこと
・ＡＰＩ関数ＷｒｉｔｅＦｉｌｅ（ファイルへの書き込み）の呼び出しの後に、ＡＰＩ関数ＷｉｎＥｘｅｃ（実行するファイルの起動）の呼び出しが表示されるということ
・アドレスｕｓｅｒ３２．ｄｌｌのメモリからの読み込みに引き続き、アドレスｋｅｒｎｅｌ３２．ｄｌｌのメモリからの読み込みが行われたこと
・ファイル１３４から起動されたプロセスによって悪意のあるファイルを作成し、それをスタートアップに追加すること
・実行可能プロセスが、そのプロセスが起動されたファイル１３４をコピーしたこと
【００４２】
ＡＰＩ関数呼び出しに加えて、ロギングモジュール１３３は、以下のオブジェクトに関する情報を含むレコードの第１ログ１３７への傍受及びその後の保存を実行してもよい：
・ＡＰＩ関数からの戻りアドレスで制御を転送する手順
・ ＷｉｎｄｏｗｓＮＴネイティブＡＰＩ関数の直接呼び出し
・ ＷｉｎｄｏｗｓＮＴネイティブＡＰＩ関数からの戻り値
・ コンピュータシステムをオフにする又は再起動するイベント
・プロセス内で発生する例外的な状況
【００４３】
例示的な側面では、エミュレータ１１１は、システム構造（プロセス環境ブロック、ＰＥＢ）の読み取りに関する情報と、システムライブラリのディスクリプタのアドレス（例えば、ｋｅｒｎｅｌ３２．ｄｌｌ、ｎｔｄｌｌ．ｄｌｌ）の取得に関する情報とを含む１つ又は複数のレコードを第２ログ１２５に入力するように構成されていてもよい。
【００４４】
別の例示的な側面では、エミュレータ１１１は、レジストリ、ファイルシステム（ｆｏｐｅｎ（）、ｃｒｅａｔｅ（）等）、ＲＡＭ、プロセスとスレッドのうちの１つ又は複数を処理する動作を担うシステムコールに関する情報を含むレコードを第２ログ１２５に入力するように構成されていてもよい。
【００４５】
上記の例では、ロギングモジュール１３３は、システムコールに関する情報を、システムコールの傍受、ＯＳカーネル通知メカニズムの使用、及びＯＳドライバのスタックへのドライバを埋め込みのうち何れか１つの方法によって取得するように構成されていてもよい。
【００４６】
エミュレータ１１１は、制御転送アドレスでシステムコールに関する情報を取得することができる。
【００４７】
図２は、（シェルコード等の）ファイル内の悪意のあるコードの検出のための例示的な方法を示す。ステップ２０１において、ファイル１３４から起動されたプロセスは、サンドボックス１３０を用いてアンチウィルスアプリケーション１１０の制御下で実行される。次に、ステップ２０２において、ロギングモジュール１３３は、プロセスの実行中にＡＰＩ関数呼び出しを傍受するように構成されていてもよい。ステップ２０３において、ロギングモジュール１３３は、傍受されたＡＰＩ関数呼び出しに関するレコードを第１ログ１３７に連続的に入力するように構成されていてもよい。
【００４８】
次に、ステップ２０４において、スキャンモジュール１３２は、ロギングモジュール１３３によって傍受されたたＡＰＩ関数呼び出しに基づいてプロセスの実行中に発生する疑わしいイベントを判定し、第１ログ１３７にその疑わしいイベントに関するレコードを入力するように構成されていてもよい。
【００４９】
ステップ２０５において、スキャンモジュール１３２は、傍受されたＡＰＩ関数呼び出しについての記録のステップ２０３における保存の後、及びステップ２０４において検出された疑わしいイベントの後に、プロセスのメモリダンプをダンプデータベース１３６に保存するように構成されていてもよい。
【００５０】
例示的な側面では、ステップ２０３の後、ステップ２０４〜２０５をスキップしてステップ２０６に続くことができる。この場合、ＡＰＩ関数呼び出しに関する情報を含むレコードのみが第１ログ１３７に保存されることになる。別の例では、ステップ２０３を省略することが可能であり、したがってステップ２０２の後にステップ２０４へ進む。この例では、検出された疑わしいイベントに関する情報を含むレコードのみが、第１ログ１３７に保存される。
【００５１】
その結果、ステップ２０６において、スキャンモジュール１３２は、終了条件が満たされているかどうかをを確認し、もしこれが満たされていなければ、ステップ２０１〜２０５の繰り返しを開始するように構成されうる。しかし、終了条件が満たされている場合、上の方法の実行はステップ２０７にて継続される。終了条件は、以下のうちの少なくとも１つを含む：
ｉ．プロセスの完了
ｉｉ． 特定の時間の経過
ｉｉｉ．ステップ２０１〜２０５が、指定された回数繰り返し実行されたこと
ｉｖ．プロセスによって実行された命令の数が、指定された閾値を超えたこと
ｖ．スキャンモジュールによって決定された疑わしいイベントの数が、指定された閾値を超えたこと
【００５２】
例示的な側面では、終了条件のうち１つでも満たされると、ステップ２０６でｉｉからｖまでの番号が付けられ、アンチウィルスアプリケーション１１０は、サンドボックス１３０の状態を保存することができる。終了条件ｉの場合、 処理が完了したので、サンドボックス１３０の状態を保存する必要はない。仮想マシンの例では、仮想マシンのメモリの内容、プロセッサのレジスタ等、仮想マシンの瞬間的なスナップショットが保存される。ステップ２０９において、アンチウィルスアプリケーション１１０が第２型シグネチャを識別しなかった場合、ファイル１３４は、保存された状態を使用してサンドボックス１３０内で実行するためにもう一度送信される。すなわち、ステップ２０１〜２０５は、ステップ２０６で終了条件が満たされるまで実行されることになる。例えば、第１疑わしいイベントが検出されるまでステップ２０１から２０５までが一度実行され、エミュレータ１１１内のファイル１３４の追加分析のためにサンドボックス１３０内の実行が停止される、といった具合である。しかし、エミュレータ１１１がファイル１３４内の悪意のあるコードを発見できなかった場合、サンドボックス１３０内のファイル１３４の実行は、終了条件（例えば、次の疑わしいイベントが判定されるか、又は処理が完了すること）が満たされるまで継続される。このように、アンチウィルススキャンの実行速度を増加させることができる。というのも、終了条件は、ステップ２０４における最初の疑わしいイベントの検知であり、これは、プロセスの実行の完了、又は指定された期間が経過するのを待つことなく、実行されるためである。同時に、ファイル１３４内の悪意のあるコードの決定の質は、必要であればステップ２０１〜２０５が繰り返されるので、劣化することはない。
【００５３】
別の例示的な側面では、疑わしいイベントは、スキャンモジュール１３２によって割り当てられる異なる重みを有することができる。例えば、例外的な状況では重みが１になり、疑わしいＡＰＩ関数のリストからのＡＰＩ関数呼び出しでは重みが２になる。この場合、例えば、終了条件を決定するために、疑わしいイベントの重みを使用することができる。したがって、終了条件として、重み２を有する疑わしいイベントの検出、又は合計して重み２を有する複数の疑わしいイベントの検出、即ち、スキャンモジュール１３２によって決定された疑わしいイベントの合計された重みが特定の値を超えたという条件を含むことができる。
【００５４】
別の例示的な側面では、サンドボックス１３０におけるプロセスの実行の完了後、スキャンモジュール１３２は、その実行の完了の瞬間に、プロセスのメモリダンプを更に保存することができる。スキャンモジュール１３２は、サンドボックス１３０内のプロセスの実行が完了した後に、その実行の完了の瞬間に、プロセスのコンテキストを更に保存することができる。アンチウィルスアプリケーション１１０は、以下に説明するように、ステップ２０８のプロセスのメモリダンプのエミュレータ上での実行中に、プロセスの保存されたコンテキストを使用するように構成されていてもよい。
【００５５】
更に別の例示的な側面では、ステップ２０８において、疑わしいイベントの検出時にプロセスのコンテキストを（疑わしいイベントが検出される際に）更に保存することができ、アンチウィルスアプリケーション１１０は、そのプロセスのコンテキストに対応するプロセスのメモリダンプをエミュレータ１１１において実行する際に、保存されたプロセスのコンテキストを利用することができる。
【００５６】
終了条件が満たされた後、即ちサンドボックス内のプロセスの実行が完了した後、第１ログ１３７をコンピュータに転送して第１ログ１２２に送り、ダンプデータベース１３６をダンプデータベース１２１に転送することができる。ステップ２０７において、アンチウィルスアプリケーション１１０は、第１ログ１２２において、１つ又は複数の第１型シグネチャを識別することができる。第１型シグネチャそれぞれは、ＡＰＩ関数呼び出しに関する情報又は疑わしいイベントに関する情報のレコードのうち、少なくとも１つを備えるデータ構造を含んでいてもよい。
【００５７】
第１型シグネチャを識別した後、ステップ２０８において、アンチウィルスアプリケーション１１０は、１つ又は複数の保存されたメモリダンプを実行のためにエミュレータ１１１に送信することができる。また、エミュレータ１１１での実行中に、第２ログ１２５に対して、ＡＰＩ関数呼び出しに関するレコード又はプロセスの実行トレースのレコードが連続的に入ってきていてもよい。プロセスの実行トレースは、プロセッサ上で実行中の中断のない命令シーケンスと、各命令の実行中のプロセッサの内部状態のスナップショットと、を含むことができる。
【００５８】
エミュレータ１１１は、メモリダンプに含まれる実行可能コードを逆アセンブルし、その仮想環境で実行することができる。
【００５９】
第２型シグネチャは、ＡＰＩ関数呼び出しに関する情報、プロセッサ命令、及びプロセッサの内部状態のスナップショットの記録という３つのレコードのうち少なくとも１つを備えるデータ構造を含むことができる。
【００６０】
その結果、ステップ２０９において、アンチウィルスアプリケーション１１０は、１つ又は複数の第２型シグネチャの第２ログ１２５における識別の際に、ファイル内の悪意のあるコードを判定するように構成されうる。第２型シグネチャは、ＡＰＩ関数呼び出しに関する情報、プロセッサ命令、及びプロセッサの内部状態のスナップショットの記録という３つのレコードのうち少なくとも１つを備えるデータ構造を含むことができる。
【００６１】
上記に基づいて、開示されたシステム及び方法は、既存の検出方法が常にそれを検出することができないファイル内の悪意のあるコードを検出することを可能にする。
【００６２】
図３は、ステップ２０８におけるエミュレータ上のプロセスの実行のための、本発明に係る詳細な方法を提示する。プロセスの実行中、ステップ３０１において、エミュレータ１１１は、ＡＰＩ関数呼び出しのアドレス（例えばＣｒｅａｔｅＣｉｌｅ呼び出しオペレータ、ＡＰＩ関数ＣｒｅａｔｅＦｉｌｅに制御を移す）でジャンプを決定することができる。一例では、ステップ３０２において、エミュレータ１１１は、第２ログ１２５内のＡＰＩ関数呼び出しに関するレコードを連続して入力することができる。
【００６３】
更に別の例示的な側面では、ステップ３０１の後、ステップ３０３に進み、アンチウィルスアプリケーションは、エミュレータ１１１上のプロセスの実行中にプロセスの実行トレースを判定して第２ログ１２５に書き込む。プロセスの実行トレースには、プロセッサ上で実行中の中断のない命令シーケンスと、各命令を実行するときのプロセッサの内部状態のスナップショットが含まれる場合がある。この場合、第２型シグネチャは、プロセッサの内部状態のスナップショットのプロセッサ命令及び記録を含むことができる。
【００６４】
更に別の例示的な側面では、チェックされるファイル１３４から起動されたプロセスに関する命令のみが、プロセスの実行トレースから選択されうる。オペレーティングシステムのプロセスの実行に関する命令は、プロセスの実行トレースから削除することができる。
【００６５】
その結果、ステップ３０２又はステップ３０３の後、ステップ２０９において、アンチウィルスアプリケーション１１０は、１つ又は複数の第２型シグネチャの第２ログ１２５における識別の際に、ファイル１３４内の悪意のあるコードを判定することができる。第２型シグネチャは、ＡＰＩ関数呼び出しに関する情報、プロセッサ命令、及びプロセッサの内部状態のスナップショットの記録という３つのレコードのうち少なくとも１つを備えるデータ構造を含むことができる。
【００６６】
例示的な側面では、第２型シグネチャは、ＡＰＩ関数呼び出しに関する情報とプロセッサ命令とを含むレコードと、プロセッサの内部状態のスナップショットの記録を含むレコードと、を同時に含むことができる。
【００６７】
更に別の例示的な側面では、第２型シグネチャは、この同じシグネチャの他のレコードに課せられた条件、即ち、ＡＰＩ関数呼び出し、プロセッサ命令、及びプロセッサの内部状態のスナップショットの記録を更に含むことができる。そのような条件には、例えば、シグネチャのレコード数のチェック、シグネチャのレコードのシーケンスのチェック等が含まれる。第２型シグネチャのより詳細な説明は、図１の説明において上記に与えられている。 
【００６８】
図４は、実施形態に係り本発明のシステムと方法が実装できる汎用コンピュータ・システム（パーソナル・コンピュータやサーバ等）の例を示している。図示の通り、コンピュータ・システム２０は、ＣＰＵ２１と、システムメモリ２２と、ＣＰＵ２１と関連付けられたメモリを含む様々なシステムコンポーネントを接続するシステムバス２３とを含み得る。システムバス２３は、バスメモリ又は、バスメモリコントローラ、周辺バス、及びローカルバスを次々含む従来から公知のあらゆるバス構造としても実現され得、これらはどのような他のバスアーキテクチャとも通信可能である。システムメモリは、リードオンリーメモリ（ＲＯＭ）２４及びランダムアクセスメモリ（ＲＡＭ）２５を含む。基本的な入出力システム（ＢＩＯＳ）２６は、ＲＯＭ２４の使用によってオペレーティング・システムをロードする際等、コンピュータ・システム２０の要素間の情報の伝達を担う基本的な手順を含む。
【００６９】
コンピュータ・システム２０は、データの読み書きのためのハードディスク２７、取り外し可能な磁気ディスク２９の読み書きのための磁気ディスクドライブ２８、及びＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、その他の光学メディア等の光学ディスク３１の読み書きのための光学式ドライブ３０を含む。ハードディスク２７、磁気ディスクドライブ２８、及び光学式ドライブ３０は、ハードディスクインターフェース３２、磁気ディスクインターフェース３３、及び光学式ドライブインターフェース３４それぞれを横切るシステムバス２３と接続される。ドライブ及び対応するコンピュータ情報メディアは、コンピュータ命令、データ構造体、プログラムモジュール、及びコンピュータ・システム２０の他のデータのストレージのための電源依存のモジュールである。
【００７０】
例示的な実施形態では、コントローラ５５を介してシステムバス２３に接続されたハードディスク２７、取り外し可能な磁気ディスク２９、および取り外し可能な光ディスク３１を使用するシステムを含む。当業者は、コンピュータ（ソリッド・ステート・ドライブ、フラッシュ・メモリ・カード、デジタル・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）など）によって読み取り可能な形式でデータを記憶することができる媒体５６の１つまたは複数を利用することもできる。
【００７１】
コンピュータ・システム２０は、ファイルシステム３６を有し、記録されたオペレーティング・システム３５を保持する。また追加のプログラムアプリケーション３７、他のプログラムモジュール３８、及びプログラムデータ３９を有する。ユーザは、入力機器（キーボード４０、マウス４２）を用いてコマンドと情報をコンピュータ・システム２０に入力することができる。他の入力機器：マイクロフォン、ジョイスティック、ゲームコントローラ、スキャナ等を用いることもできる。そのような入力機器は、通常、システムバスに次々接続しているシリアルポート４６を通じてコンピュータ・システム２０に差し込まれるが、それらは、他の方法例えばパラレル・ポート、ゲームポート、又は一般的なシリアルバス（ＵＳＢ）に接続される。ディスプレイ機器のモニタ４７又は他のタイプは、また、ビデオアダプタ４８等のインターフェースと交差するシステムバス２３に接続している。モニタ４７に加えて、パーソナル・コンピュータは、スピーカー、プリンタ等の他の周辺の出力機器（不図示）を接続できる。
【００７２】
コンピュータ・システム２０は、１つ又は複数のリモートコンピュータ４９とのネットワーク接続を用いて、ネットワーク環境で操作することができる。リモートコンピュータ（又はコンピュータ）４９は、図４に示すように、コンピュータ・システム２０の性質として説明した上述の要素全ての大多数を有するパーソナル・コンピュータ又はサーバでもある。ルータ、ネットワークステーション、ピア接続の機器、又は他のネットワークノード等の他の機器もまた、かかるコンピュータ・ネットワークで存在し得るものである。
【００７３】
ネットワーク接続は、ローカルエリアコンピュータ・ネットワーク（ＬＡＮ）５０及びワイドエリアコンピュータ・ネットワーク（ＷＡＮ）を形成することができる。そのようなネットワークは、企業のコンピュータ・ネットワーク及び社内ネットワークで利用され、それらはたいていにインターネットにアクセスすることができる。ＬＡＮ又はＷＡＮネットワークにおいて、パソコン２０は、ネットワークアダプタ又はネットワークインターフェース５１に交差するローカルエリアネットワーク５０に接続されている。ネットワークが用いられる時には、パソコン２０は、通信にインターネット等のワイドエリアコンピュータ・ネットワークを実現するために、モデム５４又は他のモジュールを使用することができる。内部又は外部の機器であるモデム５４は、シリアルポート４６によりシステムバス２３と接続される。かかるネットワーク接続は、単なる一例であり、ネットワークの正確な構成を示すものではない。すなわち、技術の通信モジュールによって、あるコンピュータから他のコンピュータへの接続を確立する他の方法もあることに留意されたい。
【００７４】
様々な実施形態において、ハードウェア、ソフトウェア、ファームウェア、又はこれらのあらゆる組み合わせにおいて、ここで説明されたシステム及び方法を実施し得る。ソフトウェアにおいて実装される場合は、方法は不揮発性コンピュータ可読媒体の１つ又は複数の指示又はコードとして保存され得る。コンピュータ可読媒体は、データストレージを含む。あくまでも例であり限定するものではないが、そのようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、フラッシュメモリ、若しくは他のタイプの電気、磁気、光学式の記憶媒体、又はその他のメディアであってもよい。すなわち、これらによって指示又はデータ構造体という形で、要求されたプログラムコードを運ぶか又は保存することができ、汎用コンピュータのプロセッサによってアクセスすることができる。
【００７５】
様々な実施形態で、本発明のシステム及び方法が、モジュールとして実装され得る。ここで用語「モジュール」は、実世界の機器、コンポーネント、又はハードウェアを用いて実装されたコンポーネント配置であり、例えばＡＳＩＣ（ＡｐｐｌｉｃａｔｉｏｎＳｐｅｃｉｆｉｃＩｎｔｅｇｒａｔｅｄＣｉｒｃｕｉｔ）、ＦＰＧＡ（Ｆｉｅｌｄ−ＰｒｏｇｒａｍｍａｂｌｅＧａｔｅＡｒｒａｙ）等の、又は例えばモジュールの機能を実行するマイクロプロセッサシステムや指示セットによる等、ハードウェアとソフトウェアの組み合わせとして実装され得る。これらは、実行中にマイクロプロセッサシステムを特定の機器に変換する。モジュールは、ハードウェア単体により促進される一定の機能とハードウェア及びソフトウェアの組み合わせによって促進される他の機能という２つの組み合わせとして実施されてもよい。モジュールの少なくとも一部又は全部は、汎用コンピュータのプロセッサにおいて実行できる（図３において詳述したもの等）。したがって、各モジュールは様々な適当な構成で実現することができて、ここに例示した特定の実装に限られるものではない。
【００７６】
なお、実施形態の通常の機能のうちの全てをここで開示しているわけではない。本発明の何れの実施形態を開発する場合においてでも、開発者の具体的な目標を達成するためには多くの実施に係る特別な決定が必要であり、これらの具体的な目標は実施形態及び開発者ごとに異なることに留意されたし。そのような開発努力は、複雑で時間を要するものであるが、本発明の利益を享受し得る当業者にとってはエンジニアリングの日常であると理解されたい。
【００７７】
更に、本明細書で使用される用語又は表現は、あくまでも説明のためであり、限定するものではない。つまり、関連技術の熟練の知識と組み合わせて、本明細書の用語又は表現は、ここに示される教示及び指針に照らして当業者によって解釈されるべきであると留意されたし。明示的な記載がない限り、明細書又は特許請求の範囲内における任意の用語に対して、珍しい又は特別な意味を帰することは意図されていない。
【００７８】
本明細書で開示された様々な側面は、例示のために本明細書に言及した既知のモジュールの、現在及び将来の既知の均等物を包含する。更に、側面及び用途を示し、説明してきたが、本明細書に開示された発明の概念から逸脱することなく、上述したよりも多くの改変が可能であることが、この開示の利益を有する当業者には明らかであろう。
【誤訳訂正２】
【訂正対象書類名】図面
【訂正対象項目名】全図
【訂正方法】変更
【訂正の内容】
【図１】
2018041438.tif 000001
【図２】
2018041438.tif 000002
【図３】
2018041438.tif 000003
【図４】
2018041438.tif 000004
【誤訳訂正３】
【訂正対象書類名】特許請求の範囲
【訂正対象項目名】全文
【訂正方法】変更
【訂正の内容】
【特許請求の範囲】
【請求項１】
コンピュータによって実行される、ファイル中の悪意のあるコードを検出するための方法であって、
実行ステップと、傍受ステップと、格納ステップと、検出ステップと、転送ステップと、識別ステップとを備え、
前記実行ステップでは、計算機器のプロセッサによって、前記計算機器にインストールされたアンチウィルスアプリケーションの制御を介して、前記計算機器の仮想マシン内のファイルから起動されたプロセスを実行し、
前記傍受ステップでは、前記計算機器の前記仮想マシン内の前記ファイルから起動されたプロセスの前記実行中に、前記プロセッサが１つ又は複数のＡＰＩ呼び出しを傍受し、
前記格納ステップでは、前記プロセッサが、前記傍受されたＡＰＩ呼び出しの連続するレコードを前記計算機器の前記仮想マシンの第１ログに格納し、
前記検出ステップでは、前記プロセッサが前記プロセスの終了条件の存在を検出し、
前記転送ステップでは、前記終了条件の検出に応答して、前記プロセッサが１つ又は複数の第１型シグネチャを識別し、且つ実行のために前記プロセッサが、前記計算機器の前記仮想マシン内に保存された１つ又は複数のメモリダンプをエミュレータに転送し、
前記エミュレータ内の、転送された前記計算機器の１つ又は複数の保存されたメモリダンプの実行は、１つ又は複数の保存されたメモリダンプに含まれる１つ又は複数の実行可能コードを逆アセンブルするステップ、エミュレータの仮想空間で前記逆アセンブルされた１つ又は複数の実行可能コードを実行するステップ、及び、前記エミュレータの仮想空間での実行中に傍受されたＡＰＩ呼び出しのレコードを、連続して第２ログに入力するステップとを含み、
前記第２ログ内の各レコードが、ＡＰＩ関数呼び出しについての情報を含み、
前記情報は、対応するファイルから起動されたプロセスのＰＩＤ識別子を含み、
前記識別ステップでは、前記プロセッサが前記計算機器の転送されたメモリダンプの実行結果に少なくとも基づいて、前記第２ログ内において１つ又は複数の第２型シグネチャを検出することに応答して、前記ファイル内の悪意のあるコードを識別し、
前記実行結果は、前記エミュレータから受信され、
前記１つ又は複数の第２型シグネチャは、前記第２ログ内のレコード、１又は複数のＡＰＩ関数呼び出しに関する情報、プロセッサ命令、及び前記プロセッサの内部状態のスナップショットの記録のうちの少なくとも１つを含むデータ構造を含む、
方法。
【請求項２】
前記傍受されたＡＰＩ呼び出しの連続するレコードを決定するステップを更に含む、
請求項１に記載の方法。
【請求項３】
前記検出ステップは、前記プロセスが完了したことの表示、指定された時間の経過、プロセスによって実行された命令の数が特定の閾値を超えたこと、検出された疑わしいイベントの数が選択した閾値を超えたこと、のうち少なくとも１つを終了条件として含む、
請求項１に記載の方法。
【請求項４】
前記傍受されたＡＰＩ呼び出しに基づき、前記プロセスの実行中に発生する１つ又は複数の疑わしいイベントを検出するステップと、
前記１つ又は複数の疑わしいイベントを検出し、更に前記傍受されたＡＰＩ呼び出しの連続するレコードを前記第１ログに格納することに応答して、前記プロセスのメモリダンプを前記計算機器の前記仮想マシンのデータベースに格納するステップと、を更に含む、
請求項２に記載の方法。
【請求項５】
少なくとも前記第１ログ内の連続するレコードに基づいて実行される、前記第１型シグネチャを１つ又は複数識別するというステップにおいて、前記第１型シグネチャそれぞれが、傍受されたＡＰＩ呼び出し又は検出された１つ又は複数の疑わしいイベントに関する情報を備えるデータ構造を含む、
請求項４に記載の方法。
【請求項６】
前記エミュレータ内の、転送された前記計算機器の仮想マシン内に保存された１つ又は複数のメモリダンプの実行は、
前記エミュレータの仮想環境内で前記１つ又は複数の実行可能コードを実行するステップと、
前記エミュレーター内での前記１つ又は複数の実行可能コードの実行中に前記１つ又は複数のＡＰＩ呼び出しのアドレスへのジャンプを決定するステップとをさらに含む、
請求項１に記載の方法。
【請求項７】
前記第２ログ内の各レコードが、前記ＡＰＩ関数呼び出しの名前と、前記プロセスのアドレス空間の命令を実行するスレッドのＴＩＤ識別子と、ＡＰＩ関数の引数のセットと、に関する情報をさらに含む、
請求項６に記載の方法。
【請求項８】
前記第２ログが、前記プロセッサ上で実行中断されていない一連の命令と、各命令を実行する際における前記プロセッサの内部状態のスナップショットと、を含む前記エミュレータの実行経過を維持し記録するように構成されることを含む、
請求項６に記載の方法。
【請求項９】
ファイル中の悪意のあるコードを検出するためのシステムであって、
少なくとも１つのプロセッサが、実行ステップと、傍受ステップと、格納ステップと、検出ステップと、転送ステップと、識別ステップとを実行するように構成され、
前記実行ステップでは、計算機器のプロセッサによって、前記計算機器にインストールされたアンチウィルスアプリケーションの制御を介して、前記計算機器の仮想マシン内のファイルから起動されたプロセスを実行し、
前記傍受ステップでは、前記計算機器の前記仮想マシン内の前記ファイルから起動されたプロセスの前記実行中に、前記プロセッサが１つ又は複数のＡＰＩ呼び出しを傍受し、
前記格納ステップでは、前記プロセッサが、前記傍受されたＡＰＩ呼び出しの連続するレコードを前記計算機器の前記仮想マシンの第１ログに格納し、
前記検出ステップでは、前記プロセッサが前記プロセスの終了条件の存在を決定および検出し、
前記転送ステップでは、前記終了条件の検出に応答して、前記プロセッサが１つ又は複数の第１型シグネチャを識別し、且つ実行のために前記プロセッサが、前記計算機器に保存された１つ又は複数のメモリダンプをエミュレータに転送し、
前記エミュレータ内の、転送された前記計算機器の１つ又は複数の保存されたメモリダンプの実行は、１つ又は複数の保存されたメモリダンプに含まれる１つ又は複数の実行可能コードを逆アセンブルするステップ、エミュレータの仮想空間で前記逆アセンブルされた１つ又は複数の実行可能コードを実行するステップ、及び、前記エミュレータの仮想空間での実行中に傍受されたＡＰＩ呼び出しのレコードを、連続して第２ログに入力するステップとを含み、
前記第２ログ内の各レコードが、ＡＰＩ関数呼び出しについての情報を含み、
前記情報は、対応するファイルから起動されたプロセスのＰＩＤ識別子を含み、
前記識別ステップでは、前記プロセッサが前記計算機器の転送されたメモリダンプの実行結果に少なくとも基づいて、前記第２ログ内において１つ又は複数の第２型シグネチャを検出することに応答して、前記ファイル内の悪意のあるコードを識別し、
前記実行結果は、前記エミュレータから受信され、
前記１つ又は複数の第２型シグネチャは、前記第２ログ内のレコード、１又は複数のＡＰＩ関数呼び出しに関する情報、プロセッサ命令、及び前記プロセッサの内部状態のスナップショットの記録のうちの少なくとも１つを含むデータ構造を含む、
システム。
【請求項１０】
前記プロセッサが、
前記傍受されたＡＰＩ呼び出しの連続するレコードを決定するステップを実行するようにさらに構成される、
請求項９に記載のシステム。
【請求項１１】
前記検出ステップは、前記プロセスが完了したことの表示、 指定された時間の経過、プロセスによって実行された命令の数が特定の閾値を超えたこと、検出された疑わしいイベントの数が選択した閾値を超えたこと、のうち少なくとも１つを終了条件として含む、
請求項９に記載のシステム。
【請求項１２】
前記プロセッサが、
前記傍受されたＡＰＩ呼び出しに基づき、前記プロセスの実行中に発生する１つ又は複数の疑わしいイベントを検出するステップと、
前記１つ又は複数の疑わしいイベントを検出し、更に前記傍受されたＡＰＩ呼び出しの連続するレコードを前記計算機器の仮想マシンの第１ログに格納することに応答して、前記プロセスのメモリダンプを前記計算機器の前記仮想マシンのデータベースに格納するステップと、
を更に実行するように構成される、
請求項９に記載のシステム。
【請求項１３】
前記プロセッサが、少なくとも前記第１ログ内の連続するレコードに基づいて実行される、前記第１型シグネチャを１つ又は複数識別するというステップを実行するように構成され、
前記第１型シグネチャそれぞれが、傍受されたＡＰＩ呼び出し又は検出された１つ又は複数の疑わしいイベントに関する情報を備えるデータ構造を含む、
請求項１２に記載のシステム。
【請求項１４】
前記エミュレータ内の前記計算機器の前記１つ又は複数の保存されたメモリダンプを実行するステップにおいて、前記プロセッサが、
前記エミュレータの仮想環境内で前記１つ又は複数の実行可能コードを実行するステップと、
前記１つ又は複数の実行可能コードの実行中に前記１つ又は複数のＡＰＩ呼び出しのアドレスへのジャンプを決定するステップと、
をさらに実行するように構成される、
請求項９に記載のシステム。
【請求項１５】
前記第２ログ内の各レコードが、前記ＡＰＩ関数呼び出しの名前と、前記プロセスのアドレス空間の命令を実行するスレッドのＴＩＤ識別子と、ＡＰＩ関数の引数のセットと、に関する情報をさらに含む、
請求項１４に記載のシステム。
【請求項１６】
前記第２ログが、前記プロセッサ上で実行中断されていない一連の命令と、各命令を実行する際における前記プロセッサの内部状態のスナップショットと、を含む前記エミュレータの実行経過を維持し記録するように構成される、
請求項１５に記載のシステム。
【請求項１７】
ファイル中の悪意のあるコードを検出するためのコンピュータ実行可能命令を格納するコンピュータ上で読み取り可能な不揮発性媒体であって、
前記命令は、実行ステップと、傍受ステップと、格納ステップと、検出ステップと、転送ステップと、識別ステップを備え、
前記実行ステップでは、計算機器のプロセッサによって、前記計算機器にインストールされたアンチウィルスアプリケーションの制御を介して、前記計算機器の仮想マシン内のファイルから起動されたプロセスを実行し、
前記傍受ステップでは、前記計算機器の前記仮想マシン内の前記ファイルから起動されたプロセスの前記実行中に、前記プロセッサが１つ又は複数のＡＰＩ呼び出しを傍受し、
前記格納ステップでは、前記プロセッサが、前記傍受されたＡＰＩ呼び出しの連続するレコードを前記計算機器の前記仮想マシンの第１ログに格納し、
前記検出ステップでは、前記プロセッサが前記プロセスの終了条件の存在を決定および検出し、
前記転送ステップでは、前記終了条件の検出に応答して、前記プロセッサが１つ又は複数の第１型シグネチャを識別し、且つ実行のために前記プロセッサが、前記計算機器に保存された１つ又は複数のメモリダンプをエミュレータに転送し、
前記エミュレータ内の、転送された前記計算機器の１つ又は複数の保存されたメモリダンプの実行は、１つ又は複数の保存されたメモリダンプに含まれる１つ又は複数の実行可能コードを逆アセンブルするステップ、エミュレータの仮想空間で前記逆アセンブルされた１つ又は複数の実行可能コードを実行するステップ、及び、前記エミュレータの仮想空間での実行中に傍受されたＡＰＩ呼び出しのレコードを、連続して第２ログに入力するステップとを含み、
前記第２ログ内の各レコードが、ＡＰＩ関数呼び出しについての情報を含み、
前記情報は、対応するファイルから起動されたプロセスのＰＩＤ識別子を含み、
前記識別ステップでは、前記プロセッサが前記計算機器の転送されたメモリダンプの実行結果に少なくとも基づいて、前記第２ログ内において１つ又は複数の第２型シグネチャを検出することに応答して、前記ファイル内の悪意のあるコードを識別し、
前記実行結果は、前記エミュレーターから受信され、
前記１つ又は複数の第２型シグネチャは、前記第２ログ内のレコード、ＡＰＩ関数呼び出しに関する情報、プロセッサ命令、及び前記プロセッサの内部状態のスナップショットの記録のうちの少なくとも１つを含むデータ構造を含む、
媒体。
【請求項１８】
前記格納ステップは、
前記傍受されたＡＰＩ呼び出しの連続するレコードを決定するステップ
を更に含む、
請求項１７に記載の媒体。