JP2018517985A - インタープリタ仮想マシンを用いた挙動マルウェア検出 - Google Patents

インタープリタ仮想マシンを用いた挙動マルウェア検出 Download PDF

Info

Publication number
JP2018517985A
JP2018517985A JP2017564564A JP2017564564A JP2018517985A JP 2018517985 A JP2018517985 A JP 2018517985A JP 2017564564 A JP2017564564 A JP 2017564564A JP 2017564564 A JP2017564564 A JP 2017564564A JP 2018517985 A JP2018517985 A JP 2018517985A
Authority
JP
Japan
Prior art keywords
routine
bytecode
malware
client system
event
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2017564564A
Other languages
English (en)
Other versions
JP6706273B2 (ja
Inventor
ハジマサン,ゲオルゲ−フローリン
ルカクス,サンドル
フロップ,ボトンド
Original Assignee
ビットディフェンダー アイピーアール マネジメント リミテッド
ビットディフェンダー アイピーアール マネジメント リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ビットディフェンダー アイピーアール マネジメント リミテッド, ビットディフェンダー アイピーアール マネジメント リミテッド filed Critical ビットディフェンダー アイピーアール マネジメント リミテッド
Publication of JP2018517985A publication Critical patent/JP2018517985A/ja
Application granted granted Critical
Publication of JP6706273B2 publication Critical patent/JP6706273B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45587Isolation or security of virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45591Monitoring or debugging support
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/034Test or assess a computer or a system

Abstract

説明されるシステムおよび方法により、コンピュータ・システムを、マルウェアおよびスパイウェアなどのコンピュータ・セキュリティ脅威から保護することが、可能になる。いくつかの実施形態では、セキュリティ・アプリケーションが、コンピュータ・システム上で動作している1組のモニタされるエンティティ(プロセス、スレッド、その他)が悪意あるソフトウェアを備えるかどうかを判定するために、1組の検出ルーチンを実行する。検出ルーチンは、バイトコードで定式化され、バイトコード変換仮想マシンの内部で実行される。検出ルーチンの実行は、それぞれのルーチンのバイトコード命令を、たとえばインタープリテーションまたは実行時コンパイルを経由して、ネイティブなプロセッサ命令に変換することを備える。それぞれのルーチンの実行は、保護されるクライアント・システム内部の特定のイベントの発生に起因して、選択的にトリガされる。検出ルーチンは、1組のスコアを出力することができ、これが、さらに、セキュリティ・アプリケーションによって、モニタされるエンティティが悪意あるものかどうかを判定するのに、用いられる。

Description

[0001]本発明は、コンピュータ・システムをマルウェアから保護するためのシステムおよび方法に関する。
[0002]マルウェアとしても知られている悪意を有するソフトウェアは、世界中の多数のコンピュータ・システムに影響を与える。コンピュータ・ウイルス、ワーム、ルートキット、依頼していないアドウェア、ランサムウェア、およびスパイウェアなどの、その多くの形式で、マルウェアは、数百万のコンピュータ・ユーザに深刻なリスクを与え、コンピュータ・ユーザを、とりわけデータおよび機密情報の損失、なりすまし、生産性損失などに対して脆弱にする。マルウェアは、さらに、あるユーザにとっては、わいせつ、過度に暴力的、いやがらせ、またはそれ以外にも不愉快である素材を、表示させることがあり得る。
[0003]ユーザのコンピュータ・システムに感染しているマルウェアを検出し、さらにはそのようなマルウェアを削除するまたはその他の態様で無力化するために、セキュリティ・ソフトウェアが用いられる場合があり得る。複数のマルウェア検出技術が、この技術分野において知られている。いくつかは、マルウェア・エージェントのコードの断片を、マルウェアを示すシグネチャのライブラリと一致させることに依拠する。他の従来型の方法は、マルウェア・エージェントのマルウェアを示す1組の挙動を検出する。
[0004]マルウェアは、検出アルゴリズムよりも進んだ状態に留まるように、急速に進化する。そのような迅速に変化する脅威に対抗するため、セキュリティ・ソフトウェアの提供者は、たとえば、新たなマルウェアのバージョンを検出するために、たとえば分類子を再訓練することにより、数分から数時間というスケールで検出方法および/またはパラメータを調整するのが典型的である。そのような再訓練に、計算論的なコストを要するのが典型的である。さらに、新たな挙動検出アルゴリズムの導入には、または、既存のものの変更の場合でさえも、それぞれのセキュリティ・ソフトウェアのソース・コードの再コンパイルに加えて、広範な検証が要求されることが典型的である。そうすることではじめて、新たなソフトウェアのバージョンが、たとえばソフトウェア・アップデートとして、クライアントに配信可能になる。対照的に、シグネチャ・ベースの検出システムでは、新たなマルウェア・シグネチャが、シグネチャの既存の組に容易に追加されることが可能である。
[0005]したがって、絶えず変化するマルウェアの性質に遅れをとらないために、アルゴリズムおよび/またはパラメータを迅速にアップデートすることが可能なアンチマルウェア・ソリューションを開発することに対する強い関心が存在する。
[0006]ある態様によると、クライアント・システムは、ルーチン・ディスパッチャと、バイトコード変換仮想マシンと、挙動評価エンジンとを形成するように構成された少なくとも1つのハードウェア・プロセッサを備える。ルーチン・ディスパッチャは、トリガ・イベントの発生の検出に応答して、複数のアンチマルウェア・バイトコード・ルーチンから、実行のためにアンチマルウェア・バイトコード・ルーチンを選択するように構成され、アンチマルウェア・バイトコード・ルーチンは、トリガ・イベントに従って選択される。トリガ・イベントの発生は、クライアント・システムの内部で実行中であるモニタされるプロセスによって生じる。バイトコード変換仮想マシンは、トリガ・イベントの発生がマルウェアを示すかどうかを判定するために、アンチマルウェア・バイトコード・ルーチンを実行するように構成され、アンチマルウェア・バイトコード・ルーチンを実行するステップは、アンチマルウェア・バイトコード・ルーチンの1組のバイトコード命令を一連のネイティブなプロセッサ命令に変換するステップと、一連のネイティブなプロセッサ命令を実行するステップとを備える。挙動評価エンジンは、クライアント・システムがマルウェアを備えるかどうかを、バイトコード変換仮想マシンがアンチマルウェア・バイトコード・ルーチンを実行する結果に従って判定するように構成される。
[0007]別の態様によると、コンピュータ実装方法は、クライアント・システムの少なくとも1つのハードウェア・プロセッサを用いて、トリガ・イベントの発生の検出に応答して、トリガ・イベントに従って、複数のバイトコード・ルーチンから、アンチマルウェア・バイトコード・ルーチンを選択するステップを備え、アンチマルウェア・バイトコード・ルーチンは、トリガ・イベントの発生がマルウェアを示すかどうかを判定するように構成される。トリガ・イベントは、クライアント・システムの内部で実行中であるモニタされるプロセスによって生じる。この方法は、さらに、クライアント・システムの少なくとも1つのハードウェア・プロセッサを用いて、アンチマルウェア・バイトコード・ルーチンの選択に応答して、アンチマルウェア・バイトコード・ルーチンの1組のバイトコード命令を、一連のネイティブなプロセッサ命令に変換するステップと、一連のネイティブなプロセッサ命令を実行するステップとを備える。この方法は、さらに、クライアント・システムの少なくとも1つのハードウェア・プロセッサを用いて、一連のネイティブなプロセッサ命令の実行の結果に従って、クライアント・システムがマルウェアを備えるかどうかを判定するステップを備える。
[0008]別の態様によると、非一時的コンピュータ可読媒体が、クライアント・システムの少なくとも1つのハードウェア・プロセッサによって実行されると、クライアント・システムに、ルーチン・ディスパッチャと、バイトコード変換仮想マシンと、挙動評価エンジンとを形成させるコンピュータ・プログラムを記憶する。ルーチン・ディスパッチャは、トリガ・イベントの発生の検出に応答して、トリガ・イベントに従って、複数のアンチマルウェア・バイトコード・ルーチンから、実行のためにアンチマルウェア・バイトコード・ルーチンを選択するように構成され、アンチマルウェア・バイトコード・ルーチンは、トリガ・イベントの発生がマルウェアを指示するかどうかを判定するように構成される。トリガ・イベントは、クライアント・システムの内部で実行中であるモニタされるプロセスによって生じる。バイトコード変換仮想マシンは、アンチマルウェア・バイトコード・ルーチンを実行するように構成され、アンチマルウェア・バイトコード・ルーチンを実行するステップは、アンチマルウェア・バイトコード・ルーチンの1組のバイトコード命令を一連のネイティブなプロセッサ命令に変換するステップと、一連のネイティブなプロセッサ命令を実行するステップとを備える。挙動評価エンジンは、クライアント・システムがマルウェアを備えるかどうかを、バイトコード変換仮想マシンがアンチマルウェア・バイトコード・ルーチンを実行する結果に従って判定するように構成される。
[0009]他の態様によると、非一時的なコンピュータ可読媒体が、少なくとも1つのハードウェア・プロセッサを備えたクライアント・システム上に形成されたバイトコード変換仮想マシンによって実行可能なアンチマルウェア・バイトコード・ルーチンを記憶し、ここで、アンチマルウェア・バイトコード・ルーチンの実行により、少なくとも1つのハードウェア・プロセッサに、クライアント・システム内部でのトリガ・イベントの発生がマルウェアを示すかどうかを判定させる。アンチマルウェア・バイトコード・ルーチンの実行は、アンチマルウェア・バイトコード・ルーチンの1組のバイトコード命令を、一連のネイティブなプロセッサ命令に変換するステップと、一連のネイティブなプロセッサ命令を実行するステップとを備える。クライアント・システムは、ルーチン・ディスパッチャと、挙動評価エンジンとをさらに備える。ルーチン・ディスパッチャは、トリガ・イベントの発生の検出に応答して、トリガ・イベントに従って、複数のバイトコード・ルーチンから、アンチマルウェア・バイトコード・ルーチンを選択するように構成される。挙動評価エンジンは、バイトコード変換仮想マシンがアンチマルウェア・バイトコード・ルーチンを実行することの結果に従って、クライアント・システムがマルウェアを備えるかどうかを判定するように構成される。
[0010]本発明の以上の態様および効果は、以下の詳細な説明を読み、下記の図面を参照することにより、より良く理解されるであろう。
[0011]本発明のいくつかの実施形態によるコンピュータ・セキュリティ脅威(たとえば、マルウェア)に対して保護される例示的なクライアント・システムの図解である。 [0012]本発明のいくつかの実施形態によるクライアント・コンピュータ・システムの例示的なハードウェア構成の図解である。 [0013]本発明のいくつかの実施形態によるセキュリティ・アプリケーションの例示的な構造の図解である。 [0014]Windows(登録商標)環境における1組のプロセスの例示的な実行フローの図解である。実線による矢印は、イベント・インターセプタが不在の場合のフローを示す。破線による矢印は、上記実行フローに対する修正を示すが、この修正は、本発明のいくつかの実施形態による複数のイベント・インターセプタの動作によって導入される。 [0015]本発明のいくつかの実施形態によるマルウェア検出を構成するためにセキュリティ・アプリケーションによって遂行される例示的な一連のステップの図解である。 [0016]本発明のいくつかの実施形態による例示的なバイトコード・ルーチンの図解である。 [0017]本発明のいくつかの実施形態によりルーチン・ディスパッチャ(図3)によって遂行される例示的な一連のステップの図解である。 [0018]本発明のいくつかの実施形態によりイベント・キューを処理するために、ルーチン・ディスパッチャによって遂行される例示的な一連のステップの図解である。 [0019]本発明のいくつかの実施形態によりバイトコード変換VM(図3)によって遂行される例示的な一連のステップの図解である。 [0020]本発明のいくつかの実施形態による例示的なソフトウェア・アップデート・プロセスの図解である。
[0021]以下の説明では、構造の間について記載されるすべての接続は、直接的な動作的な接続か、または、中間的な構造を介した間接的な動作的な接続であり得る、ということが理解される。1組の要素は、1つまたは複数の要素を含む。ある要素に関するいかなる記載も、少なくとも1つの要素に言及するものと理解される。複数の要素は、少なくとも2つの要素を含む。他に要求されない限りは、どの説明される方法のステップも、必ずしも、特定の図解される順序で行われるとは限らない。第2の要素から導かれる第1の要素(たとえば、データ)は、第2の要素とオプションであるがそれ以外のデータとを処理することによって生成される第1の要素に加えて、第2の要素に等しい第1の要素を含む。あるパラメータに従って判定または判断を下すことは、そのパラメータに従って、および、オプションであるが他のデータに従って、その判定または判断を下すことを含む。他に特定されない限り、ある量/データのインジケータは、その量/データ自体であり得るし、または、その量/データ自体とは異なるインジケータであり得る。コンピュータ・セキュリティとは、データおよび/またはハードウェアへの意図されないもしくは承認されないアクセスに対して、データおよび/またはハードウェアの意図されないもしくは承認されない修正に対して、ならびにデータおよび/またはハードウェアの破壊に対して、ユーザおよび機器を保護することを含む。コンピュータ・プログラムとは、タスクを遂行する一連のプロセッサ命令である。本発明のいくつかの実施形態において説明されるコンピュータ・プログラムは、スタンドアロンのソフトウェア・エンティティまたは他のコンピュータ・プログラムのサブエンティティ(たとえば、サブルーチン、ライブラリ)であり得る。他に特定されない限り、プロセスとは、アプリケーションまたはオペレーティング・システムの一部など、コンピュータ・プログラムの一例であり、少なくとも実行スレッドとそれに割り当てられた仮想メモリ空間とを有することによって特徴付けられるが、ここで、それぞれの仮想メモリ空間のコンテンツは実行可能なコードを含む。プラットフォームという用語は、特定の物理的なまたは仮想化されたハードウェア構成(たとえば、プロセッサの特定モデルまたはファミリを備える)を示すために用いられる。仮想的なプラットフォームは、たとえば仮想化されたプロセッサである仮想化されたハードウェアを備える。本明細書におけるバイトコードという用語は、バイトコード命令が同一の形式で異なる複数のプラットフォームに配信され得るという意味で、コンピュータ・プログラムのマルチプラットフォーム符号化を指す。バイトコード命令とは対照的に、ネイティブなプロセッサ命令は、それぞれのネイティブなプロセッサ命令を実行する物理的または仮想的なプラットフォームに特有の命令セット・アーキテクチャ(ISA)の命令を備える。コンピュータ可読媒体とは、導電性ケーブルおよび光ファイバ・リンクなどの通信リンクに加えて、磁気、光学および半導体記憶媒体などの非一時的媒体(たとえば、ハード・ドライブ、光ディスク、フラッシュ・メモリ、DRAM)を含む。いくつかの実施形態によると、本発明は、とりわけ、本明細書で説明される方法を遂行するためのコンピュータ可読媒体符号化命令に加えて、本明細書で説明される方法を遂行するようにプログラムされたハードウェア(たとえば、1つまたは複数のマイクロプロセッサ)を備えるコンピュータ・システムを提供する。
[0022]以下の説明は、必ずしも限定によるのではなく、例示によって、本発明の実施形態を例証する。
[0023]図1は、本発明のいくつかの実施形態によりコンピュータ・セキュリティ脅威から保護されるクライアント・システム10上で動作している例示的な1組のソフトウェア・オブジェクトを示す。クライアント・システム10は、コンピュータ・システム(たとえば、エンドユーザ・コンピュータ、コーポレイト・サーバ、その他)を表し得る。他の例示的なクライアント・システム10は、モバイル・コンピューティング・デバイス(たとえば、ラップトップ、タブレットPC)、通信デバイス(たとえば、スマートホン)、デジタル娯楽機器(テレビ、ゲーム・コンソール、その他)、ウェアラブル・コンピューティング・デバイス(たとえば、スマートウォッチ)、またはプロセッサとメモリとを有し、コンピュータ・セキュリティ保護を必要とするいずれかの他の電子デバイスを含む。
[0024]いくつかの実施形態では、オペレーティング・システム(OS)30は、クライアント・システム10のハードウェアへインターフェースを提供するソフトウェアを備え、1組のソフトウェア・アプリケーション32a〜cおよび40に対するホストとして機能する。OS30は、とりわけ、Windows(登録商標)、MacOS(登録商標)、Linux(登録商標)、iOS(登録商標)、またはAndroid(登録商標)などの任意の広く利用可能なオペレーティング・システムを備え得る。アプリケーション32a〜cは、一般的にユーザ・ソフトウェアを表し、これはたとえば、とりわけ、ワード・プロセシング、画像処理、データベース、ブラウザ、および電子的通信アプリケーションを含み得る。いくつかの実施形態では、セキュリティ・アプリケーション40が、アプリケーション32a〜cと同時に動作し、クライアント・システム10上で動作しているいずれかのソフトウェア(アプリケーション32a〜cおよびOS30を含めて)がコンピュータ・セキュリティ脅威を呈するかどうかを判定するように、構成される。たとえば、アプリケーション40は、クライアント・システム10上で動作しているマルウェア(たとえば、ウイルス、スパイウェア、アドウェア、その他)を検出し得る。アプリケーション40は、さらに、そのような悪意あるソフトウェアを消去またはそれ以外の態様で無力化し、クライアント・システム10のユーザまたはシステム管理者に警告するように構成され得る。セキュリティ・アプリケーション40は、スタンドアロン・プログラムであり得る、または、とりわけ、アンチマルウェア、アンチスパム、およびアンチフロード・コンポーネントを備えたソフトウェア・スイートの一部を形成し得る。セキュリティ・アプリケーション40の動作は、以下で詳細に説明される。
[0025]図2は、クライアント・システム10の例示的なハードウェア構成を図解し、ここで、クライアント・システム10はコンピュータ・システムである。当業者であれば、タブレットPC、携帯電話、スマートウォッチ、その他など、他のデバイスのハードウェア構成が図解される構成と異なる場合があり得るが、本明細書はそのようなデバイスに適合させ得ることを理解するであろう。クライアント・システム10は、ハードウェア・プロセッサ12、メモリ・ユニット14、1組の入力デバイス16、1組の出力デバイス18、1組の記憶デバイス20、および1組のネットワーク・アダプタ22を含む1組の物理デバイスを備え、これらは、すべてが、コントローラ・ハブ24によって相互に接続される。
[0026]いくつかの実施形態では、プロセッサ12は、1組の信号および/またはデータを用いて計算および/または論理演算を実行するように構成された物理デバイス(たとえば、マイクロプロセッサ、半導体基板上に形成されたマルチコア集積回路)を備える。いくつかの実施形態では、そのような論理演算は、メモリ・ユニット14からプロセッサ12に、一連のプロセッサ命令(たとえば、マシン・コードまたはそれ以外のタイプのソフトウェア)の形式で、伝送される。メモリ・ユニット14は、命令を遂行する間にプロセッサ12によってアクセスまたは生成されるデータ/信号を記憶する揮発性コンピュータ可読媒体(たとえば、RAM)を備え得る。入力デバイス16は、とりわけ、コンピュータ・キーボード、マウス、およびマイクロフォンを含み得るが、ユーザがデータおよび/または命令をクライアント・システム10に導入することを可能にするそれぞれのハードウェア・インターフェースおよび/またはアダプタを含む。出力デバイス18は、グラフィック・カードなどのハードウェア・インターフェース/アダプタに加えて、とりわけ、モニタなどの表示デバイスとスピーカとを含み得、クライアント・システム10がデータをユーザに通信することを可能にする。いくつかの実施形態では、入力デバイス16と出力デバイス18とは、タッチスクリーン・デバイスの場合のように、共通のハードウェアを共有することがあり得る。記憶デバイス20は、プロセッサ命令および/またはデータの不揮発性の記憶、読み出し、および書き込みを可能にするコンピュータ可読媒体を含む。例示的な記憶デバイス20は、CDおよび/またはDVDディスクおよびドライブなどの取り外し可能な媒体に加えて、磁気および光ディスクと、フラッシュ・メモリ・デバイスとを含む。1組のネットワーク・アダプタ22により、クライアント・システム10が、ネットワーク(たとえば、ローカル・エリア・ネットワーク、ワイヤレス・ネットワーク、その他)および/または他のデバイス/コンピュータ・システムに接続することが可能になる。コントローラ・ハブ24は、一般的に、複数のシステム、周辺機器、および/もしくはチップセット・バス、ならびに/またはプロセッサ12とデバイス14、16、18、20および22との間での通信を可能にするすべての他の回路を表す。たとえば、コントローラ・ハブ22は、プロセッサ12をメモリ14に接続するノースブリッジ、および/または、プロセッサ12をデバイス16、18、20および22に接続するサウスブリッジを備え得る。
[0027]いくつかの実施形態では、クライアント・システム10は、仮想プラットフォーム(たとえば、仮想マシン)を動作させるように構成される。そのような構成は、たとえばハイパーバイザなどのハードウェア仮想化技術を用いて、設定され得る。仮想プラットフォームは、仮想化されたハードウェア・コンポーネントを備え得るが、そのような仮想化されたコンポーネントは、それぞれが、少なくとも部分的に、クライアント・システム10の対応するハードウェア・コンポーネントの機能をエミュレートする。たとえば、仮想プラットフォームは、仮想化されたプロセッサと、仮想化されたメモリ・ユニットと、仮想化された入力/出力デバイスとを含み得る。オペレーティング・システム30は、アプリケーション32a〜cとセキュリティ・アプリケーションとに加えて、それぞれの仮想プラットフォーム上で動作し得、仮想化されたハードウェアと対話する。ソフトウェアは、それぞれのプラットフォームの仮想化されたプロセッサを実行のために用いるときに、仮想プラットフォーム上で動作する、と称される。
[0028]図3は、本発明のいくつかの実施形態によるセキュリティ・アプリケーション40の例示的なコンポーネントを示す。セキュリティ・アプリケーション40は、ルーチン・ディスパッチャ32、挙動評価エンジン38、およびディスパッチャ32と評価エンジン38とに接続されたバイトコード変換仮想マシン(BTVM)34を備える。いくつかの実施形態では、アプリケーション40は、さらに、BTVM34および/または評価エンジン38に接続されたヘルパ・モジュール36を備える。ルーチン・ディスパッチャ32は、さらに、以下で詳述されるように、イベント・キュー31を管理し得る。
[0029]いくつかの実施形態では、ルーチン・ディスパッチャ32は、1組のイベント通知42を、クライアント・システム10上で動作している様々なソフトウェア・オブジェクトの内部にインストールされた1組のイベント・インターセプタ28a〜cから、受け取る。イベント通知42は、このようにして、ディスパッチャ32に、ソフトウェアの実行の間の様々なイベントの発生について、知らせることがあり得る。例示的な通知されたイベントは、とりわけ、プロセスまたはスレッドの作成、コード・インジェクション、システム・コール、新たなディスク・ファイルを作成しようとする試み、既存のディスク・ファイルへの書き込みの試み、システム・レジストリ・キーを編集しようとする試み、および特定のメモリ・セクションへの書き込みの試みを含み得る。通知されたイベントのうちのいくつかは、マルウェアを指示するものであり得る。他のイベントは、それ自体ではセキュリティ脅威を指示するものではないかもしれないが、他のイベントと共に発生するときの潜在的な脅威をシグナリングすることがあり得る。通知42を受け取ることに応答して、ディスパッチャ32のいくつかの実施形態は、通知42の詳細に従って、バイトコード・ルーチンを選択し、通知されたイベントの1組のイベント・パラメータ47と一緒に、それぞれのバイトコード・ルーチンを実行のためにバイトコード変換VM34に送ることがあり得る。それぞれのバイトコード・ルーチンの実行は、評価インジケータ50を挙動評価エンジン38に供給し得る。エンジン38は、複数のそのような評価インジケータ(たとえば、スコア)を維持し得、少なくとも1つのそのようなインジケータがコンピュータ・セキュリティ脅威を指示するときには、警告を発することがあり得る。コンポーネント32、34、および38の動作は、以下で詳細に説明される。
[0030]イベント・インターセプタ28a〜cの動作を図解するために、図4は、本発明のいくつかの実施形態による1組のソフトウェア・エンティティ60a〜cの例示的な実行フローを示す。単純にするために、選択されているエンティティ60a〜bは、Windows(登録商標)OSの例において動作しているプロセスであり、たとえばLinuxなど他のオペレーティング・システムのための類似の図面を描くことも、可能である。実線の矢印は、イベント・インターセプタが不在の場合の実行フローを表す。破線の矢印は、本発明のいくつかの実施形態に従って動作しているイベント・インターセプタ28a〜cが存在することによるフローの修正を表す。
[0031]例示的なプロセス60aは、複数の動的にリンクされたライブラリ(DLL)62a〜cをロードし、図4の例では、DLL62cが、(悪意がある可能性がある)プロセス60bによってプロセス60aの中に注入される。プロセス60a(または、そのロードされたDLLのうちの1つ)が、たとえばディスク・ファイルに何かを書き込むために、または、レジストリ・キーを編集するために、何らかのシステム機能に対する命令コールを実行するときには、それぞれの命令が、KERNEL32.DLLまたはNTDLL.DLLなどのユーザモードAPIをコールする。図4の例では、それぞれのユーザモードAPIコールが、ユーザレベルのイベント・インターセプタ28aによって、インターセプトされる。そのようなインターセプションは、とりわけ、DLLインジェクションまたはフッキングなどの方法によって、達成され得る。フッキングとは、ソフトウェア・コンポーネントの間で渡される関数コール、メッセージ、またはイベントをインターセプトする方法に対して、この技術分野で一般的に用いられる用語である。ある例示的なフッキング方法は、第2の関数に実行をリダイレクトする命令(この場合には、イベント・インターセプタ28a)を挿入することによって、ターゲット関数のエントリ・ポイントを変更することを備える。そのようなフッキングの後では、第2の関数が、代わりに、または、ターゲット関数の前に、実行され得る。図4の例では、セキュリティ・アプリケーション40が、アプリケーション40のコンポーネントに実行をリダイレクトするようにそれぞれの関数に命令するために、KERNEL32.DLLおよび/またはNTDLL.DLLライブラリの一定の関数の中にフックすることがあり得る。こうして、アプリケーション40は、プロセス60aがフックされた関数に従って識別される特定のアクションを行おうと試みるときは常に、通知を受けることができるのである。
[0032]実行の典型的なフローでは、エンティティ60aによってコールされたユーザモードAPI関数は、オペレーティング・システムのカーネルに、サービスを要求し得る。いくつかの実施形態では、そのような動作は、x86プラットフォーム上にSYSCALLおよびSYSENTERなどのシステム・コールを発行することによって行われる。図4の例では、そのようなシステム・コールはイベント・インターセプタ28bによってインターセプトされる。いくつかの実施形態では、そのようなインターセプションは、たとえば、プロセッサ12のモデルに特有のレジスタ(MSR)に記憶される値を変更することによってシステム・コール・ハンドラ・ルーチンを修正することを備え、これが、効果的に、それぞれのハンドラ・ルーチンの実行を、インターセプタ28bに、または、直接的にアプリケーション40のコンポーネントに、リダイレクトする。このような技術は、この技術分野では、MSRフッキングとして知られ、ソフトウェア・エンティティが一定のシステム・コールを行おうとするときは常に、セキュリティ・アプリケーション40が通知されることを可能にし得る。
[0033]システム・コールの後で、プロセッサの制御は、典型的には、OS30のカーネルにターン・オーバされる。いくつかの実施形態では、カーベルレベルのイベント・インターセプタ28cは、OSカーネルの一定のアクションをインターセプトし、したがって、評価されたプロセスがマルウェアを示し得る一定の動作を実行しようと試みていると判定するように構成される。そのようなアクションをインターセプトするために、いくつかの実施形態は、OS30の中に組み込まれ、OS30によって露出される1組のフィルタリング機構を用いることがあり得る。たとえば、Windows(登録商標)OSでは、FltRegisterFilterが、ファイルを作成する、ファイルを開く、ファイルに書き込みをする、およびファイルを削除するなどの動作をインターセプトするのに用いられ得る。別の例では、イベント・インタープリタ28cが、作成動作をインターセプトするのに、もしくは、オブジェクト−ハンドル動作を複製するのにObRegisterCallbackを用いることがあり得る、または、新たなプロセスの作成をインターセプトするのにPsSetCreateProcessNotifyRoutineを用いることがあり得る。さらに別の例では、レジストリ・キー/値を作成および設定するなど、Windowsのレジストリ動作が、CmRegisterCallbackExを用いてインターセプトされることがあり得る。類似のイベント・フィルタリング機構が、Linux(登録商標)など他のオペレーティング・システムのために、この技術分野において知られている。特定のイベント/アクションの発生の検出に応答して、イベント・インターセプタ28が、セキュリティ・アプリケーション40に通知42を送信することがあり得る。
[0034]図5は、本発明のいくつかの実施形態に従って、コンピュータ・セキュリティ脅威の検出を設定するためにセキュリティ・アプリケーション40によって行われる、例示的な一連のステップを示す。図解される一連のステップは、たとえば、セキュリティ・アプリケーション40が起動されるときに、実行され得る。ステップ102では、アプリケーション40が、たとえば、OS30の様々な関数をフックして、ディスパッチ・テーブルのエントリを修正することなどにより、イベント・インターセプタ28a〜cをインストールする。そのようなインターセプタをインストールするための様々な方法が、この技術分野において知られている(たとえば、パッチング、MSRフッキング、コード・インジェクションなど)。ステップ104は、イベント・キュー31を設定するが、これは、通知されたイベントとそのようなイベントが生じた順序とに関する情報を記憶するために、ルーチン・ディスパッチャのいくつかの実施形態によって用いられる。いくつかの実施形態では、イベント・キュー31は、先入れ先出し(FIFO)キューとして編成される。例示的なキュー31は、シンプル・リンク、ロックレス、マルチプロデューサ、マルチコンシューマ・キューであり得る。
[0035]一連のステップ106〜108は、ルーチン・データベース26(たとえば、図3を参照のこと)にアクセスして、データベース26からの1組のバイトコード・ルーチンを、メモリのあるセクションにロードする。データベース26は、クライアント・システム10のストレージ・デバイス20上に、または、クライアント・システム10に通信可能な態様で結合されたコンピュータ可読媒体上に、存在し得る。
[0036]いくつかの実施形態では、データベース26に記憶される各バイトコード・ルーチンは、1組のバイトコード命令を備え、この1組のバイトコード命令は、BTVM34によって実行されると、BTVM34に、コンピュータ・セキュリティに関係する特定のタスクを遂行させる。ある例示的なバイトコード・ルーチンが、特定のソフトウェア・オブジェクト(またはオブジェクトのグループ)が悪意を有するかどうかを判定するために、1組のヒューリステックなテストを適用する。バイトコード・ルーチンの別の例は、クライアント・システム10において特定の一連のイベント(挙動シグネチャ)の発生がないかを、点検する。必ずしも、一連のイベントのすべてが、同じエンティティによって生じる必要はない。しかし、そのような一連のイベントの発生が、マルウェアを指示することがあり得る。あるそのような例では、悪意を有する活動がエンティティのグループの間で分割され、そのグループの各メンバが、悪意を有する活動の小さな部分を遂行する。そのような分散型の活動に対応するイベントを相関させるように構成されたバイトコード・ルーチンは、したがって、悪意を有するエンティティのグループ全体を検出し得る。
[0037]他の例示的なバイトコード・ルーチンは、簿記および/または統計的なタスク(たとえば、イベントのカウント、イベント・パラメータの関連付け)を行う。他のバイトコード・ルーチンは、ソフトウェアおよび/またはクライアント・システム10のユーザがOS30および/またはハードウェア・デバイスと対話する態様を変更し得る(たとえば、ルーチンが、ソフトウェア・オブジェクトがディスクへ書き込むこと、または、ソフトウェア・オブジェクトがネットワーク・アダプタ22にアクセスすることを阻止し得る)。各バイトコード・ルーチンが、別個の検出方法を実施することがあり得るし、および/または、ヒューリステックでもあり得る。いくつかの実施形態では、各バイトコード・ルーチンが、悪意を有するエージェントの特定のカテゴリ、ファミリ、タイプ、またはバリアントの存在を検出するように構成されることがあり得る。いくつかの別個のルーチンが、悪意を有するエージェントの単独のカテゴリ、ファミリ、タイプ、またはバリアントを検出するのに協力することがあり得る。いくつかの実施形態では、単独のルーチンが、マルウェアのいくつかのカテゴリ、タイプ、ファミリ、またはバリアントの検出に参加することがあり得る。
[0038]図6は、本発明のいくつかの実施形態による例示的なバイトコード・ルーチン70を示す。ルーチン70は、トリガ・インジケータ72とバイトコード・セクション74とを備える。いくつかの実施形態では、トリガ・インジケータ72は、それぞれのバイトコード・ルーチンを実行するための1つまたは複数の条件をエンコードする。それぞれの条件は、それぞれのバイトコード・ルーチンが特定のタイプのイベントの発生の検出に応答して実行されるべきかどうかを判定するために、ルーチン・ディスパッチャ32および/またはBTVM34によって評価され得る。ある例示的な条件は、特定のトリガ表現が真として評価されるのかまたは偽として評価されるのかを判定すること、および、表現が真であるときにその条件が満たされると判定することを要求する。いくつかの実施形態では、それぞれのトリガ表現が、イベント・タイプのインジケータ(たとえば、プロセスの作成、特定のシステム・コール、その他)を備える。トリガ表現が、さらに、経路、ファイル名、プロセスID、その他など、イベント・パラメータを備えることもあり得る。いくつかの実施形態では、トリガ表現が、BTVM34および/またはルーチン・ディスパッチャ32によって用いられる変数を備えることもあり得る(下記の例を参照のこと)。
[0039]トリガ・インジケータ72が、さらに、それぞれのルーチン/バイトコード・セクションが同期的に実行されるべきかまたは非同期的に実行されるべきかを示すフラグを備えることもあり得る。本明細書において、同期的という用語は、それぞれのルーチンの実行をトリガしたイベントを生成するプロセス(本明細書では、簡単に、トリガ・プロセスと称される)の実行が、それぞれのルーチンが実行される間は中断される、というバイトコード・ルーチンの実行態様を意味するように用いられる。いくつかの実施形態は、それぞれのバイトコード・ルーチンを実行するために、トリガ・プロセスのスレッド実行コンテキストを用いるが、これは、ルーチンの実行の継続時間の間、トリガ・プロセスの実行を、または、少なくとも、それぞれのプロセスのスレッドの実行を、暗黙のうちに(implicitly)中断させる。トリガ・プロセスの実行の中断および/または再開は、それぞれのイベントのインターセプタによって引き起こされ得る。たとえば、インターセプタ28a〜cが、ルーチン・ディスパッチャ32からの信号にのみに応答して、トリガ・プロセスのスレッドをハイジャックすること、および/または、トリガ・プロセスの実行を再開することがあり得る。同期的実行とは対照的に、非同期的実行とは、トリガ・プロセスが実行を継続することが許容されるバイトコード・ルーチンを実行する態様を指し、その場合に、通知をトリガしたイベントは、後の処理のためにイベント・キューの中に挿入される。同期(synchrony)フラグを各ルーチンまたはバイトコード・セクションと関連させることで、ルーチン・ディスパッチャ32がどのようにイベント通知を扱うべきかを決定する助けになり得る(さらなる詳細は後述される)。
[0040]いくつかの実施形態において、バイトコード・セクション74は、BTVM34にルーチン70と関連するコンピュータ・セキュリティ・タスクを遂行するように命令する、連続するバイトコード命令74a〜cを備える。いくつかの実施形態では、各バイトコード命令は、BTVM34の仮想プロセッサのネイティブな命令である。例示的な実施形態では、BTVM34は、Java(登録商標)仮想マシンであり、バイトコード命令74a〜cは、Java(登録商標)言語の命令である。バイトコード命令がハードウェア・プロセッサ12によって実行されるために、それぞれのバイトコード命令は、最初に、たとえば、プロセッサ12の命令セット・アーキテクチャ(ISA)の命令などの一連のネイティブなプロセッサ命令に、変換(インタープリットまたはコンパイル)される。そのような変換は、少なくとも部分的にはBTVM34によって、遂行される。セキュリティ・アプリケーション40が仮想プラットフォーム上で動作するときには、BTVM34は、各バイトコード命令を、それぞれの仮想プラットフォームの仮想プロセッサにネイティブな一連のプロセッサ命令に変換し得る。
[0041]例示的なバイトコード命令セットは、とりわけ、値を設定し、値を比較し、ジャンプを遂行するためのバイトコード命令と、ループ命令と、(図3のヘルパ・モジュール36の関数など)外部関数をコールするための命令とを備え得る。いくつかの実施形態では、各バイトコード命令は、動作を示すオペコード・フィールド76と、少なくとも1つのオペランドを示すオペランド・フィールド78とを含む。
[0042]いくつかのバイトコード・ルーチンは、複数のセクションを含み得るが、各セクションは、別個のトリガ・インジケータを有し得る。そのような構成では、ルーチンの各セクションは、別個の条件によってトリガされ得る。そのような一例では、バイトコード・ルーチン70は、ランサムウェア、すなわち、ユーザのファイルを暗号化し、それぞれのファイルを復号する前にユーザが身代金(ランサム)を支払うことを要求する悪意を有するソフトウェアの検出に、狙いを定めることがあり得る。ランサムウェアの例には、とりわけ、CryptoWall、CryptoLocker、およびCTB−Lockerマルウェアが含まれる。そのようなマルウェアは、典型的には、暗号化APIをコールし、ユーザのファイルを数え上げ、ランサム・メッセージを表示する。そのようなマルウェアを検出する例示的なバイトコード・ルーチンは、以下の4つのセクションを含み得る:
セクション1:トリガ:EventType=暗号化関数へのコール
出力:静的な変数CryptoAPICall=TRUEに設定
セクション2:トリガ:[EventType=FindFirstFile APIを用いてファイルを数え上げ、CryptoAPICall=TRUE]
Do:数え上げられたファイルのファイル拡張子をチェック
出力:数え上げられたファイルがPDF、DOCX、JPGなどの拡張子を有する場合には、静的な変数RansomDocSearch=TRUEに設定
セクション3:トリガ:[EventType=ディスク・ファイルへの書き込みを試みて、RansomDocSearch=TRUEに設定]
Do:ファイルが数え上げられたファイルの中にあるかどうかを判定
出力:RansomActivity=TRUEに設定し、評価スコアを30ポイント増加させる
セクション4:トリガ:[EventType=スクリーン背景の変更およびRansomActivity=TRUEに設定]
出力:評価スコアを20ポイント増加させる
上述の例では、セクション1が少なくとも1回動作したときにだけ、セクション2の動作が可能であり、セクション2が動作したときにだけ、セクション3の動作が可能、等である。
[0043]いくつかの実施形態では、各バイトコード・ルーチンは、さらに、初期化セクションと、クリーンアップ・セクションと、エラー・セクションとを備える。初期化セクションは、変数初期化を備え得るが、それぞれのバイトコード・ルーチンがメモリにロードされると、1回実行され得る(たとえば、図5のステップ108で)。クリーンアップ・セクションは、それぞれのルーチンの終了時に、実行され得る。エラー・セクションは、それぞれのバイトコード・ルーチンのいずれかの他のセクションの実行の間にエラーが発生する場合に、実行される命令を備え得る。
[0044]いくつかの実施形態では、ステップ110(図5)において、セキュリティ・アプリケーション40が、ロードされたバイトコード・ルーチンをパージングして、イベント・タイプとそれぞれのイベント・タイプによってトリガされるバイトコード・ルーチンとの間の関連を示す関連インジケータ(たとえば、テーブルまたはハッシュ・インデックス)を作成し得る。そのような関連により、ルーチン・ディスパッチャ32が、一定のイベントの発生の検出に応答して実行するためのルーチンを選択することが可能になる。
[0045]図7は、本発明のいくつかの実施形態に従ってルーチン・ディスパッチャ32によって行われる例示的な一連のステップを示す。一連のステップ112〜114は、インターセプタ28a〜cからのイベント通知をリッスンする。イベント通知42を受け取ることに応答して、ステップ116は、それぞれの通知されたイベントの1組のイベント・パラメータ47を決定する。それらのパラメータは、イベントに特有であり得る。いくつかの例示的なイベント・パラメータは、とりわけ、通知されたアクションを行うプロセスまたはスレッド(たとえば、プロセスID)と、ファイル名と、経路と、メモリ・アドレスと、プロセッサ命令のオペランドとを含む。イベント・パラメータは、インターセプタ28a〜cによって決定されイベント通知42に含まれる場合があり得る、または、通知42を受け取ることに応答して、ルーチン・ディスパッチャ32によって決定される場合もあり得る。通知されたイベントが新たなディスク・ファイルを作成する試みである例では、イベント・パラメータは、作成されつつあるファイルの名前を含み得る。それぞれのファイル名は、イベント・インターセプタによって決定され得、通知42の一部としてルーチン・ディスパッチャ32に送信され得る。別の例では、特定のアクションを行うプロセスの識別子が、たとえば、現時点で実行されているプロセスを管理するためにOS30によって用いられるデータ構造をパージングすることによって、直接的にルーチン・ディスパッチャ32により決定され得る。Windows(登録商標)OSでは、各プロセスは、実行プロセス・ブロック(EPROCESS)として表されるが、これは、とりわけ、それぞれのプロセスのスレッドのそれぞれへのハンドルと、OS30が複数の実行プロセスからそれぞれのプロセスを識別することを可能にする一意的なプロセスIDとを備える。類似のプロセス/スレッド表現は、Linuxなどの他のOSに対しても利用可能である。
[0046]一定のイベントの発生は、関連するバイトコード・ルーチンの同期的な実行を要求する場合があり得る。そのようなイベントの例は、とりわけ、プロセスの終了、ファイルの削除、およびレジストリ・キーの削除など、それぞれのクライアント・システムに対する実質的および/または不可逆的な結果を伴うイベントを含む。同期的な実行を管理するために、ルーチン・ディスパッチャ32のいくつかの実施形態が、<イベント、ルーチン>というタプルのリストを維持する場合があり、ここで、各タプルは、それぞれのルーチンがそれぞれのイベントの発生に応答して同期して実行されるべきだ、ということを示す。それらのタプルは、静的であり得るが、たとえば、いくつかのルーチン(またはルーチンのセクション)は、それぞれのトリガが発生する度に、同期的な態様で、必ず実行される。静的なタプルは、たとえば、それぞれのルーチン/セクション(上を参照のこと)と関連する同期フラグの値に従って、識別され得る。他の<イベント、ルーチン>タプルは、状況的なものであり得、すなわち、一定の事情においてのみ効果を有し得る。そのようなタプルは、たとえば他のイベントその他の発生に応答して、動的に、リストに追加され得る/リストから削除され得る。いくつかの実施形態では、同期処理のために登録されている<イベント、ルーチン>タプルのリストは、それぞれのクライアント・システムのユーザ(たとえば、管理者)によって指示される1組のオプションに従って、変動し得る。一般に、バイトコード・ルーチンの同期的な処理/実行は、より高いセキュリティを提供し得るが、いくつかのタスクを低速化させることにより、ユーザ体験に否定的な影響を与えることがあり得る。異なるユーザは、異なるセキュリティ設定を好み得る。いくつかの実施形態では、各設定(たとえば、所望のセキュリティ・レベル)は、<イベント、ルーチン>リストの別個の構成に対応し得る。
[0047]ステップ120では、ルーチン・ディスパッチャ32が、現在のイベント通知によって指示されるトリガ・イベントの発生が同期処理を保証するかどうかを、たとえば、それぞれのイベントを備えた少なくとも1つの<イベント、ルーチン>タプルが存在するかどうかを判定することによって、判定する。ステップ120における判定は、さらに、それぞれのイベントのタイプに従って、通知42の同期フラグに従って、または、バイトコード・ルーチンのトリガ・インジケータに従って、先に進み得る。
[0048]それぞれのイベントの発生が同期処理を要求しないときには、ステップ122において、ルーチン・ディスパッチャ32が、それぞれのイベントを、イベント・キュー31の中に挿入する。さらなるステップ124は、インターセプタ28a〜cに、それぞれのイベント通知を生じさせるプロセス/スレッドの実行を再開するように、シグナリングする。
[0049]現時点で通知されたイベントの発生が同期処理を要求するときには、ステップ126において、ルーチン・ディスパッチャ32が、それぞれのイベントに従って、バイトコード・ルーチンを選択する。ステップ126は、現在のイベントのタイプと関連するバイトコード・ルーチンの部分集合を識別するステップと、そのようなルーチンそれぞれのトリガ条件を評価するステップとを含み得る。ステップ130は、それぞれのバイトコード・ルーチンを用いて初期化されたBTVM34のインスタンスを起動するステップを備える。いくつかの実施形態は、BTVM34のそれぞれのインスタンスを実行するために、トリガ・プロセスの実行スレッドを用いる。ステップ126が現在のイベント通知によってトリガされる複数のバイトコード・ルーチンを識別するときには、一連のステップ128〜130が、そのようなルーチンそれぞれに対して、再度実行され得る。
[0050]いくつかの実施形態では、ステップ132において、ルーチン・ディスパッチャ32が、挙動評価エンジン38および/またはBTVM34から、通知42を生じさせるプロセスのセキュリティ評価の結果を示す応答を待機する。この評価は、たとえば、それぞれのプロセスが悪意を有するものであるかどうかを示し得る。別の実施形態では、ステップ132において、ディスパッチャ32は、BTVM34が現在のバイトコード・ルーチンの実行を終了するまで、待機することがあり得る。それぞれのルーチンが実行を終了する、および/または、セキュリティ評価が完了するときには、ディスパッチャ32は、イベント・インターセプタ28a〜cに対して、イベント通知42を生じさせるプロセスの実行を再開させるように、シグナリングする場合がある。
[0051]図8は、イベント・キュー31を処理するためにルーチン・ディスパッチャ32により本発明のいくつかの実施形態に従って遂行される例示的な一連のステップを、図解する。一連のステップ142〜144は、キュー31が少なくとも1つの項目を含むまで、待機する。ステップ146は、イベントを、キューから削除する。キュー31がFIFO型であるときには、イベントは、それらが挿入された順序で削除される。ステップ148では、ルーチン・ディスパッチャ32が、それぞれのイベントによってトリガされるバイトコード・ルーチンの部分集合を識別するために、イベントのタイプおよび/またはパラメータに従って、トリガ条件を評価する。一連のステップ150〜152〜154では、ディスパッチャ32がそのようなルーチンそれぞれを選択し、実行のために、それをBTVM34に送る。
[0052]図9は、バイトコード・ルーチンを実行するときにバイトコード変換仮想マシン34によって行われる例示的な一連のステップを示す。いくつかの実施形態では、BTVM34は、仮想プロセッサを備えたコンピュータ・システムのソフトウェア・エミュレーションと、仮想メモリと、1組の仮想レジスタとを備える。BTVM34の仮想プロセッサは、バイトコード命令を、そのネイティブな命令セットとして、考える。しかし、バイトコード命令は、セキュリティ・アプリケーション40がその上で動作するプラットフォームのネイティブな命令ではないので、バイトコード命令を実行することは、各バイトコード命令を、それぞれのプラットフォームのプロセッサにネイティブな一連のプロセッサ命令に変換することを含む。いくつかの実施形態では、BTVM34は、バイトコード命令を1つずつ解釈して実行するように構成されたコード・インタープリタを備える。別の実施形態では、BTVM34は、バイトコード・ルーチンのすべての命令を一緒にネイティブなコード・ルーチンにコンパイルするように構成された実行時(JIT)コンパイラを含み得る。コンパイルされたネイティブなコード・ルーチンは、次に、全体として実行される。いくつかの実施形態では、BTVM34は、プロセッサ12のネイティブな命令セットとして符号化された関数(たとえば、クラス)のライブラリを備える。そのような場合に、バイトコード命令を解釈することは、バイトコード命令に従って適切な関数を識別すること、および、それぞれの関数を実行することを備え得る。例示的なバイトコード変換仮想マシンは、とりわけ、Java(登録商標)およびLua(登録商標)仮想マシンを含む。
[0053]いくつかの実施形態では、BTVM34の仮想メモリ空間は、いくつかの領域に分割され、それぞれの領域が別個のタイプの変数を記憶する。いくつかの変数は、LOCALタイプであり得、そのような変数の値は、それぞれのルーチンまたはバイトコード・セクションの現在の例に対して一意的であり得る。他の変数は、STATICタイプ(特定のルーチン・タイプに専用であり、その特定のタイプのルーチンのすべてのコード・セクションにわたり共有され、それらの値を、同じルーチン/バイトコード・セクションの複数のインスタンスにわたり維持する)であり得る。他の変数は、GLOBALタイプ(すべてのバイトコード・ルーチンおよびインスタンスにわたり共有される)であり得る。BTVM34のいくつかの実施形態は、また、PROCESSタイプの変数を用いて動作し得、これらの変数は、ルーチン−プロセスのタプルに一意的に付属され得、その特定のタイプのルーチンのすべてのコード・セクションにわたって共有され、同じルーチン/バイトコード・セクションの複数のインスタンスにわたってそれらの値を維持するが、あるプロセスと別のプロセスとでは異なる。BTVM34の仮想メモリが、PROCESSタイプの変数を記憶するように構成されるときには、そのような変数は、イベント・インターセプタ28a〜cによってモニタされるすべてのプロセスに対して、いったん初期化され、それぞれのプロセスの終了の際に消去され得る。
[0054]いくつかの実施形態では、セキュリティ・アプリケーション40は、BTVM34によって用いられるために、スレッド・プールを維持する。ある例では、このスレッド・プールは、プロセッサ12の論理CPUのカウントと同数のスレッドを備える。スレッド・プールのすべてのスレッドは、同じ優先レベルに設定され得る。バイトコード・ルーチンをディスパッチするときには、ディスパッチャ32が次の利用可能なスレッドを待機することがあり得る。BTVM34の別個のインスタンスが、よって、任意のメモリ・コンテキストにおいて、独立かつ同時に、動作することがあり得る。いくつかの実施形態では、BTVM34のインスタンスがアウト・オブ・オーダー実行する場合があり、すなわち、それらをトリガしたイベントがイベント・キュー31に挿入されたのとは必ずしも同じ順序ではなく、動作することがあり得る。
[0055]ルーチン・インジケータ46(たとえば、バイトコード・ルーチンのメモリ・アドレス)をルーチン・ディスパッチャ32から受け取ることに応答して、BTVM34は、バイトコード・セクション74にアクセスし得る。一般性を失うことなく、次に図解されるステップは、BTVM34が各バイトコード命令を順に解釈して実行する実施形態を記述する。当業者であれば、本明細書での説明を、実行時(JIT)コンパイルを用いる実施形態の動作を記述するように適合させ得る、ということを理解するであろう。一連のステップ166〜168では、BTVM34は、バイトコード命令を解釈して、それぞれの命令によって指示された1組の動作を実行し得る。
[0056]いくつかのバイトコード命令が、たとえばOS30のある関数によって提供される機能など、複雑な機能をコールする。BTVM34の複雑性を最小に保ち、BTVM34の表面への攻撃を減少させるために、いくつかの実施形態が、ヘルパ・モジュール36(図3)として実現されるアプリケーション・プログラム・インターフェース(API)を介して、そのような機能をBTVM34に提供する。モジュール36は、BTVM34を支援するように構成された1組のヘルパ関数を備え、とりわけ、ファイルの存在を確認する、メモリ・セクションのコンテンツとマルウェアを示すシグネチャとを一致させることを試みる、ファイルを数え上げる、および評価スコアを設定するなどのタスクを行う。現在のバイトコード命令がヘルパ関数をコールすると、ステップ170において、バイトコード変換VM34が、APIコール48をヘルパ・モジュール36に発行する。ヘルパ・モジュール36は、さらに、OS30とのインターフェースを有し得る。
[0057]いくつかの実施形態では、ヘルパ・モジュール36が、バイトコード変換VM34からのAPIコールに応答して、新たなイベントをイベント・キュー31に追加する機能を有することがあり得る(たとえば、図3を参照のこと)。あるそのような例では、バイトコード・ルーチンの第1の部分は、同期的に処理される。次に、BTVM34が、新たなイベントをキュー31に追加するようにヘルパ・モジュール36にコールすることにより、それぞれのルーチンの第2の部分を後で(非同期的な態様で)実行させ得るが、ここで、新たなイベントは、ルーチンの第2の部分の実行をトリガするように選ばれる。別の例では、説明される機構が、バイトコード・ルーチンのカスケードを実行するのに用いられ得、この場合に、各ルーチンは、新たなイベントをイベント・キュー31に挿入するようにヘルパ・モジュール36に命令することによって、カスケードの次の構成要素の実行を決定する。
[0058]いくつかのバイトコード・ルーチンは、たとえばエンジン38へのまたはヘルパ・モジュール36へのAPIコールを介して、評価インジケータ50を挙動評価エンジン38に出力する。評価インジケータ50は、特定のモニタ対象のオブジェクト(たとえば、プロセス)が悪意を有するものである蓋然性を示す評価スコアを含み得る。別の例示的な評価インジケータ50は、それぞれのオブジェクトに対して評価エンジン38によって維持される評価スコアに加算されるスコア・インクリメントを備える。さらに別の例示的なインジケータ50は、評決(たとえば、清潔/悪意がある)を含む。いくつかの実施形態では、一連のステップ174〜176が、評価条件が満たされるかどうか(たとえば、スコア・インクリメントが計算されたかどうか)を判定し、満たされるときには、インジケータ50を、評価エンジン38に送信する。
[0059]ステップ178は、終了条件が満たされるかどうかを確認する場合があり得るが、満たされないときには、BTVM34は、現在のルーチンの次のバイトコード命令に進み得る(上述したステップ166を参照のこと)。いくつかの実施形態では、ステップ178は、現在のルーチン/バイトコード・セクションの最後のバイトコード命令が実行されたかどうかを判定することを備え得る。いくつかのバイトコード・ルーチンは、最大量の時間にわたって動作するように構成され得るが、そのような場合、ステップ178は、現在のバイトコード・ルーチン/セクションを起動して実行を開始して以後、最大の許容される時間期間が経過したかどうかを判定し得る。別の例示的な終了条件は、それぞれのルーチン/バイトコード・セクションの実行の間にエラーが発生するときは常に、満たされ得る。終了条件が満たされると、ステップ180が、BTVM34の現在のインスタンスを終了させ、それぞれのスレッドをスレッド・プールの中にリリースすることがあり得る。
[0060]いくつかの実施形態では、挙動評価エンジン38が、クライアント・システム10上で動作しているプロセスおよびスレッドなど、モニタ対象であるソフトウェア・エンティティに関する集中化された知識ベースを維持する。そのようなエンティティそれぞれに対して、エンジン38は、認知インジケータ(たとえば、親子関係、コードを注入する処理とそのようなコード・インジェクションの受け手との間の関係、その他)を記憶し得る。評価エンジン38のいくつかの実施形態は、さらに、モニタ対象である各エンティティと関連する1組の評価スコアを記憶する。そのようなスコアのそれぞれは、別個の基準に従って決定され得る(たとえば、各スコアは、特定のバイトコード・ルーチンによってアップデートされる)。いくつかの実施形態では、スコア決定エンジン38は、そのスコアに従って、モニタ対象であるそれぞれのエンティティがコンピュータ・セキュリティ脅威を呈示するかどうかを判定するように構成される。そのような脅威が識別されると、エンジン38は、たとえばその実行を停止させるために、または、それ以外の態様でそれぞれのソフトウェア・オブジェクトを無力化するために、それぞれの悪意あるエンティティに対してアンチマルウェアアクションを行い得る。エンジン38は、さらに、クライアント・システム10のユーザに、および/またはシステム管理者に、警告することがあり得る。
[0061]上述された例示的なシステムおよび方法によると、マルウェアおよびスパイウェアなどのコンピュータ・セキュリティ脅威に対して、クライアント・システムを保護することが可能になる。クライアント・システム上で現に動作しているプロセスおよびスレッドなど、複数の実行可能なエンティティのそれぞれに対して、セキュリティ・アプリケーションが、1組の評価スコアを維持し、この1組の評価スコアとは、それぞれのエンティティが脅威を呈示する蓋然性を示し得る。いくつかの実施形態では、そのようなスコアが、各検出ルーチンに特有の基準に従ってモニタされるエンティティを評価するようにそれぞれが構成される複数の検出ルーチンを実行することに応じて、作成される。検出ルーチンは、様々なコンピュータ・セキュリティ・ヒューリステックを実装し得、すなわち、別々のルーチンが別個のヒューリステックに対応することがあり得る。たとえば、あるルーチンが、この技術分野において挙動シグネチャとして知られる、モニタ対象のエンティティがマルウェアを示す一連のアクションを行うかどうかを判定することがあり得る。検出ルーチンの実行は、特定のトリガ・イベントの発生の検出に応答して、選択的にトリガされ得る。
[0062]本発明のいくつかの実施形態では、検出ルーチンはバイトコードで、すなわち、それぞれのクライアント・システムのプロセッサによって容易に実行可能ではないカスタムの命令セットを用いて、定式化される。その代わりに、検出ルーチンはバイトコード変換仮想マシンの内部で実行されるが、このバイトコード変換仮想マシンは、インタープリテーションまたは実行時コンパイル技術を用いて、それぞれの命令を実行する前に、各バイトコード・ルーチンをそれぞれのプラットフォームのプロセッサにネイティブな1組のプロセッサ命令に変換する。
[0063]従来型のコンピュータ・セキュリティ・システムでは、検出ルーチンは、典型的には、ターゲット・プラットフォームのネイティブなコードに予めコンパイルされ、セキュリティ・アプリケーションの残りのコンポーネントと共にパッケージ化される。そのような構成によると、それぞれの検出ルーチンの最適化された高速の実行が可能になるが、そのような構成は、開発し、最新の状態に維持し、クライアント・コンピュータ・システムで展開することが困難な場合があり得る。たとえば、検出ルーチンにおけるどのような小さな変化にも、または、新たな検出ルーチン/ヒューリステックの導入には、セキュリティ・アプリケーションのコードの大きな部分の再コンパイルと比較的大規模なソフトウェアのアップデート(たとえば、数メガバイト)の展開とが要求される場合があり得る。さらに、アップデートにおけるソフトウェアのバグが、セキュリティ・アプリケーションの全体を潜在的にダウンさせてしまうことがあるため、アップデートには、クライアントに配信される前に、広範囲な検証が要求されるのが典型的である。
[0064]対照的に、バイトコード検出ルーチンの使用により、本発明のいくつかの実施形態が、ソフトウェア・アップデート・プロセスを単純化することに加えて、セキュリティ・ソリューションの市場化されるまでの時間を実質的に短縮させることが可能になる。バイトコード検出ルーチンは、実行中に解釈されコンパイルされるから、セキュリティ・ソリューションの主なコンポーネントとは別個に、開発されクライアントに配信され得る。新たな検出ヒューリステックが、既存のルーチンとは完全に独立に、開発および実装され得る。図10に示されるように、ソフトウェア・アップデートは、合計しても僅かに数百バイトに相当する1組のバイトコード・ルーチン70を備え得るだけである。新たな検出能力を達成するために、それぞれのバイトコード・ルーチンが、ルーチン・データベース26に導入され、事後的に、ルーチン・ディスパッチャ32を用いて登録され得る。また、各検出ルーチンはバイトコード変換仮想マシンのインスタンスの内部で、セキュリティ・アプリケーションの他のコンポーネントとは別々に動作するのであるから、バイトコード・ルーチンの内部に存在するエラーまたはソフトウェアのバグは内包され、他のソフトウェアの動作に影響する蓋然性はより低い。
[0065]本発明のいくつかの実施形態は、検出ルーチンの解釈および/またはJITコンパイルを達成するために、Java(登録商標)またはLua(登録商標)仮想マシンなど広く利用可能なバイトコード変換仮想マシンを用い得る。しかし、アーキテクチャに関する複雑性を最小化し、バイトコード変換仮想マシンの表面攻撃を減少させるために、いくつかの実施形態は、最小の機能だけを付与されたカスタム化された変換仮想マシンを用いる。より複雑な機能が検出ルーチンの内部でコールされるときには、いくつかの実施形態は、別個のヘルパAPIを通じて要求される機能を提供する。
[0066]バイトコード変換仮想マシンの各インスタンスは別個で独立のメモリ・コンテキストの内部で動作し得るから、本発明のいくつかの実施形態は、たとえばコンテナ化によって提供されるのと同じセキュリティ効果を提供し得る。本発明の他の効果として、ポータビリティが含まれる。提案されるセキュリティ・ソリューションのいくつかのコンポーネントは、クライアント・デバイス(たとえば、コンピュータ・システム、スマートホン、その他)の各タイプに対して別々にコンパイルされる必要があり得るが、バイトコード・ルーチンは、アップデートを含む同一の検出ルーチンがすべてのプラットフォームおよびクライアント・デバイスに配信され得るという意味で、プラットフォームとは独立である。
[0067]本発明のこのような効果は、メモリ・オーバヘッドおよび処理速度を犠牲にして達成し得る。予めコンパイルされたソリューションは、特定のプラットフォームの最大のパフォーマンスのために最適化されるが、検出ルーチンの解釈および/またはJITコンパイルが、本発明のいくつかの実施形態を、予めコンパイルされたセキュリティ・アプリケーションよりも低速にする場合があり得る。
[0068]上述した実施形態は、本発明の射程から逸脱することなく、多くの方法で変更され得るということが、当業者には明らかであろう。したがって、本発明の射程は、以下の特許請求の範囲とそれらの法的な均等物とによって決定されるべきである。

Claims (20)

  1. ルーチン・ディスパッチャと、バイトコード変換仮想マシンと、挙動評価エンジンとを形成するように構成された少なくとも1つのハードウェア・プロセッサを備えたクライアント・システムであって、
    前記ルーチン・ディスパッチャは、トリガ・イベントの発生の検出に応答して、複数のアンチマルウェア・バイトコード・ルーチンから、実行のためにアンチマルウェア・バイトコード・ルーチンを選択するように構成され、前記アンチマルウェア・バイトコード・ルーチンは、前記トリガ・イベントに従って選択され、前記トリガ・イベントの前記発生は、前記クライアント・システムの内で実行中であるモニタされるプロセスによって生じ、
    前記バイトコード変換仮想マシンは、前記トリガ・イベントの前記発生がマルウェアを示すかどうかを判定するために、前記アンチマルウェア・バイトコード・ルーチンを実行するように構成され、前記アンチマルウェア・バイトコード・ルーチンを実行することは、
    前記アンチマルウェア・バイトコード・ルーチンの1組のバイトコード命令を一連のネイティブなプロセッサ命令に変換するステップと、
    前記一連のネイティブなプロセッサ命令を実行するステップと
    を含み、
    前記挙動評価エンジンは、前記クライアント・システムがマルウェアを含むかどうかを、前記バイトコード変換仮想マシンが前記アンチマルウェア・バイトコード・ルーチンを実行することの結果に従って判定するように構成された、クライアント・システム。
  2. 請求項1に記載のクライアント・システムであって、前記ルーチン・ディスパッチャは、さらに、前記トリガ・イベントの前記発生の検出に応答して、
    同期条件が満たされるかどうかを、前記トリガ・イベントのタイプに従って判定し、
    前記同期条件が満たされるかどうかの判定に応答して、前記同期条件が満たされるときに、前記バイトコード変換仮想マシンが前記アンチマルウェア・バイトコード・ルーチンの実行を終了するまで、前記モニタされるプロセスに属するコードの実行を中断するように前記ハードウェア・プロセッサを構成し、
    前記同期条件が満たされるかどうかの判定に応答して、前記同期条件が満たされないときに、前記モニタされるプロセスに属するコードの実行を継続するように前記ハードウェア・プロセッサに命令する
    ように構成された、クライアント・システム。
  3. 請求項2に記載のクライアント・システムであって、前記ルーチン・ディスパッチャは、さらに、前記同期条件が満たされるかどうかの判定に応答して、前記同期条件が満たされないときに、前記トリガ・イベントを、後の処理のためにイベント・キューの中に挿入するように構成された、クライアント・システム。
  4. 請求項3に記載のクライアント・システムであって、前記ルーチン・ディスパッチャが、さらに、
    前記イベント・キューから第2のトリガ・イベントを削除し、
    前記イベント・キューからの前記第2のトリガ・イベントの削除に応答して、実行のために第2のアンチマルウェア・バイトコード・ルーチンを選択し、前記第2のアンチマルウェア・バイトコード・ルーチンは、前記第2のトリガ・イベントに従って、前記複数のバイトコード・ルーチンから選択され、
    前記第2のアンチマルウェア・バイトコード・ルーチンの選択に応答して、前記第2のアンチマルウェア・バイトコード・ルーチンのインジケータを、前記バイトコード変換仮想マシンに送信する
    ように構成された、クライアント・システム。
  5. 請求項1に記載のクライアント・システムであって、前記アンチマルウェア・バイトコード・ルーチンを実行するステップは、前記ハードウェア・プロセッサに、前記モニタされるプロセスが1組のアクションを実行したかどうかを判定させる、クライアント・システム。
  6. 請求項1に記載のクライアント・システムであって、前記アンチマルウェア・バイトコード・ルーチンを実行するステップは、前記ハードウェア・プロセッサに、前記トリガ・イベントがマルウェアを示す一連のイベントの一部を形成するかどうかを判定させる、クライアント・システム。
  7. 請求項6に記載のクライアント・システムであって、前記一連のイベントのうちの選択されたイベントは、前記クライアント・システムの内で実行中である別のモニタされるプロセスによって生じ、前記別のモニタされるプロセスは前記モニタされるプロセスと異なる、クライアント・システム。
  8. 請求項1に記載のクライアント・システムであって、前記アンチマルウェア・バイトコード・ルーチンはトリガ条件の符号化を備え、実行のために前記アンチマルウェア・バイトコード・ルーチンを選択するステップは前記トリガ条件が満たされるかどうかを判定するステップを含む、クライアント・システム。
  9. 請求項1に記載のクライアント・システムであって、前記アンチマルウェア・バイトコード・ルーチンはトリガ条件の符号化を備え、前記バイトコード変換仮想マシンは、さらに、前記トリガ条件が満たされるかどうかの判定結果に従って、変換のために前記1組のバイトコード命令を選択するように構成された、クライアント・システム。
  10. クライアント・システムの少なくとも1つのハードウェア・プロセッサを用いて、
    トリガ・イベントの発生の検出に応答して、前記トリガ・イベントに従って、複数のバイトコード・ルーチンから、アンチマルウェア・バイトコード・ルーチンを選択するステップであって、前記アンチマルウェア・バイトコード・ルーチンは、前記トリガ・イベントの前記発生がマルウェアを示すかどうかを判定するように構成され、前記トリガ・イベントは、前記クライアント・システムの内で実行中であるモニタされるプロセスによって生じる、ステップと、
    前記アンチマルウェア・バイトコード・ルーチンの選択に応答して、前記アンチマルウェア・バイトコード・ルーチンの1組のバイトコード命令を、一連のネイティブなプロセッサ命令に変換するステップと、
    前記一連のネイティブなプロセッサ命令を実行するステップと、
    前記一連のネイティブなプロセッサ命令の実行の結果に従って、前記クライアント・システムがマルウェアを含むかどうかを判定するステップと
    のそれぞれを実行するステップを含むコンピュータ実施方法。
  11. 請求項10に記載の方法であって、前記トリガ・イベントの前記発生の検出に応答して、
    前記少なくとも1つのハードウェア・プロセッサを用いて、同期条件が満たされるかどうかを、前記トリガ・イベントのタイプに従って判定するステップと、
    前記同期条件が満たされるかどうかの判定に応答して、前記同期条件が満たされるときに、前記一連のネイティブなプロセッサ命令が実行を終了するまで、前記モニタされるプロセスに属するコードの実行を中断するように前記少なくとも1つのハードウェア・プロセッサを構成するステップと、
    前記同期条件が満たされるかどうかの判定に応答して、前記同期条件が満たされないときに、前記少なくとも1つのハードウェア・プロセッサを用いて、前記モニタされるプロセスに属するコードの実行を継続するステップと、
    をさらに含む方法。
  12. 請求項11に記載の方法であって、前記同期条件が満たされるかどうかの判定に応答して、前記同期条件が満たされないときに、前記少なくとも1つのハードウェア・プロセッサを用いて、前記トリガ・イベントを後の処理のためにイベント・キューの中に挿入するステップをさらに含む方法。
  13. 請求項12に記載の方法であって、
    前記少なくとも1つのハードウェア・プロセッサを用いて、前記イベント・キューから第2のトリガ・イベントを削除するステップと、
    前記イベント・キューからの前記第2のトリガ・イベントの削除に応答して、前記少なくとも1つのハードウェア・プロセッサを用いて、実行のために第2のアンチマルウェア・バイトコード・ルーチンを選択するステップであって、前記2のアンチマルウェア・バイトコード・ルーチンは、前記第2のトリガ・イベントに従って、前記複数のバイトコード・ルーチンから選択される、ステップと、
    前記第2のアンチマルウェア・バイトコード・ルーチンの選択に応答して、前記少なくとも1つのハードウェア・プロセッサを用いて、前記第2のアンチマルウェア・バイトコード・ルーチンの1組のバイトコード命令を第2の一連のネイティブなプロセッサ命令に変換するステップと、
    前記少なくとも1つのハードウェア・プロセッサを用いて、前記第2の一連のネイティブなプロセッサ命令を実行するステップと、
    をさらに含む方法。
  14. 請求項10に記載の方法であって、前記一連のネイティブなプロセッサ命令を実行するステップは、前記少なくとも1つのハードウェア・プロセッサに、前記モニタされるプロセスが1組のアクションを実行したかどうかを判定させる、方法。
  15. 請求項10に記載の方法であって、前記一連のネイティブなプロセッサ命令を実行するステップは、前記少なくとも1つのハードウェア・プロセッサに、前記トリガ・イベントが、マルウェアを示す一連のイベントの一部を形成するかどうかを判定させる、方法。
  16. 請求項15に記載の方法であって、前記一連のイベントのうちの選択されたイベントは、前記クライアント・システムの内で実行中である別のモニタされるプロセスによって生じ、前記別のモニタされるプロセスは前記モニタされるプロセスと異なる、方法。
  17. 請求項10に記載の方法であって、前記アンチマルウェア・バイトコード・ルーチンはトリガ条件の符号化を含み、実行のために前記アンチマルウェア・バイトコード・ルーチンを選択するステップは、前記トリガ条件が満たされるかどうかを判定するステップを含む、方法。
  18. 請求項10に記載の方法であって、前記アンチマルウェア・バイトコード・ルーチンはトリガ条件の符号化を含み、
    前記トリガ条件が満たされるかどうかを判定するステップと、
    応答して、前記トリガ条件が満たされるかどうかを判定した結果に従って、変換のために前記1組のバイトコード命令を選択するステップと、
    をさらに含む方法。
  19. クライアント・システムの少なくとも1つのハードウェア・プロセッサによって実行されると、前記クライアント・システムに、ルーチン・ディスパッチャと、バイトコード変換仮想マシンと、挙動評価エンジンとを形成させるコンピュータ・プログラムを記憶した非一時的コンピュータ可読媒体であって、
    前記ルーチン・ディスパッチャは、トリガ・イベントの発生の検出に応答して、前記トリガ・イベントに従って、複数のアンチマルウェア・バイトコード・ルーチンから、実行のためにアンチマルウェア・バイトコード・ルーチンを選択するように構成され、前記アンチマルウェア・バイトコード・ルーチンは、前記トリガ・イベントの前記発生がマルウェアを指示するかどうかを判定するように構成され、前記トリガ・イベントは、前記クライアント・システムの内で実行中であるモニタされるプロセスによって生じ、
    前記バイトコード変換仮想マシンは、前記アンチマルウェア・バイトコード・ルーチンを実行するように構成され、前記アンチマルウェア・バイトコード・ルーチンを実行することは、
    前記アンチマルウェア・バイトコード・ルーチンの1組のバイトコード命令を一連のネイティブなプロセッサ命令に変換することと、
    前記一連のネイティブなプロセッサ命令を実行することと
    を含み、
    前記挙動評価エンジンは、前記クライアント・システムがマルウェアを含むかどうかを、前記バイトコード変換仮想マシンが前記アンチマルウェア・バイトコード・ルーチンを実行することの結果に従って判定するように構成された、非一時的コンピュータ可読媒体。
  20. アンチマルウェア・バイトコード・ルーチンを記憶した非一時的コンピュータ可読媒体であって、該アンチマルウェア・バイトコード・ルーチンは、少なくとも1つのハードウェア・プロセッサを備えたクライアント・システム上に形成されたバイトコード変換仮想マシンによって実行可能であり、前記アンチマルウェア・バイトコード・ルーチンの実行により、前記少なくとも1つのハードウェア・プロセッサに、前記クライアント・システム内でのトリガ・イベントの発生がマルウェアを示すかどうかを判定させ、前記アンチマルウェア・バイトコード・ルーチンを実行することは、
    前記アンチマルウェア・バイトコード・ルーチンの1組のバイトコード命令を、一連のネイティブなプロセッサ命令に変換することと、
    前記一連のネイティブなプロセッサ命令を実行することと
    を含み、
    前記クライアント・システムは、ルーチン・ディスパッチャと、挙動評価エンジンとをさらに備え、
    前記ルーチン・ディスパッチャは、前記トリガ・イベントの前記発生の検出に応答して、前記トリガ・イベントに従って、前記複数のバイトコード・ルーチンから、前記アンチマルウェア・バイトコード・ルーチンを選択するように構成され、
    前記挙動評価エンジンは、前記バイトコード変換仮想マシンが前記アンチマルウェア・バイトコード・ルーチンを実行することの結果に従って、前記クライアント・システムがマルウェアを含むかどうかを判定するように構成された、非一時的コンピュータ可読媒体。
JP2017564564A 2015-06-12 2016-06-07 インタープリタ仮想マシンを用いた挙動マルウェア検出 Active JP6706273B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/738,548 2015-06-12
US14/738,548 US9460284B1 (en) 2015-06-12 2015-06-12 Behavioral malware detection using an interpreter virtual machine
PCT/EP2016/062882 WO2016198392A1 (en) 2015-06-12 2016-06-07 Behavioral malware detection using an interpreter virtual machine

Publications (2)

Publication Number Publication Date
JP2018517985A true JP2018517985A (ja) 2018-07-05
JP6706273B2 JP6706273B2 (ja) 2020-06-03

Family

ID=56137286

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017564564A Active JP6706273B2 (ja) 2015-06-12 2016-06-07 インタープリタ仮想マシンを用いた挙動マルウェア検出

Country Status (12)

Country Link
US (1) US9460284B1 (ja)
EP (1) EP3308315B1 (ja)
JP (1) JP6706273B2 (ja)
KR (1) KR102206115B1 (ja)
CN (1) CN107690645B (ja)
AU (1) AU2016274532B2 (ja)
CA (1) CA2986321C (ja)
ES (1) ES2857102T3 (ja)
HK (1) HK1246905A1 (ja)
IL (1) IL255802B (ja)
RU (1) RU2679175C1 (ja)
WO (1) WO2016198392A1 (ja)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9727729B2 (en) * 2014-06-24 2017-08-08 Virsec Systems, Inc. Automated code lockdown to reduce attack surface for software
WO2017023773A1 (en) * 2015-07-31 2017-02-09 Digital Guardian, Inc. Systems and methods of protecting data from injected malware
US10929537B2 (en) * 2015-07-31 2021-02-23 Digital Guardian, Inc. Systems and methods of protecting data from malware processes
US11170104B1 (en) * 2015-08-21 2021-11-09 Amazon Technologies, Inc. Identifying attacks on file systems
US10033747B1 (en) * 2015-09-29 2018-07-24 Fireeye, Inc. System and method for detecting interpreter-based exploit attacks
US20210026950A1 (en) * 2016-03-07 2021-01-28 Crowdstrike, Inc. Hypervisor-based redirection of system calls and interrupt-based task offloading
US9734337B1 (en) * 2017-01-24 2017-08-15 Malwarebytes Inc. Behavior-based ransomware detection
US11223649B2 (en) 2018-05-06 2022-01-11 Nec Corporation User-added-value-based ransomware detection and prevention
JP7069399B2 (ja) * 2018-07-18 2022-05-17 ビットディフェンダー アイピーアール マネジメント リミテッド コンピュータセキュリティインシデントを報告するためのシステムおよび方法
US10846088B2 (en) * 2018-08-21 2020-11-24 Arm Limited Control of instruction execution in a data processor
US11880422B2 (en) 2019-02-04 2024-01-23 Cloudflare, Inc. Theft prevention for sensitive information
US10452868B1 (en) * 2019-02-04 2019-10-22 S2 Systems Corporation Web browser remoting using network vector rendering
US11314863B2 (en) 2019-03-27 2022-04-26 Webroot, Inc. Behavioral threat detection definition and compilation
US11481486B2 (en) * 2019-03-27 2022-10-25 Webroot Inc. Behavioral threat detection engine
US11080391B2 (en) 2019-03-27 2021-08-03 Webroot Inc. Behavioral threat detection definition and compilation
US11080394B2 (en) * 2019-03-27 2021-08-03 Webroot Inc. Behavioral threat detection virtual machine
RU2711041C1 (ru) * 2019-05-14 2020-01-14 федеральное государственное казенное военное образовательное учреждение высшего образования "Краснодарское высшее военное училище имени генерала армии С.М. Штеменко" Министерства обороны Российской Федерации Способ анализа программного обеспечения на отсутствие недекларированных функциональных возможностей
CN111061538A (zh) * 2019-11-14 2020-04-24 珠海金山网络游戏科技有限公司 一种多Lua虚拟机内存优化方法及其系统
WO2024034841A1 (ko) * 2022-08-12 2024-02-15 삼성전자주식회사 지정된 이벤트에 기반하여 파일을 컴파일하기 위한 전자 장치 및 그 방법

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100529416B1 (ko) * 1996-01-24 2006-01-27 선 마이크로시스템즈 인코퍼레이티드 스택기반컴퓨터를위한명령폴딩방법및장치
US6295643B1 (en) * 1998-12-10 2001-09-25 International Business Machines Corporation Method and apparatus for improving java virtual machine performance using persistent execution information
JPWO2004075060A1 (ja) * 2003-02-21 2006-06-01 田部井 光 コンピュータウィルス判断方法
GB0525902D0 (en) * 2005-12-20 2006-02-01 Nokia Corp Signal message decompressor
US7949848B2 (en) * 2007-03-08 2011-05-24 Arm Limited Data processing apparatus, method and computer program product for reducing memory usage of an object oriented program
CN101373502B (zh) * 2008-05-12 2012-06-20 公安部第三研究所 基于Win32平台下病毒行为的自动化分析系统
US8572740B2 (en) * 2009-10-01 2013-10-29 Kaspersky Lab, Zao Method and system for detection of previously unknown malware
US8566943B2 (en) * 2009-10-01 2013-10-22 Kaspersky Lab, Zao Asynchronous processing of events for malware detection
CN102598017B (zh) * 2009-11-13 2016-03-09 爱迪德技术有限公司 提高Java字节码的防窜改能力的系统和方法
RU2430411C1 (ru) * 2010-03-02 2011-09-27 Закрытое акционерное общество "Лаборатория Касперского" Система и способ обнаружения вредоносного программного обеспечения
US9032526B2 (en) * 2011-05-12 2015-05-12 Microsoft Technology Licensing, Llc Emulating mixed-code programs using a virtual machine instance
US20130152200A1 (en) * 2011-12-09 2013-06-13 Christoph Alme Predictive Heap Overflow Protection
US8918881B2 (en) * 2012-02-24 2014-12-23 Appthority, Inc. Off-device anti-malware protection for mobile devices
US8881291B2 (en) * 2012-09-25 2014-11-04 Oracle International Corporation System and method for inhibiting the processing of new code modules by an outdated runtime environment
RU2536664C2 (ru) * 2012-12-25 2014-12-27 Закрытое акционерное общество "Лаборатория Касперского" Система и способ автоматической модификации антивирусной базы данных
US10114948B2 (en) 2013-03-15 2018-10-30 Mcafee, Llc Hypervisor-based buffer overflow detection and prevention
RU2653985C2 (ru) 2013-06-28 2018-05-15 Закрытое акционерное общество "Лаборатория Касперского" Способ и система обнаружения вредоносного программного обеспечения путем контроля исполнения программного обеспечения запущенного по сценарию

Also Published As

Publication number Publication date
IL255802B (en) 2021-01-31
JP6706273B2 (ja) 2020-06-03
US9460284B1 (en) 2016-10-04
CA2986321A1 (en) 2016-12-15
EP3308315B1 (en) 2020-12-09
WO2016198392A1 (en) 2016-12-15
KR102206115B1 (ko) 2021-01-22
IL255802A (en) 2018-01-31
CN107690645B (zh) 2021-07-16
CN107690645A (zh) 2018-02-13
AU2016274532A1 (en) 2017-12-07
KR20180018531A (ko) 2018-02-21
AU2016274532B2 (en) 2020-08-20
HK1246905A1 (zh) 2018-09-14
ES2857102T3 (es) 2021-09-28
CA2986321C (en) 2021-09-28
EP3308315A1 (en) 2018-04-18
RU2679175C1 (ru) 2019-02-06

Similar Documents

Publication Publication Date Title
JP6706273B2 (ja) インタープリタ仮想マシンを用いた挙動マルウェア検出
US10949247B2 (en) Systems and methods for auditing a virtual machine
KR102297133B1 (ko) 비동기적 인트로스펙션 예외를 이용한 컴퓨터 보안 시스템들 및 방법들
US9202046B2 (en) Systems and methods for executing arbitrary applications in secure environments
US9323931B2 (en) Complex scoring for malware detection
US10140448B2 (en) Systems and methods of asynchronous analysis of event notifications for computer security applications
JP2018524756A (ja) 複数のソフトウェアエンティティにわたって悪意あるビヘイビアを追跡するためのシステムおよび方法
US10860716B2 (en) Detecting malware concealed by delay loops of software programs
US9596261B1 (en) Systems and methods for delivering context-specific introspection notifications
US9536084B1 (en) Systems and methods for delivering event-filtered introspection notifications
US9531735B1 (en) Systems and methods for delivering introspection notifications from a virtual machine
US11556645B2 (en) Monitoring control-flow integrity

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181213

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190814

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190913

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20191212

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200128

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200420

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200515

R150 Certificate of patent or registration of utility model

Ref document number: 6706273

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250