(57)【要約】  ライブ環境においてリアルタイムにマルウェアを検出するシステム及びコンピュータ実装方法が提供される。方法は、ライブ環境において並行して実行される少なくとも１つのプログラムの１つ又は複数の動作をモニタすることと、１つ又は複数の動作に従って、少なくとも１つのステートフル・モデルをビルドすることと、少なくとも１つのステートフル・モデルを分析して、１つ又は複数の挙動を識別することと、識別された１つ又は複数の挙動に基づき、マルウェアの存在を決定することと、を含む。
2017527931.tif 000002
【特許請求の範囲】
【請求項１】
ライブ環境において、リアルタイムにマルウェアを検出するコンピュータ実装方法であって、
前記ライブ環境において並行して実行される少なくとも１つのプログラムの１つ又は複数の動作をモニタすることと、
前記１つ又は複数の動作に従って、少なくとも１つのステートフル・モデルをビルドすることと、
前記少なくとも１つのステートフル・モデルを分析して、１つ又は複数の挙動を識別することと、
前記識別された１つ又は複数の挙動に基づき、マルウェアの存在を決定することと
を含む、コンピュータ実装方法。
【請求項２】
前記モニタすることが、
１つ又は複数のイベントを特徴付けるイベント・データを生成することであって、前記イベントのそれぞれが、前記１つ又は複数の動作のうちの対応するモニタされた動作を示す、ことをさらに含む、請求項１に記載のコンピュータ実装方法。
【請求項３】
前記１つ又は複数の動作を前記モニタすることが、
前記１つ又は複数の動作から、少なくとも１つの対象の動作を選択し、前記選択された少なくとも１つの対象の動作をモニタすることをさらに含む、請求項２に記載のコンピュータ実装方法。
【請求項４】
前記少なくとも１つの対象の動作が、１つ若しくは複数のインプロセス動作及び／又は１つ若しくは複数のカーネル関係の動作を含む、請求項３に記載のコンピュータ実装方法。
【請求項５】
前記カーネル関係の動作が、ファイル・システムの動作、プロセス及びメモリの動作、レジストリの動作、並びにネットワークの動作のうちの１つ又は複数を含む、請求項４に記載のコンピュータ実装方法。
【請求項６】
前記インプロセス動作が、前記インプロセス動作を表す１つ又は複数のライブラリ・コールを傍受することによってモニタされる、請求項４に記載のコンピュータ実装方法。
【請求項７】
前記カーネル関係の動作が、前記カーネル関係の動作を表す１つ又は複数のシステム・コールを傍受することによってモニタされる、請求項４に記載のコンピュータ実装方法。
【請求項８】
前記カーネル関係の動作が、１つ又は複数のコールバック関数を介して、前記カーネル関係の動作用に１つ又は複数のカーネル・フィルタ・ドライバを登録することによってモニタされる、請求項４に記載のコンピュータ実装方法。
【請求項９】
前記１つ又は複数のイベントのイベントごとに、前記イベントを特徴付けるそれぞれのイベント・データを生成することをさらに含み、前記イベント・データは、前記イベントの少なくとも次の属性、動作タイプ、及び前記イベントのソース、を含む、請求項２に記載のコンピュータ実装方法。
【請求項１０】
前記少なくとも１つのステートフル・モデルが、前記１つ又は複数の動作から抽出された１つ又は複数のオブジェクトと、前記動作に従って前記オブジェクト間で識別された１つ又は複数の関係とを含む、請求項１に記載のコンピュータ実装方法。
【請求項１１】
前記オブジェクトのそれぞれが、前記動作に関与しているエンティティを表し、且つプロセス・オブジェクト、ファイル・オブジェクト、ネットワーク・オブジェクト、レジストリ・オブジェクト、及びＷｉｎｄｏｗｓオブジェクトを含むグループから選択されたタイプである、請求項１０に記載のコンピュータ実装方法。
【請求項１２】
前記少なくとも１つのステートフル・モデルのそれぞれが、前記少なくとも１つのプログラムのうちの所与のプログラムに関係している一連のつなぎ合わされた動作を表す、プログラムレベルのステートフル・モデルである、請求項１に記載のコンピュータ実装方法。
【請求項１３】
前記少なくとも１つのステートフル・モデルが、前記ライブ環境において並行して実行されるすべてのプログラムに関係している動作を表す、システムレベルのステートフル・モデルである、請求項１に記載のコンピュータ実装方法。
【請求項１４】
前記システムレベルのステートフル・モデルが、前記すべてのプログラムのうちの所与のプログラムに関係している一連のつなぎ合わされた動作をそれぞれが表す、１つ又は複数のプログラムレベルのステートフル・モデルを含む、請求項１３に記載のコンピュータ実装方法。
【請求項１５】
前記少なくとも１つのプログラムの１つ又は複数のカーネル関係の動作をモニタすることと、
前記モニタされたカーネル関係の動作に基づき、少なくとも１つのステートフル・モデルをビルドすることと、
前記少なくとも１つのステートフル・モデルを分析して、１つ又は複数の挙動を識別することと、
前記ステートフル・モデルの挙動のスコアに基づき、マルウェアの存在を決定することと
をさらに含む、請求項１に記載のコンピュータ実装方法。
【請求項１６】
前記少なくとも１つのステートフル・モデルが、前記１つ又は複数の動作から抽出された１つ又は複数のオブジェクトと、前記動作に従って前記オブジェクト間で識別された１つ又は複数の関係とを含む、請求項１５に記載のコンピュータ実装方法。
【請求項１７】
前記カーネル関係の動作が、ファイル・システムの動作、プロセス及びメモリの動作、レジストリの動作、並びにネットワークの動作のうちの１つ又は複数を含む、請求項１５に記載のコンピュータ実装方法。
【請求項１８】
１つ又は複数のコールバック関数を介して、前記カーネル関係の動作用に１つ又は複数のカーネル・フィルタ・ドライバを登録することによって、前記１つ又は複数のカーネル関係の動作をモニタすることをさらに含む、請求項１５に記載のコンピュータ実装方法。
【請求項１９】
前記少なくとも１つのステートフル・モデルを前記ビルドすることが、
前記イベントに関連付けられた前記イベント・データごとに、
前記イベント・データを正規化して、抽象イベントを生み出すことと、
前記抽象イベントから１つ又は複数のオブジェクトを取得することであって、前記オブジェクトのそれぞれが、対応する動作に関与しているエンティティを表し、且つプロセス・オブジェクト、ファイル・オブジェクト、ネットワーク・オブジェクト、レジストリ・オブジェクト及びＷｉｎｄｏｗｓオブジェクトを含むグループから選択されたタイプであり、前記オブジェクトの少なくとも１つが、前記イベントの前記ソースを表す、ことと、
前記抽象イベントに従って、前記オブジェクト間の１つ又は複数の関係を識別し、前記識別された関係に対応する前記オブジェクト間のそれぞれの関連付けを生成して、前記１つ又は複数のオブジェクト及びそのオブジェクトにおける前記関連付けを含むイベント・コンテキストを生み出す、ことと、
前記イベントがステートフル・モデルの第１のイベントである場合、前記イベント・コンテキストを含む前記ステートフル・モデルを生成することと、
前記イベントが前記ステートフル・モデルの前記第１のイベントではない場合、前記イベント・コンテキストに基づき、以前のステートフル・モデルを更新して、更新済みステートフル・モデルを生み出すことであって、前記以前のステートフル・モデルが、前記イベントに先行する少なくとも１つの以前のイベントに対応する、ことと
を含む、請求項９に記載のコンピュータ実装方法。
【請求項２０】
前記更新することが、
前記以前のステートフル・モデルが前記１つ又は複数のオブジェクトを含む場合、前記イベント・コンテキストの前記関連付けを前記以前のステートフル・モデルに加え、前記更新済みステートフル・モデルを生み出すことと、
そうではなく、前記オブジェクトの少なくとも１つのオブジェクトが、前記以前のステートフル・モデルに含まれていない新しいオブジェクトである場合、前記新しいオブジェクト及び前記イベント・コンテキストの前記関連付けを前記以前のステートフル・モデルに加え、前記更新済みステートフル・モデルを生み出すことと
をさらに含む、請求項１９に記載のコンピュータ実装方法。
【請求項２１】
１つ又は複数の事前に定義されたフィルタリング・ルールに基づき、前記イベント・データから、対象のイベントに関連付けられた選択されたイベント・データを選び出し、前記選択されたイベント・データに対して、前記イベント・データの前記正規化を適用すること、をさらに含む、請求項１９に記載のコンピュータ実装方法。
【請求項２２】
前記１つ又は複数の事前に定義されたフィルタリング・ルールが、未完のイベント、ターゲットにしたプロセスがリモート・プロセスではないメモリ関係のイベント、及びターゲットにしたプロセスが存在しないイベント、に関連付けられたイベント・データをフィルタ処理で取り除くことを含む、請求項２１に記載のコンピュータ実装方法。
【請求項２３】
前記イベント・データを正規化することが、
前記イベント・データをフォーマットすることと、
前記フォーマットされたイベント・データをパースして、前記抽象イベントを生み出すことと
を含む、請求項１９に記載のコンピュータ実装方法。
【請求項２４】
前記少なくとも１つのステートフル・モデルを前記分析することが、
１つ又は複数の事前に定義された挙動のロジックに従って、前記ステートフル・モデル又は前記更新済みステートフル・モデルの観点から、前記イベント・コンテキストを分析することと、
前記事前に定義された挙動のロジックのいずれかが満たされると、前記１つ又は複数の挙動のうちの前記少なくとも１つの挙動の存在を決定することであって、前記ステートフル・モデルの一連のイベントに関係している前記少なくとも１つの挙動が、少なくとも前記イベントを含む、ことと
を含む、請求項１９に記載のコンピュータ実装方法。
【請求項２５】
前記事前に定義された挙動のロジックが、イベントのターゲットが前記ステートフル・モデルに含まれているオブジェクトである、という条件が満たされる場合、自己実行の挙動を決定することを含む、請求項２４に記載のコンピュータ実装方法。
【請求項２６】
前記少なくとも１つの挙動のそれぞれには、それぞれの挙動のスコアが割り当てられる、請求項２４に記載のコンピュータ実装方法。
【請求項２７】
マルウェアの存在を前記決定することが、
前記少なくとも１つの挙動が決定された場合、
以前のステートフル・モデルに関連付けられた前記以前のステートフル・モデルのスコアがあるかどうかを調べることであって、前記以前のステートフル・モデルのスコアが、それぞれの以前の決定された挙動に割り当てられたすべての以前の挙動のスコアの集計された挙動のスコアであり、前記以前の決定された挙動が前記以前のステートフル・モデルの前記少なくとも１つの以前のイベントに関係しており、
前記以前のステートフル・モデルに関連付けられた前記以前のステートフル・モデルのスコアがない場合、前記少なくとも１つの挙動のそれぞれに割り当てられた前記それぞれの挙動のスコアの合計を、前記ステートフル・モデルに関連付けられる前記ステートフル・モデルのスコアとして決定する、ことと、
前記以前のステートフル・モデルに関連付けられた前記以前のステートフル・モデルのスコアがある場合、前記合計により前記以前のステートフル・モデルのスコアを上げて、前記ステートフル・モデルのスコアを生み出すことと、
前記ステートフル・モデルのスコアを、事前に定義された閾値と比較することと、
前記ステートフル・モデルのスコアが前記事前に定義された閾値を超える場合、マルウェアの存在を決定することと
をさらに含む、請求項２６に記載のコンピュータ実装方法。
【請求項２８】
条件が満たされると、前記それぞれの挙動のスコアには、対応する重み係数が割り当てられ、前記上げることが、前記対応する重み係数を前記それぞれの挙動のスコアに適用して、それぞれの重み付き挙動のスコアを生み出し、前記少なくとも１つの挙動のそれぞれに割り当てられた前記それぞれの重み付き挙動のスコアを合計して、前記以前のステートフル・モデルのスコアを上げることを含む、請求項２７に記載のコンピュータ実装方法。
【請求項２９】
前記条件が、イベントのソースがリモート・プロセスであり、前記イベントのターゲットがシステム・プロセスであることを含む、請求項２８に記載のコンピュータ実装方法。
【請求項３０】
前記方法が、前記ステートフル・モデルによって示された前記１つ又は複数の動作を修復することによって、決定されたマルウェアを削除することをさらに含む、請求項１に記載のコンピュータ実装方法。
【請求項３１】
ライブ環境において、リアルタイムにマルウェアを検出するシステムであって、少なくとも、
前記ライブ環境において並行して実行される少なくとも１つのプログラムの１つ又は複数の動作をモニタすることと、
前記１つ又は複数の動作に従って、少なくとも１つのステートフル・モデルをビルドすることと、
前記少なくとも１つのステートフル・モデルを分析して、１つ又は複数の挙動を識別することと、
前記識別された１つ又は複数の挙動に基づき、マルウェアの存在を決定することと、を行うように構成されたプロセッサを備える、システム。
【請求項３２】
前記少なくとも１つのステートフル・モデルが、前記１つ又は複数の動作から抽出された１つ又は複数のオブジェクトと、前記動作に従って前記オブジェクト間で識別された１つ又は複数の関係とを含む、請求項３１に記載のシステム。
【請求項３３】
前記オブジェクトのそれぞれが、前記動作に関与しているエンティティを表し、且つプロセス・オブジェクト、ファイル・オブジェクト、ネットワーク・オブジェクト、レジストリ・オブジェクト、及びＷｉｎｄｏｗｓオブジェクトを含むグループから選択されたタイプである、請求項３２に記載のシステム。
【請求項３４】
前記少なくとも１つのステートフル・モデルのそれぞれが、前記少なくとも１つのプログラムのうちの所与のプログラムに関係している一連のつなぎ合わされた動作を表す、プログラムレベルのステートフル・モデルである、請求項３１に記載のシステム。
【請求項３５】
前記少なくとも１つのステートフル・モデルが、前記ライブ環境において並行して実行されるすべてのプログラムに関係している動作を表す、システムレベルのステートフル・モデルである、請求項３１に記載のシステム。
【請求項３６】
前記システムレベルのステートフル・モデルが、前記すべてのプログラムのうちの所与のプログラムに関係している一連のつなぎ合わされた動作をそれぞれが表す、１つ又は複数のプログラムレベルのステートフル・モデルを含む、請求項３５に記載のシステム。
【請求項３７】
前記プロセッサが、
前記少なくとも１つのプログラムの１つ又は複数のカーネル関係の動作をモニタすることと、
前記モニタされたカーネル関係の動作に基づき、少なくとも１つのステートフル・モデルをビルドすることと、
前記少なくとも１つのステートフル・モデルを分析して、１つ又は複数の挙動を識別することと、
前記ステートフル・モデルの挙動のスコアに基づき、マルウェアの存在を決定することと
を行うようにさらに構成される、請求項３１に記載のシステム。
【請求項３８】
前記少なくとも１つのステートフル・モデルが、前記１つ又は複数の動作から抽出された１つ又は複数のオブジェクトと、前記動作に従って前記オブジェクト間で識別された１つ又は複数の関係とを含む、請求項３７に記載のシステム。
【請求項３９】
前記カーネル関係の動作が、ファイル・システムの動作、プロセス及びメモリの動作、レジストリの動作、並びにネットワークの動作のうちの１つ又は複数を含む、請求項３７に記載のシステム。
【請求項４０】
前記プロセッサが、１つ又は複数のコールバック関数を介して、前記カーネル関係の動作用に１つ又は複数のカーネル・フィルタ・ドライバを登録することによって、前記１つ又は複数のカーネル関係の動作をモニタするようにさらに構成される、請求項３７に記載のシステム。
【請求項４１】
ライブ環境においてリアルタイムにマルウェアを検出する方法ステップを行うように、機械によって実行可能な命令のプログラムを有形で具体化する、前記機械によって読み取り可能な非一時的プログラム記憶デバイスであって、前記方法が、
前記ライブ環境において並行して実行される少なくとも１つのプログラムの１つ又は複数の動作をモニタすることと、
前記１つ又は複数の動作に従って、少なくとも１つのステートフル・モデルをビルドすることと、
前記少なくとも１つのステートフル・モデルを分析して、１つ又は複数の挙動を識別することと、
前記識別された１つ又は複数の挙動に基づき、マルウェアの存在を決定することと
を含む、非一時的プログラム記憶デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
ここに開示された主題は、概して、悪意のあるソフトウェア（マルウェア）の検出の分野に関し、より詳細には、挙動ベースのマルウェア検出の方法及びシステムに関する。
【背景技術】
【０００２】
コンピュータ技術の急成長とインターネット・アクセスの普及に伴い、マルウェアの脅威がここ数十年著しく増大し続けていることから、ハードウェア障害や重要なデータの損失など、システムへの重大な損害を引き起こしている。
【０００３】
ネットワーク内のマルウェアを識別し、そのさらなる拡散を防ぐことを目的とする、シグネチャ及び挙動ベースの分析を含む、様々なアンチウィルス・テクノロジーが現在使用されている。シグネチャベースの分析は、実行可能なコード内で悪意のあるコードの知られているパターンを見つけ出すことを含む。しかしながら、マルウェアは、機能に影響を及ぼさずにそのシグネチャを変えるように変更されることが多く（たとえば、コンテンツを難読化し、ランダム化することによって）、シグネチャベースの分析機構をますます効力のないものにしている。マルウェア・ウイルスの拡大（たとえば、同じ挙動であるが種々のシグネチャを有するマルウェア異形）により、同様の影響を及ぼすマルウェア異形を識別するために、挙動ベースの分析が使用されてもよく、同様のセキュリティ対策と一緒に扱われることが可能である。
【０００４】
挙動ベースの分析は、静的シグネチャではなく悪意のあるアクティビティの挙動をモニタすることによって、マルウェアを検出する。現在ある挙動モニタリング・システムは、ブラックリストに載せられている、悪意を示すアクションのデータベースを含む。所与のプロセス又はプログラムが、データベースに列挙されているアクションのいずれかを行うと、モニタリング・システムによって、アクションがブロックされ、プロセスは、悪意があると識別され、終了させられることが可能である。
【０００５】
当技術分野において、マルウェア検出の新しい方法及びシステムが求められている。
【０００６】
ここに開示された主題に対する背景として関連があると考えられる参考文献が以下に列挙される。本明細書における参考文献の確認は、ここに開示された主題の特許性に多少なりとも関わりがあると見なされるものではない。
【０００７】
「Ｔｅｃｈｎｉｑｕｅｓ  ｆｏｒ  ｂｅｈａｖｉｏｒ  ｂａｓｅｄ  ｍａｌｗａｒｅ  ａｌａｎｙｓｉｓ」と題された米国特許第８，５５５，３８５号（Ｂｈａｔｋａｒら）は、挙動ベースのマルウェア分析の技法を開示している。１つの特定の実施例において、この技法は、トレース・データを受信すること、観察可能なイベントを少なくとも１つのコンピュータ・プロセッサを使用して分析し、下位レベルのアクションを識別すること、複数の下位レベルのアクションを分析して、少なくとも１つの上位レベルの挙動を識別すること、及び少なくとも１つの上位レベルの挙動の出力をもたらすことを含む、挙動ベースの分析用の方法として、理解され得る。
【０００８】
「Ｓｙｓｔｅｍ  ａｎｄ  ｍｅｔｈｏｄ  ｆｏｒ  ｓｅｃｕｒｉｔｙ  ｒａｔｉｎｇ  ｏｆ  ｃｏｍｐｕｔｅｒ  ｐｒｏｃｅｓｓｅｓ」と題された米国特許第７，５３０，１０６号（Ｚａｉｔｓｅｖら）は、（ａ）コンピュータ上でファイルを実行しようとする企てを検出すること、（ｂ）ファイルの初期リスク・アセスメントを行うこと、（ｃ）ファイル内のコードからプロセスを開始すること、（ｄ）プロセスに付随する初期リスクを分析し、プロセスに初期セキュリティ格付けを割り当てること、（ｅ）怪しいアクティビティに対してプロセスをモニタすること、（ｆ）プロセスが怪しいアクティビティを行おうとした時に、プロセスのセキュリティ格付けを更新すること、（ｇ）更新済みセキュリティ格付けが第１の閾値を超える場合、ユーザに通知し、プロセスの実行を継続すること、及び（ｈ）更新済みセキュリティ格付けが第２の閾値を超える場合、アクションをブロックし、プロセスを終了させること、を含む、マルウェアの存在に対する実行可能なファイル内のプロセスのセキュア格付け用のシステム、方法、及びコンピュータ・プログラム製品を開示している。
【０００９】
「Ｈｏｓｔ  ｉｎｔｒｕｓｉｏｎ  ｐｒｅｖｅｎｔｉｏｎ  ｓｙｓｔｅｍ  ｕｓｉｎｇ  ｓｏｆｔｗａｒｅ  ａｎｄ  ｕｓｅｒ  ｂｅｈａｖｉｏｒ  ａｎａｌｙｓｉｓ」と題された米国特許第８，６０７，３４０号（Ｗｒｉｇｈｔ）は、コンピュータ、ソフトウェア・アプリケーション、オペレーティング・システム、グラフィック・ユーザ・インターフェース、又はコンピュータ・ネットワークの他の構成要素若しくはクライアントとのユーザ・インタラクションをモニタし、ユーザ・インタラクションと、コンピュータ使用セッション中又はコンピュータ使用セッションに関連して実行されるコンピュータ・コード・プロセスに少なくとも一部基づき、コンピュータ・ネットワークを保護するアクションを行うための、挙動ベースのホスト侵入防止方法及びシステムを使用した、向上した脅威検出能力を開示している。
【００１０】
「Ｍｅｔｈｏｄ  ａｎｄ  ｓｙｓｔｅｍ  ｆｏｒ  ａｕｔｏｍａｔｉｃ  ｄｅｔｅｃｔｉｏｎ  ａｎｄ  ａｎａｌｙｓｉｓ  ｏｆ  ｍａｌｗａｒｅ」と題された米国特許出願第２０１２／０７９，５９６号（Ｔｈｏｍａｓら）は、ファイルを受信することと、システム用のメモリ・ベースラインを格納することを含む、悪意のあるソフトウェア（マルウェア）を検出する方法を開示している。方法は、ファイルをシステムにコピーすること、システム上でファイルを実行すること、システムの動作を終了させること、及び実行後メモリ・マップを格納することも含む。方法は、メモリ・ベースライン及び実行後メモリ・マップを分析することと、ファイルがマルウェアを含んでいると決定することをさらに含む。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】米国特許第８，５５５，３８５号
【特許文献２】米国特許第７，５３０，１０６号
【特許文献３】米国特許第８，６０７，３４０号
【特許文献４】米国特許出願第２０１２／０７９，５９６号
【発明の概要】
【課題を解決するための手段】
【００１２】
ここに開示された主題の一態様により、ライブ環境において、リアルタイムにマルウェアを検出するコンピュータ実装方法が提供され、方法は、ライブ環境において並行して実行される少なくとも１つのプログラムの１つ又は複数の動作をモニタすることと、１つ又は複数の動作に従って、少なくとも１つのステートフル・モデルをビルドすることと、少なくとも１つのステートフル・モデルを分析して、１つ又は複数の挙動を識別することと、識別された１つ又は複数の挙動に基づき、マルウェアの存在を決定することと、を含む。
【００１３】
ここに開示された主題の一実施例により、モニタすることが、１つ又は複数のイベントを特徴付けるイベント・データを生成することであって、イベントのそれぞれが、１つ又は複数の動作のうちの対応するモニタされた動作を示す、ことをさらに含む、コンピュータ実装方法がさらに提供される。
【００１４】
ここに開示された主題の一実施例により、１つ又は複数の動作をモニタすることが、１つ又は複数の動作から少なくとも１つの対象の動作を選択し、選択された少なくとも１つの対象の動作をモニタすること、をさらに含む、コンピュータ実装方法がまたさらに提供される。
【００１５】
ここに開示された主題の一実施例により、少なくとも１つの対象の動作が、１つ若しくは複数のインプロセス動作及び／又は１つ若しくは複数のカーネル関係の動作を含む、コンピュータ実装方法がまたさらに提供される。
【００１６】
ここに開示された主題の一実施例により、カーネル関係の動作が、ファイル・システムの動作、プロセス及びメモリの動作、レジストリの動作、並びにネットワークの動作のうちの１つ又は複数を含む、コンピュータ実装方法がまたさらに提供される。
【００１７】
ここに開示された主題の一実施例により、インプロセス動作が、インプロセス動作を表す１つ又は複数のライブラリ・コールを傍受することによってモニタされる、コンピュータ実装方法がまたさらに提供される。
【００１８】
ここに開示された主題の一実施例により、カーネル関係の動作が、カーネル関係の動作を表す１つ又は複数のシステム・コールを傍受することによってモニタされる、コンピュータ実装方法がまたさらに提供される。
【００１９】
ここに開示された主題の一実施例により、カーネル関係の動作が、１つ又は複数のコールバック関数を介してカーネル関係の動作用に１つ又は複数のカーネル・フィルタ・ドライバを登録することによって、モニタされる、コンピュータ実装方法がまたさらに提供される。
【００２０】
ここに開示された主題の一実施例により、１つ又は複数のイベントのイベントごとに、イベントを特徴付けるそれぞれのイベント・データを生成することをさらに含み、イベント・データは、イベントの少なくとも次の属性、動作タイプ、及びイベントのソース、を含む、コンピュータ実装方法がまたさらに提供される。
【００２１】
ここに開示された主題の一実施例により、少なくとも１つのステートフル・モデルが、１つ又は複数の動作から抽出された１つ又は複数のオブジェクトと、動作に従ってオブジェクト間で識別された１つ又は複数の関係とを含む、コンピュータ実装方法がまたさらに提供される。
【００２２】
ここに開示された主題の一実施例により、オブジェクトのそれぞれが、動作に関与しているエンティティを表し、且つプロセス・オブジェクト、ファイル・オブジェクト、ネットワーク・オブジェクト、レジストリ・オブジェクト、及びＷｉｎｄｏｗｓオブジェクトを含むグループから選択されたタイプである、コンピュータ実装方法がまたさらに提供される。
【００２３】
ここに開示された主題の一実施例により、少なくとも１つのステートフル・モデルのそれぞれが、少なくとも１つのプログラムのうちの所与のプログラムに関係している一連のつなぎ合わされた動作を表す、プログラムレベルのステートフル・モデルである、コンピュータ実装方法がまたさらに提供される。
【００２４】
ここに開示された主題の一実施例により、少なくとも１つのステートフル・モデルが、ライブ環境において並行して実行されるすべてのプログラムに関係している動作を表す、システムレベルのステートフル・モデルである、コンピュータ実装方法がまたさらに提供される。
【００２５】
ここに開示された主題の一実施例により、システムレベルのステートフル・モデルが、すべてのプログラムのうちの所与のプログラムに関係している一連のつなぎ合わされた動作をそれぞれが表す、１つ又は複数のプログラムレベルのステートフル・モデルを含む、コンピュータ実装方法がまたさらに提供される。
【００２６】
ここに開示された主題の一実施例により、少なくとも１つのプログラムの１つ又は複数のカーネル関係の動作をモニタすることと、モニタされたカーネル関係の動作に基づき、少なくとも１つのステートフル・モデルをビルドすることと、少なくとも１つのステートフル・モデルを分析して１つ又は複数の挙動を識別することと、ステートフル・モデルの挙動のスコアに基づき、マルウェアの存在を決定することと、をさらに含む、コンピュータ実装方法がまたさらに提供される。
【００２７】
ここに開示された主題の一実施例により、少なくとも１つのステートフル・モデルが、１つ又は複数の動作から抽出された１つ又は複数のオブジェクトと、動作に従ってオブジェクト間で識別された１つ又は複数の関係とを含む、コンピュータ実装方法がまたさらに提供される。
【００２８】
ここに開示された主題の一実施例により、少なくとも１つのステートフル・モデルをビルドすることが、イベントに関連付けられたイベント・データごとに、イベント・データを正規化して抽象イベントを生み出すことと、抽象イベントから１つ又は複数のオブジェクトを取得することであって、オブジェクトのそれぞれが、対応する動作に関与しているエンティティを表し、且つプロセス・オブジェクト、ファイル・オブジェクト、ネットワーク・オブジェクト、レジストリ・オブジェクト及びＷｉｎｄｏｗｓオブジェクトを含むグループから選択されたタイプであり、オブジェクトの少なくとも１つがイベントのソースを表す、ことと、抽象イベントに従って、オブジェクト間の１つ又は複数の関係を識別し、識別された関係に対応するオブジェクト間のそれぞれの関連付けを生成して、１つ又は複数のオブジェクト及びそのオブジェクトにおける関連付けを含むイベント・コンテキストを生み出すことと、イベントがステートフル・モデルの第１のイベントである場合、イベント・コンテキストを含むステートフル・モデルを生成することと、イベントがステートフル・モデルの第１のイベントではない場合、イベント・コンテキストに基づき、以前のステートフル・モデルを更新して、更新済みステートフル・モデルを生み出すことであって、以前のステートフル・モデルがイベントに先行する少なくとも１つの以前のイベントに対応する、ことと、を含む、コンピュータ実装方法がまたさらに提供される。
【００２９】
ここに開示された主題の一実施例により、更新することが、以前のステートフル・モデルが１つ又は複数のオブジェクトを含む場合、イベント・コンテキストの関連付けを以前のステートフル・モデルに加え、更新済みステートフル・モデルを生み出すことと、そうではなく、オブジェクトのうちの少なくとも１つのオブジェクトが以前のステートフル・モデルに含まれていない新しいオブジェクトである場合、新しいオブジェクト、及びイベント・コンテキストの関連付けを以前のステートフル・モデルに加え、更新済みステートフル・モデルを生み出すことと、をさらに含む、コンピュータ実装方法がまたさらに提供される。
【００３０】
ここに開示された主題の一実施例により、１つ又は複数の事前に定義されたフィルタリング・ルールに基づき、イベント・データから対象のイベントに関連付けられた選択されたイベント・データを選び出し、選択されたイベント・データに対してイベント・データの正規化を適用すること、をさらに含む、コンピュータ実装方法がまたさらに提供される。
【００３１】
ここに開示された主題の一実施例により、１つ又は複数の事前に定義されたフィルタリング・ルールが、未完のイベント、ターゲットにしたプロセスがリモート・プロセスではないメモリ関係のイベント、及びターゲットにしたプロセスが存在しないイベント、に関連付けられたイベント・データをフィルタ処理で取り除くことを含む、コンピュータ実装方法がまたさらに提供される。
【００３２】
ここに開示された主題の一実施例により、イベント・データを正規化することが、イベント・データをフォーマットし、フォーマットされたイベント・データをパースして、抽象イベントを生み出すことを含む、コンピュータ実装方法がまたさらに提供される。
【００３３】
ここに開示された主題の一実施例により、少なくとも１つのステートフル・モデルを分析することが、１つ又は複数の事前に定義された挙動のロジックに従って、ステートフル・モデル又は更新済みステートフル・モデルの観点から、イベント・コンテキストを分析し、事前に定義された挙動のロジックのいずれかが満たされると、１つ又は複数の挙動のうちの少なくとも１つの挙動の存在を決定することであって、ステートフル・モデルの一連のイベントに関係している少なくとも１つの挙動が少なくともイベントを含む、ことを含む、コンピュータ実装方法がまたさらに提供される。
【００３４】
ここに開示された主題の一実施例により、事前に定義された挙動のロジックが、イベントのターゲットがステートフル・モデルに含まれているオブジェクトであるという条件が満たされると、自己実行の挙動を決定することを含む、コンピュータ実装方法がまたさらに提供される。
【００３５】
ここに開示された主題の一実施例により、少なくとも１つの挙動のそれぞれには、それぞれの挙動のスコアが割り当てられる、コンピュータ実装方法がまたさらに提供される。
【００３６】
ここに開示された主題の一実施例により、マルウェアの存在を決定することが、少なくとも１つの挙動が決定された場合、以前のステートフル・モデルに関連付けられた以前のステートフル・モデルのスコアがあるかどうかを調べることであって、以前のステートフル・モデルのスコアが、それぞれの以前の決定された挙動に割り当てられたすべての以前の挙動のスコアの集計された挙動のスコアであり、以前の決定された挙動が以前のステートフル・モデルの少なくとも１つの以前のイベントに関係しており、以前のステートフル・モデルに関連付けられた以前のステートフル・モデルのスコアがない場合、少なくとも１つの挙動ごとに割り当てられたそれぞれの挙動のスコアの合計を、ステートフル・モデルに関連付けられるステートフル・モデルのスコアとして決定する、ことと、以前のステートフル・モデルに関連付けられた以前のステートフル・モデルのスコアがある場合、合計して以前のステートフル・モデルのスコアを上げ、ステートフル・モデルのスコアを生み出すことと、ステートフル・モデルのスコアを事前に定義された閾値と比較することと、ステートフル・モデルのスコアが事前に定義された閾値を超える場合、マルウェアの存在を決定することと、をさらに含む、コンピュータ実装方法がまたさらに提供される。
【００３７】
ここに開示された主題の一実施例により、条件が満たされると、それぞれの挙動のスコアには、対応する重み係数が割り当てられ、上げることが、対応する重み係数をそれぞれの挙動のスコアに適用して、それぞれの重み付き挙動のスコアを生み出し、少なくとも１つの挙動ごとに割り当てられたそれぞれの重み付き挙動のスコアを合計して、以前のステートフル・モデルのスコアを上げること、を含む、コンピュータ実装方法がまたさらに提供される。
【００３８】
ここに開示された主題の一実施例により、条件が、イベントのソースがリモート・プロセスであり、イベントのターゲットがシステム・プロセスである、ことを含む、コンピュータ実装方法がまたさらに提供される。
【００３９】
ここに開示された主題の一実施例により、方法が、ステートフル・モデルによって示された１つ又は複数の動作を修復することによって、決定されたマルウェアを削除することをさらに含む、コンピュータ実装方法がまたさらに提供される。
【００４０】
ここに開示された主題の一態様により、ライブ環境においてリアルタイムにマルウェアを検出するシステムがまたさらに提供され、システムは、少なくとも、ライブ環境において並行して実行される少なくとも１つのプログラムの１つ又は複数の動作をモニタすることと、１つ又は複数の動作に従って、少なくとも１つのステートフル・モデルをビルドすることと、少なくとも１つのステートフル・モデルを分析して、１つ又は複数の挙動を識別することと、識別された１つ又は複数の挙動に基づき、マルウェアの存在を決定することと、を行うように構成されたプロセッサを備える。
【００４１】
ここに開示された主題の一実施例により、少なくとも１つのステートフル・モデルが、１つ又は複数の動作から抽出された１つ又は複数のオブジェクトと、動作に従ってオブジェクト間で識別された１つ又は複数の関係とを含む、システムがまたさらに提供される。
【００４２】
ここに開示された主題の一実施例により、オブジェクトのそれぞれが、動作に関与しているエンティティを表し、且つプロセス・オブジェクト、ファイル・オブジェクト、ネットワーク・オブジェクト、レジストリ・オブジェクト、及びＷｉｎｄｏｗｓオブジェクトを含むグループから選択されたタイプである、システムがまたさらに提供される。
【００４３】
ここに開示された主題の一実施例により、少なくとも１つのステートフル・モデルのそれぞれが、少なくとも１つのプログラムのうちの所与のプログラムに関係している一連のつなぎ合わされた動作を表す、プログラムレベルのステートフル・モデルである、システムがまたさらに提供される。
【００４４】
ここに開示された主題の一実施例により、少なくとも１つのステートフル・モデルが、ライブ環境において並行して実行されるすべてのプログラムに関係している動作を表す、システムレベルのステートフル・モデルである、システムがまたさらに提供される。
【００４５】
ここに開示された主題の一実施例により、システムレベルのステートフル・モデルが、すべてのプログラムのうちの所与のプログラムに関係している一連のつなぎ合わされた動作をそれぞれが表す、１つ又は複数のプログラムレベルのステートフル・モデルを含む、システムがまたさらに提供される。
【００４６】
ここに開示された主題の一実施例により、プロセッサが、前記少なくとも１つのプログラムの１つ又は複数のカーネル関係の動作をモニタすることと、前記モニタされたカーネル関係の動作に基づき、少なくとも１つのステートフル・モデルをビルドすることと、少なくとも１つのステートフル・モデルを分析して、１つ又は複数の挙動を識別することと、前記ステートフル・モデルの挙動のスコアに基づき、マルウェアの存在を決定することと、を行うようにさらに構成される、システムがまたさらに提供される。
【００４７】
ここに開示された主題の一実施例により、カーネル関係の動作が、ファイル・システムの動作、プロセス及びメモリの動作、レジストリの動作、並びにネットワークの動作のうちの１つ又は複数を含む、システムがまたさらに提供される。
【００４８】
ここに開示された主題の一実施例により、プロセッサが、１つ又は複数のコールバック関数を介してカーネル関係の動作用に１つ又は複数のカーネル・フィルタ・ドライバを登録することによって、１つ又は複数のカーネル関係の動作をモニタするようにさらに構成される、システムがまたさらに提供される。
【００４９】
ここに開示された主題の一態様により、ライブ環境においてリアルタイムにマルウェアを検出する方法ステップを行うように、機械によって実行可能な命令のプログラムを有形で具体化する、機械によって読み取り可能な非一時的プログラム記憶デバイスであって、方法が、ライブ環境において並行して実行される少なくとも１つのプログラムの１つ又は複数の動作をモニタすることと、１つ又は複数の動作に従って、少なくとも１つのステートフル・モデルをビルドすることと、少なくとも１つのステートフル・モデルを分析して、１つ又は複数の挙動を識別することと、識別された１つ又は複数の挙動に基づき、マルウェアの存在を決定することと、を含む、非一時的プログラム記憶デバイスがまたさらに提供される。
【００５０】
ここに開示された主題を理解し、主題が実際にどのように行われ得るかを確認するために、あくまでも非限定的な実例として、以下の添付図面を参照し、ここに主題が説明される。
【図面の簡単な説明】
【００５１】
【図１】ここに開示された主題のいつくかの実施例による、マルウェア検出システムを模式的に図示する機能ブロック図である。
【図２】ここに開示された主題のいつくかの実施例による、マルウェアを検出する、一般化されたフローチャートである。
【図３】ここに開示された主題のいつくかの実施例による、ステートフル・モデルをビルドする、一般化されたフローチャートである。
【図４ａ】ここに開示された主題のいつくかの実施例による、例示されたステートフル・モデル及び例示された更新済みステートフル・モデルの略図である。
【図４ｂ】ここに開示された主題のいつくかの実施例による、例示されたステートフル・モデル及び例示された更新済みステートフル・モデルの略図である。
【図５】ここに開示された主題のいつくかの実施例による、例示された一連の動作がモニタされ、処理される、一般化されたフローチャートである。
【発明を実施するための形態】
【００５２】
以下の発明を実施するための形態では、開示された主題の十分な理解をもたらすために、数多くの具体的詳細が示される。しかしながら、ここに開示された主題が、これらの具体的詳細なしに実施され得ることを、当業者であれば理解するであろう。他の例では、ここに開示された主題を分かりにくくしないために、よく知られている方法、手順、及び構成要素は、詳細には説明されていない。
【００５３】
示されている図面及び発明を実施するための形態において、同一の参照番号は、様々な実施例又は構成に共通しているそれらの構成要素を示す。
【００５４】
特に明記しない限り、以下の記述から明らかであるように、本明細書を通して、「ｍｏｎｉｔｏｒｉｎｇ（モニタする）」、「ｂｕｉｌｄｉｎｇ（ビルドする）」、「ａｎａｌｙｚｉｎｇ（分析する）」、「ｄｅｔｅｒｍｉｎｉｎｇ（決定する）」、「ｇｅｎｅｒａｔｉｎｇ（生成する）」、「ｓｅｌｅｃｔｉｎｇ（選択する）」、「ｎｏｒｍａｌｉｚｉｎｇ（正規化する）」、「ｃｏｍｐａｒｉｎｇ（比較する）」、「ｆｏｒｍａｔｔｉｎｇ（フォーマットする）」、「ｐａｒｓｉｎｇ（パースする）」、「ｓｅａｒｃｈｉｎｇ（調べる）」、「ｉｎｃｒｅａｓｉｎｇ（上げる）」、「ｅｌｉｍｉｎａｔｉｎｇ（削除する）」、「ｔｅｒｍｉｎａｔｉｎｇ（終了させる）」、「ｐｒｏｖｉｄｉｎｇ（提供する）」などの用語を使用して述べる場合は、データを処理し、且つ／又はデータを他のデータ、たとえば電子量などの物理量として表されたデータ、及び／又は物理的対象物を表すデータに変換する、コンピュータのアクション及び／又はプロセスを含む。「ｃｏｍｐｕｔｅｒ（コンピュータ）」、「ｐｒｏｃｅｓｓｏｒ（プロセッサ）」、「ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ（処理ユニット）」、「ｈｏｓｔ  ｍａｃｈｉｎｅ（ホスト・マシン）」、及び「ｅｎｄ  ｕｓｅｒ  ｓｔａｔｉｏｎ（エンド・ユーザ・ステーション）」という用語は、非限定的な実例として、パーソナル・コンピュータ、サーバ、コンピューティング・システム、通信デバイス、プロセッサ（たとえば、デジタル・シグナル・プロセッサ（ＤＳＰ：Ｄｅｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、マイクロコントローラ、フィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ：Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）、特定用途向け集積回路（ＡＳＩＣ：Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）など）、その他の任意の電子計算デバイス、及びそれらの任意の組合せを含む、データ処理能力を備えた任意の種類の電子デバイスを含むと広く解釈されるべきである。
【００５５】
本明細書における教示による動作は、所望の目的に特別に組み立てられたコンピュータによって、又は非一時的コンピュータ可読記憶媒体内に格納されたコンピュータ・プログラムによって所望の目的に特別に構成された汎用コンピュータによって、行われ得る。
【００５６】
「ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ（非一時的）」という用語は、一時的な伝播信号を除外するが、それ以外はここに開示された主題に適した、任意の揮発性又は不揮発性コンピュータ・メモリ・テクノロジーを含むように、本明細書では使用される。
【００５７】
本明細書で使用される際、「ｆｏｒ  ｅｘａｍｐｌｅ（たとえば）」、「ｓｕｃｈ  ａｓ（など）」、「ｆｏｒ  ｉｎｓｔａｎｃｅ（たとえば）」及びそれらの異形といった言い回しは、ここに開示された主題の非限定的な実施例を説明する。本明細書における「ｏｎｅ  ｃａｓｅ（ある場合）」、「ｓｏｍｅ  ｃａｓｅｓ（場合によっては）」、「ｏｔｈｅｒ  ｃａｓｅｓ（他の場合）」又はそれらの異形への言及は、実施例に関連して説明される特定の特徴、構造、又は特性が、ここに開示された主題の少なくとも１つの実施例に含まれることを意味する。したがって、「ｏｎｅ  ｃａｓｅ（ある場合）」、「ｓｏｍｅ  ｃａｓｅｓ（場合によっては）」、「ｏｔｈｅｒ  ｃａｓｅｓ（他の場合）」又はそれらの異形が現れた場合、必ずしも同じ実施例を指すわけではない。
【００５８】
特に明記しない限り、個々の実施例に関して説明される、ここに開示された主題のいくつかの特徴は、１つの実施例において、組み合わせて提供される場合もある。逆に、１つの実施例に関して説明される、ここに開示された主題の様々な特徴は、個々に、又は任意の適切な組合せで提供される場合もある。
【００５９】
ここに開示された主題の実施例では、図２及び３に示された段階よりも少ない、多い且つ／又は異なる段階が実行されてもよい。ここに開示された主題の実施例では、図２及び３に図示された１つ又は複数の段階は、異なる順番で実行されてもよく、且つ／又は段階の１つ又は複数のグループが、同時に実行されてもよい。図１は、ここに開示された主題の一実施例による、システム・アーキテクチャの一般的な概略図を図示する。図１における各モジュールは、本明細書において定義され、説明されるように機能を果たす、ソフトウェア、ハードウェア及び／又はファームウェアの任意の組合せから構成され得る。図１におけるモジュールは、１つの場所に集められてもよく、又は１つよりも多い場所にわたって分散されてもよい。ここに開示された主題の他の実施例では、システムは、図１に示されたモジュールよりも少ない、多い且つ／又は異なるモジュールを備えてもよい。
【００６０】
上述のように、挙動ベースの分析は、静的シグネチャではなく悪意のあるアクティビティの挙動をモニタすることによって、マルウェアを検出する。現在の挙動ベースのテクノロジーにはいくつかの問題がある。たとえば、悪意のあるプログラムの頻繁に変わる挙動のために、それらの挙動及び機能に関する情報が不足することにより、マルウェアの新しいインスタンスが、即座に検出されない場合がある。現在の挙動ベースのテクノロジーはまた、それらのそれぞれが、悪意のあるとして個々には識別されないが、シーケンス・コンテキストの範囲で考えた場合、実際に悪意のあるアクションを行っている、一連のイベントの追跡に失敗する場合がある。また、現在の挙動ベースのテクノロジーは、普通、エミュレーションを行い、安全な環境（たとえば、サンドボックス化仮想マシン）において怪しいマルウェアを実行し、そうでなければ不明瞭であるロジック及び挙動を明らかにすることによって実装される。この種のエミュレーションは、普通、かなり制限され、監視下にある怪しいマルウェアは、ライブ環境では実際には決して実行されない。このため、安全な環境において、怪しいマルウェアの完全な実行や、エミュレートされていない他のプロセス及びファイルとのインタラクションを実際に観察することは不可能である。したがって、このようなエミュレーションを行うことによって、怪しいマルウェアの潜在的な悪意のある挙動のすべてが検出され得るわけではない。さらに、特に、エンド・ユーザ・ステーションなどの制限されたリソースを備えるホスト・マシンでは、潜在的な挙動を識別するために、怪しいマルウェアによって含まれる大量の動作情報を収集し、分析することは、通常、リソース集約型である。発明を実施するための形態のいくつかの実施例は、これらの問題に対処することができる。
【００６１】
このことを念頭に置き、ここに開示された主題のいくつかの実施例による、マルウェア検出システムの機能ブロック図を模式的に図示する図１を注意して見てみる。
【００６２】
本明細書において使用される「ｍａｌｗａｒｅ（マルウェア）」という用語は、任意の種類のコンピュータ・ウイルス、ランサムウェア、ワーム、トロイの木馬、ルートキット、キーロガー、ダイヤラー、スパイウェア、アドウェア、悪意のあるブラウザ・ヘルパー・オブジェクト（ＢＨＯ：Ｂｒｏｗｓｅｒ  Ｈｅｌｐｅｒ  Ｏｂｊｅｃｔ）、偽セキュリティ・ソフトウェア、又はその他の任意の悪意のある若しくは望ましくないプログラムを含むと、広く解釈されるべきである。
【００６３】
図１に図示されたマルウェア検出システム１００は、エンド・ユーザに、ライブ環境においてリアルタイムにマルウェアを検出することを可能にさせる、コンピュータベースのマルウェア検出機構を実装する。本明細書において使用される「ｌｉｖｅ  ｅｎｖｉｒｏｎｍｅｎｔ（ライブ環境）」という用語は、コンピュータ・プログラム及び製品が、たとえば、エミュレートされた環境、又はサンドボックス化仮想マシン環境などの安全な環境とは対照的に、たとえば、本番環境において並行して実行されるプログラムを有するエンド・ユーザ・ステーションなどのエンド・ユーザによって、それらの用途で実際に運用される、任意の種類のホスト・マシン構成を含むと広く解釈されるべきである。
【００６４】
示されるように、マルウェア検出システム１００は、モニタリング・モジュール１０４、イベント・パーシング・モジュール１０６、挙動分析モジュール１１０、及び決定モジュール１１４といった機能モジュールを備える、少なくとも１つの処理ユニット１０１を含む。別法として、処理ユニット１０１は、機能モジュールに動作可能に結合され、また、そこからの命令を受信し、その命令に従って動作を実行するように構成され得る。
【００６５】
モニタリング・モジュール１０４は、ライブ環境において並行して実行される少なくとも１つのコンピュータ・プログラムの１つ又は複数の動作１０２を、リアルタイムにモニタするように構成され得る。本明細書において使用される「ｏｐｅｒａｔｉｏｎ（動作）」という用語は、任意のオペレーティング・システムにおいて、１つ又は複数のプロセス、スレッド、アプリケーション、ファイル若しくはその他の任意の適切なエンティティによって行われる任意の種類のアクションを含むと広く解釈されるべきであることに留意されたい。非限定的な実例として、Ｗｉｎｄｏｗｓオペレーティング・システムでは、動作は、コンピュータ・プログラムの１つ又は複数のプロセスによって行われ得る。１つ又は複数のプロセスによって行われる動作に関しては、あくまでも例示として、以下の説明の一部において言及される。同様に、実施例は、上で説明されたような任意のオペレーティング・システムにおいて、その他の任意の適切なエンティティによって行われる動作に適用可能である。
【００６６】
プロセスとは、実行されているコンピュータ・プログラムのインスタンスである。プロセスはまた、子プロセスを作成することができ、コンピュータ・プログラムは、１つ又は複数のプロセスと関連し得る。本明細書で使用される「ｐｒｏｇｒａｍ（プログラム）」という用語は、コンピュータと一緒に特定のタクスを行う、任意の種類のシステム・ソフトウェア（たとえば、オペレーティング・システム、デバイス・ドライバなど）及びアプリケーション・ソフトウェア（たとえば、オフィス・スイート、メディア・プレーヤなど）を含むと広く解釈されるべきであることに留意されたい。
【００６７】
上述のように、モニタリング・モジュール１０４は、ライブ・システム環境において起こったすべての動作（たとえば、プロセス又はその他のエンティティによって行われた）をモニタすることができる。いくつかの実施例によれば、モニタリング・モジュール１０４はまた、インプロセス・モニタリング・モジュール１０７とカーネル・モニタリング・モジュール１０９との２つのサブコンポーネントを含むことができる。インプロセス・モニタリング・モジュールは、プロセス・レベルにおいて行われるすべてのインプロセス動作をモニタすることができ、オペレーティング・システムのカーネルを必ずしも含まない。カーネル・モニタリング・モジュールは、図２に関してさらに詳しく述べられるように、ファイル・システムの動作、プロセス及びメモリの動作、レジストリの動作、並びにネットワークの動作など、オペレーティング・システムのカーネルからサービスを要求する、すべての動作をモニタすることができる。
【００６８】
本開示の範囲を何ら限定することなしに、場合によっては、１つの動作が、「ファイル読み取り」などの１つのアクションを含むと解釈され得ることにさらに留意されたい。また場合によっては、１つの動作は、一連のアクションを含むと解釈されることも可能であり、たとえば、「ファイル・コピー」は、一連の３つのアクション、「ファイル作成」、「ファイル読み取り」、及び「ファイル書き込み」を含む１つの動作と見なされ得る。
【００６９】
イベント・パーシング・モジュール１０６は、モニタリング・モジュール１０４によってモニタされる１つ又は複数の動作に従って、少なくとも１つのステートフル・モデル１０８をビルドするように構成され得る。いくつかの実施例によれば、ステートフル・モデルは、ライブ環境において行われる一連の動作からもたらされた、リアルタイムに更新されたシステム状態を示す情報を含む、階層構造を有するデータ・モデルである。一連の動作は、コンテキストによってつなぎ合わされ得る。したがって、ステートフル・モデルは、一連のつなぎ合わされた動作の論理的表現（たとえば、ツリー構造など）であり得る。たとえば、ステートフル・モデル１０８は、リアルタイムの動作１０２から抽出された１つ又は複数のオブジェクトと、その動作に従ってオブジェクト間で識別された１つ又は複数の関係とを含むことができる。いくつかの実施例によれば、ステートフル・モデル１０８のオブジェクトのそれぞれは、動作に関係しているエンティティを表すことができ、またプロセス・オブジェクト、ファイル・オブジェクト、ネットワーク・オブジェクト、レジストリ・オブジェクト、及びＷｉｎｄｏｗｓオブジェクトを含むグループから選択されたタイプであり得る。ステートフル・モデルは、図３及び４に関してさらに詳しく述べられるように、オブジェクト及びオブジェクトでの識別された関係を特徴付ける属性をさらに含むことができる。
【００７０】
挙動分析モジュール１１０は、イベント・パーシング・モジュール１０６によって組み立てられたステートフル・モデル１０８を分析し、１つ又は複数の挙動を識別するように構成され得る。本明細書において使用される「ｂｅｈａｖｉｏｒ（挙動）」という用語は、１つ又は複数の事前に定義された挙動のロジック（以下で「挙動のシグネチャ」とも呼ばれる）を満たす１つ又は複数のプロセスによって行われる任意の一連の動作を含むと広く解釈されるべきであることに留意されたい。
【００７１】
いくつかの実施例によれば、マルウェア検出システム１００は、非一時的コンピュータ可読記憶媒体を備える、記憶モジュール１０５をさらに備える。記憶モジュール１０５は、挙動分析モジュール１１０に動作可能に結合され、且つ１つ又は複数の事前に定義された挙動のロジックを格納する、挙動のシグネチャ・データベース１１２を含むことができる。いくつかの実施例によれば、事前に定義された挙動のロジックは、特定の挙動のパターンを示す、挙動のシグネチャである。場合によっては、挙動のロジックは、たとえば、自己検出、自己実行、及びコード・インジェクションなど、いくつかのマルウェア挙動の以前の知識に基づいて事前に定義され得る。任意選択で、事前に定義された挙動のロジックは、図２に関してさらに詳しく述べられるように、害のない挙動を示す１つ又は複数のロジックをさらに含むことができる。イベント・パーシング・モジュール１０６によってビルドされるステートフル・モデル１０８も、記憶モジュール１０５に格納され得る。
【００７２】
決定モジュール１１４は、図２に関してさらに詳細に述べられるように、挙動分析モジュール１１０によって識別された１つ又は複数の挙動に基づいて、マルウェアの存在を決定するように構成され得る。
【００７３】
いくつかの実施例によれば、処理ユニット１０１は、ステートフル・モデルによって示された１つ又は複数の動作を修復することによって、決定されたマルウェアを削除するように構成された緩和モジュール１１６をさらに含むことができる。
【００７４】
さらなる実施例によれば、マルウェア検出システム１００は、処理ユニット１０１に通信可能に結合されたＩ／Ｏインターフェース１０３をさらに含むことができる。Ｉ／Ｏインターフェース１０３は、エンド・ユーザから且つ／又は機能モジュールの１つ又は複数から命令を受信すること、及び機能モジュールから得られた処理済み情報の出力、たとえば、決定されたマルウェアの例証をエンド・ユーザに提供すること、といったアクションを行うように構成され得る。
【００７５】
いくつかの実施例によれば、処理ユニット１０１は、マルウェア検出システム１００の機能構成要素の上述の動作の少なくとも１つを、リアルタイムに行うようにさらに構成される。
【００７６】
マルウェア検出システム１００及びそれの様々な構成要素の動作は、図２に関してさらに詳しく述べられる。
【００７７】
必ずしもそうではないが、マルウェア検出システム１００の動作のプロセスは、図２に関して説明される方法の段階のいくつか又はすべてに対応することができる。同様に、図２に関して説明される方法及びその可能な実装は、マルウェア検出システム１００によって実装され得る。したがって、図２に関して説明される方法との関連で述べられる実施例は、必要な変更を加えて、マルウェア検出システム１００の様々な実施例として実装されることも可能であり、逆もまた同様であることが留意される。
【００７８】
マルウェア検出システム１００の上述の機能構成要素が、エンド・ユーザ・ステーションなどのスタンドアローンのコンピュータにおいて実装され得ることにさらに留意されたい。又は別法として、機能構成要素の１つ又は複数は、様々な場所においていくつかのコンピュータにわたって分散され得る。これに加え、上述のモジュールは、場合によっては、クラウドベースであり得る。
【００７９】
ここに開示された主題の教示が、図１に図示されたシステムに限定されないことは、当業者であれば容易に理解するであろう。図１に示された実例に対する別法として、マルウェア検出システム１００は、場合によっては、図１に示されたよりも少ない、多い且つ／又は異なるモジュールを含むことができる。同等の且つ／又は変更された機能は、別の方法において統合又は分割されることが可能で、またソフトウェア、ファームウェア及びハードウェアの任意な適切な組合せにおいて実装されることが可能である。
【００８０】
ここで図２を参照すると、ここに開示された主題のいくつかの実施例による、マルウェアを検出する一般化されたフローチャートが示される。
【００８１】
図２に図示されたように、ライブ環境において実行される少なくとも１つのプログラムの１つ又は複数の動作は、たとえば、マルウェア検出システム１００のモニタリング・モジュール１０４によって、リアルタイムにモニタされ得る（２０２）。上述のように、安全な環境とは異なり、ライブ環境は、それらの用途で運用される１つ又は複数のコンピュータ・プログラムを含む必要がある。コンピュータ・プログラムは、ライブ環境において並行して且つインタラクティブに（たとえば、他のプログラム及び／又はエンド・ユーザと）実行される。いくつかの実施例によれば、１つ又は複数のプロセスは、１つ又は複数のプログラムによって起動され得る。各プロセスは、オペレーティング・システムと通信する且つ／又はオペレーティング・システムからサービスを要求するために、１つ又は複数の動作を行うことができる。したがって、モニタリング・モジュール１０４は、各プロセスによって行われる１つ又は複数の動作をモニタするように構成され得る。
【００８２】
ライブ環境における多数の並行して実行されるプログラム及びその動作により、モニタされた動作に含まれる情報量は、膨大であり得る。いくつかの実施例によれば、モニタリング・モジュール１０４は、１つ又は複数の動作から少なくとも１つの対象の動作を選択して、選択された少なくとも１つの対象の動作をモニタするように構成され得る。
【００８３】
いくつかの実施例によれば、少なくとも１つの対象の動作は、１つ又は複数のインプロセス動作及び／又は１つ又は複数のカーネル関係の動作を含む。インプロセス動作は、ユーザ空間（すなわち、アプリケーション・ソフトウェアが実行されるメモリ領域）において行われる任意の動作を含むことができ、また、非限定的な実例として、ローカル・プロセスのメモリ割り当て、インポートされたライブラリからのマッピング関数、及び読み取り／書き込みプロセス・メモリなどのオペレーティング・システムのカーネルを必ずしも含まない。場合によっては、インプロセス動作が、対応する動作を表す１つ又は複数のライブラリ・コール（たとえば、ＡＰＩコール）を傍受することによって、モニタされ得る（たとえば、インプロセス・モニタリング・モジュールによって）。非限定的な実例として、インプロセス・モニタリング・モジュールは、モニタリング・フックをユーザ空間におけるライブラリ・コールに、それらのコールをモニタするために、取り付けることができる。
【００８４】
一方、カーネル関係の動作は、カーネル空間（すなわち、特権のあるカーネル、カーネル・エクステンション、及びほとんどのデバイス・ドライバを実行するために確保されたメモリ領域）において行われる、ファイル・システムの動作、プロセス及びメモリの動作、レジストリの動作、及びネットワークの動作のうちの１つ又は複数を含むことができる。具体的には、非限定的な実例として、ファイル・システムの動作は、任意の動作、及びホスト・マシンの記憶媒体とのインタラクションを含むことができる。プロセス及びメモリの動作は、プロセスの作成、終了、変更、クエリ、一時停止及び再開、並びにメモリ管理（たとえば、メモリの割り当て、メモリ・セクションの作成、メモリ・セクションのマッピング／アンマッピング、メモリの書き込み／読み取りなど）の任意の動作を含むことができる。レジストリの動作は、レジストリ操作に関係している任意の動作を含むことができる。そしてネットワークの動作は、ネットワーク及びネットワーク接続管理を通してデータを送信又は受信する任意の動作を含むことができる。
【００８５】
カーネル関係の動作は、たとえば、それぞれのオペレーティング・システムのプラットフォームに応じたそれぞれ異なる機構を通して、カーネル・モニタリング・モジュールによってモニタされ得る。たとえば、Ｍａｃ  ＯＳ  Ｘオペレーティング・システムでは、カーネル関係の動作は、非限定的な実例として、対応する動作を表す１つ又は複数のシステム・コール（カーネル空間における）を傍受することによって、モニタされ得る。Ｗｉｎｄｏｗｓオペレーティング・システムでは、カーネル関係の動作は、非限定的な実例として、１つ又は複数のコールバック関数を介して、カーネル関係の動作用に１つ又は複数のカーネル・フィルタ・ドライバを登録することによって、モニタされ得る。Ｗｉｎｄｏｗｓオペレーティング・システムは、新しいドライバが、既存のカーネル・スタックの一部として登録されることを可能にするので、特定のタイプの動作に関する情報は、対応するカーネル・フィルタ・ドライバによってフィルタ処理され、コールバック関数を介して、カーネル・モニタリング・モジュールを通過させられることが可能である。
【００８６】
いくつかの実施例によれば、モニタリング・プロセスにおいて、アウト・オブ・バンド（ＯＯＢ：Ｏｕｔ−Ｏｆ−Ｂａｎｄ）モニタリング手法が適応され得る（たとえば、カーネル・モニタリング・モジュールによって）。ＯＯＢは、モニタリング・モジュールに、選択された動作／イベントについての通知を受け取るが、これらの動作／イベントを制御しないようにさせ、モニタリング・モジュールに、最適な方法で完全なシステム・モニタリングを達成するために、異なるモニタリング機構（たとえば、カーネル・コールバック関数）を利用させるようにする。ＯＯＢはまた、以下にさらに説明されるように、イベントが、イベントが起こっている間にリアルタイムで処理され、ステートフル・モデルに分解されるようにする。
【００８７】
いくつかの実施例によれば、ＯＯＢは、図２に関連して説明された一連の動作、たとえば、エンド・ユーザ・ステーションなどの同じ機械において行われる、モニタリング動作、ステートフル・モデルのビルド、挙動の分析、マルウェアの決定及び決定されたマルウェアの削除、をさらに可能にすることができる。
【００８８】
それぞれ異なるモニタリング・モジュールによってそれぞれモニタされる上述の分類された動作は、あくまでも例示として提供され、限定するものとして解釈されるべきではないことに留意されたい。たとえば、インプロセス・モニタリング・モジュールによってモニタされる動作の１つ又は複数は、カーネル・モニタリング・モジュールによってモニタされる場合もあり、その逆もあり得る。一実施例によれば、カーネル関係の動作の少なくとも１つは、カーネル・モニタリング・モジュールのみによって、モニタされ得る。
【００８９】
モニタリング機構の運用及び実装の上述の実例は、あくまでも例示として示されていることに留意されたい。上記に加え又はその代わりに、さらなる種類の運用及び実装が適用され得る。
【００９０】
カーネル・モニタリング・モジュールの実装機構は、システム処理を促進し、動作のモニタリングが、ライブ環境においてリアルタイムに行われるようにし得ることがさらに留意される。
【００９１】
いくつかの実施例によれば、１つ又は複数の動作のそれぞれのモニタされた動作は、１つのイベントに相当する。モニタリング・モジュール１０４は、１つ又は複数のイベントを特徴付けるイベント・データを生成するようにさらに構成され得る。任意選択で、イベント・データは、それぞれのイベントを特徴付けるために生成され得る。いくつかの実施例によれば、イベント・データは、それぞれのイベントの少なくとも次の属性、動作タイプ、及びイベントのソースを含むことができる。
【００９２】
具体的には、動作タイプは、イベントに相当するモニタされた動作のタイプを示す識別子である。イベントのソースは、動作を行う送信元エンティティである。任意選択で、イベント・データは、１つ又は複数の付加的属性を含むことができる。たとえば、イベント・データは、ターゲットにしたプロセス、ターゲットにしたファイル、又はその動作がそのイベントのソースによって行われるその他の任意のエンティティなど、イベントのターゲットを含む場合がある。さらに場合によっては、イベント・データは、それぞれのタイプの動作に応じて、付加的な属性を含むこともできる。たとえば、ファイル・システムの動作を特徴付けるイベント・データは、ファイル・パーミッション、ファイルのフルパス、ファイルのサイズなどの付加的な属性を含むことができる一方、プロセス及びメモリの動作を特徴付けるイベント・データは、動作が行われるメモリのアドレス、書き込まれた又は読み取られたデータのサイズ、メモリ・パーミッションなどの追加的な属性を含むことができる。
【００９３】
ステップ２０２に続いて、図３に関して以下にさらに詳細に説明されるように、少なくとも１つのステートフル・モデルが、たとえば、マルウェア検出システム１００のイベント・パーシング・モジュール１０６によって、１つ又は複数の動作に従ってビルドされ得る（２０４）。
【００９４】
ここで、ここに開示された主題のいくつかの実施例による、ステートフル・モデルをビルドする一般化されたフローチャートを図示する、図３を参照する。いくつかの実施例によれば、モニタリング・モジュール１０４によって生成されるイベント・データは、複数の経路、たとえば、下位レベルのシステム・コール及びカーネル・ドライバ・コールバックなどを通して集められた大量の生データに基づいて作成されるので、イベント・データは、様々な形式で生成される。いくつかの実施例によれば、イベント・データのこの生の形は、イベント・パーシング・モジュール１０６によって、論理データ構造に正規化され、イベント・データ内で符号化された属性の各セグメントが、アクセスされ、分析されることを可能にする抽象イベントを生み出すことができる（３０２）。具体的には、イベント・パーシング・モジュール１０６は、抽象データを生成するために、イベント・データをフォーマットし、フォーマットされたイベント・データをパースすることができる。イベント・データ正規化を通して、同様の動作を示すが、様々な形式で生成されたイベント・データは、さらに、１つのフォーマットに正規化され、同じイベント・タイプに分類され得る。たとえば、メモリを割り当てるために生成された様々なシステムＡＰＩコールは、１つのタイプの抽象イベント、たとえばメモリ割り当て・イベントに分類されることになる。
【００９５】
いくつかの実施例によれば、イベント・パーシング・モジュール１０６は、１つ又は複数の事前に定義されたフィルタリング・ルールに基づき、モニタリング・モジュール１０４から受信されたすべてのイベント・データから、対象のイベントに関連付けられたイベント・データを選択し、選択されたイベント・データに対して、正規化を適用することができる。非限定的な実例として、１つ又は複数の事前に定義されたフィルタリング・ルールは、未完のイベント、ターゲットにしたプロセスがリモート・プロセスではないメモリ関係のイベント、及びターゲットにしたプロセスが存在しないイベント、に関連付けられたイベント・データをフィルタ処理で取り除くことを含むことができる。
【００９６】
生成された抽象イベントに基づき、ステートフル・モデルが作成又は更新され得る。上述のように、ステートフル・モデルは、ライブ環境において行われた一連のつなぎ合わされた動作の論理構造表現であり得る。
【００９７】
いくつかの実施例によれば、抽象イベントに正規化されたイベント・データごとに、抽象イベントから１つ又は複数のオブジェクトが取得され得る（３０４）。上述のように、取得されたオブジェクトのそれぞれは、対応するイベントにおいて関係のあるエンティティを表し、各オブジェクトは、プロセス・オブジェクト、ファイル・オブジェクト、ネットワーク・オブジェクト、レジストリ・オブジェクト、及びＷｉｎｄｏｗｓオブジェクトを含むグループから選択されたタイプであり得る。オブジェクトの少なくとも１つは、対応する動作を行うイベントのソースを表す。非限定的な実例として、イベントのソースは、動作を行う送信元プロセスを示すプロセス・オブジェクトによって表され得る。たとえば、プロセスＰ１は、「システム・シャットダウン」の動作を行う。この場合、Ｐ１をイベントのソースとして表すために、プロセス・オブジェクトが対応する抽象イベントから取得されることになる。
【００９８】
場合によっては、動作が、イベントのソースによって、ターゲット・エンティティ（すなわち、イベントのターゲット）に対して行われる。たとえば、プロセスＰ１は、ファイルＦ１を開く。Ｐ１を動作「ファイル・オープン」の際のイベントのソースとして表すために、プロセス・オブジェクトが対応する抽象イベントから取得されることになり、Ｆ１をイベントのターゲットとして表すために、ファイル・オブジェクトが取得されることになる。
【００９９】
動作は、普通はプロセスによって開始されることに留意されたい。したがって、イベントのソースは、通常、プロセス・オブジェクトによって表される。しかしながら、イベントのターゲットは、動作において操作される、プロセス・オブジェクト、ファイル・オブジェクト、ネットワーク・オブジェクト、レジストリ・オブジェクトなどの様々なタイプのオブジェクトであり得る。
【０１００】
さらなる実施例によれば、プロセスは、そのプロセスが開始されるソース・ファイルなどのリソースを所有することができる。ソース・ファイルは、非限定的な実例として、文書ファイル、そこからプロセスが起動される実行可能なプログラムを含む画像ファイル、又はその他の任意の関連のタイプのファイルなどの様々なタイプであり得る。ソース・ファイルは、動作に関係している場合、ファイル・オブジェクトによって表される場合もある。
【０１０１】
上述のオブジェクト・タイプは、あくまでも例示として示され、本開示を多少なりとも限定するものと解釈されるべきではないことに留意されたい。上記に加えて又はその代わりに、動作において生じる可能性のあるさらなるタイプのオブジェクトが含まれる可能性がある。
【０１０２】
ステップ３０４における抽象イベントからオブジェクトを取得することに続いて、イベント・パーシング・モジュール１０６は、抽象イベントに従って、オブジェクト間の１つ又は複数の関係を識別し、識別された関係に対応するオブジェクト間のそれぞれの関連付けを生成し、抽象イベントに対応するイベント・コンテキストを生み出すことができる（３０６）。イベント・コンテキストは、対応するイベントのコンテキスト情報を含み、またイベントの１つ又は複数のオブジェクト、及びオブジェクトにおける関連付けを含む。
【０１０３】
ステップ３０６に続いて、図４ａに関して以下に詳細に説明されるように、イベント・パーシング・モジュール１０６は、現在のイベントがステートフル・モデルの第１のイベントであるかどうかを決定することがさらにできる（３０８）。上記の条件が満たされる場合、新しいステートフル・モデルが生成され、このモデルは、イベント・コンテキスト、すなわち、１つ又は複数のオブジェクト及びそのオブジェクトにおける１つ又は複数の関連付けを含むことができる（３１０）。その後、プロセスは、ステップ３０２に戻り、そこで次のイベント・データが処理され得る。
【０１０４】
ここで図４ａを参照すると、ここに開示された主題のいくつかの実施例による、抽象イベント４０１に基づき作成される、例示されたステートフル・モデル４００が示される。抽象イベント４０１は、子プロセスＰ２を作成するプロセスＰ１のイベントＥ１を特徴付けるイベント・データから正規化される。抽象イベント４０１は、動作タイプ−プロセス作成、イベントのソース−Ｐ１（イベントの送信元プロセス）、Ｐ１のソース・ファイル−Ｆ１、イベントのターゲット−Ｐ２（イベントのターゲットにしたプロセス）、及びｔＰ２のソース・ファイル−Ｆ２、といったイベントの属性を含む。抽象イベント４０１に基づき、イベントＰ１のソースを示すプロセス・オブジェクト４０２、イベントＰ２のターゲットを示すプロセス・オブジェクト４０４、Ｐ１のソース・ファイルＦ１を示すファイル・オブジェクト４０６、及びＰ２のソース・ファイルＦ２を示すファイル・オブジェクト４０８、の４つのオブジェクトが取得され得る。いくつかの実施例によれば、図示されるように、ファイル・オブジェクト４０６及び４０８は、それらのそれぞれのプロセス・オブジェクト４０２、４０４に属しているか、又は相互に関連している可能性がある。抽象データ４０１は、該当する場合、動作のさらなる情報を含んでいる付加的な属性をさらに含むことができる。
【０１０５】
抽象イベントに従って、プロセス・オブジェクト４０２と４０４との間に、プロセス作成を示す関係が識別され得る。識別された関係に基づき、適宜、対応する４０２と４０４との間の関連付けが生成され、プロセス・オブジェクト４０２及び４０４（それらの相互に関連しているファイル・オブジェクト４０６及び４０８と一緒に）と、それらのオブジェクト間の関連付けとを含むイベント・コンテキストを生み出すことができる。関連付けは、たとえば、図４ａに図示されるように、２つの関係しているオブジェクト４０２と４０４との間の直接のつながりとして、表され得る。
【０１０６】
いくつかの実施例によれば、オブジェクトごとに、それぞれのオブジェクト及びそれに関係している関連付けを特徴付ける１つ又は複数のパラメータを格納する、１つ又は複数のフィールドが作成され得る。非限定的な実例として、プロセス・オブジェクト４０２は、プロセス識別子（たとえば、各プロセスに対して、オペレーティング・システムによって割り当てられた一意の識別子）、１つ又は複数のソース・ファイル識別子（たとえば、ファイル・オブジェクト４０６のポインタ）、並びに１つ又は複数の動作及びそれに関係している対応する関連付け（たとえば、プロセス作成の動作及びＰ２への対応するつながり）を含むグループから選択された、１つ又は複数のフィールドを有することができる。ファイル・オブジェクト４０６は、ファイル識別子（たとえば、ファイルのフルパス）、プロセス識別子、並びに１つ又は複数の動作とそれに関係している対応する関連付け、を含むグループから選択されたフィールドの１つ又は複数を有することができる。Ｅ１がステートフル・モデルにおける第１のイベントであると仮定すると、ステートフル・モデル４００が生成され、そのモデルは、Ｅ１のイベント・コンテキストを含むことができる。
【０１０７】
「ｓｔａｔｅｆｕｌ  ｍｏｄｅｌ（ステートフル・モデル）」という用語は、以下の状態のいずれかを含むと広く解釈されるべきであることに留意されたい。
１）ステートフル・モデルは、所与のプログラムに関係している一連のつなげられた動作（場合によっては、動作により、所与のプログラムにつなげられた１つ又は複数のその他のプログラムに関係している動作も）を表す、プログラムレベルのステートフル・モデルであり得る。この場合、ステートフル・モデルは、コンテキストによって所与のプログラムに関係しているすべての動作を反映する、プログラム・コンテキストを表す。
【０１０８】
プログラムレベルのステートフル・モデルの第１のイベントは、システムとの所与のプログラムの第１のインタラクションに関係している何らかのイベントであると決定され得る。たとえば、第１のイベントは、所与のプログラムの立ち上げプロセスを作成する「プロセス作成」のイベントであると決定され得る。立ち上げプロセスは、所与のプログラムが実行されると作成されるプロセスであり、さらなる動作を行うステートフル・モデルのルート・プロセスでもあり得る。第１のイベントは、立ち上げプロセスによって他のオブジェクトに対して行われるイベントである、と決定される場合もある。
【０１０９】
図４ａに図示された上記の実例において、送信元プロセスＰ１が特定のプログラムの立ち上げプロセスである場合、ステートフル・モデルにおける第１のイベントとして、Ｐ１の作成が決定され得る。立ち上げプロセスが、システム・プロセスＰ０によって作成されてもよいことから、ステートフル・モデルは、Ｐ０、Ｐ１、及びＰ０とＰ１との間のプロセス作成の関連付けを含む場合がある。ステートフル・モデルは、オブジェクトＰ１、及びＰ０がＰ１の親であることを示すオブジェクトＰ１との関連のみを含む場合もある。さらに、第１のイベントが、Ｐ１が他のオブジェクトに対して行うイベント、たとえば、子プロセスＰ２を作成するために、Ｐ１によって行われる「プロセス作成」のイベントとして決定される場合もある。
【０１１０】
ある状況では、イベントは、予期せぬシステム処理の問題により、イベント・パーシング・モジュール１０６によって処理されるように遅らされる可能性がある。これにより、ステートフル・モデルの第１のイベントは、時間的に最初には起こらないが、最初にイベント・パーシング・モジュール１０６によって処理される、イベントである場合がある。したがって、図４ａの上述の実例に続いて、ファイルＦ１を開くＰ２のさらなるイベントＥ２が、最初に、イベント・パーシング・モジュール１０６によって処理される場合、イベントＥ２は、ステートフル・モデルの第１のイベントであると決定されることが可能で、それの前に起こるイベントがあれば（たとえば、Ｐ２を作成するＰ１のイベントＥ１）、遡って処理され、ステートフル・モデルに反映されることが可能である。
【０１１１】
したがって、ライブ環境において並行して実行されるプログラムの個数、及びプログラム間の動作上の関係に応じて、共存する１つ又は複数のプログラムのステートフル・モデルがあってもよく、モデルのそれぞれは、所与のプログラムのそれぞれのプログラム・コンテキストを表す。
２）ステートフル・モデルは、ライブ環境において並行して実行されるすべてのプログラムに関係している動作を表す、システムレベルのステートフル・モデルであり得る。この場合、ステートフル・モデルの第１のイベントは、オペレーティング・システムが最初に起動する時に開始される「システム・スタート」のイベントであると決定され得る。したがって、システムにおいて、任意の所与の時点で環境全体のシステム・コンテキストを表すただ１つのステートフル・モデルが存在する。いくつかの実施例によれば、システムレベルのステートフル・モデルは、オペレーティング・システムの初期化の際に作成されることが可能であり、オペレーティング・システム及びプログラム処理が進行している間、更新が続けられ得る。さらなる実施例によれば、上で説明されたように、システムレベルのステートフル・モデルは、ライブ環境において実行されるすべてのプログラムのうちの１つのプログラムにそれぞれが関係している、１つ又は複数のプログラムレベルのステートフル・モデルを含むことによって、作成されてもよい。
【０１１２】
上記のステートフル・モデル構造の定義及び実装は、あくまでも例示として示されており、本開示を多少なりとも限定するものとして解釈されるべきではないことに留意されたい。上記に加えて又はその代わりに、ステートフル・モデルの同等の機能を実装する別法のデータ構造が適用され得る。
【０１１３】
戻って図３を参照すると、いくつかの実施例によれば、現在のイベントがステートフル・モデルの第１のイベントではない場合（３０８）、現在のイベントに先行する少なくとも１つの以前のイベントに対応する以前のステートフル・モデルが存在する。イベント・パーシング・モジュール１０６は、現在のイベントのイベント・コンテキストに基づき、以前のステートフル・モデルを更新し、更新された更新済みステートフル・モデルを生み出すことができる（３１２）。
【０１１４】
いくつかの実施例によれば、以前のステートフル・モデルが以下のシナリオに従って更新され得る。
１）現在のイベントのすべてのオブジェクトが以前のステートフル・モデルに既に含まれている場合、イベント・コンテキストの１つ又は複数の関連付けが以前のステートフル・モデルに加えられ、更新済みステートフル・モデルを生み出すことができる。
２）現在のイベントのすべてのオブジェクトが以前のステートフル・モデルに含まれていない場合、１つ又は複数のオブジェクトのうちの少なくとも１つのオブジェクトは、以前のステートフル・モデルに存在していない新しいオブジェクトであるはずである。これにより、新しいオブジェクトは、１つ又は複数の関連付けと一緒に、以前のステートフル・モデルに加えられ、更新済みステートフル・モデルを生み出すことができる。
【０１１５】
図４ａに図示された実例を続けて参照し、図示されたステートフル・モデル４００（プロセス・オブジェクトＰ１、Ｐ２、及びＰ２を作成するＰ１のイベントＥ１を表す、Ｐ１とＰ２との間の関連付けを含む）が、存在する以前のステートフル・モデルであり、現在のイベントＥ２が到達したと仮定すると、同じプロセスＰ１は、同じ子プロセスＰ２においてメモリを割り当てる。図３でのプロセスに続いて、現在のイベントＥ２を特徴付けるイベント・データが、抽象イベントに正規化される。抽象イベントに基づき、オブジェクトＰ１及びＰ２が取得される。抽象イベントに基づき、Ｐ１とＰ２との間で、メモリ割り当てを示す関係が識別されることが可能で、識別された関係に基づき、Ｐ１とＰ２との間の関連付けが生成され得る。これにより、現在のイベントＥ２用のイベント・コンテキストは、オブジェクトＰ１及びＰ２とそれら間の関連付けとを含む。現在のイベントＥ２が以前のステートフル・モデル４００における第１のイベントではないことから、ステートフル・モデル４００は、現在のイベント・コンテキストに基づき更新されることになる。この場合、現在のイベントのすべてのオブジェクト、すなわちＰ１及びＰ２が以前のステートフル・モデル４００に既に含まれていることから、メモリ割り当ての動作を表すＰ１とＰ２との間の現時点で生成された関連付けが、プロセス作成の動作を表すそれら間の以前の関連付けの他に、Ｐ１とＰ２との間の新しい関連付けとして、ステートフル・モデル４００に加えられ、更新済みステートフル・モデルを生み出すことになる。非限定的な実例として、それら間のメモリ割り当ての動作を示す、Ｐ１及び／又はＰ２用のそれぞれのフィールドを加えることによって、新しい関連付けがステートフル・モデルに加えられ得る。関連付けのみが更新されていることから、更新済みステートフル・モデルの階層構造は、新しく加えられた関連付けで、図４ａに図示されているものと同様に見える可能性がある。
【０１１６】
同じ実例を続けて参照し、Ｅ２の後に別のイベントＥ３が到達すると仮定すると、プロセスＰ２は、子プロセスＰ３を作成する。図３での同じプロセスに続き、現在のイベントＥ３を特徴付けるイベント・データが、抽象イベントに正規化される。抽象イベントに基づき、オブジェクトＰ２及びＰ３が取得される。抽象イベントに基づき、Ｐ２とＰ３との間で、プロセス作成を示す関係が識別され、識別された関係に基づき、Ｐ２とＰ３との間の関連付けが生成され得る。これにより、現在のイベントＥ３用のイベント・コンテキストは、オブジェクトＰ２及びＰ３とそれら間の関連付けとを含む。現在のイベントＥ３が、ステートフル・モデル４００における第１のイベントではないことから、ステートフル・モデル４００は、現在のイベント・コンテキストに基づき更新されることになる。この場合、Ｐ３が以前のステートフル・モデルに存在していない新しいオブジェクトであることから、新しいオブジェクトＰ３が、プロセス・オブジェクト４１０として、ステートフル・モデル４００に加えられ得る。任意選択で、Ｐ３と相互に関連しているファイル・オブジェクトＦ３が、ファイル・オブジェクト４１２として加えられることも可能である。図４ｂに図示されるように、Ｐ２と新しいオブジェクトＰ３との間の関連付けが、非限定的な実例として、それら間でのプロセス作成の動作を示す、Ｐ２及び／又はＰ３用のそれぞれのフィールドを加えることによって、ステートフル・モデルに加えられ、更新済みステートフル・モデルを生み出すことができる。
【０１１７】
上で図示されたステートフル・モデルのビルド及び更新の特定の実例は、あくまでも例示として提供され、限定するものと解釈されるべきではないことに留意されたい。したがって、上記に加え又はその代わりとして、ステートフル・モデルのビルド及び更新の実装の他の方法が使用され得る。
【０１１８】
本開示が図３に関連して説明された特定の一連の動作ステップに限定されないことにも留意されたい。
【０１１９】
いくつかの実施例による、ステートフル・モデルの構造及びステートフル・モデルのビルド／更新のプロセスを説明したが、戻って図２に注意を向けると、１つ又は複数の挙動を識別するために少なくとも１つのステートフル・モデルを分析することが、ステップ２０６に関連して、ここで説明される。
【０１２０】
いくつかの実施例によれば、挙動分析モジュール１１０は、１つ又は複数の事前に定義された挙動のロジックに従って、ステートフル・モデル（ステートフル・モデルが現在のイベントに基づいて新しく作成される場合）又は更新済みステートフル・モデル（ステートフル・モデルが、現在のイベントに基づいて更新されている場合）の観点から、現在のイベントのイベント・コンテキストを分析するようにさらに構成され得る。
【０１２１】
挙動分析モジュール１１０は、さらに、１つ又は複数の事前に定義された挙動のロジックのいずれかが満たされると、少なくとも１つの挙動の存在を決定することができる。決定された挙動は、少なくとも現在のイベントを含むステートフル・モデルの一連のイベントに関係している。一連のイベントのそれぞれが、悪意のあるとして個々には識別され得ないが、シーケンス・コンテキストの範囲で考えられた場合、実際に悪意のある挙動を行っている場合がある。ステートフル・モデルの観点からイベント・コンテキストを分析することによって、挙動分析モジュールは、全体図を見ながら特定のイベントを調べ、これにより、検出されていないマルウェアの遺漏を避けることができる。
【０１２２】
いくつかの実施例によれば、事前に定義された挙動のロジックは、特定の挙動のパターンを示す挙動のシグネチャである。挙動のロジックは、たとえば、自己検出、自己実行、及びコード・インジェクションなど、以前のいくつかのマルウェア挙動の知識に基づき、事前に定義され得る。挙動のロジックは、図１に関して上述されたように、挙動のシグネチャ・データベース１１２に格納され得る。事前に定義された挙動のロジックの１つは、非限定的な実例として、イベントのターゲットがステートフル・モデルに既に含まれているオブジェクトであり、そのファミリ自体のメンバの１つに対して動作が行われることを示す、という条件が満たされる場合に自己実行の挙動を決定することであり得る。たとえば、イベントのターゲットにしたプロセスは、送信元プロセス、送信元プロセスの子プロセス、及び送信元プロセスの親プロセスのうちの１つと同じである。別の同様の例示的な挙動のロジックは、たとえば、削除イベントのターゲットがステートフル・モデルに含まれているオブジェクトである、という条件が満たされる場合、自己削除の挙動を決定することであり得る。たとえば、イベントのターゲットにしたプロセスのソース・ファイルは、送信元プロセスのソース・ファイル、及び送信元プロセスの親プロセスのソース・ファイルのうちの１つと同じである。
【０１２３】
任意選択で、事前に定義された挙動のロジックは、たとえば、ディスクトップ又はユーザとのインタラクション、システム・プログラム・リポジトリにおける登録など、害のない挙動のパターンを示す１つ又は複数のロジックを含むこともできる。いくつかの実施例によれば、データベース内の各挙動のシグネチャは、対応する挙動の悪意のあるレベルを示す、事前に定義された挙動のスコアに関連付けられ得る。したがって、決定された少なくとも１つの挙動のそれぞれには、挙動に関連付けられた事前に定義された挙動のスコアに基づき、それぞれの挙動のスコアが割り当てられ得る。ステートフル・モデルを分析し、少なくとも１つの挙動を決定するプロセスが、図５に関連してさらに例示される。
【０１２４】
上で説明されたステートフル・モデルの階層構造は、高速アクセス可能なデータ構造としてデザインされ、動作のモニタリングに続いて、今度は、ステートフル・モデルの作成及び作成されたステートフル・モデルの分析が、ライブ環境においてリアルタイムに行われるようにし得ることに留意されたい。
【０１２５】
少なくとも１つの挙動が決定されると、決定モジュール１１４は、決定された挙動基づき、マルウェアの存在を決定するように構成され得る（２０８）。いくつかの実施例によれば、各ステートフル・モデルは、ステートフル・モデルのスコアに関連付けられ得る。ステートフル・モデルのスコアは、ステートフル・モデルにおいて決定されるそれぞれの挙動に割り当てられるすべての挙動のスコアの集計された挙動のスコアである。少なくとも１つの現在の挙動がステートフル・モデルにおいて決定されると、決定モジュール１１４は、以前のステートフル・モデルに関連付けられた以前のステートフル・モデルのスコアがあるかどうかを調べることができる。したがって、以前のステートフル・モデルのスコアは、それぞれの以前の決定された挙動に割り当てられたすべての以前の挙動のスコアの集計された挙動のスコアであり、以前の決定された挙動は、以前のステートフル・モデルの少なくとも１つの以前のイベントに関係している。以前のステートフル・モデルのスコアがない場合、少なくとも１つの挙動ごとのそれぞれの挙動のスコアの合計が、現在のステートフル・モデルに関連付けられるステートフル・モデルのスコアとして決定され得る。そうではなく、以前のステートフル・モデルのスコアが確認される場合、合計により、以前のステートフル・モデルのスコアが上げられ、現在のイベントに基づき更新されたステートフル・モデルのスコアを生み出すことができる。決定モジュール１１４は、ステートフル・モデルのスコアを事前に定義された閾値と比較するようにさらに構成され得る。事前に定義された閾値は、マルウェアの存在を示すスコアであり得、またマルウェア検出の以前の知識に基づいて事前に決定され得る。ステートフル・モデルのスコアが事前に定義された閾値を超えると、マルウェアの存在が決定され得る。たとえば、対応するステートフル・モデル、及びそのステートフル・モデルに関係している１つ又は複数のプログラムは、悪意のあると決定され得る。マルウェアの存在を決定するプロセスは、図５に関連してさらに例示される。
【０１２６】
いくつかの実施例によれば、現時点で決定された挙動のそれぞれの挙動のスコアには、条件が満たされると、対応する重み係数が割り当てられ得る。条件は、非限定的な実例として、イベントのソースがリモート・プロセスであり、イベントのターゲットがシステム・プロセスであり、リモート・プロセスが、システム・プロセスに対して動作を行っていることを示す、ことであり得る。この場合、重み係数（たとえば、１より大きな数値）は、元の挙動のこの元の挙動に関連付けられたスコアに割り当てられ、マルウェアの存在の可能性が高くなっていることを示すことができる。割り当てられた重み係数は、元の挙動のスコアに適用され（たとえば、元の挙動のスコアに重み係数を掛け合わせることによって）、重み付き挙動のスコアを生み出すことができる。したがって、少なくとも１つの挙動ごとに割り当てられた重み付き挙動のスコアの合計で、以前のステートフル・モデルのスコアが上げられ得る。
【０１２７】
本開示が、上で説明された特定のスコアリング及び重み付けの範例に限定されないことに留意されたい。スコアリング及び重み付けの機能は、統合して又は個々に実装され得る。上記に加えて又は上記の代わりに、さらなる種類の実装が適用され得る。
【０１２８】
いくつかの実施例によれば、システムを、ステートフル・モデルにおける動作が実行された以前のシステム状態にできる限り近い状態に回復させるために、非限定的な実例として、ステートフル・モデルの範囲でプロセス・オブジェクトを終了させることなどによって、ステートフル・モデルにおいて示された動作を修復し、プロセス・オブジェクトと相互に関連している又はプロセス・オブジェクトによって作成された、ファイル・オブジェクト（又は他のタイプのオブジェクト）を取り除き、そして可能であれば、オブジェクト間で行われた動作を取り消すことによって、決定されたマルウェアが削除され得る。さらなる実施例によれば、決定されたマルウェアの出力が、上述のように、Ｉ／Ｏインターフェース１０３を通して、エンド・ユーザに提供され得る。
【０１２９】
いくつかの実施例によれば、図２に関連して説明された一連の動作、たとえば、モニタリング動作、ステートフル・モデルのビルド、挙動の分析、マルウェアの決定及び決定されたマルウェアの削除は、リアルタイムに並行して実行され得る。たとえば、ライブ環境において並行して実行される少なくとも１つのプログラムの１つ又は複数の動作のモニタを受けて、１つ又は複数の動作に従って少なくとも１つのステートフル・モデルをビルドすることが、リアルタイムに行われ得る。さらに又は別法として、１つ又は複数の動作をモニタし、少なくとも１つのステートフル・モデルをビルドすることを受けて、少なくとも１つのステートフル・モデルを分析して、１つ又は複数の挙動を識別することが、リアルタイムに行われ得る。さらに又は別法として、少なくとも１つのステートフル・モデルの分析を受けて、識別された１つ又は複数の挙動に基づき、マルウェアの存在を決定することが、リアルタイムに行われ得る。さらに又は別法として、マルウェアの存在の決定を受けて、決定されたマルウェアを削除することが、リアルタイムに行われ得る。
【０１３０】
本開示が図２に関連して説明された特定の一連の動作ステップに限定されないことに留意されたい。
【０１３１】
ここで図５を参照すると、ここに開示された主題のいくつかの実施例による、例示された一連の動作がモニタされ、処理される一般化されたフローチャートが示される。
【０１３２】
示されるように、所与のプログラムが実行されると、プロセスＰ１が作成される（５０１）。したがって、Ｐ１は、所与のプログラムの立ち上げプロセスである。プロセス作成の動作が、たとえば、カーネル・モニタニング・モジュールによってモニタされる。それに従い、対応するイベントＥ１及びそのイベントのイベント・データが、生成される。Ｅ１がステートフル・モデルの第１のイベントであると決定され、Ｅ１に基づき、ステートフル・モデルが生成される。ステートフル・モデルは、ここで、Ｅ１のイベント・コンテキスト、すなわちＰ１（任意選択でさらに、Ｐ１を作成するシステム・プロセスＰ０、及び／又はＰ１のソース・ファイルＦ１）を、Ｐ１のプロセス作成の関連付けと一緒に含むことになる。事前に定義された挙動のロジックに従って、この段階では何も挙動が決定されず、したがって、スコアも割り当てられない（５０２）。
【０１３３】
システム・プロセスＰ２にメモリを割り当てる、Ｐ１の第２の動作が起こる（５０３）。メモリ割り当ての動作が、たとえば、インプロセス・モニタリング・モジュールによって、モニタされる。それに従って、対応するイベントＥ２及びそのイベントのイベント・データが生成される。Ｅ２がステートフル・モデルの第１のイベントではないことから、イベント・コンテキストＥ１を備える以前のステートフル・モデルは、Ｅ２に基づき更新される。ステートフル・モデルは、ここで、Ｐ１とＰ２との間のメモリ割り当ての関連付けと一緒に、Ｐ１、Ｐ２（任意選択でさらに、Ｐ１、Ｐ２のソース・ファイルＦ１、Ｆ２）を含む。事前に定義された挙動のロジックの１つに従って、リモート・メモリ割り当ての挙動が決定され（５０４）、それに従って挙動のスコアＳ１が割り当てられる。以前のステートフル・モデルのスコアがないことから、挙動のスコアＳ１もステートフル・モデルのスコアである。
【０１３４】
第２の動作に続いて、Ｐ２において割り当てられたメモリにコードをインジェクトするＰ１の第３の動作が起こる（５０５）。いくつかの実施例によれば、コード・インジェクションの動作は、メモリ書き込み、メモリ実行パーミッション、及びコード実行の３つのアクションを含むことができ、これらのアクションのすべてがモニタされる。それに従って、対応するイベントＥ３及びそのイベントのイベント・データが生成される。Ｅ３がステートフル・モデルの第１のイベントではないことから、Ｅ１及びＥ２のイベント・コンテキストに基づく以前のステートフル・モデルが、現在のイベントＥ３に基づいてさらに更新される。ステートフル・モデルは、ここで、Ｐ１、Ｐ２（任意選択でさらに、Ｐ１、Ｐ２のソース・ファイルＦ１、Ｆ２）、Ｐ１とＰ２との間のメモリ割り当ての以前の関連付け、及びＰ１とＰ２との間のコード・インジェクションの新しい関連付けを含む。事前に定義された挙動のロジックの１つに従って、コード・インジェクションの挙動が決定され（５０６）、それに従って挙動のスコアＳ２が割り当てられる。Ｓ１とＳ２とを合計して、ステートフル・モデルのスコアが更新される。
【０１３５】
Ｐ１のファイルＦ１を削除するＰ２の第４の動作が、第３の動作に続く（５０７）。ファイル削除の動作がモニタされる。それに従って、対応するイベントＥ４及びそのイベントのイベント・データが生成される。Ｅ４がステートフル・モデルの第１のイベントではないことから、以前のイベントＥ１、Ｅ２及びＥ３に基づいた以前のステートフル・モデルが、ここで、Ｅ４に基づいて更新される。現在のステートフル・モデルは、Ｐ１、Ｐ２、Ｆ１（任意選択でさらに、ソース・ファイルＦ２）、Ｐ１とＰ２との間の２つの関連付け（すなわち、メモリ割り当て、及びコード・インジェクション）、及びＰ２とＦ１との間のファイル削除の新しい関連付けを含む。ステートフル・モデルの分析に基づき、Ｐ１が実際にはＰ２の親であることが示される。事前に定義された挙動のロジックの１つに従って、自己削除の挙動が決定され（５０８）、挙動のスコアＳ３が割り当てられる。ここで、Ｓ１、Ｓ２、及びＳ３を合計して、ステートフル・モデルのスコアが更新される。ステートフル・モデルのスコアが事前に定義された閾値を超えると、マルウェアの存在が決定される。たとえば、ステートフル・モデル、特にＰ１に関係している所与のプログラムが悪意のあると決定され、削除されることになる（５０９）。たとえば、プロセス・オブジェクトＰ１及びＰ２が終了させられ、ファイル・オブジェクトＦ１及びＦ２が取り除かれ、可能であれば、メモリ割り当て、コード・インジェクション、ファイル削除など、Ｐ１とＰ２との間の関連動作が修復され得る。
【０１３６】
図５に関連して上に図示された特定の実例は、あくまでも例示として提供され、本開示を多少なりとも限定するものとして解釈されるべきではないことに留意されたい。
【０１３７】
ここに開示された主題は、その適用において、本明細書に含まれた発明を実施するための形態において示された又は図面で図示された詳細に限定されないことを理解されたい。ここに開示された主題は、他の実施例を受け入れる余地があり、様々な方法において実施され、実行されることが可能である。したがって、本明細書において使用された表現及び用語は、説明目的のものであり、限定するものとして見なされるべきではないことが理解されるべきである。これにより、本開示が基づいている概念が、ここに開示された主題のいくつかの目的を実行するための他の構造、方法、及びシステムをデザインする基礎として、問題なく活用できることを、当業者であれば理解するであろう。
【０１３８】
ここに開示された主題によるシステムが、少なくとも部分的に、適切にプログラムされたコンピュータとして実装され得ることも理解されるであろう。同様に、ここに開示された主題は、開示された方法を実行するためのコンピュータによって読み取り可能であるコンピュータ・プログラムを検討する。さらに、ここに開示された主題は、開示された方法を実行するための、機械によって実行可能な命令のプログラムを有形で具体化する機械可読メモリを検討する。
【図１】
2017527931.tif 000003
【図２】
2017527931.tif 000004
【図３】
2017527931.tif 000005
【図４ａ】
2017527931.tif 000006
【図４ｂ】
2017527931.tif 000007
【図５】
2017527931.tif 000008
【国際調査報告】
2017527931.tif 000009
2017527931.tif 000010
2017527931.tif 000011