(57)【特許請求の範囲】
【請求項１】
ルーチン・ディスパッチャと、バイトコード変換仮想マシンと、挙動評価エンジンとを形成するように構成された少なくとも１つのハードウェア・プロセッサを備えたクライアント・システムであって、
前記ルーチン・ディスパッチャは、トリガ・イベントの発生の検出に応答して、複数のアンチマルウェア・バイトコード・ルーチンから、実行のためにアンチマルウェア・バイトコード・ルーチンを選択するように構成され、前記アンチマルウェア・バイトコード・ルーチンは、前記トリガ・イベントに従って選択され、前記トリガ・イベントの前記発生は、前記クライアント・システムの内で実行中であるモニタされるプロセスによって生じ、
前記バイトコード変換仮想マシンは、前記トリガ・イベントの前記発生がマルウェアを示すかどうかを判定するために、前記アンチマルウェア・バイトコード・ルーチンを実行するように構成され、前記アンチマルウェア・バイトコード・ルーチンを実行することは、
前記アンチマルウェア・バイトコード・ルーチンの１組のバイトコード命令を一連のネイティブなプロセッサ命令に変換するステップと、
前記一連のネイティブなプロセッサ命令を実行するステップと
を含み、
前記挙動評価エンジンは、前記クライアント・システムがマルウェアを含むかどうかを、前記バイトコード変換仮想マシンが前記アンチマルウェア・バイトコード・ルーチンを実行することの結果に従って判定するように構成され、前記ルーチン・ディスパッチャは、さらに、前記トリガ・イベントの前記発生の検出に応答して、
同期条件が満たされるかどうかを、前記トリガ・イベントのタイプに従って判定し、
前記同期条件が満たされるかどうかの判定に応答して、前記同期条件が満たされるときに、前記バイトコード変換仮想マシンが前記アンチマルウェア・バイトコード・ルーチンの実行を終了するまで、前記モニタされるプロセスに属するコードの実行を中断するように前記ハードウェア・プロセッサを構成し、
前記同期条件が満たされるかどうかの判定に応答して、前記同期条件が満たされないときに、前記モニタされるプロセスに属するコードの実行を継続するように前記ハードウェア・プロセッサに命令する
ように構成された、クライアント・システム。
【請求項２】
請求項１に記載のクライアント・システムであって、前記ルーチン・ディスパッチャは、さらに、前記同期条件が満たされるかどうかの判定に応答して、前記同期条件が満たされないときに、前記トリガ・イベントを、後の処理のためにイベント・キューの中に挿入するように構成された、クライアント・システム。
【請求項３】
請求項２に記載のクライアント・システムであって、前記ルーチン・ディスパッチャが、さらに、
前記イベント・キューから第２のトリガ・イベントを削除し、
前記イベント・キューからの前記第２のトリガ・イベントの削除に応答して、実行のために第２のアンチマルウェア・バイトコード・ルーチンを選択し、前記第２のアンチマルウェア・バイトコード・ルーチンは、前記第２のトリガ・イベントに従って、前記複数のバイトコード・ルーチンから選択され、
前記第２のアンチマルウェア・バイトコード・ルーチンの選択に応答して、前記第２のアンチマルウェア・バイトコード・ルーチンのインジケータを、前記バイトコード変換仮想マシンに送信する
ように構成された、クライアント・システム。
【請求項４】
ルーチン・ディスパッチャと、バイトコード変換仮想マシンと、挙動評価エンジンとを形成するように構成された少なくとも１つのハードウェア・プロセッサを備えたクライアント・システムであって、
前記ルーチン・ディスパッチャは、トリガ・イベントの発生の検出に応答して、複数のアンチマルウェア・バイトコード・ルーチンから、実行のためにアンチマルウェア・バイトコード・ルーチンを選択するように構成され、前記アンチマルウェア・バイトコード・ルーチンは、前記トリガ・イベントに従って選択され、前記トリガ・イベントの前記発生は、前記クライアント・システムの内で実行中であるモニタされるプロセスによって生じ、
前記バイトコード変換仮想マシンは、前記トリガ・イベントの前記発生がマルウェアを示すかどうかを判定するために、前記アンチマルウェア・バイトコード・ルーチンを実行するように構成され、前記アンチマルウェア・バイトコード・ルーチンを実行することは、
前記アンチマルウェア・バイトコード・ルーチンの１組のバイトコード命令を一連のネイティブなプロセッサ命令に変換するステップと、
前記一連のネイティブなプロセッサ命令を実行するステップと
を含み、
前記挙動評価エンジンは、前記クライアント・システムがマルウェアを含むかどうかを、前記バイトコード変換仮想マシンが前記アンチマルウェア・バイトコード・ルーチンを実行することの結果に従って判定するように構成され、前記アンチマルウェア・バイトコード・ルーチンを実行するステップは、前記ハードウェア・プロセッサに、前記トリガ・イベントがマルウェアを示す一連のイベントの一部を形成するかどうかを判定させ、前記一連のイベントのうちの選択されたイベントは、前記クライアント・システムの内で実行中である別のモニタされるプロセスによって生じ、前記別のモニタされるプロセスは前記モニタされるプロセスと異なる、クライアント・システム。
【請求項５】
請求項１から４のうちの何れか一項に記載のクライアント・システムであって、前記アンチマルウェア・バイトコード・ルーチンを実行するステップは、前記ハードウェア・プロセッサに、前記モニタされるプロセスが１組のアクションを実行したかどうかを判定させる、クライアント・システム。
【請求項６】
請求項１から５のうちの何れか一項に記載のクライアント・システムであって、前記アンチマルウェア・バイトコード・ルーチンはトリガ条件の符号化を備え、実行のために前記アンチマルウェア・バイトコード・ルーチンを選択するステップは前記トリガ条件が満たされるかどうかを判定するステップを含む、クライアント・システム。
【請求項７】
請求項１から６のうちの何れか一項に記載のクライアント・システムであって、前記アンチマルウェア・バイトコード・ルーチンはトリガ条件の符号化を備え、前記バイトコード変換仮想マシンは、さらに、前記トリガ条件が満たされるかどうかの判定結果に従って、変換のために前記１組のバイトコード命令を選択するように構成された、クライアント・システム。
【請求項８】
クライアント・システムの少なくとも１つのハードウェア・プロセッサを用いて、
トリガ・イベントの発生の検出に応答して、前記トリガ・イベントに従って、複数のバイトコード・ルーチンから、アンチマルウェア・バイトコード・ルーチンを選択するステップであって、前記アンチマルウェア・バイトコード・ルーチンは、前記トリガ・イベントの前記発生がマルウェアを示すかどうかを判定するように構成され、前記トリガ・イベントは、前記クライアント・システムの内で実行中であるモニタされるプロセスによって生じる、ステップと、
前記アンチマルウェア・バイトコード・ルーチンの選択に応答して、前記アンチマルウェア・バイトコード・ルーチンの１組のバイトコード命令を、一連のネイティブなプロセッサ命令に変換するステップと、
前記一連のネイティブなプロセッサ命令を実行するステップと、
前記一連のネイティブなプロセッサ命令の実行の結果に従って、前記クライアント・システムがマルウェアを含むかどうかを判定するステップと
のそれぞれを実行するステップを含み、前記トリガ・イベントの前記発生の検出に応答して、
前記少なくとも１つのハードウェア・プロセッサを用いて、同期条件が満たされるかどうかを、前記トリガ・イベントのタイプに従って判定するステップと、
前記同期条件が満たされるかどうかの判定に応答して、前記同期条件が満たされるときに、前記一連のネイティブなプロセッサ命令が実行を終了するまで、前記モニタされるプロセスに属するコードの実行を中断するように前記少なくとも１つのハードウェア・プロセッサを構成するステップと、
前記同期条件が満たされるかどうかの判定に応答して、前記同期条件が満たされないときに、前記少なくとも１つのハードウェア・プロセッサを用いて、前記モニタされるプロセスに属するコードの実行を継続するステップと、
をさらに含む方法。
【請求項９】
請求項８に記載の方法であって、前記同期条件が満たされるかどうかの判定に応答して、前記同期条件が満たされないときに、前記少なくとも１つのハードウェア・プロセッサを用いて、前記トリガ・イベントを後の処理のためにイベント・キューの中に挿入するステップをさらに含む方法。
【請求項１０】
請求項９に記載の方法であって、
前記少なくとも１つのハードウェア・プロセッサを用いて、前記イベント・キューから第２のトリガ・イベントを削除するステップと、
前記イベント・キューからの前記第２のトリガ・イベントの削除に応答して、前記少なくとも１つのハードウェア・プロセッサを用いて、実行のために第２のアンチマルウェア・バイトコード・ルーチンを選択するステップであって、前記第２のアンチマルウェア・バイトコード・ルーチンは、前記第２のトリガ・イベントに従って、前記複数のバイトコード・ルーチンから選択される、ステップと、
前記第２のアンチマルウェア・バイトコード・ルーチンの選択に応答して、前記少なくとも１つのハードウェア・プロセッサを用いて、前記第２のアンチマルウェア・バイトコード・ルーチンの１組のバイトコード命令を第２の一連のネイティブなプロセッサ命令に変換するステップと、
前記少なくとも１つのハードウェア・プロセッサを用いて、前記第２の一連のネイティブなプロセッサ命令を実行するステップと、
をさらに含む方法。
【請求項１１】
クライアント・システムの少なくとも１つのハードウェア・プロセッサを用いて、
トリガ・イベントの発生の検出に応答して、前記トリガ・イベントに従って、複数のバイトコード・ルーチンから、アンチマルウェア・バイトコード・ルーチンを選択するステップであって、前記アンチマルウェア・バイトコード・ルーチンは、前記トリガ・イベントの前記発生がマルウェアを示すかどうかを判定するように構成され、前記トリガ・イベントは、前記クライアント・システムの内で実行中であるモニタされるプロセスによって生じる、ステップと、
前記アンチマルウェア・バイトコード・ルーチンの選択に応答して、前記アンチマルウェア・バイトコード・ルーチンの１組のバイトコード命令を、一連のネイティブなプロセッサ命令に変換するステップと、
前記一連のネイティブなプロセッサ命令を実行するステップと、
前記一連のネイティブなプロセッサ命令の実行の結果に従って、前記クライアント・システムがマルウェアを含むかどうかを判定するステップと
のそれぞれを実行するステップを含み、前記一連のネイティブなプロセッサ命令を実行するステップは、前記少なくとも１つのハードウェア・プロセッサに、前記トリガ・イベントが、マルウェアを示す一連のイベントの一部を形成するかどうかを判定させ、前記一連のイベントのうちの選択されたイベントは、前記クライアント・システムの内で実行中である別のモニタされるプロセスによって生じ、前記別のモニタされるプロセスは前記モニタされるプロセスと異なる、方法。
【請求項１２】
請求項８から１１のうちの何れか一項に記載の方法であって、前記一連のネイティブなプロセッサ命令を実行するステップは、前記少なくとも１つのハードウェア・プロセッサに、前記モニタされるプロセスが１組のアクションを実行したかどうかを判定させる、方法。
【請求項１３】
請求項８から１２のうちの何れか一項に記載の方法であって、前記アンチマルウェア・バイトコード・ルーチンはトリガ条件の符号化を含み、実行のために前記アンチマルウェア・バイトコード・ルーチンを選択するステップは、前記トリガ条件が満たされるかどうかを判定するステップを含む、方法。
【請求項１４】
請求項８から１３のうちの何れか一項に記載の方法であって、前記アンチマルウェア・バイトコード・ルーチンはトリガ条件の符号化を含み、
前記トリガ条件が満たされるかどうかを判定するステップと、
応答して、前記トリガ条件が満たされるかどうかを判定した結果に従って、変換のために前記１組のバイトコード命令を選択するステップと、
をさらに含む方法。
【請求項１５】
クライアント・システムの少なくとも１つのハードウェア・プロセッサによって実行されると、前記クライアント・システムに、ルーチン・ディスパッチャと、バイトコード変換仮想マシンと、挙動評価エンジンとを形成させるコンピュータ・プログラムを記憶した非一時的コンピュータ可読媒体であって、
前記ルーチン・ディスパッチャは、トリガ・イベントの発生の検出に応答して、前記トリガ・イベントに従って、複数のアンチマルウェア・バイトコード・ルーチンから、実行のためにアンチマルウェア・バイトコード・ルーチンを選択するように構成され、前記アンチマルウェア・バイトコード・ルーチンは、前記トリガ・イベントの前記発生がマルウェアを指示するかどうかを判定するように構成され、前記トリガ・イベントは、前記クライアント・システムの内で実行中であるモニタされるプロセスによって生じ、
前記バイトコード変換仮想マシンは、前記アンチマルウェア・バイトコード・ルーチンを実行するように構成され、前記アンチマルウェア・バイトコード・ルーチンを実行することは、
前記アンチマルウェア・バイトコード・ルーチンの１組のバイトコード命令を一連のネイティブなプロセッサ命令に変換することと、
前記一連のネイティブなプロセッサ命令を実行することと
を含み、
前記挙動評価エンジンは、前記クライアント・システムがマルウェアを含むかどうかを、前記バイトコード変換仮想マシンが前記アンチマルウェア・バイトコード・ルーチンを実行することの結果に従って判定するように構成され、前記ルーチン・ディスパッチャは、さらに、前記トリガ・イベントの前記発生の検出に応答して、
同期条件が満たされるかどうかを、前記トリガ・イベントのタイプに従って判定し、
前記同期条件が満たされるかどうかの判定に応答して、前記同期条件が満たされるときに、前記バイトコード変換仮想マシンが前記アンチマルウェア・バイトコード・ルーチンの実行を終了するまで、前記モニタされるプロセスに属するコードの実行を中断するように前記ハードウェア・プロセッサを構成し、
前記同期条件が満たされるかどうかの判定に応答して、前記同期条件が満たされないときに、前記モニタされるプロセスに属するコードの実行を継続するように前記ハードウェア・プロセッサに命令する
ように構成された、非一時的コンピュータ可読媒体。
【請求項１６】
クライアント・システムの少なくとも１つのハードウェア・プロセッサによって実行されると、前記クライアント・システムに、ルーチン・ディスパッチャと、バイトコード変換仮想マシンと、挙動評価エンジンとを形成させるコンピュータ・プログラムを記憶した非一時的コンピュータ可読媒体であって、
前記ルーチン・ディスパッチャは、トリガ・イベントの発生の検出に応答して、前記トリガ・イベントに従って、複数のアンチマルウェア・バイトコード・ルーチンから、実行のためにアンチマルウェア・バイトコード・ルーチンを選択するように構成され、前記アンチマルウェア・バイトコード・ルーチンは、前記トリガ・イベントの前記発生がマルウェアを指示するかどうかを判定するように構成され、前記トリガ・イベントは、前記クライアント・システムの内で実行中であるモニタされるプロセスによって生じ、
前記バイトコード変換仮想マシンは、前記アンチマルウェア・バイトコード・ルーチンを実行するように構成され、前記アンチマルウェア・バイトコード・ルーチンを実行することは、
前記アンチマルウェア・バイトコード・ルーチンの１組のバイトコード命令を一連のネイティブなプロセッサ命令に変換することと、
前記一連のネイティブなプロセッサ命令を実行することと
を含み、
前記挙動評価エンジンは、前記クライアント・システムがマルウェアを含むかどうかを、前記バイトコード変換仮想マシンが前記アンチマルウェア・バイトコード・ルーチンを実行することの結果に従って判定するように構成され、前記アンチマルウェア・バイトコード・ルーチンを実行することは、前記ハードウェア・プロセッサに、前記トリガ・イベントがマルウェアを示す一連のイベントの一部を形成するかどうかを判定させ、前記一連のイベントのうちの選択されたイベントは、前記クライアント・システムの内で実行中である別のモニタされるプロセスによって生じ、前記別のモニタされるプロセスは前記モニタされるプロセスと異なる、非一時的コンピュータ可読媒体。
【請求項１７】
アンチマルウェア・バイトコード・ルーチンを記憶した非一時的コンピュータ可読媒体であって、該アンチマルウェア・バイトコード・ルーチンは、少なくとも１つのハードウェア・プロセッサを備えたクライアント・システム上に形成されたバイトコード変換仮想マシンによって実行可能であり、前記アンチマルウェア・バイトコード・ルーチンの実行により、前記少なくとも１つのハードウェア・プロセッサに、前記クライアント・システム内でのトリガ・イベントの発生がマルウェアを示すかどうかを判定させ、前記アンチマルウェア・バイトコード・ルーチンを実行することは、
前記アンチマルウェア・バイトコード・ルーチンの１組のバイトコード命令を、一連のネイティブなプロセッサ命令に変換することと、
前記一連のネイティブなプロセッサ命令を実行することと
を含み、
前記クライアント・システムは、ルーチン・ディスパッチャと、挙動評価エンジンとをさらに備え、
前記ルーチン・ディスパッチャは、前記トリガ・イベントの前記発生の検出に応答して、前記トリガ・イベントに従って、複数のバイトコード・ルーチンから、前記アンチマルウェア・バイトコード・ルーチンを選択するように構成され、
前記挙動評価エンジンは、前記バイトコード変換仮想マシンが前記アンチマルウェア・バイトコード・ルーチンを実行することの結果に従って、前記クライアント・システムがマルウェアを含むかどうかを判定するように構成され、前記アンチマルウェア・バイトコード・ルーチンを実行することは、前記ハードウェア・プロセッサに、前記トリガ・イベントがマルウェアを示す一連のイベントの一部を形成するかどうかを判定させ、前記トリガ・イベントの前記発生は、前記クライアント・システムの内で実行中であるモニタされるプロセスによって生じ、前記一連のイベントのうちの選択されたイベントは、前記クライアント・システムの内で実行中である別のモニタされるプロセスによって生じ、前記別のモニタされるプロセスは前記モニタされるプロセスと異なる、非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本発明は、コンピュータ・システムをマルウェアから保護するためのシステムおよび方法に関する。
【背景技術】
【０００２】
[0002]マルウェアとしても知られている悪意を有するソフトウェアは、世界中の多数のコンピュータ・システムに影響を与える。コンピュータ・ウイルス、ワーム、ルートキット、依頼していないアドウェア、ランサムウェア、およびスパイウェアなどの、その多くの形式で、マルウェアは、数百万のコンピュータ・ユーザに深刻なリスクを与え、コンピュータ・ユーザを、とりわけデータおよび機密情報の損失、なりすまし、生産性損失などに対して脆弱にする。マルウェアは、さらに、あるユーザにとっては、わいせつ、過度に暴力的、いやがらせ、またはそれ以外にも不愉快である素材を、表示させることがあり得る。
【０００３】
[0003]ユーザのコンピュータ・システムに感染しているマルウェアを検出し、さらにはそのようなマルウェアを削除するまたはその他の態様で無力化するために、セキュリティ・ソフトウェアが用いられる場合があり得る。複数のマルウェア検出技術が、この技術分野において知られている。いくつかは、マルウェア・エージェントのコードの断片を、マルウェアを示すシグネチャのライブラリと一致させることに依拠する。他の従来型の方法は、マルウェア・エージェントのマルウェアを示す１組の挙動を検出する。
【０００４】
[0004]マルウェアは、検出アルゴリズムよりも進んだ状態に留まるように、急速に進化する。そのような迅速に変化する脅威に対抗するため、セキュリティ・ソフトウェアの提供者は、たとえば、新たなマルウェアのバージョンを検出するために、たとえば分類子を再訓練することにより、数分から数時間というスケールで検出方法および／またはパラメータを調整するのが典型的である。そのような再訓練に、計算論的なコストを要するのが典型的である。さらに、新たな挙動検出アルゴリズムの導入には、または、既存のものの変更の場合でさえも、それぞれのセキュリティ・ソフトウェアのソース・コードの再コンパイルに加えて、広範な検証が要求されることが典型的である。そうすることではじめて、新たなソフトウェアのバージョンが、たとえばソフトウェア・アップデートとして、クライアントに配信可能になる。対照的に、シグネチャ・ベースの検出システムでは、新たなマルウェア・シグネチャが、シグネチャの既存の組に容易に追加されることが可能である。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
[0005]したがって、絶えず変化するマルウェアの性質に遅れをとらないために、アルゴリズムおよび／またはパラメータを迅速にアップデートすることが可能なアンチマルウェア・ソリューションを開発することに対する強い関心が存在する。
【課題を解決するための手段】
【０００６】
[0006]ある態様によると、クライアント・システムは、ルーチン・ディスパッチャと、バイトコード変換仮想マシンと、挙動評価エンジンとを形成するように構成された少なくとも１つのハードウェア・プロセッサを備える。ルーチン・ディスパッチャは、トリガ・イベントの発生の検出に応答して、複数のアンチマルウェア・バイトコード・ルーチンから、実行のためにアンチマルウェア・バイトコード・ルーチンを選択するように構成され、アンチマルウェア・バイトコード・ルーチンは、トリガ・イベントに従って選択される。トリガ・イベントの発生は、クライアント・システムの内部で実行中であるモニタされるプロセスによって生じる。バイトコード変換仮想マシンは、トリガ・イベントの発生がマルウェアを示すかどうかを判定するために、アンチマルウェア・バイトコード・ルーチンを実行するように構成され、アンチマルウェア・バイトコード・ルーチンを実行するステップは、アンチマルウェア・バイトコード・ルーチンの１組のバイトコード命令を一連のネイティブなプロセッサ命令に変換するステップと、一連のネイティブなプロセッサ命令を実行するステップとを備える。挙動評価エンジンは、クライアント・システムがマルウェアを備えるかどうかを、バイトコード変換仮想マシンがアンチマルウェア・バイトコード・ルーチンを実行する結果に従って判定するように構成される。
【０００７】
[0007]別の態様によると、コンピュータ実装方法は、クライアント・システムの少なくとも１つのハードウェア・プロセッサを用いて、トリガ・イベントの発生の検出に応答して、トリガ・イベントに従って、複数のバイトコード・ルーチンから、アンチマルウェア・バイトコード・ルーチンを選択するステップを備え、アンチマルウェア・バイトコード・ルーチンは、トリガ・イベントの発生がマルウェアを示すかどうかを判定するように構成される。トリガ・イベントは、クライアント・システムの内部で実行中であるモニタされるプロセスによって生じる。この方法は、さらに、クライアント・システムの少なくとも１つのハードウェア・プロセッサを用いて、アンチマルウェア・バイトコード・ルーチンの選択に応答して、アンチマルウェア・バイトコード・ルーチンの１組のバイトコード命令を、一連のネイティブなプロセッサ命令に変換するステップと、一連のネイティブなプロセッサ命令を実行するステップとを備える。この方法は、さらに、クライアント・システムの少なくとも１つのハードウェア・プロセッサを用いて、一連のネイティブなプロセッサ命令の実行の結果に従って、クライアント・システムがマルウェアを備えるかどうかを判定するステップを備える。
【０００８】
[0008]別の態様によると、非一時的コンピュータ可読媒体が、クライアント・システムの少なくとも１つのハードウェア・プロセッサによって実行されると、クライアント・システムに、ルーチン・ディスパッチャと、バイトコード変換仮想マシンと、挙動評価エンジンとを形成させるコンピュータ・プログラムを記憶する。ルーチン・ディスパッチャは、トリガ・イベントの発生の検出に応答して、トリガ・イベントに従って、複数のアンチマルウェア・バイトコード・ルーチンから、実行のためにアンチマルウェア・バイトコード・ルーチンを選択するように構成され、アンチマルウェア・バイトコード・ルーチンは、トリガ・イベントの発生がマルウェアを指示するかどうかを判定するように構成される。トリガ・イベントは、クライアント・システムの内部で実行中であるモニタされるプロセスによって生じる。バイトコード変換仮想マシンは、アンチマルウェア・バイトコード・ルーチンを実行するように構成され、アンチマルウェア・バイトコード・ルーチンを実行するステップは、アンチマルウェア・バイトコード・ルーチンの１組のバイトコード命令を一連のネイティブなプロセッサ命令に変換するステップと、一連のネイティブなプロセッサ命令を実行するステップとを備える。挙動評価エンジンは、クライアント・システムがマルウェアを備えるかどうかを、バイトコード変換仮想マシンがアンチマルウェア・バイトコード・ルーチンを実行する結果に従って判定するように構成される。
【０００９】
[0009]他の態様によると、非一時的なコンピュータ可読媒体が、少なくとも１つのハードウェア・プロセッサを備えたクライアント・システム上に形成されたバイトコード変換仮想マシンによって実行可能なアンチマルウェア・バイトコード・ルーチンを記憶し、ここで、アンチマルウェア・バイトコード・ルーチンの実行により、少なくとも１つのハードウェア・プロセッサに、クライアント・システム内部でのトリガ・イベントの発生がマルウェアを示すかどうかを判定させる。アンチマルウェア・バイトコード・ルーチンの実行は、アンチマルウェア・バイトコード・ルーチンの１組のバイトコード命令を、一連のネイティブなプロセッサ命令に変換するステップと、一連のネイティブなプロセッサ命令を実行するステップとを備える。クライアント・システムは、ルーチン・ディスパッチャと、挙動評価エンジンとをさらに備える。ルーチン・ディスパッチャは、トリガ・イベントの発生の検出に応答して、トリガ・イベントに従って、複数のバイトコード・ルーチンから、アンチマルウェア・バイトコード・ルーチンを選択するように構成される。挙動評価エンジンは、バイトコード変換仮想マシンがアンチマルウェア・バイトコード・ルーチンを実行することの結果に従って、クライアント・システムがマルウェアを備えるかどうかを判定するように構成される。
【００１０】
[0010]本発明の以上の態様および効果は、以下の詳細な説明を読み、下記の図面を参照することにより、より良く理解されるであろう。
【図面の簡単な説明】
【００１１】
【図１】[0011]本発明のいくつかの実施形態によるコンピュータ・セキュリティ脅威（たとえば、マルウェア）に対して保護される例示的なクライアント・システムの図解である。
【図２】[0012]本発明のいくつかの実施形態によるクライアント・コンピュータ・システムの例示的なハードウェア構成の図解である。
【図３】[0013]本発明のいくつかの実施形態によるセキュリティ・アプリケーションの例示的な構造の図解である。
【図４】[0014]Ｗｉｎｄｏｗｓ（登録商標）環境における１組のプロセスの例示的な実行フローの図解である。実線による矢印は、イベント・インターセプタが不在の場合のフローを示す。破線による矢印は、上記実行フローに対する修正を示すが、この修正は、本発明のいくつかの実施形態による複数のイベント・インターセプタの動作によって導入される。
【図５】[0015]本発明のいくつかの実施形態によるマルウェア検出を構成するためにセキュリティ・アプリケーションによって遂行される例示的な一連のステップの図解である。
【図６】[0016]本発明のいくつかの実施形態による例示的なバイトコード・ルーチンの図解である。
【図７】[0017]本発明のいくつかの実施形態によりルーチン・ディスパッチャ（図３）によって遂行される例示的な一連のステップの図解である。
【図８】[0018]本発明のいくつかの実施形態によりイベント・キューを処理するために、ルーチン・ディスパッチャによって遂行される例示的な一連のステップの図解である。
【図９】[0019]本発明のいくつかの実施形態によりバイトコード変換ＶＭ（図３）によって遂行される例示的な一連のステップの図解である。
【図１０】[0020]本発明のいくつかの実施形態による例示的なソフトウェア・アップデート・プロセスの図解である。
【発明を実施するための形態】
【００１２】
[0021]以下の説明では、構造の間について記載されるすべての接続は、直接的な動作的な接続か、または、中間的な構造を介した間接的な動作的な接続であり得る、ということが理解される。１組の要素は、１つまたは複数の要素を含む。ある要素に関するいかなる記載も、少なくとも１つの要素に言及するものと理解される。複数の要素は、少なくとも２つの要素を含む。他に要求されない限りは、どの説明される方法のステップも、必ずしも、特定の図解される順序で行われるとは限らない。第２の要素から導かれる第１の要素（たとえば、データ）は、第２の要素とオプションであるがそれ以外のデータとを処理することによって生成される第１の要素に加えて、第２の要素に等しい第１の要素を含む。あるパラメータに従って判定または判断を下すことは、そのパラメータに従って、および、オプションであるが他のデータに従って、その判定または判断を下すことを含む。他に特定されない限り、ある量／データのインジケータは、その量／データ自体であり得るし、または、その量／データ自体とは異なるインジケータであり得る。コンピュータ・セキュリティとは、データおよび／またはハードウェアへの意図されないもしくは承認されないアクセスに対して、データおよび／またはハードウェアの意図されないもしくは承認されない修正に対して、ならびにデータおよび／またはハードウェアの破壊に対して、ユーザおよび機器を保護することを含む。コンピュータ・プログラムとは、タスクを遂行する一連のプロセッサ命令である。本発明のいくつかの実施形態において説明されるコンピュータ・プログラムは、スタンドアロンのソフトウェア・エンティティまたは他のコンピュータ・プログラムのサブエンティティ（たとえば、サブルーチン、ライブラリ）であり得る。他に特定されない限り、プロセスとは、アプリケーションまたはオペレーティング・システムの一部など、コンピュータ・プログラムの一例であり、少なくとも実行スレッドとそれに割り当てられた仮想メモリ空間とを有することによって特徴付けられるが、ここで、それぞれの仮想メモリ空間のコンテンツは実行可能なコードを含む。プラットフォームという用語は、特定の物理的なまたは仮想化されたハードウェア構成（たとえば、プロセッサの特定モデルまたはファミリを備える）を示すために用いられる。仮想的なプラットフォームは、たとえば仮想化されたプロセッサである仮想化されたハードウェアを備える。本明細書におけるバイトコードという用語は、バイトコード命令が同一の形式で異なる複数のプラットフォームに配信され得るという意味で、コンピュータ・プログラムのマルチプラットフォーム符号化を指す。バイトコード命令とは対照的に、ネイティブなプロセッサ命令は、それぞれのネイティブなプロセッサ命令を実行する物理的または仮想的なプラットフォームに特有の命令セット・アーキテクチャ（ＩＳＡ）の命令を備える。コンピュータ可読媒体とは、導電性ケーブルおよび光ファイバ・リンクなどの通信リンクに加えて、磁気、光学および半導体記憶媒体などの非一時的媒体（たとえば、ハード・ドライブ、光ディスク、フラッシュ・メモリ、ＤＲＡＭ）を含む。いくつかの実施形態によると、本発明は、とりわけ、本明細書で説明される方法を遂行するためのコンピュータ可読媒体符号化命令に加えて、本明細書で説明される方法を遂行するようにプログラムされたハードウェア（たとえば、１つまたは複数のマイクロプロセッサ）を備えるコンピュータ・システムを提供する。
【００１３】
[0022]以下の説明は、必ずしも限定によるのではなく、例示によって、本発明の実施形態を例証する。
[0023]図１は、本発明のいくつかの実施形態によりコンピュータ・セキュリティ脅威から保護されるクライアント・システム１０上で動作している例示的な１組のソフトウェア・オブジェクトを示す。クライアント・システム１０は、コンピュータ・システム（たとえば、エンドユーザ・コンピュータ、コーポレイト・サーバ、その他）を表し得る。他の例示的なクライアント・システム１０は、モバイル・コンピューティング・デバイス（たとえば、ラップトップ、タブレットＰＣ）、通信デバイス（たとえば、スマートホン）、デジタル娯楽機器（テレビ、ゲーム・コンソール、その他）、ウェアラブル・コンピューティング・デバイス（たとえば、スマートウォッチ）、またはプロセッサとメモリとを有し、コンピュータ・セキュリティ保護を必要とするいずれかの他の電子デバイスを含む。
【００１４】
[0024]いくつかの実施形態では、オペレーティング・システム（ＯＳ）３０は、クライアント・システム１０のハードウェアへインターフェースを提供するソフトウェアを備え、１組のソフトウェア・アプリケーション３２ａ〜ｃおよび４０に対するホストとして機能する。ＯＳ３０は、とりわけ、Ｗｉｎｄｏｗｓ（登録商標）、ＭａｃＯＳ（登録商標）、Ｌｉｎｕｘ（登録商標）、ｉＯＳ（登録商標）、またはＡｎｄｒｏｉｄ（登録商標）などの任意の広く利用可能なオペレーティング・システムを備え得る。アプリケーション３２ａ〜ｃは、一般的にユーザ・ソフトウェアを表し、これはたとえば、とりわけ、ワード・プロセシング、画像処理、データベース、ブラウザ、および電子的通信アプリケーションを含み得る。いくつかの実施形態では、セキュリティ・アプリケーション４０が、アプリケーション３２ａ〜ｃと同時に動作し、クライアント・システム１０上で動作しているいずれかのソフトウェア（アプリケーション３２ａ〜ｃおよびＯＳ３０を含めて）がコンピュータ・セキュリティ脅威を呈するかどうかを判定するように、構成される。たとえば、アプリケーション４０は、クライアント・システム１０上で動作しているマルウェア（たとえば、ウイルス、スパイウェア、アドウェア、その他）を検出し得る。アプリケーション４０は、さらに、そのような悪意あるソフトウェアを消去またはそれ以外の態様で無力化し、クライアント・システム１０のユーザまたはシステム管理者に警告するように構成され得る。セキュリティ・アプリケーション４０は、スタンドアロン・プログラムであり得る、または、とりわけ、アンチマルウェア、アンチスパム、およびアンチフロード・コンポーネントを備えたソフトウェア・スイートの一部を形成し得る。セキュリティ・アプリケーション４０の動作は、以下で詳細に説明される。
【００１５】
[0025]図２は、クライアント・システム１０の例示的なハードウェア構成を図解し、ここで、クライアント・システム１０はコンピュータ・システムである。当業者であれば、タブレットＰＣ、携帯電話、スマートウォッチ、その他など、他のデバイスのハードウェア構成が図解される構成と異なる場合があり得るが、本明細書はそのようなデバイスに適合させ得ることを理解するであろう。クライアント・システム１０は、ハードウェア・プロセッサ１２、メモリ・ユニット１４、１組の入力デバイス１６、１組の出力デバイス１８、１組の記憶デバイス２０、および１組のネットワーク・アダプタ２２を含む１組の物理デバイスを備え、これらは、すべてが、コントローラ・ハブ２４によって相互に接続される。
【００１６】
[0026]いくつかの実施形態では、プロセッサ１２は、１組の信号および／またはデータを用いて計算および／または論理演算を実行するように構成された物理デバイス（たとえば、マイクロプロセッサ、半導体基板上に形成されたマルチコア集積回路）を備える。いくつかの実施形態では、そのような論理演算は、メモリ・ユニット１４からプロセッサ１２に、一連のプロセッサ命令（たとえば、マシン・コードまたはそれ以外のタイプのソフトウェア）の形式で、伝送される。メモリ・ユニット１４は、命令を遂行する間にプロセッサ１２によってアクセスまたは生成されるデータ／信号を記憶する揮発性コンピュータ可読媒体（たとえば、ＲＡＭ）を備え得る。入力デバイス１６は、とりわけ、コンピュータ・キーボード、マウス、およびマイクロフォンを含み得るが、ユーザがデータおよび／または命令をクライアント・システム１０に導入することを可能にするそれぞれのハードウェア・インターフェースおよび／またはアダプタを含む。出力デバイス１８は、グラフィック・カードなどのハードウェア・インターフェース／アダプタに加えて、とりわけ、モニタなどの表示デバイスとスピーカとを含み得、クライアント・システム１０がデータをユーザに通信することを可能にする。いくつかの実施形態では、入力デバイス１６と出力デバイス１８とは、タッチスクリーン・デバイスの場合のように、共通のハードウェアを共有することがあり得る。記憶デバイス２０は、プロセッサ命令および／またはデータの不揮発性の記憶、読み出し、および書き込みを可能にするコンピュータ可読媒体を含む。例示的な記憶デバイス２０は、ＣＤおよび／またはＤＶＤディスクおよびドライブなどの取り外し可能な媒体に加えて、磁気および光ディスクと、フラッシュ・メモリ・デバイスとを含む。１組のネットワーク・アダプタ２２により、クライアント・システム１０が、ネットワーク（たとえば、ローカル・エリア・ネットワーク、ワイヤレス・ネットワーク、その他）および／または他のデバイス／コンピュータ・システムに接続することが可能になる。コントローラ・ハブ２４は、一般的に、複数のシステム、周辺機器、および／もしくはチップセット・バス、ならびに／またはプロセッサ１２とデバイス１４、１６、１８、２０および２２との間での通信を可能にするすべての他の回路を表す。たとえば、コントローラ・ハブ２２は、プロセッサ１２をメモリ１４に接続するノースブリッジ、および／または、プロセッサ１２をデバイス１６、１８、２０および２２に接続するサウスブリッジを備え得る。
【００１７】
[0027]いくつかの実施形態では、クライアント・システム１０は、仮想プラットフォーム（たとえば、仮想マシン）を動作させるように構成される。そのような構成は、たとえばハイパーバイザなどのハードウェア仮想化技術を用いて、設定され得る。仮想プラットフォームは、仮想化されたハードウェア・コンポーネントを備え得るが、そのような仮想化されたコンポーネントは、それぞれが、少なくとも部分的に、クライアント・システム１０の対応するハードウェア・コンポーネントの機能をエミュレートする。たとえば、仮想プラットフォームは、仮想化されたプロセッサと、仮想化されたメモリ・ユニットと、仮想化された入力／出力デバイスとを含み得る。オペレーティング・システム３０は、アプリケーション３２ａ〜ｃとセキュリティ・アプリケーションとに加えて、それぞれの仮想プラットフォーム上で動作し得、仮想化されたハードウェアと対話する。ソフトウェアは、それぞれのプラットフォームの仮想化されたプロセッサを実行のために用いるときに、仮想プラットフォーム上で動作する、と称される。
【００１８】
[0028]図３は、本発明のいくつかの実施形態によるセキュリティ・アプリケーション４０の例示的なコンポーネントを示す。セキュリティ・アプリケーション４０は、ルーチン・ディスパッチャ３２、挙動評価エンジン３８、およびディスパッチャ３２と評価エンジン３８とに接続されたバイトコード変換仮想マシン（ＢＴＶＭ）３４を備える。いくつかの実施形態では、アプリケーション４０は、さらに、ＢＴＶＭ３４および／または評価エンジン３８に接続されたヘルパ・モジュール３６を備える。ルーチン・ディスパッチャ３２は、さらに、以下で詳述されるように、イベント・キュー３１を管理し得る。
【００１９】
[0029]いくつかの実施形態では、ルーチン・ディスパッチャ３２は、１組のイベント通知４２を、クライアント・システム１０上で動作している様々なソフトウェア・オブジェクトの内部にインストールされた１組のイベント・インターセプタ２８ａ〜ｃから、受け取る。イベント通知４２は、このようにして、ディスパッチャ３２に、ソフトウェアの実行の間の様々なイベントの発生について、知らせることがあり得る。例示的な通知されたイベントは、とりわけ、プロセスまたはスレッドの作成、コード・インジェクション、システム・コール、新たなディスク・ファイルを作成しようとする試み、既存のディスク・ファイルへの書き込みの試み、システム・レジストリ・キーを編集しようとする試み、および特定のメモリ・セクションへの書き込みの試みを含み得る。通知されたイベントのうちのいくつかは、マルウェアを指示するものであり得る。他のイベントは、それ自体ではセキュリティ脅威を指示するものではないかもしれないが、他のイベントと共に発生するときの潜在的な脅威をシグナリングすることがあり得る。通知４２を受け取ることに応答して、ディスパッチャ３２のいくつかの実施形態は、通知４２の詳細に従って、バイトコード・ルーチンを選択し、通知されたイベントの１組のイベント・パラメータ４７と一緒に、それぞれのバイトコード・ルーチンを実行のためにバイトコード変換ＶＭ３４に送ることがあり得る。それぞれのバイトコード・ルーチンの実行は、評価インジケータ５０を挙動評価エンジン３８に供給し得る。エンジン３８は、複数のそのような評価インジケータ（たとえば、スコア）を維持し得、少なくとも１つのそのようなインジケータがコンピュータ・セキュリティ脅威を指示するときには、警告を発することがあり得る。コンポーネント３２、３４、および３８の動作は、以下で詳細に説明される。
【００２０】
[0030]イベント・インターセプタ２８ａ〜ｃの動作を図解するために、図４は、本発明のいくつかの実施形態による１組のソフトウェア・エンティティ６０ａ〜ｃの例示的な実行フローを示す。単純にするために、選択されているエンティティ６０ａ〜ｂは、Ｗｉｎｄｏｗｓ（登録商標）ＯＳの例において動作しているプロセスであり、たとえばＬｉｎｕｘなど他のオペレーティング・システムのための類似の図面を描くことも、可能である。実線の矢印は、イベント・インターセプタが不在の場合の実行フローを表す。破線の矢印は、本発明のいくつかの実施形態に従って動作しているイベント・インターセプタ２８ａ〜ｃが存在することによるフローの修正を表す。
【００２１】
[0031]例示的なプロセス６０ａは、複数の動的にリンクされたライブラリ（ＤＬＬ）６２ａ〜ｃをロードし、図４の例では、ＤＬＬ６２ｃが、（悪意がある可能性がある）プロセス６０ｂによってプロセス６０ａの中に注入される。プロセス６０ａ（または、そのロードされたＤＬＬのうちの１つ）が、たとえばディスク・ファイルに何かを書き込むために、または、レジストリ・キーを編集するために、何らかのシステム機能に対する命令コールを実行するときには、それぞれの命令が、ＫＥＲＮＥＬ３２．ＤＬＬまたはＮＴＤＬＬ．ＤＬＬなどのユーザモードＡＰＩをコールする。図４の例では、それぞれのユーザモードＡＰＩコールが、ユーザレベルのイベント・インターセプタ２８ａによって、インターセプトされる。そのようなインターセプションは、とりわけ、ＤＬＬインジェクションまたはフッキングなどの方法によって、達成され得る。フッキングとは、ソフトウェア・コンポーネントの間で渡される関数コール、メッセージ、またはイベントをインターセプトする方法に対して、この技術分野で一般的に用いられる用語である。ある例示的なフッキング方法は、第２の関数に実行をリダイレクトする命令（この場合には、イベント・インターセプタ２８ａ）を挿入することによって、ターゲット関数のエントリ・ポイントを変更することを備える。そのようなフッキングの後では、第２の関数が、代わりに、または、ターゲット関数の前に、実行され得る。図４の例では、セキュリティ・アプリケーション４０が、アプリケーション４０のコンポーネントに実行をリダイレクトするようにそれぞれの関数に命令するために、ＫＥＲＮＥＬ３２．ＤＬＬおよび／またはＮＴＤＬＬ．ＤＬＬライブラリの一定の関数の中にフックすることがあり得る。こうして、アプリケーション４０は、プロセス６０ａがフックされた関数に従って識別される特定のアクションを行おうと試みるときは常に、通知を受けることができるのである。
【００２２】
[0032]実行の典型的なフローでは、エンティティ６０ａによってコールされたユーザモードＡＰＩ関数は、オペレーティング・システムのカーネルに、サービスを要求し得る。いくつかの実施形態では、そのような動作は、ｘ８６プラットフォーム上にＳＹＳＣＡＬＬおよびＳＹＳＥＮＴＥＲなどのシステム・コールを発行することによって行われる。図４の例では、そのようなシステム・コールはイベント・インターセプタ２８ｂによってインターセプトされる。いくつかの実施形態では、そのようなインターセプションは、たとえば、プロセッサ１２のモデルに特有のレジスタ（ＭＳＲ）に記憶される値を変更することによってシステム・コール・ハンドラ・ルーチンを修正することを備え、これが、効果的に、それぞれのハンドラ・ルーチンの実行を、インターセプタ２８ｂに、または、直接的にアプリケーション４０のコンポーネントに、リダイレクトする。このような技術は、この技術分野では、ＭＳＲフッキングとして知られ、ソフトウェア・エンティティが一定のシステム・コールを行おうとするときは常に、セキュリティ・アプリケーション４０が通知されることを可能にし得る。
【００２３】
[0033]システム・コールの後で、プロセッサの制御は、典型的には、ＯＳ３０のカーネルにターン・オーバされる。いくつかの実施形態では、カーベルレベルのイベント・インターセプタ２８ｃは、ＯＳカーネルの一定のアクションをインターセプトし、したがって、評価されたプロセスがマルウェアを示し得る一定の動作を実行しようと試みていると判定するように構成される。そのようなアクションをインターセプトするために、いくつかの実施形態は、ＯＳ３０の中に組み込まれ、ＯＳ３０によって露出される１組のフィルタリング機構を用いることがあり得る。たとえば、Ｗｉｎｄｏｗｓ（登録商標）ＯＳでは、ＦｌｔＲｅｇｉｓｔｅｒＦｉｌｔｅｒが、ファイルを作成する、ファイルを開く、ファイルに書き込みをする、およびファイルを削除するなどの動作をインターセプトするのに用いられ得る。別の例では、イベント・インタープリタ２８ｃが、作成動作をインターセプトするのに、もしくは、オブジェクト−ハンドル動作を複製するのにＯｂＲｅｇｉｓｔｅｒＣａｌｌｂａｃｋを用いることがあり得る、または、新たなプロセスの作成をインターセプトするのにＰｓＳｅｔＣｒｅａｔｅＰｒｏｃｅｓｓＮｏｔｉｆｙＲｏｕｔｉｎｅを用いることがあり得る。さらに別の例では、レジストリ・キー／値を作成および設定するなど、Ｗｉｎｄｏｗｓのレジストリ動作が、ＣｍＲｅｇｉｓｔｅｒＣａｌｌｂａｃｋＥｘを用いてインターセプトされることがあり得る。類似のイベント・フィルタリング機構が、Ｌｉｎｕｘ（登録商標）など他のオペレーティング・システムのために、この技術分野において知られている。特定のイベント／アクションの発生の検出に応答して、イベント・インターセプタ２８が、セキュリティ・アプリケーション４０に通知４２を送信することがあり得る。
【００２４】
[0034]図５は、本発明のいくつかの実施形態に従って、コンピュータ・セキュリティ脅威の検出を設定するためにセキュリティ・アプリケーション４０によって行われる、例示的な一連のステップを示す。図解される一連のステップは、たとえば、セキュリティ・アプリケーション４０が起動されるときに、実行され得る。ステップ１０２では、アプリケーション４０が、たとえば、ＯＳ３０の様々な関数をフックして、ディスパッチ・テーブルのエントリを修正することなどにより、イベント・インターセプタ２８ａ〜ｃをインストールする。そのようなインターセプタをインストールするための様々な方法が、この技術分野において知られている（たとえば、パッチング、ＭＳＲフッキング、コード・インジェクションなど）。ステップ１０４は、イベント・キュー３１を設定するが、これは、通知されたイベントとそのようなイベントが生じた順序とに関する情報を記憶するために、ルーチン・ディスパッチャのいくつかの実施形態によって用いられる。いくつかの実施形態では、イベント・キュー３１は、先入れ先出し（ＦＩＦＯ）キューとして編成される。例示的なキュー３１は、シンプル・リンク、ロックレス、マルチプロデューサ、マルチコンシューマ・キューであり得る。
【００２５】
[0035]一連のステップ１０６〜１０８は、ルーチン・データベース２６（たとえば、図３を参照のこと）にアクセスして、データベース２６からの１組のバイトコード・ルーチンを、メモリのあるセクションにロードする。データベース２６は、クライアント・システム１０のストレージ・デバイス２０上に、または、クライアント・システム１０に通信可能な態様で結合されたコンピュータ可読媒体上に、存在し得る。
【００２６】
[0036]いくつかの実施形態では、データベース２６に記憶される各バイトコード・ルーチンは、１組のバイトコード命令を備え、この１組のバイトコード命令は、ＢＴＶＭ３４によって実行されると、ＢＴＶＭ３４に、コンピュータ・セキュリティに関係する特定のタスクを遂行させる。ある例示的なバイトコード・ルーチンが、特定のソフトウェア・オブジェクト（またはオブジェクトのグループ）が悪意を有するかどうかを判定するために、１組のヒューリステックなテストを適用する。バイトコード・ルーチンの別の例は、クライアント・システム１０において特定の一連のイベント（挙動シグネチャ）の発生がないかを、点検する。必ずしも、一連のイベントのすべてが、同じエンティティによって生じる必要はない。しかし、そのような一連のイベントの発生が、マルウェアを指示することがあり得る。あるそのような例では、悪意を有する活動がエンティティのグループの間で分割され、そのグループの各メンバが、悪意を有する活動の小さな部分を遂行する。そのような分散型の活動に対応するイベントを相関させるように構成されたバイトコード・ルーチンは、したがって、悪意を有するエンティティのグループ全体を検出し得る。
【００２７】
[0037]他の例示的なバイトコード・ルーチンは、簿記および／または統計的なタスク（たとえば、イベントのカウント、イベント・パラメータの関連付け）を行う。他のバイトコード・ルーチンは、ソフトウェアおよび／またはクライアント・システム１０のユーザがＯＳ３０および／またはハードウェア・デバイスと対話する態様を変更し得る（たとえば、ルーチンが、ソフトウェア・オブジェクトがディスクへ書き込むこと、または、ソフトウェア・オブジェクトがネットワーク・アダプタ２２にアクセスすることを阻止し得る）。各バイトコード・ルーチンが、別個の検出方法を実施することがあり得るし、および／または、ヒューリステックでもあり得る。いくつかの実施形態では、各バイトコード・ルーチンが、悪意を有するエージェントの特定のカテゴリ、ファミリ、タイプ、またはバリアントの存在を検出するように構成されることがあり得る。いくつかの別個のルーチンが、悪意を有するエージェントの単独のカテゴリ、ファミリ、タイプ、またはバリアントを検出するのに協力することがあり得る。いくつかの実施形態では、単独のルーチンが、マルウェアのいくつかのカテゴリ、タイプ、ファミリ、またはバリアントの検出に参加することがあり得る。
【００２８】
[0038]図６は、本発明のいくつかの実施形態による例示的なバイトコード・ルーチン７０を示す。ルーチン７０は、トリガ・インジケータ７２とバイトコード・セクション７４とを備える。いくつかの実施形態では、トリガ・インジケータ７２は、それぞれのバイトコード・ルーチンを実行するための１つまたは複数の条件をエンコードする。それぞれの条件は、それぞれのバイトコード・ルーチンが特定のタイプのイベントの発生の検出に応答して実行されるべきかどうかを判定するために、ルーチン・ディスパッチャ３２および／またはＢＴＶＭ３４によって評価され得る。ある例示的な条件は、特定のトリガ表現が真として評価されるのかまたは偽として評価されるのかを判定すること、および、表現が真であるときにその条件が満たされると判定することを要求する。いくつかの実施形態では、それぞれのトリガ表現が、イベント・タイプのインジケータ（たとえば、プロセスの作成、特定のシステム・コール、その他）を備える。トリガ表現が、さらに、経路、ファイル名、プロセスＩＤ、その他など、イベント・パラメータを備えることもあり得る。いくつかの実施形態では、トリガ表現が、ＢＴＶＭ３４および／またはルーチン・ディスパッチャ３２によって用いられる変数を備えることもあり得る（下記の例を参照のこと）。
【００２９】
[0039]トリガ・インジケータ７２が、さらに、それぞれのルーチン／バイトコード・セクションが同期的に実行されるべきかまたは非同期的に実行されるべきかを示すフラグを備えることもあり得る。本明細書において、同期的という用語は、それぞれのルーチンの実行をトリガしたイベントを生成するプロセス（本明細書では、簡単に、トリガ・プロセスと称される）の実行が、それぞれのルーチンが実行される間は中断される、というバイトコード・ルーチンの実行態様を意味するように用いられる。いくつかの実施形態は、それぞれのバイトコード・ルーチンを実行するために、トリガ・プロセスのスレッド実行コンテキストを用いるが、これは、ルーチンの実行の継続時間の間、トリガ・プロセスの実行を、または、少なくとも、それぞれのプロセスのスレッドの実行を、暗黙のうちに（implicitly）中断させる。トリガ・プロセスの実行の中断および／または再開は、それぞれのイベントのインターセプタによって引き起こされ得る。たとえば、インターセプタ２８ａ〜ｃが、ルーチン・ディスパッチャ３２からの信号にのみに応答して、トリガ・プロセスのスレッドをハイジャックすること、および／または、トリガ・プロセスの実行を再開することがあり得る。同期的実行とは対照的に、非同期的実行とは、トリガ・プロセスが実行を継続することが許容されるバイトコード・ルーチンを実行する態様を指し、その場合に、通知をトリガしたイベントは、後の処理のためにイベント・キューの中に挿入される。同期（ｓｙｎｃｈｒｏｎｙ）フラグを各ルーチンまたはバイトコード・セクションと関連させることで、ルーチン・ディスパッチャ３２がどのようにイベント通知を扱うべきかを決定する助けになり得る（さらなる詳細は後述される）。
【００３０】
[0040]いくつかの実施形態において、バイトコード・セクション７４は、ＢＴＶＭ３４にルーチン７０と関連するコンピュータ・セキュリティ・タスクを遂行するように命令する、連続するバイトコード命令７４ａ〜ｃを備える。いくつかの実施形態では、各バイトコード命令は、ＢＴＶＭ３４の仮想プロセッサのネイティブな命令である。例示的な実施形態では、ＢＴＶＭ３４は、Ｊａｖａ（登録商標）仮想マシンであり、バイトコード命令７４ａ〜ｃは、Ｊａｖａ（登録商標）言語の命令である。バイトコード命令がハードウェア・プロセッサ１２によって実行されるために、それぞれのバイトコード命令は、最初に、たとえば、プロセッサ１２の命令セット・アーキテクチャ（ＩＳＡ）の命令などの一連のネイティブなプロセッサ命令に、変換（インタープリットまたはコンパイル）される。そのような変換は、少なくとも部分的にはＢＴＶＭ３４によって、遂行される。セキュリティ・アプリケーション４０が仮想プラットフォーム上で動作するときには、ＢＴＶＭ３４は、各バイトコード命令を、それぞれの仮想プラットフォームの仮想プロセッサにネイティブな一連のプロセッサ命令に変換し得る。
【００３１】
[0041]例示的なバイトコード命令セットは、とりわけ、値を設定し、値を比較し、ジャンプを遂行するためのバイトコード命令と、ループ命令と、（図３のヘルパ・モジュール３６の関数など）外部関数をコールするための命令とを備え得る。いくつかの実施形態では、各バイトコード命令は、動作を示すオペコード・フィールド７６と、少なくとも１つのオペランドを示すオペランド・フィールド７８とを含む。
【００３２】
[0042]いくつかのバイトコード・ルーチンは、複数のセクションを含み得るが、各セクションは、別個のトリガ・インジケータを有し得る。そのような構成では、ルーチンの各セクションは、別個の条件によってトリガされ得る。そのような一例では、バイトコード・ルーチン７０は、ランサムウェア、すなわち、ユーザのファイルを暗号化し、それぞれのファイルを復号する前にユーザが身代金（ランサム）を支払うことを要求する悪意を有するソフトウェアの検出に、狙いを定めることがあり得る。ランサムウェアの例には、とりわけ、ＣｒｙｐｔｏＷａｌｌ、ＣｒｙｐｔｏＬｏｃｋｅｒ、およびＣＴＢ−Ｌｏｃｋｅｒマルウェアが含まれる。そのようなマルウェアは、典型的には、暗号化ＡＰＩをコールし、ユーザのファイルを数え上げ、ランサム・メッセージを表示する。そのようなマルウェアを検出する例示的なバイトコード・ルーチンは、以下の４つのセクションを含み得る：
セクション１：トリガ：ＥｖｅｎｔＴｙｐｅ＝暗号化関数へのコール
出力：静的な変数ＣｒｙｐｔｏＡＰＩＣａｌｌ＝ＴＲＵＥに設定
セクション２：トリガ：［ＥｖｅｎｔＴｙｐｅ＝ＦｉｎｄＦｉｒｓｔＦｉｌｅ  ＡＰＩを用いてファイルを数え上げ、ＣｒｙｐｔｏＡＰＩＣａｌｌ＝ＴＲＵＥ］
Ｄｏ：数え上げられたファイルのファイル拡張子をチェック
出力：数え上げられたファイルがＰＤＦ、ＤＯＣＸ、ＪＰＧなどの拡張子を有する場合には、静的な変数ＲａｎｓｏｍＤｏｃＳｅａｒｃｈ＝ＴＲＵＥに設定
セクション３：トリガ：［ＥｖｅｎｔＴｙｐｅ＝ディスク・ファイルへの書き込みを試みて、ＲａｎｓｏｍＤｏｃＳｅａｒｃｈ＝ＴＲＵＥに設定］
Ｄｏ：ファイルが数え上げられたファイルの中にあるかどうかを判定
出力：ＲａｎｓｏｍＡｃｔｉｖｉｔｙ＝ＴＲＵＥに設定し、評価スコアを３０ポイント増加させる
セクション４：トリガ：［ＥｖｅｎｔＴｙｐｅ＝スクリーン背景の変更およびＲａｎｓｏｍＡｃｔｉｖｉｔｙ＝ＴＲＵＥに設定］
出力：評価スコアを２０ポイント増加させる
上述の例では、セクション１が少なくとも１回動作したときにだけ、セクション２の動作が可能であり、セクション２が動作したときにだけ、セクション３の動作が可能、等である。
【００３３】
[0043]いくつかの実施形態では、各バイトコード・ルーチンは、さらに、初期化セクションと、クリーンアップ・セクションと、エラー・セクションとを備える。初期化セクションは、変数初期化を備え得るが、それぞれのバイトコード・ルーチンがメモリにロードされると、１回実行され得る（たとえば、図５のステップ１０８で）。クリーンアップ・セクションは、それぞれのルーチンの終了時に、実行され得る。エラー・セクションは、それぞれのバイトコード・ルーチンのいずれかの他のセクションの実行の間にエラーが発生する場合に、実行される命令を備え得る。
【００３４】
[0044]いくつかの実施形態では、ステップ１１０（図５）において、セキュリティ・アプリケーション４０が、ロードされたバイトコード・ルーチンをパージングして、イベント・タイプとそれぞれのイベント・タイプによってトリガされるバイトコード・ルーチンとの間の関連を示す関連インジケータ（たとえば、テーブルまたはハッシュ・インデックス）を作成し得る。そのような関連により、ルーチン・ディスパッチャ３２が、一定のイベントの発生の検出に応答して実行するためのルーチンを選択することが可能になる。
【００３５】
[0045]図７は、本発明のいくつかの実施形態に従ってルーチン・ディスパッチャ３２によって行われる例示的な一連のステップを示す。一連のステップ１１２〜１１４は、インターセプタ２８ａ〜ｃからのイベント通知をリッスンする。イベント通知４２を受け取ることに応答して、ステップ１１６は、それぞれの通知されたイベントの１組のイベント・パラメータ４７を決定する。それらのパラメータは、イベントに特有であり得る。いくつかの例示的なイベント・パラメータは、とりわけ、通知されたアクションを行うプロセスまたはスレッド（たとえば、プロセスＩＤ）と、ファイル名と、経路と、メモリ・アドレスと、プロセッサ命令のオペランドとを含む。イベント・パラメータは、インターセプタ２８ａ〜ｃによって決定されイベント通知４２に含まれる場合があり得る、または、通知４２を受け取ることに応答して、ルーチン・ディスパッチャ３２によって決定される場合もあり得る。通知されたイベントが新たなディスク・ファイルを作成する試みである例では、イベント・パラメータは、作成されつつあるファイルの名前を含み得る。それぞれのファイル名は、イベント・インターセプタによって決定され得、通知４２の一部としてルーチン・ディスパッチャ３２に送信され得る。別の例では、特定のアクションを行うプロセスの識別子が、たとえば、現時点で実行されているプロセスを管理するためにＯＳ３０によって用いられるデータ構造をパージングすることによって、直接的にルーチン・ディスパッチャ３２により決定され得る。Ｗｉｎｄｏｗｓ（登録商標）ＯＳでは、各プロセスは、実行プロセス・ブロック（ＥＰＲＯＣＥＳＳ）として表されるが、これは、とりわけ、それぞれのプロセスのスレッドのそれぞれへのハンドルと、ＯＳ３０が複数の実行プロセスからそれぞれのプロセスを識別することを可能にする一意的なプロセスＩＤとを備える。類似のプロセス／スレッド表現は、Ｌｉｎｕｘなどの他のＯＳに対しても利用可能である。
【００３６】
[0046]一定のイベントの発生は、関連するバイトコード・ルーチンの同期的な実行を要求する場合があり得る。そのようなイベントの例は、とりわけ、プロセスの終了、ファイルの削除、およびレジストリ・キーの削除など、それぞれのクライアント・システムに対する実質的および／または不可逆的な結果を伴うイベントを含む。同期的な実行を管理するために、ルーチン・ディスパッチャ３２のいくつかの実施形態が、＜イベント、ルーチン＞というタプルのリストを維持する場合があり、ここで、各タプルは、それぞれのルーチンがそれぞれのイベントの発生に応答して同期して実行されるべきだ、ということを示す。それらのタプルは、静的であり得るが、たとえば、いくつかのルーチン（またはルーチンのセクション）は、それぞれのトリガが発生する度に、同期的な態様で、必ず実行される。静的なタプルは、たとえば、それぞれのルーチン／セクション（上を参照のこと）と関連する同期フラグの値に従って、識別され得る。他の＜イベント、ルーチン＞タプルは、状況的なものであり得、すなわち、一定の事情においてのみ効果を有し得る。そのようなタプルは、たとえば他のイベントその他の発生に応答して、動的に、リストに追加され得る／リストから削除され得る。いくつかの実施形態では、同期処理のために登録されている＜イベント、ルーチン＞タプルのリストは、それぞれのクライアント・システムのユーザ（たとえば、管理者）によって指示される１組のオプションに従って、変動し得る。一般に、バイトコード・ルーチンの同期的な処理／実行は、より高いセキュリティを提供し得るが、いくつかのタスクを低速化させることにより、ユーザ体験に否定的な影響を与えることがあり得る。異なるユーザは、異なるセキュリティ設定を好み得る。いくつかの実施形態では、各設定（たとえば、所望のセキュリティ・レベル）は、＜イベント、ルーチン＞リストの別個の構成に対応し得る。
【００３７】
[0047]ステップ１２０では、ルーチン・ディスパッチャ３２が、現在のイベント通知によって指示されるトリガ・イベントの発生が同期処理を保証するかどうかを、たとえば、それぞれのイベントを備えた少なくとも１つの＜イベント、ルーチン＞タプルが存在するかどうかを判定することによって、判定する。ステップ１２０における判定は、さらに、それぞれのイベントのタイプに従って、通知４２の同期フラグに従って、または、バイトコード・ルーチンのトリガ・インジケータに従って、先に進み得る。
【００３８】
[0048]それぞれのイベントの発生が同期処理を要求しないときには、ステップ１２２において、ルーチン・ディスパッチャ３２が、それぞれのイベントを、イベント・キュー３１の中に挿入する。さらなるステップ１２４は、インターセプタ２８ａ〜ｃに、それぞれのイベント通知を生じさせるプロセス／スレッドの実行を再開するように、シグナリングする。
【００３９】
[0049]現時点で通知されたイベントの発生が同期処理を要求するときには、ステップ１２６において、ルーチン・ディスパッチャ３２が、それぞれのイベントに従って、バイトコード・ルーチンを選択する。ステップ１２６は、現在のイベントのタイプと関連するバイトコード・ルーチンの部分集合を識別するステップと、そのようなルーチンそれぞれのトリガ条件を評価するステップとを含み得る。ステップ１３０は、それぞれのバイトコード・ルーチンを用いて初期化されたＢＴＶＭ３４のインスタンスを起動するステップを備える。いくつかの実施形態は、ＢＴＶＭ３４のそれぞれのインスタンスを実行するために、トリガ・プロセスの実行スレッドを用いる。ステップ１２６が現在のイベント通知によってトリガされる複数のバイトコード・ルーチンを識別するときには、一連のステップ１２８〜１３０が、そのようなルーチンそれぞれに対して、再度実行され得る。
【００４０】
[0050]いくつかの実施形態では、ステップ１３２において、ルーチン・ディスパッチャ３２が、挙動評価エンジン３８および／またはＢＴＶＭ３４から、通知４２を生じさせるプロセスのセキュリティ評価の結果を示す応答を待機する。この評価は、たとえば、それぞれのプロセスが悪意を有するものであるかどうかを示し得る。別の実施形態では、ステップ１３２において、ディスパッチャ３２は、ＢＴＶＭ３４が現在のバイトコード・ルーチンの実行を終了するまで、待機することがあり得る。それぞれのルーチンが実行を終了する、および／または、セキュリティ評価が完了するときには、ディスパッチャ３２は、イベント・インターセプタ２８ａ〜ｃに対して、イベント通知４２を生じさせるプロセスの実行を再開させるように、シグナリングする場合がある。
【００４１】
[0051]図８は、イベント・キュー３１を処理するためにルーチン・ディスパッチャ３２により本発明のいくつかの実施形態に従って遂行される例示的な一連のステップを、図解する。一連のステップ１４２〜１４４は、キュー３１が少なくとも１つの項目を含むまで、待機する。ステップ１４６は、イベントを、キューから削除する。キュー３１がＦＩＦＯ型であるときには、イベントは、それらが挿入された順序で削除される。ステップ１４８では、ルーチン・ディスパッチャ３２が、それぞれのイベントによってトリガされるバイトコード・ルーチンの部分集合を識別するために、イベントのタイプおよび／またはパラメータに従って、トリガ条件を評価する。一連のステップ１５０〜１５２〜１５４では、ディスパッチャ３２がそのようなルーチンそれぞれを選択し、実行のために、それをＢＴＶＭ３４に送る。
【００４２】
[0052]図９は、バイトコード・ルーチンを実行するときにバイトコード変換仮想マシン３４によって行われる例示的な一連のステップを示す。いくつかの実施形態では、ＢＴＶＭ３４は、仮想プロセッサを備えたコンピュータ・システムのソフトウェア・エミュレーションと、仮想メモリと、１組の仮想レジスタとを備える。ＢＴＶＭ３４の仮想プロセッサは、バイトコード命令を、そのネイティブな命令セットとして、考える。しかし、バイトコード命令は、セキュリティ・アプリケーション４０がその上で動作するプラットフォームのネイティブな命令ではないので、バイトコード命令を実行することは、各バイトコード命令を、それぞれのプラットフォームのプロセッサにネイティブな一連のプロセッサ命令に変換することを含む。いくつかの実施形態では、ＢＴＶＭ３４は、バイトコード命令を１つずつ解釈して実行するように構成されたコード・インタープリタを備える。別の実施形態では、ＢＴＶＭ３４は、バイトコード・ルーチンのすべての命令を一緒にネイティブなコード・ルーチンにコンパイルするように構成された実行時（ＪＩＴ）コンパイラを含み得る。コンパイルされたネイティブなコード・ルーチンは、次に、全体として実行される。いくつかの実施形態では、ＢＴＶＭ３４は、プロセッサ１２のネイティブな命令セットとして符号化された関数（たとえば、クラス）のライブラリを備える。そのような場合に、バイトコード命令を解釈することは、バイトコード命令に従って適切な関数を識別すること、および、それぞれの関数を実行することを備え得る。例示的なバイトコード変換仮想マシンは、とりわけ、Ｊａｖａ（登録商標）およびＬｕａ（登録商標）仮想マシンを含む。
【００４３】
[0053]いくつかの実施形態では、ＢＴＶＭ３４の仮想メモリ空間は、いくつかの領域に分割され、それぞれの領域が別個のタイプの変数を記憶する。いくつかの変数は、ＬＯＣＡＬタイプであり得、そのような変数の値は、それぞれのルーチンまたはバイトコード・セクションの現在の例に対して一意的であり得る。他の変数は、ＳＴＡＴＩＣタイプ（特定のルーチン・タイプに専用であり、その特定のタイプのルーチンのすべてのコード・セクションにわたり共有され、それらの値を、同じルーチン／バイトコード・セクションの複数のインスタンスにわたり維持する）であり得る。他の変数は、ＧＬＯＢＡＬタイプ（すべてのバイトコード・ルーチンおよびインスタンスにわたり共有される）であり得る。ＢＴＶＭ３４のいくつかの実施形態は、また、ＰＲＯＣＥＳＳタイプの変数を用いて動作し得、これらの変数は、ルーチン−プロセスのタプルに一意的に付属され得、その特定のタイプのルーチンのすべてのコード・セクションにわたって共有され、同じルーチン／バイトコード・セクションの複数のインスタンスにわたってそれらの値を維持するが、あるプロセスと別のプロセスとでは異なる。ＢＴＶＭ３４の仮想メモリが、ＰＲＯＣＥＳＳタイプの変数を記憶するように構成されるときには、そのような変数は、イベント・インターセプタ２８ａ〜ｃによってモニタされるすべてのプロセスに対して、いったん初期化され、それぞれのプロセスの終了の際に消去され得る。
【００４４】
[0054]いくつかの実施形態では、セキュリティ・アプリケーション４０は、ＢＴＶＭ３４によって用いられるために、スレッド・プールを維持する。ある例では、このスレッド・プールは、プロセッサ１２の論理ＣＰＵのカウントと同数のスレッドを備える。スレッド・プールのすべてのスレッドは、同じ優先レベルに設定され得る。バイトコード・ルーチンをディスパッチするときには、ディスパッチャ３２が次の利用可能なスレッドを待機することがあり得る。ＢＴＶＭ３４の別個のインスタンスが、よって、任意のメモリ・コンテキストにおいて、独立かつ同時に、動作することがあり得る。いくつかの実施形態では、ＢＴＶＭ３４のインスタンスがアウト・オブ・オーダー実行する場合があり、すなわち、それらをトリガしたイベントがイベント・キュー３１に挿入されたのとは必ずしも同じ順序ではなく、動作することがあり得る。
【００４５】
[0055]ルーチン・インジケータ４６（たとえば、バイトコード・ルーチンのメモリ・アドレス）をルーチン・ディスパッチャ３２から受け取ることに応答して、ＢＴＶＭ３４は、バイトコード・セクション７４にアクセスし得る。一般性を失うことなく、次に図解されるステップは、ＢＴＶＭ３４が各バイトコード命令を順に解釈して実行する実施形態を記述する。当業者であれば、本明細書での説明を、実行時（ＪＩＴ）コンパイルを用いる実施形態の動作を記述するように適合させ得る、ということを理解するであろう。一連のステップ１６６〜１６８では、ＢＴＶＭ３４は、バイトコード命令を解釈して、それぞれの命令によって指示された１組の動作を実行し得る。
【００４６】
[0056]いくつかのバイトコード命令が、たとえばＯＳ３０のある関数によって提供される機能など、複雑な機能をコールする。ＢＴＶＭ３４の複雑性を最小に保ち、ＢＴＶＭ３４の表面への攻撃を減少させるために、いくつかの実施形態が、ヘルパ・モジュール３６（図３）として実現されるアプリケーション・プログラム・インターフェース（ＡＰＩ）を介して、そのような機能をＢＴＶＭ３４に提供する。モジュール３６は、ＢＴＶＭ３４を支援するように構成された１組のヘルパ関数を備え、とりわけ、ファイルの存在を確認する、メモリ・セクションのコンテンツとマルウェアを示すシグネチャとを一致させることを試みる、ファイルを数え上げる、および評価スコアを設定するなどのタスクを行う。現在のバイトコード命令がヘルパ関数をコールすると、ステップ１７０において、バイトコード変換ＶＭ３４が、ＡＰＩコール４８をヘルパ・モジュール３６に発行する。ヘルパ・モジュール３６は、さらに、ＯＳ３０とのインターフェースを有し得る。
【００４７】
[0057]いくつかの実施形態では、ヘルパ・モジュール３６が、バイトコード変換ＶＭ３４からのＡＰＩコールに応答して、新たなイベントをイベント・キュー３１に追加する機能を有することがあり得る（たとえば、図３を参照のこと）。あるそのような例では、バイトコード・ルーチンの第１の部分は、同期的に処理される。次に、ＢＴＶＭ３４が、新たなイベントをキュー３１に追加するようにヘルパ・モジュール３６にコールすることにより、それぞれのルーチンの第２の部分を後で（非同期的な態様で）実行させ得るが、ここで、新たなイベントは、ルーチンの第２の部分の実行をトリガするように選ばれる。別の例では、説明される機構が、バイトコード・ルーチンのカスケードを実行するのに用いられ得、この場合に、各ルーチンは、新たなイベントをイベント・キュー３１に挿入するようにヘルパ・モジュール３６に命令することによって、カスケードの次の構成要素の実行を決定する。
【００４８】
[0058]いくつかのバイトコード・ルーチンは、たとえばエンジン３８へのまたはヘルパ・モジュール３６へのＡＰＩコールを介して、評価インジケータ５０を挙動評価エンジン３８に出力する。評価インジケータ５０は、特定のモニタ対象のオブジェクト（たとえば、プロセス）が悪意を有するものである蓋然性を示す評価スコアを含み得る。別の例示的な評価インジケータ５０は、それぞれのオブジェクトに対して評価エンジン３８によって維持される評価スコアに加算されるスコア・インクリメントを備える。さらに別の例示的なインジケータ５０は、評決（たとえば、清潔／悪意がある）を含む。いくつかの実施形態では、一連のステップ１７４〜１７６が、評価条件が満たされるかどうか（たとえば、スコア・インクリメントが計算されたかどうか）を判定し、満たされるときには、インジケータ５０を、評価エンジン３８に送信する。
【００４９】
[0059]ステップ１７８は、終了条件が満たされるかどうかを確認する場合があり得るが、満たされないときには、ＢＴＶＭ３４は、現在のルーチンの次のバイトコード命令に進み得る（上述したステップ１６６を参照のこと）。いくつかの実施形態では、ステップ１７８は、現在のルーチン／バイトコード・セクションの最後のバイトコード命令が実行されたかどうかを判定することを備え得る。いくつかのバイトコード・ルーチンは、最大量の時間にわたって動作するように構成され得るが、そのような場合、ステップ１７８は、現在のバイトコード・ルーチン／セクションを起動して実行を開始して以後、最大の許容される時間期間が経過したかどうかを判定し得る。別の例示的な終了条件は、それぞれのルーチン／バイトコード・セクションの実行の間にエラーが発生するときは常に、満たされ得る。終了条件が満たされると、ステップ１８０が、ＢＴＶＭ３４の現在のインスタンスを終了させ、それぞれのスレッドをスレッド・プールの中にリリースすることがあり得る。
【００５０】
[0060]いくつかの実施形態では、挙動評価エンジン３８が、クライアント・システム１０上で動作しているプロセスおよびスレッドなど、モニタ対象であるソフトウェア・エンティティに関する集中化された知識ベースを維持する。そのようなエンティティそれぞれに対して、エンジン３８は、認知インジケータ（たとえば、親子関係、コードを注入する処理とそのようなコード・インジェクションの受け手との間の関係、その他）を記憶し得る。評価エンジン３８のいくつかの実施形態は、さらに、モニタ対象である各エンティティと関連する１組の評価スコアを記憶する。そのようなスコアのそれぞれは、別個の基準に従って決定され得る（たとえば、各スコアは、特定のバイトコード・ルーチンによってアップデートされる）。いくつかの実施形態では、スコア決定エンジン３８は、そのスコアに従って、モニタ対象であるそれぞれのエンティティがコンピュータ・セキュリティ脅威を呈示するかどうかを判定するように構成される。そのような脅威が識別されると、エンジン３８は、たとえばその実行を停止させるために、または、それ以外の態様でそれぞれのソフトウェア・オブジェクトを無力化するために、それぞれの悪意あるエンティティに対してアンチマルウェアアクションを行い得る。エンジン３８は、さらに、クライアント・システム１０のユーザに、および／またはシステム管理者に、警告することがあり得る。
【００５１】
[0061]上述された例示的なシステムおよび方法によると、マルウェアおよびスパイウェアなどのコンピュータ・セキュリティ脅威に対して、クライアント・システムを保護することが可能になる。クライアント・システム上で現に動作しているプロセスおよびスレッドなど、複数の実行可能なエンティティのそれぞれに対して、セキュリティ・アプリケーションが、１組の評価スコアを維持し、この１組の評価スコアとは、それぞれのエンティティが脅威を呈示する蓋然性を示し得る。いくつかの実施形態では、そのようなスコアが、各検出ルーチンに特有の基準に従ってモニタされるエンティティを評価するようにそれぞれが構成される複数の検出ルーチンを実行することに応じて、作成される。検出ルーチンは、様々なコンピュータ・セキュリティ・ヒューリステックを実装し得、すなわち、別々のルーチンが別個のヒューリステックに対応することがあり得る。たとえば、あるルーチンが、この技術分野において挙動シグネチャとして知られる、モニタ対象のエンティティがマルウェアを示す一連のアクションを行うかどうかを判定することがあり得る。検出ルーチンの実行は、特定のトリガ・イベントの発生の検出に応答して、選択的にトリガされ得る。
【００５２】
[0062]本発明のいくつかの実施形態では、検出ルーチンはバイトコードで、すなわち、それぞれのクライアント・システムのプロセッサによって容易に実行可能ではないカスタムの命令セットを用いて、定式化される。その代わりに、検出ルーチンはバイトコード変換仮想マシンの内部で実行されるが、このバイトコード変換仮想マシンは、インタープリテーションまたは実行時コンパイル技術を用いて、それぞれの命令を実行する前に、各バイトコード・ルーチンをそれぞれのプラットフォームのプロセッサにネイティブな１組のプロセッサ命令に変換する。
【００５３】
[0063]従来型のコンピュータ・セキュリティ・システムでは、検出ルーチンは、典型的には、ターゲット・プラットフォームのネイティブなコードに予めコンパイルされ、セキュリティ・アプリケーションの残りのコンポーネントと共にパッケージ化される。そのような構成によると、それぞれの検出ルーチンの最適化された高速の実行が可能になるが、そのような構成は、開発し、最新の状態に維持し、クライアント・コンピュータ・システムで展開することが困難な場合があり得る。たとえば、検出ルーチンにおけるどのような小さな変化にも、または、新たな検出ルーチン／ヒューリステックの導入には、セキュリティ・アプリケーションのコードの大きな部分の再コンパイルと比較的大規模なソフトウェアのアップデート（たとえば、数メガバイト）の展開とが要求される場合があり得る。さらに、アップデートにおけるソフトウェアのバグが、セキュリティ・アプリケーションの全体を潜在的にダウンさせてしまうことがあるため、アップデートには、クライアントに配信される前に、広範囲な検証が要求されるのが典型的である。
【００５４】
[0064]対照的に、バイトコード検出ルーチンの使用により、本発明のいくつかの実施形態が、ソフトウェア・アップデート・プロセスを単純化することに加えて、セキュリティ・ソリューションの市場化されるまでの時間を実質的に短縮させることが可能になる。バイトコード検出ルーチンは、実行中に解釈されコンパイルされるから、セキュリティ・ソリューションの主なコンポーネントとは別個に、開発されクライアントに配信され得る。新たな検出ヒューリステックが、既存のルーチンとは完全に独立に、開発および実装され得る。図１０に示されるように、ソフトウェア・アップデートは、合計しても僅かに数百バイトに相当する１組のバイトコード・ルーチン７０を備え得るだけである。新たな検出能力を達成するために、それぞれのバイトコード・ルーチンが、ルーチン・データベース２６に導入され、事後的に、ルーチン・ディスパッチャ３２を用いて登録され得る。また、各検出ルーチンはバイトコード変換仮想マシンのインスタンスの内部で、セキュリティ・アプリケーションの他のコンポーネントとは別々に動作するのであるから、バイトコード・ルーチンの内部に存在するエラーまたはソフトウェアのバグは内包され、他のソフトウェアの動作に影響する蓋然性はより低い。
【００５５】
[0065]本発明のいくつかの実施形態は、検出ルーチンの解釈および／またはＪＩＴコンパイルを達成するために、Ｊａｖａ（登録商標）またはＬｕａ（登録商標）仮想マシンなど広く利用可能なバイトコード変換仮想マシンを用い得る。しかし、アーキテクチャに関する複雑性を最小化し、バイトコード変換仮想マシンの表面攻撃を減少させるために、いくつかの実施形態は、最小の機能だけを付与されたカスタム化された変換仮想マシンを用いる。より複雑な機能が検出ルーチンの内部でコールされるときには、いくつかの実施形態は、別個のヘルパＡＰＩを通じて要求される機能を提供する。
【００５６】
[0066]バイトコード変換仮想マシンの各インスタンスは別個で独立のメモリ・コンテキストの内部で動作し得るから、本発明のいくつかの実施形態は、たとえばコンテナ化によって提供されるのと同じセキュリティ効果を提供し得る。本発明の他の効果として、ポータビリティが含まれる。提案されるセキュリティ・ソリューションのいくつかのコンポーネントは、クライアント・デバイス（たとえば、コンピュータ・システム、スマートホン、その他）の各タイプに対して別々にコンパイルされる必要があり得るが、バイトコード・ルーチンは、アップデートを含む同一の検出ルーチンがすべてのプラットフォームおよびクライアント・デバイスに配信され得るという意味で、プラットフォームとは独立である。
【００５７】
[0067]本発明のこのような効果は、メモリ・オーバヘッドおよび処理速度を犠牲にして達成し得る。予めコンパイルされたソリューションは、特定のプラットフォームの最大のパフォーマンスのために最適化されるが、検出ルーチンの解釈および／またはＪＩＴコンパイルが、本発明のいくつかの実施形態を、予めコンパイルされたセキュリティ・アプリケーションよりも低速にする場合があり得る。
【００５８】
[0068]上述した実施形態は、本発明の射程から逸脱することなく、多くの方法で変更され得るということが、当業者には明らかであろう。したがって、本発明の射程は、以下の特許請求の範囲とそれらの法的な均等物とによって決定されるべきである。
【図１】
0006706273.tif 000002
【図２】
0006706273.tif 000003
【図３】
0006706273.tif 000004
【図４】
0006706273.tif 000005
【図５】
0006706273.tif 000006
【図６】
0006706273.tif 000007
【図７】
0006706273.tif 000008
【図８】
0006706273.tif 000009
【図９】
0006706273.tif 000010
【図１０】
0006706273.tif 000011