(58)【調査した分野】(Int.Cl.,DB名)
仮想マシンでのファイルのアンチウィルススキャンを実行するための方法であって、前記方法は、第1次実行工程と、第1記録工程と、第1データベース判定工程と、第1分類工程と、第2次実行工程と、第2記録工程と、第2データベース判定工程と第2分類工程を含み、
前記第1次実行工程は、前記仮想マシンで前記ファイルの第1次実行を行い、
前記第1記録工程は、前記ファイルの第1次実行中に検出された、少なくとも1つのAPI関数コール及び少なくとも1つの内部イベントとを含む、第1のログをメモリに記録し、
前記第1データベース判定工程は、前記第1のログ内の任意の署名が第1署名データベースに格納されているかどうかを判定し、
前記第1分類工程は、前記第1のログ内の署名が前記第1署名データベース内に見つからない場合、前記ファイルを悪意のないものとして分類し、
前記第2次実行工程は、前記第1のログ内の少なくとも1つの署名が、前記第1署名データベース内に見つかった場合、前記仮想マシンで前記ファイルの第2次実行を行い、
前記第2記録工程は、前記ファイルの第2次実行中に検出された、少なくとも1つの内部イベントを含み、前記API関数コールを含まない前記第2のログを前記メモリに記録し、
前記第2データベース判定工程は、前記第2のログ内の任意の署名が第2署名データベースに格納されているかどうかを判定し、
前記第2分類工程は、前記第2のログ内の署名が、前記第2署名データベース内に見つからない場合、前記ファイルを悪意のないものとして分類する、ことを特徴とする方法。
前記仮想マシンで前記ファイルの前記第1次実行を行う工程は、ある期間又は前記ファイルのプログラムコードの実行が完了するまで、前記ファイルの前記第1次実行工程を続けることを含む、請求項1に記載の方法。
前記第1のログ及び前記第2のログに格納された前記少なくとも1つの各内部イベントは、前記内部イベントの名前、システムコールのタイプ、および前記ファイルから起動されたプロセスの一意の識別子を含む、請求項1に記載の方法。
前記第1のログ及び前記第2のログに格納された前記少なくとも1つの各内部イベントは、前記プロセスから起動されたスレッドの一意の識別子、前記システムコールによってアドレス指定されたOSカーネルのオブジェクトにおけるプロセスの一意の識別子、OSカーネルのオブジェクトのスレッドの一意の識別子、及び、OSカーネルのオブジェクトへのパスのうちの少なくとも1つを含む、請求項6に記載の方法。
仮想マシンでのファイルのアンチウィルススキャンを実行するためのシステムであって、前記システムは、第1署名データベース、第2署名データベース、メモリ、及びプロセッサを備え、
前記プロセッサは、前記仮想マシンで前記ファイルの第1次実行を行い、
前記ファイルの第1次実行中に検出された、少なくとも1つのAPI関数コール及び少なくとも1つの内部イベントとを含む、第1のログをメモリに記録し、
前記第1のログ内の任意の署名が、前記第1署名データベースに格納されているかどうかを判定し、
前記第1のログ内の署名が前記第1署名データベース内に見つからない場合、前記ファイルを悪意のないものとして分類し、
前記第1のログ内の少なくとも1つの署名が、前記第1署名データベース内に見つかった場合、前記仮想マシンで前記ファイルの第2次実行を行い、
前記ファイルの第2次実行中に検出された少なくとも1つの内部イベントを含み、前記API関数コールを含まない第2のログを前記メモリに記録し、
前記第2のログ内の任意の署名が前記第2署名データベースに格納されているかどうかを判定し、
前記第2のログ内の署名が、前記第2署名データベース内に見つからない場合、前記ファイルを悪意のないものとして分類する、ように構成される、システム。
前記プロセッサは、前記仮想マシンで前記ファイルの前記第1次実行を行い、ある期間又は前記ファイルのプログラムコードの実行が完了するまで、前記ファイルの前記第1次実行を続けるように構成される、請求項8に記載のシステム。
前記プロセッサは、前記ファイルによって実行される命令に従って、前記仮想マシンでの前記ファイルの前記第1次実行の前記期間を動的に変更するように構成される、請求項11に記載のシステム。
前記第1のログ及び前記第2のログに格納された前記少なくとも1つの各内部イベントは、前記内部イベントの名前、システムコールのタイプ、および前記ファイルから起動されたプロセスの一意の識別子を含む、請求項8に記載のシステム。
前記第1のログ及び前記第2のログに格納された前記少なくとも1つの各内部イベントは、前記プロセスから起動されたスレッドの一意の識別子、前記システムコールによってアドレス指定されるOSカーネルのオブジェクトにおけるプロセスの一意の識別子、OSカーネルのオブジェクトのスレッドの一意の識別子、及び、OSカーネルのオブジェクトへのパスのうちの少なくとも1つを含む、請求項13に記載のシステム。
前記仮想マシンで前記ファイルの前記第1次実行を行う命令は、ある期間又は前記ファイルのプログラムコードの実行が完了するまで、前記ファイルの前記第1次実行を続けることを含む、請求項15に記載の非一時的なコンピュータ可読媒体。
前記ファイルによって実行される命令に従って、前記仮想マシンでの前記ファイルの前記第1次実行の前記期間を動的に変更する命令をさらに含む、請求項18に記載の非一時的なコンピュータ可読媒体。
前記第1のログ及び前記第2のログに格納された前記少なくとも1つの各内部イベントは、前記内部イベントの名前、システムコールのタイプ、および前記ファイルから起動されたプロセスの一意の識別子を含む、請求項15に記載の非一時的なコンピュータ可読媒体。
前記第1のログ及び前記第2のログに格納された前記少なくとも1つの各内部イベントは、前記プロセスから起動されたスレッドの一意の識別子、前記システムコールによってアドレス指定されるOSカーネルのオブジェクトにおけるプロセスの一意の識別子、OSカーネルのオブジェクトのスレッドの一意の識別子、及び、OSカーネルのオブジェクトへのパスのうちの少なくとも1つを含む、請求項20に記載の非一時的なコンピュータ可読媒体。
【発明の概要】
【0003】
先行技術を解析すると、従来の技術を使用することは有効ではなく、時には不可能であるという結論に至る。その欠点は、本開示(すなわち仮想マシンでのファイルのアンチウィルススキャンを実行するシステム及び方法)によって克服される。
【0004】
したがって、一態様によれば、方法は、第1次実行工程と、第1記録工程と、第1データベース判定工程と、第1分類工程と、第2次実行工程と、第2記録工程と、第2データベース判定工程と第2分類工程を含み、
第1次実行工程は、仮想マシンでファイルの第1次実行を行い、
第1記録工程は、ファイルの第1次実行中に検出された、少なくとも1つのAPI関数コール及び少なくとも1つの内部イベントとを含む第1のログをメモリに記録し、
第1データベース判定工程は、第1のログ内の任意の署名が第1署名データベースに格納されているかどうかを判定し、
第1分類工程は、第1のログ内の署名が第1署名データベース内に見つからない場合、そのファイルを悪意のないものとして分類し、
第2次実行工程は、第1のログ内の少なくとも1つの署名が、第1署名データベース内に見つかった場合、仮想マシンでファイルの第2次実行を行い、、
第2記録工程は、ファイルの第2次実行中に検出された少なくとも1つの内部イベントを含む第2のログをメモリに記録し、
第2データベース判定工程は、第2のログ内の任意の署名が、第2署名データベースに格納されているかどうかを判定し、
第2分類工程は、第2のログ内の署名が第2署名データベースの内に見つからない場合、そのファイルを悪意のないものとして分類する、方法。
【0005】
別の態様によれば、本方法は、第2のログ内の少なくとも1つの署名が第2署名データベース内で見つかった場合に、第1のログ及び第2のログに基づいてAPI関数コールに関する記録を作成する基準を決定する工程と、決定された基準に対する条件が満たされるまで、仮想マシンでファイルの第3次実行を行う工程と、ファイルの第3次実行中に検出された少なくとも1つの内部イベントを含む第3のログをメモリに記録する工程と、第3のログ内の任意の署名が、悪意のある署名データベースに格納されているかどうかを判定する工程と、悪意のある署名データベースに、第3のログ内の署名が見つからない場合、そのファイルを悪意がないと分類する工程を含む。
【0006】
別の態様によれば、API関数コールに関する記録を作成するための基準とは、第2のログ内に記録シーケンス番号を有する少なくとも1つの内部イベントの発生と、
そして、第1のログ及び第2のログにある署名を第2署名データベースで検出した後に、API関数コールに関する記録を作成することを含み、
記録シーケンス番号とは、第2署名データベースで特定された上記署名の始めの記録の前に、第2のログで発見された記録に対する番号である。
【0007】
別の態様によれば、仮想マシンでファイルの第1次実行を行う工程は、ある期間、又はファイルのプログラムコードの実行が完了するまで、ファイルの第1次実行を続けることを含む。
【0008】
別の態様によれば、この方法は、ファイルによって実行される命令に従って、仮想マシンでのファイルの第1次実行の期間を動的に変更する工程を含む。
【0009】
別の態様によれば、第1のログ及び第2のログに格納された少なくとも1つの各内部イベントは、内部イベントの名前、システムコールのタイプ、およびファイルから起動されたプロセスの一意の識別子を含む。
【0010】
別の態様によれば、第1のログ及び第2のログに格納された少なくとも1つの内部イベントの各々は、プロセスから起動されたスレッドの一意の識別子、システムコールによってアドレス指定されたOSカーネルのオブジェクトにおけるプロセスの一意の識別子、OSカーネルのオブジェクトのスレッドの一意の識別子、及びOSカーネルのオブジェクトへのパスを含む。
【0011】
一態様によれば、仮想マシンでのファイルのアンチウィルススキャンを実行するためのシステムが提供される。本態様によれば、システムは、第1署名データベース、第2署名データベース、メモリ、及びプロセッサを備え、
プロセッサは、仮想マシンでファイルの第1次実行を行い、
ファイルの第1次実行中に検出された、少なくとも1つのAPI関数コール及び少なくとも1つの内部イベントを含む第1のログをメモリに格納し、
第1のログ内の任意の署名が、第1署名データベース内に格納されているかどうかを判定し、第1のログ内の署名が第1署名データベース内に見つからない場合、そのファイルを悪意のないものとして分類し、
第1のログ内の少なくとも1つの署名が第1署名データベース内に見つかった場合、仮想マシンでファイルの第2次実行を行い、ファイルの第2次実行中に検出された少なくとも1つの内部イベントを含む第2のログをメモリに格納し、
第2のログ内の任意の署名が、第2署名データベースに格納されているかどうかを判定し、第2のログ内の署名が第2署名データベース内に見つからない場合、そのファイルを悪意のないものとして分類する、ように構成される。
【0012】
別の態様によれば、仮想マシンでのファイルのアンチウイルススキャンを実行するためのコンピュータ実行可能命令を格納する非一時的なコンピュータ可読媒体が提供される。この態様によれば、上記命令は、第1次実行命令と、第1記録命令と、第1データベース判定命令と、第1分類命令と、第2次実行命令と、第2記録命令と、第2データベース判定命令と第2分類命令を含み、
第1次実行命令は、仮想マシンでファイルの第1次実行を行い、第1記録命令は、ファイルの第1次実行中での、少なくとも1つのAPI関数コール及び検出された少なくとも1つの内部イベントとを含む第1のログをメモリに記録し、第1データベース判定命令は、第1のログ内の任意の署名が、第1署名データベースに格納されているかどうかを判定し、第1分類命令は、第1のログ内が第1署名データベース内に見つからない場合、そのファイルを悪意のないものとして分類し、第2次実行命令は、第1のログ内の少なくとも1つの署名が、第1署名データベース内に見つかった場合、仮想マシンでファイルの第2次実行を行い、第2記録命令は、ファイルの第2次実行中に検出された少なくとも1つの内部イベントを含む第2のログをメモリに記録し、第2データベース判定命令は、第2のログ内の任意の署名が、第2署名データベースに格納されているかどうかを判定し、第2分類命令は、第2のログ内の署名が、第2署名データベース内に見つからない場合、そのファイルを悪意のないものとして分類する命令を含む。
【0013】
例示的な態様における上記の簡略化された概要は、本開示の基本的な理解を提供するものである。この要約は、すべての企図された態様の広範な概要ではなく、すべての態様における主要な又は必須の要素を特定することも、本開示の任意又は全ての態様の範囲を描写することも意図していない。その唯一の目的は、以下の開示のより詳細な説明の前置きとして、1つ又は複数の態様を簡略化した形で提示することである。前述の目的を達成するために、本開示の1つ又は複数の態様は、請求項に記載され、例示的に示される特徴を含む。
【0014】
本明細書に組み込まれ、本明細書の一部を構成する添付の図面は、本開示の1つまたは複数の例示的な態様を示し、詳細な説明とともに、それらの原理および実施形態を説明する役割を果たす。
【発明を実施するための形態】
【0021】
例示的な態様は、仮想マシンでファイルのアンチウイルススキャンを実行する、システム、方法、及びコンピュータプログラム製品に関連して本明細書で説明される。技術的結果として、ファイルが仮想マシンで実行される場合、悪意のあるファイルの検出を損なうプログラムコードを含む悪意のあるファイルが検出される。当業者であれば、以下の説明は単なる例示であり、決して限定することを意図するものではないことを理解されるであろう。他の態様は、本開示の利益を有する当業者に容易に示唆されるであろう。以下、添付の図面に例示されている例示的な態様の実装を詳細に参照する。図面全体にわたって可能な限り同じ参照指標が用いられ、以下の記載は、同じ又は同様のアイテムを参照するものである。
【0022】
図1は、例示的な態様に係る、仮想マシンでファイルのアンチウイルススキャンを実行するためのシステムのブロック図である。図に示されるように、システムは、仮想マシン102でファイル104を実行するように設計されているアンチウィルス・アプリケーション101を含んでいる。例示的な態様では、仮想マシン102においてオペレーティング・システム(OS)103が起動され、順番にファイル104が実行される。仮想マシン102でのファイル104の実行中に、アンチウィルス・アプリケーション101に接続されたロギングモジュール105は、API関数コールと内部イベントを、第1のログ110内、第2のログ111内、第3のログ112内に記録する(ログに保存する)。ログ110から112の間の相違点は、以下でより詳細に説明される。
【0023】
例示的な態様によれば、内部イベントとは、ファイル104により起動されたプロセスからOSカーネル103への、プロセス実行中に生じるシステムコールである。例示的な態様では、内部イベントに関する情報は、システムコールを傍受することによって取得することができる。更に、OSカーネル通知メカニズムを使用しても取得でき、且つアンチウィルス・アプリケーションのドライバをOSドライバスタック(例えば、ファイルシステムスタック又はネットワークドライバスタック)に配置することによって得ることができる。システムコールの傍受は、システムコールのアドレスをスプーフィングする等の従来技術として知られている技術によって行うことができる。
【0024】
例示的な態様では、API関数からの戻り値、Windows NTネイティブAPI関数のダイレクトコール、及びWindows NTネイティブAPI関数からの戻り値における記録を第1のログ110及び第3のログ112に追記する。コンピュータシステムの切断又は再起動におけるイベントの情報も同様である。
【0025】
1つの例示的な態様では、API関数コールにおける第1のログ110及び第3のログ112の各記録は、以下の情報を含む。
・コールされた関数の名前
・ファイル104により起動されたプロセスの一意の識別子(プロセス識別子、PID)
・上記プロセスにより起動されたスレッドの一意の識別子(スレッド識別子、TID)
・上記関数の引数の集合
【0026】
別の態様では、API関数の引数は、(実行可能ファイル、動的リンクライブラリ等のような)データ配列に対する特定のポインタであってもよい。この場合、そのようなファイルのポインタを別のデータログ130に保存することができる。さらに別の例示的な態様では、API関数の引数は、そのようなデータ配列のコンテンツ(内容)であってもよく、このコンテンツはデータログ130に格納される。
【0027】
一態様では、内部イベントは、ネットワーク、レジストリ、ファイルシステム、RAM、及びプロセスとスレッドのうちの少なくとも1つのオブジェクトを操作するために、ファイル104から起動されたプロセスによるオペレーティング・システムのカーネルへのシステムコールである。
【0028】
例示的な一態様では、内部イベントにおける各ログ110から112の各記録は、以下の情報を含むことができる。
・内部イベントの名前
・システムコールのタイプ
・ファイル104から起動されたプロセスの一意の識別子
【0029】
別の例示的な態様では、内部イベントにおける各ログ110から112の各々の記録は、さらに以下の情報を含む。
・上記プロセスから起動されたスレッドの一意の識別子
・システムコールによってアドレス指定されたOSカーネルのオブジェクトのプロセスの一意の識別子
・OSカーネルの上記オブジェクトのスレッドの一意の識別子
・OSカーネルの上記オブジェクトへのパス
【0030】
表1は、内部イベントに関する記録の例を示す。例えば、1番目の記録は次の内部イベントを記述する。
識別子"PID"を持つプロセスがレジストリキーである"Key"を削除する。
【表1】
【0031】
図2は、例示的な態様に係る仮想マシンでのファイルのアンチウィルススキャンを実行する方法のフローチャートを示す。図に示すように、工程201において、アンチウィルス・アプリケーション101は、仮想マシン102でファイル104を実行する。実行中、ロギングモジュール105は、API関数コール及び内部イベントを第1のログ110に、連続して記録する。第1のログ110は、少なくとも1つのAPI関数コールの記録と、少なくとも1つの内部イベントの記録を含む。仮想マシン102でのファイル104の実行は、1つのイベントが発生するまで、つまり、実行する所与の期間(例えば、管理者又はアンチウィルス・アプリケーション101によって指定されるもの)が使い果たされるか、又はファイル104のプログラムコードの実行が完了するまで続く。(すなわち、プログラムコードの最後の命令に達する、OSに制御が移る、又はエラーが発生する、というイベントが発生するまで仮想マシンでのファイルの実行は続けられる)
【0032】
上述したように、仮想マシンでのファイルの実行時間は、指定された期間に制限することができる。例示的な一態様では、この期間は管理者が予め指定することができる。別の例示的な態様では、期間は、仮想マシンでの他のファイルのアンチウィルススキャンの統計に基づいて、管理者又はアンチウィルス・アプリケーション101によって指定することができる。例えば、用いられる手法において、ファイル中の悪意のあるコードを検出する確率が所定の閾値(例えば、95%)を上回るように、期間を指定することができる。すなわち、この例では、期限無く仮想マシンでファイルが実行され、ファイル104内の悪意のあるコードが検出された場合、限定された期間内で仮想マシン102での実行中にこの同じファイル内の悪意のあるコードを検出する確率は、95%である。
【0033】
さらに別の例示的な態様では、期間は、仮想マシンでのファイルの実行中にファイルによって実行される命令に応じて動的に変更することができる。例えば、ファイルのプログラムコードにおけるファイルの始めに、"sleep(time)"関数が見つけられた場合、時間"time"に対する後続のファイルコードの実行を停止させる。この場合、その期間は、その時間"time"だけ増加してもよい。
【0034】
また、指定された時間が経過する前にファイル104のプログラムコードが実行されていれば、仮想環境102の実行も完了するだろう。
【0035】
API関数コールに関する記録の作成は、例えば、メモリ及びディスクにあるOSのシステムライブラリ内のコードを変更することによって行うことができる。また、実行可能ファイルインポートテーブル内のライブラリからAPI関数に対するコールのアドレスを変更する方法、及び/又は、元のライブラリの代わりに"中間"ライブラリを置く方法を使用することもできる。その結果として、元のライブラリから元のコールされたAPI関数に渡す前に、"中間"ライブラリにアドレスが割り当てられる。さらに、API関数のコールに関する記録の作成は、米国特許第9,116,621号に記載されているように、物理メモリ内のプロセッサによるプログラムコードの実行を追跡することによって行うことができる。その全体の内容は、参照により本明細書に組み込まれる。
【0036】
しかしながら、全ての既存の方法では、API関数コールの処理中に仮想マシンでファイルの実行速度がある程度遅くなる。例えば、プログラムコードが多数の反復を含むサイクルを含み、そのサイクル内にAPI関数コールを発見した場合、そのようなサイクルの処理には、実質的により多くの時間がかかる。それにより、仮想マシン102でのファイル104の実行が制限され、そのサイクルは部分的に実行されることになる。このようなサイクルの存在は、ファイルの解析を損なうコードが存在することを証明するものであり、その結果、そのファイルは悪質なものでありえる。仮想マシンでのサイクルの反復する実行時間は、特に多数のファイルをスキャンする必要がある場合には、かなり長くなる(数十秒から数十分)。本発明では、このようなサイクルを発見した後、API関数コールに関する記録を作成することなく、仮想マシンでファイルが再度実行される。したがって、仮想マシンでの再度実行中のファイルの実行速度は、実際のコンピュータでのファイルの実行速度よりわずかに遅くなる。
【0037】
すなわち、工程202において、アンチウィルス・アプリケーション101と接続しているスキャンモジュール106は、第1のタイプの署名(第1タイプ署名データベース120に格納してあるもの)を第1のログ110で(検索を行い)発見する。
第1のタイプの署名(アンチウイルス記録)は、API関数コールに関する情報を含む2つ以上の記録を含んでいる。例示的な態様では、第1のタイプの署名は、内部イベントに関する情報を順番に含む記録をさらに追加で含んでいる。一態様によれば、第1のタイプの署名には、1つ又は複数のAPI関数コールに関する情報を有する記録が含まれており、それは少なくとも2回の反復サイクルで繰り返される。さらに別の例示的な態様では、サイクルの反復回数は、管理者によって指定された反復の制限数を上回る必要がある。第1のタイプの署名の検出は、第1のログ110を検索し、第1のタイプの署名の記録と第1のログ110の記録が一致するものを見つけ出すことによって行われる。工程202で一致が見つからなかった場合、本手法の作業は工程203aで完了し、ファイル104は悪意のあるものとはみなされない。
【0038】
例示的な態様では、ロギングモジュール105は、仮想マシン102のオペレーティング・システム103に実装される。別の例示的な態様では、アンチウィルス・アプリケーション101は、ロギングモジュール105のコンポーネントであり、仮想マシン102のOS103にも実装される。さらに別の例示的な態様では、スキャンモジュール106は、アンチウィルス・アプリケーション101のコンポーネントである。別の例示的な態様では、スキャンモジュール106は、ロギングモジュール105のコンポーネントである。
【0039】
例示的な態様では、第1のタイプの署名は、ネットワークアクティビティ(例えば、"InternetGetConnectedState"及び"InternetOpenUrl"など)の責任を担うAPI関数のコールの記録を含む。
【0040】
署名には、ログ110から112の記録があるだけでなく、署名を特定するためにチェックされるべき様々な条件が含まれ得ることに留意されたい。ログ110から112の記録には、そのような条件を含むことができる。
【0041】
例えば、例示的な態様では、第1のタイプの署名は、フラグをさらに含むことができる。そのフラグは、API関数のコール(以前に開いたネットワークアクティビティ(例えば、"InternetCloseHandle")の完了について責任を担う)についての記録を第1のログが持たないことを示している。この例では、第1のタイプの署名を検出すると、フラグが1であるかどうか、すなわち上記の条件が満たされているかどうかを確認する追加のチェックが行われる。
【0042】
例示的な態様では、第1のタイプの署名は、追加の規則を含む。その規則にとは、第1のログ110での次のリストのAPI関数の記録の数が所定の数(例えば、第1のログ110内のすべての記録の半分)を超えるというものである。API関数リスト:"GetTickCount"、"SysAllocString"、"_wcsnicmp」、"LCmapString"、"wcschr""CoTaskMemFree"、"iswalpha"、"iswalnum"、"CompareString"、"GetCurrentThreadId"、"_wcsicmp"
前述のAPI関数は、通常、正当なソフトウェアによってコールされることはめったにない。しかし、悪意のあるソフトウェアは、アンチウィルス・アプリケーションによるスキャンを妨げるために、そのような関数に対して多数の呼び出しを実行することがある。
【0043】
第1のタイプの署名がログ110内で検出された場合、工程203において、仮想マシン102でファイル104の再度実行が行われる。再度実行の間、ロギングモジュール105は、内部イベントについてのみの記録を第2のログ111内に作成する。仮想マシン102でのファイル104の再実行は、1つのイベントが発生するまで続けられる。つまり、指定された実行時間が経過するというイベント、又はファイル104のプログラムコードの実行が完了するというイベントが生じるまで続く。
【0044】
既に説明したように、工程203における仮想マシン102でのファイル104の実行速度は、工程201における仮想マシン102でのファイル104の実行速度よりも速い。したがって、ファイル104の実行が所与の期間が経過して中断された場合、工程201でよりも工程203において、ファイル104のプログラムコードの多くの命令が実行されることになる。
【0045】
多くの場合、工程201及び工程203での第1のログ110及び第2のログ111に記録された内部イベントが一致することに留意されたい。内部イベントは、OS内のファイル104によるAPI関数コールの結果として生じ、実行しているプロセスでのファイル104の振る舞いを特徴付けるものである。
【0046】
図3は、例示的な態様に係る、第1のログからの記録で第2のログを補う例を示す。具体的には、第1のログ110には、API関数コールに関するN1記録と内部イベントに関するM1記録(N1+M1記録の合計)が含まれ、第2のログ111には、内部イベントに関するM2記録が含まれ、M2≧M1である場合、第1のログ110の全てのM1の記録は第2のログ111の第1のM1記録と一致する。したがって、第2のログ111の補完は、第2のログ111の第1のM1記録を、第1のログ110のN1+M1記録全てと置き換えることによってなされる。最終的に、補完された第2のログ111に生じる記録の数は、N1+M2記録を含んおり、そのうちのN1はAPI関数コールについての記録であり、M2は内部イベントに関する記録である。
【0047】
例示的な態様では、工程202において、第1のタイプの署名の検索は、補完された第2のログの使用によって行うことができ、その生成方法は上述の通りである。
【0048】
工程204において、スキャンモジュール106は、第2のログ111において、第2タイプ署名データベース121からの第2のタイプの署名を特定する。第2のタイプの署名は、内部イベントに関する2つ以上の記録を含むものである。
【0049】
例示的な態様では、第2のタイプの署名は、スタートアップリストを変更することに対して責任を担う内部イベントの記録を含むことができる。例えば、システムレジストリ、ネットワークアクティビティ、新しいファイルの作成、及び実行ファイル(これらのプロセスが起動される)を削除するプロセス、を介してスタートアップリストを変更するものである。内部イベントの記録では通常、悪意のあるファイルを正確に判断することはできない。しかし、内部イベントを解析することで、ファイルが悪意のある可能性が高いことが示される。最終的な判定を行うために、API関数コールに関する情報も必要である。
【0050】
したがって、工程204において、第2のタイプの署名が見つからない場合、ファイル104は悪意のあるとはみなされず、本手法は工程203aで完了する。そうでない場合、その手法は継続され、仮想マシン102でファイル104の第3次実行を行う必要がある。ファイル104の第3次実行のプロセスでは、内部イベントに関する記録のみが始めに作成され、特定の条件(基準)を満たすと、API関数コールに関する記録も作成される。それにより、ファイル104が悪意があるかどうかをより正確に判断できるであろう。
【0051】
従って、工程205において、アンチウィルス・アプリケーション101は、第2のログ111及び第1のログ110に基づいて、API関数コールに関する記録を作成する基準を決定する。例えば、API関数コールに関する記録を作成するための基準として、第2のログ111内に記録シーケンス番号を有する内部イベントの発生であってもよい。その記録は、特定された第2のタイプの署名の始めの記録の前に、第2のログ111で発見されたものである。さらに別の例では、API関数コールに関する記録を作成するための基準は、第2のログ111及び第1のログ110内に第2のタイプの署名の検出した後に、API関数コールに関する記録を作成することとすることができる。
【0052】
工程206において、アンチウィルス・アプリケーション101は、仮想マシン102でファイル104の第3次実行を行い、ファイル104の実行中に、ロギングモジュール105は、API関数コールに関する記録を作成するための条件が満たされるまで、内部イベントのみの記録の第3のログ112に入力する。その後、API関数コールに関する記録が第3のログ112に入力され始める。また、工程201及び203と同様に、工程206におけるファイル104の実行は、1つのイベントが発生するまで行われる。つまり、指定された実行時間が経過するというイベント又はファイル104のプログラムコードの実行が完了するというイベントが生じるまで続く。
【0053】
その結果、工程207において、スキャンモジュール106は、悪意のある署名データベース122を使用して悪意のある署名を第3のログ112内で特定することによって、ファイル104のアンチウイルススキャンを実行する。それぞれの悪意のある署名は、少なくとも1つの記録を含み、それは、順にAPI関数コール又は内部イベントに関する情報を少なくとも含む記録である。上記の署名が少なくとも第3のログで見つかった場合、ファイルは悪意があるとみなされる。
【0054】
本発明の文脈における疑わしいアクティビティとは、API関数コール及び内部イベントに関するログ110から112の記録に基づいてアンチウィルス・アプリケーション101を行うことにより得られるイベントを意味する。すなわち、疑わしいアクティビティとは、第1のログ110に含まれる各API関数コールの結果として実行される動作(アクション)として定義される。
【0055】
図6は、疑わしいアクティビティの例を提示する表2を示す。たとえば、表2の始めの欄には、疑わしいアクティビティの自動実行に関する情報が含まれている。それは、以下のフィールドを含む。一意のプロセス識別子(PID)、一意のスレッド識別子(TID)、レジストリキーの名前(registry_key)、自動起動に追加されたファイルへのパス(Target_file)、動作を実行するプロセスが起動されたファイルへのパス(Image_path)。この疑わしいアクティビティは、"image_path"から起動されたプロセスを記述したものである。それは、"target_file"というファイルを自動スタート(レジストリキー"registry_key")に追加する。このような疑わしいアクティビティにおける特定の例を表2に示す。例示的な態様では、第2のタイプの署名は、疑わしいアクティビティに関する記録をさらに含む。
【0056】
表3(以下に示す)は、悪意のある署名の例を示す。検査対象のファイル104が悪意のあるファイルであるかどうかを判断するためには、悪意のある署名が必要である。例示的な態様では、署名の構造は、署名の記録、所与の記録に適用可能な規則、及び検索領域(所与の署名の検索が行われる1つ又は複数のログ)を含むことができ、そこで、所与の署名の検索が行われる。署名の記録には、特定のAPI関数コール又は特定の内部イベントと、API関数コール又は内部イベントに関する部分的な情報の両方が含まれることができる。たとえば、署名の記録には正規表現を含めることができる。(例えば、記録Аにおいて)文字"?"は、所与の文字がその記録の疑問符の代わりに置かれることができることを意味する。
【0057】
例えば、表3の1番目の署名を検索は、第3のログ112で行われることを示している。この態様では、スキャンモジュール106は、署名A)からD)の記録を第3のログ112で検索する。それらが、署名の規則に従って、第3のログ112内にすべて含まれる場合、ファイル104は悪意があるとみなされる。例えば、記録A)は、プロセスによって自身をコピーすることを意味する。記録B)は、引数に文字列".exe/** installservice"が含まれるAPI関数コールがログで見つかった場合に検出される。記録C)は類似を意図している。記録D)は、ログにAPI関数コール"DeleteFile("$selfpath\\$selfname.exe")が含まれることを意味する。ここで、"$selfpath"はファイルへのパスであり、"$selfname.exe"はファイルの名前である。
【0058】
表3にある2番目の署名は、1番目の署名と同じ記録を含むが、規則はより広範である。結合されたログは、A)からD)のうち少なくとも3つの記録を含むべきである。結合されたログは、3つのログ110から112の記録を組み合わせることによって得られ、以下でさらに詳細に説明する。
【表3】
【0059】
上記で説明したように、仮想マシン102でのファイル104の各実行中に、ログ110から112のいずれか1つに入力される内部イベントは、API関数コールに関する記録の入力に関係なく同じである。したがって、例示的な態様では、3つのログ110から112のすべてが組み合わせられる。仮想マシンでのファイルの実行に関する最も完全な情報を取得することができ、工程207において、ファイルのアンチウイルススキャンは、結合されたログにおいて悪意のある署名を見つけることによって成し遂げられるだろう。
【0060】
例示的な態様では、工程207で、データログ130に格納されたデータ配列において、さらにアンチウィルススキャンが実行される。このアンチウィルススキャンは、ファイルにおける、署名解析、ヒューリスティック解析、または他の既知のアンチウィルススキャンの方法を用いて成されることができる。
【0061】
例示的な態様では、工程201において、仮想マシン102でファイル104の実行を完了した後に、オペレーティング・システムの第1メモリダンプが、アンチウィルス・アプリケーション101によって保存される。工程203において、仮想マシン102でファイル104の実行を完了した後に、OSの第2メモリダンプが、アンチウィルス・アプリケーション101によって保存される。工程206において、仮想マシン102でファイル104の実行を完了した後に、OSの第3のメモリダンプが保存される。
【0062】
例示的な態様では、工程207において、1つ又は複数の保存されたOSメモリダンプ内に悪意のある署名を見つけることによって、ファイルのアンチウイルススキャンの性能をさらに上げることができる。一方、ある例では、悪意のある署名には、1つ又は複数のOSメモリダンプからの記録が含まれるだろう。
【0063】
別の例示的な態様では、工程207において、1つ又は複数の保存されたOSメモリダンプ内に悪意のある署名を単に見つけるだけでも、ファイルのアンチウイルススキャンの性能を上げることができる。一方、ある例では、悪意のある署名にはOSメモリダンプの文字列が含まれる。以下の表4は、メモリダンプ及びログ110から112を使用する悪意のある署名の例を示す。
【表4】
【0064】
図4は、3つのログの組み合わせの例を示す。例えば、第1のログ110は、API関数コールに関するN1記録と、内部イベントに関するM1記録と(合計N1+M1記録)を含むことができる。さらに、第2のログ111は、内部イベントに関する記録M2の合計を含んでもよく(M2≧M1)、第1のログ110の全てのM1記録は、第2のログ111の第1のM1記録と一致し、第3のログ112の第1のM1記録とも一致する。したがって、第3のログ112内のM1記録を、API関数コールでの記録及び第1のログ110の内部イベントでの記録N1+M1に置き換えることによって、結合されたログが得られる。
【0065】
最後に、第3のログ112は、API関数コールに関するN2記録と、内部イベントに関するM3記録(N2+M3記録の合計)とを含む。内部イベントに関する所与のM3記録は、第2のログ111の内部イベントに関するM3記録に対応する。M3記録の後の第2のログ111は、内部イベントに関する更なる数の記録を含むことができ、それは、結合されたログの最後に追加される。
【0066】
したがって、始めにAPI関数コール及び内部イベントに関する記録N1+M1、次に内部イベントにのみ関する記録M2-M1-M3-M4、次いでAPI関数コール及び内部イベントに関する記録N2+M3、そして、最後に内部イベントに関するM4記録を含む結合されたログである。
【0067】
図5は、開示されたシステムおよび方法が例示的な態様に従って実装され得る汎用コンピュータシステム(パーソナルコンピュータまたはサーバであり得る)の例を示す。例えば、コンピュータシステム20は、1つ又は複数の保護サーバ120またはシンクライアント110に対応することができる。図に示すように、コンピュータシステム20は、中央処理装置21(シンクライアント110用ではないが)、中央処理装置21に関連するメモリを含む様々なシステム構成要素を接続するシステムメモリ22およびシステムバス23を含むことができる。システムバス23は、他のバスアーキテクチャと相互作用することができるバスメモリまたはバスメモリコントローラ、周辺バスおよびローカルバスを含む、従来技術から公知の任意のバス構造のように実現される。システムメモリは、読み出し専用メモリ(ROM)24およびランダムアクセスメモリ(RAM)25を含む。基本入出力システム(BIOS)26は、パーソナルコンピュータ20の要素間の情報の転送を保証する基本手順 ROM24を用いてオペレーティング・システムをロードする際のものである。
【0068】
パーソナルコンピュータ20は、データを読み書きするためのハードディスク27と、リムーバブル磁気ディスク29に読み書きするための磁気ディスクドライブ28と、リムーバブル光ディスク31(CD-ROM、DVD-ROM、その他の光学的情報媒体)に読み書きするための光ドライブ30とを備えている。ハードディスク27、磁気ディスクドライブ28、および光ドライブ30は、それぞれハードディスクインターフェース32、磁気ディスクインターフェース33および光ドライブインターフェース34を介してシステムバス23に接続されている。ドライブおよび対応するコンピュータ情報媒体は、パーソナルコンピュータ20のコンピュータ命令、データ構造、プログラムモジュールおよび他のデータを格納するための電力に依存しないモジュールである。
【0069】
本開示は、ハードディスク27、リムーバブル磁気ディスク29およびリムーバブル光ディスク31を使用するシステムの実装を提供するが、他のタイプのコンピュータ情報媒体56を使用することも可能であることを理解されたい。コントローラ55を介してシステムバス23に接続されたコンピュータ(ソリッドステートドライブ、フラッシュメモリカード、デジタルディスク、ランダムアクセスメモリ(RAM)など)によって読み取り可能な形式でデータを格納することができる。
【0070】
コンピュータ20は、ファイルシステム36を有し、そこには記録されたオペレーティング・システム35が保持され、および、追加プログラムアプリケーション37、他のプログラムモジュール38およびプログラムデータ39、もまた同様である。
ユーザは、入力デバイス(キーボード40、マウス42)で、パーソナルコンピュータ20に、コマンドと情報を入力することができる。他の入力デバイス(図示せず)として、マイクロホン、ジョイスティック、ゲームコントローラ、スキャナ等を用いることができる。そのような入力デバイスは、通常、シリアルポート46を介してコンピュータシステム20に接続され、それは、順番に、システムバスに接続される。それらは、他の方法(例えば、パラレルポート、ゲームポート、又はユニバーサルシリアルバス(USB))を用いて接続できる。モニター47又は他のタイプの表示デバイスもまた、ビデオアダプタ48などのインタフェースを介してシステムバス23に接続される。モニター47に加えて、パーソナルコンピュータは、ラウドスピーカー、プリンター等の他の周辺出力デバイス(図示せず)を搭載することができる。
【0071】
パーソナルコンピュータ20は、1つ又は複数のリモートコンピュータ49を用いて、ネットワーク環境で作業することができる。
図5に示すように、リモートコンピュータ(複数可)49も、前述の要素の大部分又は全てを有するパーソナルコンピュータ又はサーバであり、その要素は、パーソナルコンピュータ20の本質を示している。ルータ、ネットワーク局、ピアデバイスまたは他のネットワークノード等、他のデバイスも、コンピュータネットワークに存在できる。
【0072】
ネットワーク接続は、有線および/または無線ネットワーク等のローカルエリアコンピュータネットワーク(LAN)50、およびワイドエリアコンピュータネットワーク(WAN)を形成することができる。このようなネットワークは、企業コンピュータネットワークと社内ネットワークで使用されており、これらは一般的にインターネットへのアクセス権を有している。LANまたはWANネットワークでは、パーソナルコンピュータ20は、ネットワークで使用しているネットワークアダプタまたはネットワークインタフェース51を介してローカルエリアネットワーク50に接続される。ネットワークが用いられる場合、パーソナルコンピュータ20は、インターネットのようなワイドエリアコンピュータネットワークとの通信を提供するため、モデム54または他のモジュールを使用する。モデム54は、内部または外部デバイスであり、シリアルポート46によってシステムバス23に接続される。ネットワーク接続は、単なる例であり、ネットワークの正確な構成を示す必要はないことに留意すべきである。すなわち、現実には、Bluetooth(登録商標)などの技術的な通信モジュールによる別のコンピュータの接続を確立する他の方法がある。
【0073】
様々な態様において、本明細書で説明するシステム及び方法は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組み合わせで実装することができる。ソフトウェアで実装する場合、その方法は、非一時的なコンピュータ可読媒体上の1つまたは複数の命令またはコードとして保存されることができる。コンピュータ可読媒体は、データ記録を含む。コンピュータ可読媒体を以下に例示するが、限定するものではない。コンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROM、フラッシュメモリ、又は、他のタイプの電気的、磁気的、または光記録媒体、又は他の任意の媒体、を備えることができ、命令またはデータ構造の形で所望のプログラムコードを搬送又は保存するために用いられ、汎用コンピュータのプロセッサによってアクセスすることができる。
【0074】
上記のように、様々な態様では、システムおよび方法は、モジュールの観点から、本開示で説明される。本明細書で使用される用語「モジュール」とは、現実世界のデバイス、コンポーネント、または、ハードウェアを用いて実装されたコンポーネントの配置を言及しており、例えば、または、ハードウェアとソフトウェアの組み合わせとして、特定用途向け集積回路(ASIC)またはフィールド・プログラマブル・ゲート・アレイ(FPGA)などによって実装され、モジュールの関数を実装するマイクロプロセッサシステムと命令セットなどによって、(実行される間に)マイクロプロセッサシステムを専用のデバイスに変換される。モジュールも、2つの組合せとして実装されることができ、ハードウェアだけによって容易とされる特定の関数、および、ハードウェアとソフトウェアの組み合わせによって容易とされる他の関数と、これらの組み合わせとして実現することができる。特定の実施態様では、少なくとも一部、およびいくつかのケースでは、モジュールのすべては、(例えば、
図3上部に詳細に説明したもののように)汎用コンピュータのプロセッサ上で実行することができる。したがって、各モジュールは、適切な様々な構成で実現することができ、そして本明細書中に任意の例示的な実施形態に限定されるものではない。
【0075】
明瞭にするために、態様のルーチン関数のすべてが、本明細書に開示されているわけではない。本開示における任意の実際の実装における開発で、多数の実装固有の決定が、開発者の特定の目標を達成するためになされなければならないことが理解されるであろう。さらに、これらの具体的な目標は、異なる実装及び異なる開発者に対して変化することが理解されるであろう。そのような開発努力は複雑で時間がかかるかもしれないが、それでも本開示の利益を有する当業者にとっては、エンジニアリングの日常の仕事であると理解されるであろう。
【0076】
さらに、本明細書で使用される用語又は表現は、説明のためであり、制限するものではなく、つまり、関連技術の熟練の知識と組み合わせて、本明細書の用語または表現は、ここに示される教示及び指針に照らして当業者によって解釈されるべきであることが理解されるべきである。明示的な記載がない限り、明細書または特許請求の範囲内で、任意の用語に対して、珍しいまたは特別な意味を帰することは意図されていない。
【0077】
本明細書で開示された様々な態様は、例示のために本明細書に言及した既知のモジュールの、現在および将来の既知の均等物を包含する。さらに、態様および用途を示し、説明してきたが、本明細書に開示された発明の概念から逸脱することなく、上述したよりも多くの改変が可能であることが、この開示の利益を有する当業者には明らかであろう。