(57)【要約】  本発明は、潜在的なマルウェア装置を安全なプログラムコードへ翻訳するためのシステムと方法を含む。潜在的なマルウェアは、限定的ではなく、ネイティブＣＰＵプログラムコード、プラットホーム独立．ＮＥＴバイトコード、スクリプティングバイトコード等を含むソース言語の異なるいくつかのタイプのいずれか１つから翻訳される。翻訳されたプログラムコードはネイティブＣＰＵにより理解され且つ実行されるプログラムコードにコンパイルされる。実行中及び／又は前に、本発明はスキャナーによりメモリ内に記憶された潜在的なマルウェアを探索させる。もし、マルウェアが検出されないと、計算装置はＣＰＵにより翻訳されたプログラムコードを実行させる。しかし、もし、潜在的なマルウェアを記憶したコンピュータメモリが実行中に変更された場合、潜在的なマルウェアの実行及び／又は解析が中断できる。この場合、メモリ内に記憶された潜在的なマルウェアは実行前に安全なプログラムコードに翻訳される。
2008523471.tif 000002
【特許請求の範囲】
【請求項１】
潜在的なマルウェアを実行する要求の受信に応答して安全なプログラムコードを生成するためのコンピュータにより実施される方法であって、
（ａ）潜在的なマルウェアに含まれているプログラムコードを復号し、
（ｂ）復号されたプログラムコードを安全で機能的に等価なプログラムコードに翻訳し、
（ｃ）計算装置上で安全で機能的に等価なプログラムコードを実行する
ことを含むことを特徴とする方法。
【請求項２】
メモリ内に潜在的なマルウェアの基本ブロックをロードすることをさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
潜在的なマルウェアがマルウェア特性のプログラムコードを含んでいるかどうかを決定するために、スキャナーにメモリ内にロードされた基本ブロックの解析を実行させることをさらに含むことを特徴とする請求項２に記載の方法。
【請求項４】
基本ブロック内の第１の命令が識別されることを特徴とする請求項２に記載の方法。
【請求項５】
基本ブロック内の最後の命令が識別されることを特徴とする請求項２に記載の方法。
【請求項６】
潜在的なマルウェア内で基本ブロック間の実行のフローを記述するデータ構造を生成することをさらに含むことを特徴とする請求項１に記載の方法。
【請求項７】
潜在的なマルウェア内に含まれるプログラムコードを復号化することが、潜在的なマルウェアからアーキテクチャニュートラルプログラムコードを生成することを含むことを特徴とする請求項１に記載の方法。
【請求項８】
ソース言語が、X86-32ビットコンピュータアーキテクチャの仕様を満足することを特徴とする請求項７に記載の方法。
【請求項９】
復号化されたプログラムコードを安全で機能的に等価なプログラムコードに翻訳することが、
（ａ）潜在的なマルウェア内の命令を選択し、
（ｂ）マルウェアの機能を実現することができないアーキテクチャニュートラルフォーマットの等価な命令組を生成し、
（ｃ）アーキテクチャニュートラルフォーマットの等価な命令組を実行可能なプログラムコードにコンパイルする
ことを含むことを特徴とする請求項１に記載の方法。
【請求項１０】
復号化されたプログラムコードを安全で機能的に等価なプログラムコードに翻訳することが、
（ａ）復号化されたプログラムコード内の命令を選択し、
（ｂ）マルウェアの機能を実現することができない実行可能な安全で機能的に等価の命令組を生成する
ことを含むことを特徴とする請求項１に記載の方法。
【請求項１１】
安全で機能的に等価なプログラムコードが実行されるユニットは基本ブロックであることを特徴とする請求項１に記載の方法。
【請求項１２】
基本ブロックの実行は、
（ａ）基本ブロック内の命令を選択し、
（ｂ）中央処理ユニットにより前記命令を処理し、
（ｃ）前記選択された命令の実行により中断時要件が生じたかどうかを決定する
ことを含むことを特徴とする請求項１１に記載の方法。
【請求項１３】
選択された命令の実行が選択された命令の後に実行される予定の基本ブロック内のプログラムコードを変更する時、基本ブロックは２つの基本ブロックに分割されることを特徴とする請求項１２に記載の方法。
【請求項１４】
安全で機能的に等価なプログラムコードの実行が、
（ａ）実行中に発生するエラーを検出し、
（ｂ）実行を中断してそして例外ハンドラーを呼び出し、
（ｃ）例外ハンドラーが実行を完了した後に実行の再開に必要な情報を記憶させる
ことを特徴とする請求項１２に記載の方法。
【請求項１５】
潜在的なマルウェアを実行する要求の受信に応答して安全なプログラムコードを生成するための方法を実行するコンピュータにより実施される命令を記憶したコンピュータ読取可能媒体であって、前記方法は
（ａ）潜在的なマルウェアに含まれているプログラムコードを復号し、
（ｂ）復号されたプログラムコードを安全で機能的に等価なプログラムコードに翻訳し、
（ｃ）計算装置上で安全で機能的に等価なプログラムコードを実行する
ことを含むことを特徴とするコンピュータ読取可能媒体。
【請求項１６】
メモリ内に潜在的なマルウェアの基本ブロックをロードすることをさらに含むことを特徴とする請求項１６に記載のコンピュータ読取可能媒体。
【請求項１７】
潜在的なマルウェアがマルウェア特性のプログラムコードを含んでいるかどうかを決定するために、スキャナーにメモリ内にロードされた基本ブロックの解析を実行させることをさらに含むことを特徴とする請求項１６に記載のコンピュータ読取可能媒体。
【請求項１８】
基本ブロック内の第１の命令が識別されることを特徴とする請求項１６に記載のコンピュータ読取可能媒体。
【請求項１９】
基本ブロック内の最後の命令が識別されることを特徴とする請求項１６に記載のコンピュータ読取可能媒体。
【請求項２０】
潜在的なマルウェア内で基本ブロック間の実行のフローを記述するデータ構造を生成することをさらに含むことを特徴とする請求項１５に記載のコンピュータ読取可能媒体。
【請求項２１】
潜在的なマルウェア内に含まれるプログラムコードを復号化することが、潜在的なマルウェアからアーキテクチャニュートラルプログラムコードを生成することを含むことを特徴とする請求項１５に記載のコンピュータ読取可能媒体。
【請求項２２】
ソース言語が、X86-32ビットコンピュータアーキテクチャの仕様を満足することを特徴とする請求項２１に記載のコンピュータ読取可能媒体。
【請求項２３】
復号化されたプログラムコードを安全で機能的に等価なプログラムコードに翻訳することが、
（ａ）潜在的なマルウェア内の命令を選択し、
（ｂ）マルウェアの機能を実現することができないアーキテクチャニュートラルフォーマットの等価な命令組を生成し、
（ｃ）アーキテクチャニュートラルフォーマットの等価な命令組を実行可能なプログラムコードにコンパイルする
ことを含むことを特徴とする請求項１５に記載のコンピュータ読取可能媒体。
【請求項２４】
復号化されたプログラムコードを安全で機能的に等価なプログラムコードに翻訳することが、
（ａ）復号化されたプログラムコード内の命令を選択し、
（ｂ）マルウェアの機能を実現することができない実行可能な安全で機能的に等価の命令組を生成する
ことを含むことを特徴とする請求項１５に記載のコンピュータ読取可能媒体。
【請求項２５】
安全で機能的に等価なプログラムコードが実行されるユニットは基本ブロックであることを特徴とする請求項１５に記載のコンピュータ読取可能媒体。
【請求項２６】
基本ブロックの実行は、
（ａ）基本ブロック内の命令を選択し、
（ｂ）中央処理ユニットにより前記命令を処理し、
（ｃ）前記選択された命令の実行により中断時要件が生じたかどうかを決定する
ことを含むことを特徴とする請求項２５に記載のコンピュータ読取可能媒体。
【請求項２７】
選択された命令の実行が選択された命令の後に実行される予定の基本ブロック内のプログラムコードを変更する時、基本ブロックは２つの基本ブロックに分割されることを特徴とする請求項２５に記載のコンピュータ読取可能媒体。
【請求項２８】
安全で機能的に等価なプログラムコードの実行が、
（ａ）実行中に発生するエラーを検出し、
（ｂ）実行を中断してそして例外ハンドラーを呼び出し、
（ｃ）例外ハンドラーが実行を完了した後に実行の再開に必要な情報を記憶させる
ことを特徴とする請求項２５に記載のコンピュータ読取可能媒体。
【請求項２９】
潜在的なマルウェアを計算装置上で安全に実行するためのソフトウェアシステムであって、前記ソフトウェアシステムは
（ａ）メモリ内にロードされたプログラムコードが潜在的なマルウェアかどうかを決定するためのスキャナーと、
（ｂ）アーキテクチャニュートラルフォーマットの安全で機能的に等価なプログラムコードにソース言語を翻訳するための翻訳エンジンと、
（ｃ）アーキテクチャニュートラルプログラムコードを実行可能なプログラムコードにコンパイルするためのコンパイレーションエンジンと、
（ｄ）潜在的なマルウェアの基本ブロック間のプログラム実行のフローを追跡するブロックマネージャと
を含むことを特徴とするソフトウェアシステム。
【請求項３０】
コンパイレーションエンジンによりコンパイルされたプログラムコードを実行する中央処理ユニットをさらに含むことを特徴とする請求項２９に記載のソフトウェアシステム。
【請求項３１】
プログラムコードがメモリ内にロードされた時にブロックマネージャと通信するように構成された仮想環境をさらに含むことを特徴とする請求項２９に記載のソフトウェアシステム。
【請求項３２】
翻訳エンジンが、ソース言語をアーキテクチャニュートラルフォーマットのプログラムコードに翻訳するためのプラグイン・モジュールをサポートするように構成されていることを特徴とする請求項２９に記載のソフトウェアシステム。
【請求項３３】
コンパイレーションエンジンが、計算装置上で実行できるプログラムコードにアーキテクチャニュートラルフォーマットのプログラムコードをコンパイルするためのプラグイン・モジュールをサポートするように構成されていることを特徴とする請求項２９に記載のソフトウェアシステム
【請求項３４】
ブロックマネージャが、ジャンプ命令で終了しない基本ブロック中にジャンプ命令を挿入するように構成され、そして分割された基本ブロック中にジャンプ命令を挿入する基本ブロックの実行後にジャンプ命令が実行の制御をブロックマネージャ又は引き続く基本ブロックへ戻すことを特徴とする請求項２９に記載のソフトウェアシステム。
【請求項３５】
翻訳エンジンが、潜在的なマルウェア内のジャンプ命令を基本ブロックの実行の完了後にプログラム制御をブロックマネージャに戻すか又は実行の制御を引き続く基本ブロックへ移転する命令に翻訳するように構成されていることを特徴とする請求項２９に記載のソフトウェアシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算装置に関し、より詳細には、マルウェアに対する計算装置の保護に関する。
【背景技術】
【０００２】
より多くのコンピュータ及びその他の計算装置が、インターネットなどのさまざまなネットワークを介して相互に接続されているため、特に、ネットワークを介して又は情報ストリームを介して配達される攻撃又は侵入からのコンピュータ・セキュリティがますます重要になっている。当業者には認識されているように、これらの攻撃は、異なる形式でやって来る、コンピュータビールス、コンピュータワーム、システムコンポーネント置換、サービス攻撃の否定、合法的コンピュータシステム・フィーチャの誤用／悪用など、非合法目的のために１つ又は複数のコンピュータシステムの脆弱性を利用するもの全てを、これらに限定する意図なく、含む。当業者には理解されるようにさまざまなコンピュータ攻撃は技術的に互いに相違しているが、本発明の目的のためにそして記述の簡潔さのために、全ての悪意のあるコンピュータプログラムは一般に以降、コンピュータマルウェア又はより単純にマルウェアと呼ばれる。
【０００３】
計算装置が、コンピュータマルウェアにより攻撃され又は「感染」した時、悪影響はさまざまで、システム装置が使用不可能、ファームウェア、アプリケーション、又はデータファイルの消去又は破壊、ネットワークの別の場所へ潜在的に重要なデータの送信、計算装置の停止、又は、計算装置の破壊を引き起こすなどを含む。コンピュータマルウェアの全てではないが多くのさらに有害な点は、感染した計算装置が他のシステムを感染するために使用されることである。
【０００４】
従来のコンピュータマルウェア、特に、コンピュータビールス、コンピュータワームに対する防御は、アンチビールスソフトウェアである。概略的に説明すると、アンチビールスソフトウェアは、既知のコンピュータマルウェアと関連した識別可能なパターンを探すために、入力データをスキャンする。また、アンチビールスソフトウェアは、入力データを既知のマルウェアの特徴と比較するヒューリステック技術をますます利用している。いずれにしても、コンピュータマルウェアを検出した際に、アンチビールスソフトウェアは、コンピュータマルウェアを感染したデータから除去し、データを検疫し、又は感染した入力データを削除することにより応答する。困ったことに、アンチビールスソフトウェアは典型的に既知の識別可能なコンピュータマルウェアと共に動作する。しばしば、これはマルウェアの「シグネチャ」と呼ばれるパターンとデータとを一致させることにより行われる。このマルウェア検出モデルにおける中心の欠陥の１つは、未知のコンピュータマルウェアがそのマルウェアを識別して応答するために計算装置上でアンチビールスソフトウェアが更新されるまでネットワーク中にチェックなしに伝播することである。
【０００５】
アンチビールスソフトウェアが何千の既知のコンピュータマルウェアを認識することについてより効率的に且つ洗練されるにつれて、コンピュータマルウェアも同じくより洗練されてきている。例えば、悪意のあるコンピュータユーザは今やマルウェアを暗号化してマルウェアシグネチャを認識できないパターンの背後に隠す。例えば、ポリモルフイック（polymorphic）マルウェアはマルウェア復号化ルーチン及び暗号化されたマルウェア「ペイロード」からなる。ユーザが感染したプログラムを実行した時、マルウェア復号化ルーチンは計算装置の制御を獲得して、そして前もって暗号化されたマルウェアペイロードを復号する。そして、マルウェア復号化ルーチンは計算装置の制御を復号化されたマルウェアペイロードに移転する。新しい目標が感染する度に、マルウェアは復号化ルーチン及びマルウェアペイロードの両方を複製する。典型的に、マルウェアペイロードを暗号化するために使用される暗号キーはマルウェアが複製される時に変更される。この結果、暗号化されたマルウェアは、そのマルウェアがアンチビールスソフトウェアにより認識されることのできる識別可能なパターン又は「シグネチャ」を持たない。
【０００６】
オリゴモルフィック（oligomorphic）マルウェアが生成された時、アンチビールスソフトウェア開発者は、復号化ルーチンはマルウェアのバージョン間で一定に留まることを認識しいていた。アンチビールスソフトウェア開発者は、この弱点を利用して、マルウェアシグネチャについてのみスキャンするだけではなく、マルウェアに付随していると知られる特定の復号化ルーチンに対してもスキャンする。これに応答して、悪意のあるコンピュータユーザは、復号化ルーチンが識別されるのを防ぐために設計されたより洗練されたマルウェアを開発した（以降、マルウェアシグネチャを隠すために設計された技術を使用するマルウェアの全てのタイプを「隠されたマルウェア」と呼ぶ）。
【０００７】
図１は、「ペイロード」を配達するために使用されるポリモルフィックマルウェア１００として知られる隠されたマルウェアの１つのタイプを示す概略図である。図１に示すように、ポリモルフィックマルウェア１００はホストプログラム１０２に付着し、そして、この場合、暗号化エンジン１０６と、復号化ルーチン１０８と、ポリモルフィックファイルインフェクタ１１０を含むビールス１０４として示されている。ポリモルフィックマルウェア１００は識別可能なシグネチャが識別されるのを防止するためにビールス１０４のセグメントを暗号化する。しかし、ビールス１０４はまたビールス１０４が伝播するたびにランダム化された暗号化ルーチンを生成する暗号エンジン１０６を含む。ビールス１０４が起動する時、ポリモルフィックファイルインフェクタ１１０は新しいターゲットを識別して、コンピュータメモリ内でビールスを複製する。この時点で、暗号化エンジン１０６はランダムに前に作られた暗号化ルーチンとほとんど又は全く類似性がない新しい暗号化ルーチンを生成する。そして、ビールス１０４の暗号化されたコピーは識別されたターゲットに付着される。この結果、ビールス１０４が暗号化されて、暗号化及び復号化に使用されるルーチンは感染ごとに変化する。固定されたマルウェアシグネチャ又は固定化された暗号化ルーチン無しには、従来のアンチビールスソフトウェアはシグネチャが識別されないからポリモルフィックマルウェア１００を検出することができない。
【０００８】
上述した問題に鑑みて、コンピュータユーザが隠れたマルウェアなどのマルウェアに対してコンピュータを先取り的（proactively）に保護するソフトウェアを有することが望ましい。
【０００９】
本発明は、マルウェアに対して計算装置を保護するためのセキュリティモデルを提供する。本発明の１つの実施の形態によると、計算装置に関連した潜在的なマルウェアを安全プログラムコードに翻訳する方法が提供される。本発明のこの実施の形態は、潜在的なマルウェアをメモリ中の識別されたプログラムエントリイで解析することで開始する。潜在的なマルウェアの初期の解析は、プログラムコードを「基本ブロック」に、基本ブロック中の最後の命令に出会うまで命令を復号するにより分割することから成る。基本ブロック中の命令が前にスキャンされていない場合、スキャナーがマルウェアの基本ブロックを探索する。もし、マルウェアが検出されて、そして十分なレベルの正確さでもってマルウェアの識別ができた場合、マルウェアを含んだファイルは感染していると報告される。この場合、本発明によるさらなる解析は必要としない。他の場合においては、基本ブロックの復号された命令は実行可能な等価で安全なプログラムコードに翻訳される。翻訳は潜在的なマルウェアから直接に実行できる。代替的に、翻訳は実行可能なプログラムに「コンパイル」されるアーキテクチャニュートラルフォーマットを使用して実行できる。
【００１０】
本発明の別の実施の形態によると、翻訳されたプログラムコードの基本ブロックを安全に実行するための方法が提供される。本発明のこの実施の形態は、翻訳されたプログラムコードの基本ブロックが翻訳された跡に変更されたかどうかを決定することを含む。変更が生じている場合は、修正された基本ブロックは実行される前に翻訳される。変更が生じていない場合は、追加の翻訳は必要なく、そして既存の「コンパイル」されたプログラムコードが実行される。実行可能プログラムコードは、前に翻訳されたプログラムコードが実行の結果として変更されたかどうかを決定できる。変更されたプログラムコードのいずれの基本コードは破棄されて、実行される前に再び翻訳される。実行が完了した後、現在の実行ポイントが更新されて、実行の制御が後続の基本ブロックへ移転される。そして、マルウェアが識別されるまで、基本ブロックの翻訳及び実行が繰り返されて、中断条件が発生するか、又は、プログラムが実行を完了する。
【００１１】
本発明のさらなる実施の形態及び多くの利点は、添付図面を参照した以下の詳細な説明により容易により良く理解される。
【発明を実施するための最良の形態】
【００１２】
本発明によると、計算装置に関連した潜在的にマルウェアを安全なプログラムコードに翻訳するためのシステム、方法及びコンピュータ読取可能媒体が提供される。潜在的なマルウェアは、限定的ではなくネイティブＣＰＵプログラムコード、プラットホーム独立．ＮＥＴバイトコードおよびスクリプテイングプログラムコードを含むいくつかの異なるタイプのソース言語のいずれかの１つから、アーキテクチャニュートラルフォーマットの安全で且つ機能的に等価なプログラムコードに翻訳される。そして、翻訳されたプログラムコードは、ネイティブＣＰＵにより実行されるプログラムコードへ「コンパイル」される。実行の前及び／又は最中、本発明ではスキャナーがメモリ内に記憶されているマルウェアを探索する。もし、マルウェアが検出されなければ、計算機はＣＰＵに翻訳されたプログラムコードを実行させる。しかし、潜在的なマルウェアを記憶したコンピュータメモリが実行の最中に変更された場合、実行は中断される。この場合、メモリ内に記憶されている新しい潜在的なマルウェアは実行される前に安全なプログラムコードに翻訳される。
【００１３】
本発明は主として特定のコンピュータアーキテクチャとソース言語で記述されるが、当業者には容易に理解されるように本発明はまた記述されたのとは異なるコンピュータアーキテクチャ又はソース言語にも適用可能である。以下の説明は最初に本発明が実現されるシステムの概観を提供する。そして、本発明を実現する方法が説明される。以降に提供される例は網羅的であることを意図せず、また、本発明を開示された正確な形式に限定する意図はない。同様に、ここに説明されるいずれのステップは同じ結果を達成するために他のステップ又はステップの組合せと交換可能である。
【００１４】
図２を参照して、以下に本発明が実現される１つの適当なマルウェア検出システム２００の例示的な概観を提供する。説明されるマルウェア検出システム２００は、中央処理ユニット２０２、スキャナー２０４、翻訳エンジン２０６、ブロックマネージャ２０８、コンパイレーションエンジン２１０、及び仮想環境２１２を含む。本発明の１つの実施の形態では、仮想環境２１２は仮想Ｉ／Ｏシステム２１４と仮想メモリ２１６を含む。また、さらに以下に詳細に説明するように、翻訳エンジン２０６とコンパイレーションエンジン２１０は各々、プラグイン・モジュール２１８及び２２０などの１つ又は複数のプラグイン・モジユールをサポートする。本発明の１つの実施の形態を説明する一般的な観点において、マルウェア検出システム２００のコンポーネントは、隠れたマルウェアを検出するためにスキャナー２０４により必要とされるインフラストラクチャを提供する。さらに、マルウェア検出システム２００のコンポーネントは、潜在的なマルウェアから翻訳された安全プログラムコードを実行しながら、マルウェアの検出と高速記述を可能にする。
【００１５】
図２に示されるように、マルウェア検出システム２００は、ＣＰＵ２０２を含む。当業者には理解されるようにＣＰＵ２０２は、ネイティブプログラムコードの実行をサポートすることによりマルウェア検出システム２００の計算センターとしての役割を果たす。隠れたマルウェアを検出するために使用される１つの従来技術は、仮想ＣＰＵを含む仮想オペレーティング環境内でプログラム実行を「エミュレート」することである。エミュレーション中、行動シグネチャが仮想オペレーティング環境内でのプログラムの観測されたイベントに基づいて生成される。行動シグネチャは、エミュレートされたプログラムがマルウェアであるかどうかを決定するための解析に適している。システムのこのタイプにおいては、プログラム中の各命令は仮想ＣＰＵ上でエミュレートされる。この結果、エミュレーションは多くの時間を要し、本発明により提供されるマルウェア検出インフラストラクチャと比較して顕著な性能の低下を発生する。例えば、ループ内のプログラム命令は、プログラム命令の効果が前の反復で観測されても、各反復についてループを介して仮想ＣＰＵ上でエミュレートされる。さらに、プログラムが多大な計算オーバーヘッドを消費するソフトウェアで実現された仮想ＣＰＵ上でエミュレートされる。これに対して、本発明は実際の又はハードウェアに基づいたＣＰＵ２０２上でプログラムコードを実行する。マルウェアが実行されないことを保証するために、潜在的なマルウェア中のプログラムコードは実行前に安全なプログラムコードに翻訳される。
【００１６】
図２に示すように、マルウェア検出システム２００は、マルウェアを検出するように設計されたスキャナー２０４を含む。当業者には知られているように、多くの異なるソフトウェアベンダーがマルウェアのプログラムコード特性を識別するために構成されたアンチビールスソフトウェア中にスキャナーを含めている。困ったことには、既存のスキャナーは、実行する前に潜在的なマルウェアを安全なプログラムコードに翻訳するシステムと一緒に動作するようには構成されていない。その代わり、いくつかの既存のスキャナーは上述したタイプのエミュレーションシステムと一緒に動作する。これらのシステムにおいては、スキャナーは追加のオーバーヘッドを課し、エミュレーション方法は不合理な時間を費やすであろう。しかし、本発明により実現されるソフトウェアルーチンは、スキャナー２０４に「アンパックされた」（すなわち、復号された）又は実行時にメモリ内にロードされた隠れたマルウェアを素早く識別するのに必要なインフラストラクチャを提供する。
【００１７】
マルウェア検出システム２００はまた、潜在的なマルウェアをアーキテクチャニュートラルプログラムコードへ翻訳するために設計された翻訳エンジン２０６を含む。より詳細には、翻訳エンジン２０６は、限定的ではなくネイティブＣＰＵプログラムコード、プラットホーム独立バイトコード、及びスクリプティングプログラムコードを含むいくつかの異なるフォーマットのいずれか１つのソース言語から潜在的なマルウェアを復号する。そして、復号されたプログラムコード中の各命令はアーキテクチャニュートラルフォーマットに翻訳される。翻訳中、復号されたプログラムコードは基本ブロックに分割される。当業者には知られているように、基本ブロックはシーケンスの始まりに単一の入口ポイントを持ちそしてシーケンスの終わりに単一の出口ポイントを含むだけのプログラムコードのシーケンスである。換言すると、基本ブロックはせいぜい単一の「ジャンプ」命令を含む。翻訳されたプログラムコードの基本ブロックは、本発明により翻訳されて実行される潜在的なマルウェアの単位である。プログラムコードは多くのソース言語から翻訳されるため、翻訳エンジン２０６はプラグイン・モジュール２１８のようなプラグイン・モジュールをサポートする。プラグイン・モジュールは、ソース言語のプログラムコードをアーキテクチャニュートラルフォーマットの安全プログラムコードへ翻訳するためのロジックを提供する。代替的な実施の形態では、翻訳エンジンは２０６は、潜在的なマルウェアを直接にソース言語から実行できる安全なプログラムコードへ翻訳する。この実施の形態では、アーキテクチャニュートラルフォーマットは使用されない。しかし、アーキテクチャニュートラルフォーマットは、翻訳エンジン２０６が複数のソース言語からプログラムコードを翻訳するように構成されている場合に、翻訳プロセスの実現を単純にする。
【００１８】
マルウェア検出システム２００はまた、基本ブロックの実行を管理するためのブロックマネージャ２０８を含む。ブロックマネージャ２０８は基本ブロックを解析して異なる基本ブロック間の関係に関する情報を記憶するデータ構造を構築する。翻訳されたプログラムコードが実行された後に、ブロックマネージャ２０８に含まれたロジックは、何時に追加のプログラムコードを翻訳すべきかを決定するための決定プロセスを提供する。この点に関して、ブロックマネージャ２０８はデータ構造内に記憶されているデータを参照して更新する。また、ブロックマネージャ２０８は、スキャナー２０４により何時プログラムコードがマルウェアを探索されるかを決定するためのロジックを含む。
【００１９】
図２に示すように、マルウェア検出システム２００は、ＣＰＵ２０２により実行できるプログラムコードを生成するコンパイレーションエンジン２１０を含む。より詳細には、翻訳エンジン２０６により生成されたアーキテクチャニュートラルフォーマットは、コンパイレーションエンジン２１０によりアーキテクチャ特有フォーマットにコンパイルされる。プログラムコードは多くの異なるアーキテクチャにコンパイルされる必要があるため、コンパイレーションエンジン２０６はプラグイン・モジュール２２０などのプラグイン・モジュールをサポートする。プラグイン・モジュールはアーキテクチャニュートラルなプラグラムコードを特定のコンピュータアーキテクチャに課せられた制限でもってコンパイルするプログラムコードにコンパイルするためのロジックを提供する。
【００２０】
図２に示すように、マルウェア検出システム２００は、マルウェア検出システム２００はまた、仮想環境２１２をサポートする。仮想環境２１２は仮想Ｉ／Ｏシステム２１４と仮想メモリ２１６を含む。仮想環境の機能の多くは本発明の理解について重要ではないから、ここでは詳細には説明しない。また、本発明の理解に対しては重要でないから、仮想環境２１２の多くのコンポーネントは図２中には示されていない。本発明に関して、仮想環境２１２は、潜在的なマルウェアによる資源の使用についての情報を提供する。例えば、ブロックマネージャ２０８は、何時プログラムコードを翻訳すべきかを決定するための決定プロセスを提供する。この点に関して、ブロックマネージャ２０８は、実行中にメモリ内で基本ブロックが変更されたかどうかを決定するために仮想環境２１２へのコールを行う。仮想環境２１２は、メモリ割当の変化を含む、本発明により実現されるソフトウェアルーチンへ資源の使用に関する情報を提供するように構成されている。
【００２１】
図２に示すように、マルウェア検出システム２００の各コンポーネント、例えば、中央処理ユニット２０２、スキャナー２０４、翻訳エンジン２０６、ブロックマネージャ２０８、コンパイレーションエンジン２１０、及び仮想環境２１２は相互に接続されて、他のコンポーネントと通信することができる。当業者には知られているように、図２は本発明により実現される機能を実行可能な１つのマルウェア検出システム２００の単純化した例である。マルウェア検出システム２００の実際の実施の形態は、図２に示されていない又は付随する文書には説明されない追加のコンポーネントを持つだろう。また、図２は翻訳されたプログラムコードを安全に実行するための１つのコンポーネントアーキテクチャを示すが、他のコンポーネントアーキテクチャも可能である。
【００２２】
図３を参照して、マルウェア検出の目的のために安全なプログラムを提供するために本発明により実現されたコンポーネント及びルーチンが説明される。図３は、AMD-64 EXECUTABLE302、X86-32 EXECUTABLE304、及び.NET BYTE CODE306を含む潜在的なマルウェアの３つの例を示す。また、図３には図２に示された翻訳エンジン２０６、コンパイレーションエンジン２１０、及びプラグイン・モジュール２１８−２２０も示されている。概略的に説明すると、翻訳エンジン２０６とコンパイレーションエンジン２１０は安全に実行できるプログラムコードを一緒に生成する。図３に示された本発明の実施の形態は、安全なプログラムコードを生成するためにアーキテクチャニュートラルフォーマットを利用する。しかし、代替的な実施の形態では、潜在的なマルウェア３０２−３０６がアーキテクチャニュートラルフォーマットを利用することなく直接に安全なプログラムコードへ翻訳される。
【００２３】
ダイナミック翻訳は典型的に、ソース言語からターゲット言語又はフォーマットへプログラムコードを変換する手順として定義される。プログラムコードは典型的に、目的を満たすために翻訳される。例えば、いくつかの既存のトランスレータは、命令の組をより小さいが機能的に等価な命令に変換することによりプログラムコードを最適化する。別の例によると、いくつかのＣＰＵは、古いコンピュータアーキテクチャにより理解される言語から最近開発された言語にプログラムコードを翻訳することをサポートして、レガシープログラムが新しい計算装置上で実行できるようにする。最も現代的なトランスレータはダイナミックであり、プラグラムコードが実行される時に実行時又は「オンザフライ」でプログラムコードの変換が実行される手順を持つ。ダイナミック翻訳を実現する手順は、マルウェア検出以外の領域に限定されていた。しかし、図３に示すように、本発明はプログラムコードをソース言語（すなわち、AMD  64ビット、X86  32ビット、及び.NET バイトコード）からターゲット言語（すなわち、アーキテクチャニュートラルフォーマット）へマルウェア検出のために翻訳するための翻訳エンジン２０６中の一般的なフレームワークを提供する。換言すると、翻訳エンジン２０６は２つの言語間のプログラムコードの翻訳のみに限られない。その代わり、翻訳エンジン２０６は複数のソース言語からの翻訳をサポートするように構成されている。この点において、プラグイン・モジュールが、ソース言語とアーキテクチャニュートラルフォーマットとの間の翻訳をサポートするために翻訳エンジン２０６に追加される。図３に示されるソース言語のタイプは、例として解されるべきで、限定するものではない。例えば、本発明は、図３に示されないスクリプテイング言語又はアーキテクチャ独立ソース言語からプログラムコードを翻訳するように構成できる。
【００２４】
本発明の実際の実施の形態においては、プラグイン・モジュール２１８は"X86"32ビット命令組及びアーキテクチャニュートラルフォーマットの要件を満足する言語の間の翻訳をサポートする。翻訳プロセスの間、プログラムコードがソース言語から機能的に等価なターゲット言語に翻訳されるだけではなく、また、プログラムコードが「安全」（すなわち、実行された場合に計算装置へ損害を与えないように）にされる。例えば、次の命令はソース言語で実現される−"X/Y"ここで"X"と"Y"は数値変数である。このタイプの命令はもし"Y"が値0に等しい場合に問題を生ずる。この場合、"Y≠0限りX/Y"と翻訳される。別の例によると、プラグイン・モジュール２１８はハードウェア資源、メモリ及びレジスタなどをアクセスすることを試みる命令を翻訳する。図２を参照して上述したように、本発明は仮想資源を維持する仮想環境と一緒に実現される。この場合では、本発明は仮想資源と現実資源との間の必要なマッピングを完了するために資源にアクセスする。
【００２５】
図３に示すように、潜在的なマルウェア３０２−３０６がアーキテクチャニュートラルプログラムコード３０８に翻訳された後、コンパイレーションエンジン２１０及びプラグイン・モジュール２２０はアーキテクチャニュートラルプログラムコード３０８を安全なプログラムコードに「コンパイル」する。図３において、安全なプログラムコードは、安全プログラムコード３１０、安全プログラムコード３１２、及び安全プログラムコード３１４により表される。図示されるように、安全プログラムコードは、ＣＰＵ２０２（図２）のアーキテクチャに依存していくつかの異なるフォーマットのいずれかにより生成される。当業者には知られているように、コンパイリングは伝統的に高レベルプログラムコードを実行可能コードに変換することとして定義されている。本発明に関しては、コンパイレーションエンジン２１０がアーキテクチャニュートラルプログラムコード３０８から実行可能なプログラムコードを生成する。本発明の１つの実施の形態では、アーキテクチャニュートラルプログラムコード３０８は２進値フォーマットである。すなわち、コンパイレーションエンジン２１０により実行される「コンパイレーション」は、アーキテクチャニュートラル２進値コードから実行可能なプログラムコードを生成することとして定義される。また、コンパイレーションエンジン２１０はプログラムコードをアーキテクチャニュートラルフォーマットから特定のコンピュータアーキテクチャの制約を満足する実行可能なコードへ「コンパイル」するための一般化されたフレームワークを提供する。換言すると、コンパイレーションエンジン２１０は、２つのフォーマット間のプログラムコードの「コンパイリング」に限定されない。その代わり、コンパイレーションエンジン２１０は、アーキテクチャニュートラルプログラムコード３０８をＣＰＵ２０２のアーキテクチャに依存していくつかのフォーマットの内のいずれか１つのプログラムコードにコンパイルできる。この点では、コンパイレーションエンジン２１０により提供される機能は、プラグイン・モジュールにより実行できる。本発明の実際の実施の形態では、プラグイン・モジュール２２０は、アーキテクチャニュートラルプログラムコードを"X86"32ビット命令組の制約を満座苦するプラグラムコードに「コンパイル」することをサポートする。
【００２６】
図４は、本発明によって形成された翻訳方法４０４の１つの例示的な実施の形態のフロー図である。潜在的なマルウェアを実行する要求の受信に応答して、翻訳方法４０４は潜在的なマルウェア内の命令を順次に解析する。本発明により前もって解析されていない基本ブロック中の第１命令である命令に出会った時、翻訳方法４００はスキャナーにその基本ブロック内のマルウェアについての探索を実行させる。選択された命令がその命令の属性を記述するデータ組に復号される。そして、そのデータ組が選択された命令をアーキテクチャニュートラルフォーマットの安全で機能的に等価なプログラムコードへ翻訳するために使用される。プログラムコードの基本ブロックをアーキテクチャニュートラルフォーマットに翻訳した後、翻訳されたプログラムコードが実行可能なコードに「コンパイル」される。図１−図３と関連する説明を参照しながら、図４に示された例示的な翻訳方法４００を説明する。
【００２７】
ステップ４０２において、翻訳方法４００は、アイドルのままであり、潜在的なマルウェアの実行の要求を待つ。当業者には理解されるように、潜在的なマルウェアの実行の要求はさまざまに異なるメカニズムを介して開始される。例えば、コンピュータユーザは、プログラムと関連するアイコン上で「ダブルクリック」することによりプログラムの実行を開始する要求を出す。別の例によると、コンピュータユーザは、ドロップダウン・メニュー又は他のグラフィカルベースの入力システムから「オープンファイル」命令を出すことにより、ファイルに関連したプログラムの実行を開始する。しかし、当業者には知られるように、上述の例は例示であり限定するものではなく、潜在的なマルウェアの実行の要求を出す多くの異なったメカニズムが存在する。
【００２８】
ステップ４０２で受信された要求を満足するために、ステップ４０４でオペレーティングシステムの既存のコンポーネントは潜在的なマルウェアの実行を準備するアクションを実行する。典型的には、プログラムを実行するために、オペレーティングシステムはプログラムのためにアドレス空間（すなわち、メモリ）を初期化して、必要なプログラムコードを初期化されたアドレス空間にコピーする。しかし、当業者には知られているように、マルウェアはマルウェアシグネチャが識別される前にペイロードを復号又は別途に「アンパック」することにより、実行中にメモリ内のデータを変えるかもしれない。典型的には、マルウェアペイロードは既にメモリ内に記憶されているデータへの算術及び／又は論理演算の適用の結果として「アンパック」される。いずれにしても、潜在的なマルウェアに関連したプログラムコードはステップ４０４でメモリ内にロードされる。
【００２９】
ステップ４０６で、翻訳方法４００は、基本ブロック間の実行フローを含む潜在的なマルウェア中の基本ブロックの特性を記述するデータ構造を初期化する。図５を参照して以下にさらに詳細に説明するように、本発明により典型的に実行されるプログラムコードのユニットは基本ブロックである。ステップ４０６で、データ構造は各基本ブロックを記述する情報により初期化される。例えば、現在の基本ブロックの後に実行される予定の基本ブロックの後続の基本ブロックは識別されてデータ構造中に記憶される。また、基本ブロック間に発生する制御移転のタイプ（すなわち、条件付及び無条件ブランチ等）は識別されてデータ構造中に記憶される。この点に関して、他の基本ブロックからの制御を受領する又は別の基本ブロックへ制御を移転する命令が識別される。
【００３０】
ステップ４０８では、翻訳方法４００により解析される命令が選択される。前述したように、プログラム中の命令は所定の順番で実行される。しかし、ブランチなどの或る命令は、実行されるべき予定された次の命令を識別するのに使用されたレジスタ内に新しい値を置くことにより、実行の通常の順番を中断する。以下にさらに詳細に説明するように、通常の実行の順番を中断する命令は基本ブロックの終わりにマークされる。翻訳方法４００により実行される解析は、プログラムが実行される時に発生する同じ実行フローに従う。しかし、プログラムコードが解析されてその後に実行される基本ユニットは基本ブロックである。実行のフロー中の命令は当業者に一般的に知られている技術を使用して識別されるため、ステップ４０８で翻訳方法により使用される技術のさらなる説明はここでは提供されない。
【００３１】
図４に示すように、翻訳方法４００はステップ４１０で、ステップ４０８で選択された命令が本発明により以前に解析されなかった基本ブロック中の第１命令かどうかを決定する。本発明の１つの実施の形態では、プログラム入り口ポイント又はジャンプ命令の宛先アドレスにおける命令は基本ブロック内の最初の命令として識別される。また、翻訳プログラム４００は、選択された命令のアドレスをもしあれば前に解析された各基本ブロック内の第１命令のアドレスと比較することにより、基本ブロックが以前に安全なプログラムコードに翻訳されたかどうかを決定する。もし、選択された命令が以前に解析された基本ブロック中の第１命令のアドレスと一致しない場合、選択された命令は以前に安全なプログラムコードに翻訳されていない新しい基本ブロックの始まりであり、そして翻訳メソッド４００はステップ４１２に進む。逆に、もし、選択された命令が基本ブロック中の第１命令でない場合又は現在の基本ブロックが以前に解析された場合、翻訳方法４００はステップ４１４に進む。
【００３２】
ステップ４１２において、ステップ４１０により識別された基本ブロックについての入り口がステップ４０６で初期化されたデータ構造中に生成される。前述したように、本発明により維持されるデータ構造は安全なプログラムコードに翻訳された基本ブロックの特性を記述する。例えば、各基本ブロックの開始アドレス及び基本ブロックの属性を記述する他のデータがデータ構造内に記憶される。また、ステップ４１２でデータ構造内のエントリイを生成することは、基本ブロックに関連する或る変数をインスタシェートすることを含む。例えば、基本ブロックがマルウェアについてスキャンされたかどうかを示す変数（以降、「走査済み変数」と呼ぶ）及び基本ブロックが安全なプログラムコードに翻訳されたかどうかを示す変数（以降、「翻訳済み変数」と呼ぶ）がインスタンシェートされてデータ構造内に記憶される。これらの変数がインスタンシェートされる時、ステップ４１２で、これらの値が基本ブロックはマルウェアについてスキャンされておらず、又は、安全なプログラムコードに翻訳されていないことを示す。
【００３３】
ステップ４１４で、翻訳方法４００は選択された命令を含んだ基本ブロックが実行前にマルウェアについて探索される必要があるかどうかを決定する。上述したように、「走査済み」変数は各基本ブロックと関連していて、基本ブロックがマルウェアについて以前に探索されたかどうかを示す。ステップ４１４で、翻訳方法４００は現在の基本ブロックと関連する変数の値を識別する。もし、現在の基本ブロックがマルウェアについて以前に探索されていない場合、翻訳方法４００はステップ４１６に進む。反対に、もし、基本ブロックが以前に探索されている場合、翻訳方法４００は以下に説明するステップ４２６へ進む。
【００３４】
ステップ４１６で、翻訳方法４００はステップ４０８で選択された命令が位置する基本ブロックについてスキャンを実行する。本発明の１つの実施の形態では、スキャナー２０４（図２）中のソフトウェアで実現されたルーチンがマルウェアについて現在の基本ブロックを探索する。上述したように、大部分のアンチビールスソフトウェアアプリケーション又はスキャナーはデータのパターンがマルウェアの「シグネチャ」と一致することにより、マルウェアを探索する。しかし、いくつかの隠れたマルウェアについて生ずるように、既存のアンチビールスソフトウェアへの脆弱性はデータが「アンパック」されている時（すなわち、復号されている）又は実行中にメモリ内にロードされている時に発生する。この場合、潜在的なマルウェア中のプログラムコードの実行は、実行されているマルウェアについて追加のスキャンをすることなしに続けられる。換言すると、実行はデータが実行時に「アンパック」される時に中断されない。しかし、図５を参照して以下により詳細に説明するように、本発明はデータがランタイム時に「アンパック」される時にプログラム実行を中断する。すなわち、ステップ４１６で、スキャナー２０４はマルウェアペイロードが「アンパック」された又はそのほかメモリ内にロードされた後に隠れたマルウェアについて探索する。また、現在の基本ブロックがスキャンされた後、ステップ４１６で、翻訳方法４００は現在の基本ブロックに関連した「走査済み」変数の値を、現在の基本フロックがマルウェアについて探索されたことを示すために設定する。
【００３５】
図４に示すように、ステップ４１８で、翻訳メソッド４００は現在の基本ブロックがステップ４１６でマルウェアに感染しているものとして識別されているかどうかを決定する。もし、マルウェア感染が識別されている場合、方法４００はステップ４２０で業界において一般的に知られている技術を使用してユーザに感染を報告するために進む。もし、マルウェア感染が識別されていない場合、翻訳方法４００は以下に説明するステップ４２６へ進む。
【００３６】
ステップ４２２で、翻訳方法４００はマルウェアの識別が十分に精度でされたかどうかを決定する。マルウェアが検出された時、マルウェアの識別が典型的にシグネチャ又はマルウェアの他の特性から明らかになる。しかし、いくつかの場合、マルウェア感染は既知のマルウェアの正確な識別無しに明らかである。例えば、いくつかのマルウェアは識別することが困難な変形を有する。いずれにしても、もし、基本ブロックが感染していてマルウェアの識別が十分な精度でされた場合、翻訳方法４００はステップ４２４へ進み、そこで終了する。反対に、もし、マルウェアの識別が十分な精度でもってなされない場合、翻訳方法４００はステップ４２６へ進む。
【００３７】
ステップ４２６で、翻訳方法４００は選択された命令を含む基本ブロックが実行される前に安全なプログラムコードに翻訳される必要があるかどうか決定する。前述したように、本発明は基本ブロックが以前に翻訳されて安全な実行可能なプログラムに「コンパイル」されたかどうかを示す「翻訳済み」変数を各基本ブロックと関連付けする。もし、基本ブロックが以前に翻訳されずそして実行可能で安全なプログラムコードに「コンパイル」されていない場合、翻訳済み変数は基本ブロックが潜在的なマルウェアであることを示す。ステップ４２６で、翻訳方法４００は現在の基本ブロックについて翻訳済み変数の値を識別する。もし、現在の基本ブロックが潜在的なマルウェアである場合、翻訳方法４００はステップ４２８に進む。反対に、もし、基本ブロックが以前に翻訳されて実行可能な安全なプログラムコードに「コンパイル」されている場合、翻訳方法４００はステップ４００に進んで終了する。この場合、基本ブロックは図５を参照して以下に説明される実行方法５００に従って安全に実行される。
【００３８】
図４に示すように、翻訳方法４００はステップ４２８で選択された命令をソース言語（すなわち、ネイティブＣＰＵプログラムコード、プラットホーム独立バイトコード、スクリプティングプログラムコード等）からその命令を記述するデータ組に復号する。データ組は限定的ではなく、命令のタイプ及び長さ、オペランドのタイプ及び数、命令を実行するために必要な特権レベルを含む。ステップ４２８で、選択された命令がソース言語からその命令を記述するデータ組へ復号されて、選択された命令により提供される機能がアーキテクチャニュートラルフォーマットへ翻訳される。選択された命令は一般に知られている技術を使用して復号されるため、本発明に使用されるその技術のさらなる説明はここでは提供されない。
【００３９】
ステップ４３０で、選択された命令はアーキテクチャニュートラルフォーマットの安全なプログラムコードに翻訳される。翻訳は、プラグイン・モジュール２１８（図２）などのプラグイン・モジュールにより翻訳エンジン２０６へ実行される。本発明の１つの実施の形態を説明する一般的な用語において、翻訳方法４００は解析されている選択された命令をアーキテクチャニュートラルフォーマットの安全な命令に変換する。翻訳を実行するために、「アンパック」（すなわち、復号）又はマルウェア機能を発生するために使用される命令の各タイプは、プラグイン・モジュール内に含まれるルーチンにより翻訳エンジン２０６へ安全なプログラムコードに翻訳される。この点に関して、算術演算を実現する命令（すなわち、「加算」、「乗算」等）、ビットワイズ演算（すなわち、「ａｎｄ」、「ｏｒ」、「ｘｏｒ」等）、ハードウェア装置との入力／出力（すなわち、「読み出し」、「書き込み」等）などは、アーキテクチャニュートラルフォーマットの機能的に等価なプログラムコードに翻訳される。例えば、本発明は仮想Ｉ／Ｏシステム２１４を含む仮想環境２１２内の資源を使用する。すなわち、もし、選択された命令がＩ／Ｏ装置にアクセスすることを試みる場合、方法４００は入力及び出力が仮想Ｉ／Ｏシステム２１４へ送られるように命令を翻訳する。本発明により翻訳される命令の特別な例が説明されたが、例は例示のためであり、限定的に解釈すべきではない。
【００４０】
図４に示すように、翻訳方法４００はステップ４３２で、ステップ４０８にて選択された命令が基本ブロック内の最後の命令であるかどうかを決定する。当業者には理解されるように、基本ブロックはジャンプ命令などの単一出口で終了する。ステップ４３２で、翻訳方法４００は、解析中の命令が基本ブロック内の最後の命令であるかどうかを決定する。基本ブロック内の最後の命令を一般に当該分野で知られている技術を使用して識別できるため、本発明により使用されるその技術のさらなる説明はここではされない。もし、解析中の命令が現在のブロック内の最後の命令である場合、翻訳方法４００はステップ４３２へ進む。反対に、選択された命令が基本ブロック内の最後の命令でない場合、翻訳方法４００はステップ４０８に戻り、現在の基本ブロック内の最後の命令が選択されるまでステップ４０８乃至４３２が繰り返される。
【００４１】
図４に示すように、ステップ４３４で、翻訳方法４００により現在の基本ブロックが実行可能なプログラムコードに「コンパイル」される。当業者には知られているように、コンパイラはソース言語により書かれているプログラムコードを取得して特定のアーキテクチャのために設計された実行可能なプログラムコードを生成するプログラムである。典型的に、コンパイラは最初にソース言語から全てのプログラムコードを１つずつフレーズする。そして、１つ又は複数の連続的なステージにおいて、コンパイラは実行可能なプログラムコードを命令が他の命令を正確に参照することを保証するように構成する。コンパイラにより生成された出力は計算装置のアーキテクチャ要件を満足し、そしてＣＰＵが命令を連続して実行することを可能にする。本発明に関して、ステップ４３４で、翻訳方法４００はアーキテクチャニュートラルプログラムコードから実行可能なプログラムコードを生成する。アーキテクチャニュートラルプログラムコードは２進値フォーマットであるから、ステップ４３４で発生する「コンパイリング」はアーキテクチャニュートラル２進コードから実施可能プログラムコードを生成することを含む。また、以下にさらに詳細に説明するように、「コンパイレーション」の間、１つ又は複数の命令がコンパイルされたコードに付加される。本発明の実際の実施の形態では、コンパイレーションエンジン２１０のプラグイン・モジュール２２０は、アーキテクチャニュートラルプログラムコードの"X86"32ビット命令組の制約を満足するプログラムコードへの「コンパイリング」をサポートする。そして、翻訳方法はステップ４３６へ進みそこで終了する。
【００４２】
ステップ４３６では、翻訳方法４００は「コンパイルされた」プログラムコードがジャンプ命令であるかどうかを決定する。典型的に、基本ブロックは実行の制御を現在の基本ブロックの外に移すジャンプ命令により終了する。ステップ４３０で、本発明は出会ったジャンプ命令を、基本ブロックが実行された後に実行の制御をブロックマネージャ２０８（図２）に戻す新しいジャンプ命令に翻訳する。基本ブロックが実行される前に、ブロックマネージャ２０８は、スキャナー２０４がマルウェアを探索することを含む上述された或るアクションを実行する。しかし、プログラムコードの基本ブロックはマルウェア検出の目的のために本発明により分割、合体、又はその他の方法で操作される。例えば、図５を参照してより詳細に説明するように、実行がメモリ内のプログラムコードを基本ブロック内の現実行ポイントの後で変化させる時、基本ブロックをマルウェアについてスキャンすることなく実行を続けることは好ましくない機能を結果する。この場合、基本ブロックは２つ又は複数の基本ブロックに「分割」される。この結果、この場合及びその他の場合、翻訳方法４００はジャンプ命令でもって終了しない基本ブロックに出会う。もし、コンパイルされたプログラムコード中の最後の命令がジャンプ命令の場合、プログラム制御は現在の基本ブロックが実行された後にブロックマネージャ２０８へ戻される。この場合、翻訳方法４００はブロック４４０へ進み、そこで終了する。反対に、コンパイルされたプログラムコード中の最後の命令がジャンプ命令でない場合、制御は現在の基本ブロックが実行された後にブロックマネージャ２０８へ普通は戻されない。この場合、翻訳方法４００はステップ４３８へ進む。
【００４３】
ステップ４３８で、１つの命令が「コンパイルされた」プログラムコードに追加されて、基本ブロックの実行が完了した後にプログラム制御をブロックマネージャ２０８（図２）へ戻す。本発明はメモリ内にロードされた潜在的なマルウェアが実行前にスキャンされて安全なプログラムコードに翻訳されるようにプログラム実行のフローの実施を管理する。上述したように、ブロックマネージャ２０８は実行のフローを制御する。すなわち、命令がステップ４３８でコンパイルされたプログラムコードに追加されて基本ブロックの実行の完了後にプログラム制御をブロックマネージャ２０８へ戻す。
【００４４】
本発明の代替的な実施の形態では、プログラム制御をブロックマネージャ２０８へ移転しない「コンパイルされた」プログラムコードへ命令が追加される。この実施の形態では、もし、実行される予定の次の基本ブロックがクリーンな場合、例えば、以前にマルウェアについてスキャンされて、実行の結果として変更されなかった場合、プログラム制御を実行が予定されている次の基本ブロックへ移転する命令がステップ４３８で追加される。
【００４５】
図４を参照して説明された翻訳方法４００中のステップはまた、図示されたのとは異なる順序で実行できる。また、いくつかのステップが本発明の範囲から逸脱することなく翻訳方法４００から除去又は追加できる。例えば、潜在的なマルウェアの基本ブロックが安全なプログラムコードに翻訳された後、安全なプログラムコードが「最適化」される。すなわち、実行が早くなるように再構成される。すなわち、図４に示された方法４００は本発明の実施の形態が実現できる単に１つの方法の例を提供している。
【００４６】
図５は、翻訳されたプログラムコードの基本ブロックを実行するために図４を参照して説明された翻訳プログラム４００と一緒に使用される１つの例示的な実行方法５００のフロー図である。より詳細には、基本ブロック中の命令はハードウェアベースのＣＰＵ上で順次に選択されて実行される。いくつかの場合、メモリ内のプログラムコードは「アンパックされて」（すなわち、復号されて）前に翻訳されたプログラムコードが変更される。この場合、変更された基本ブロックは「汚い」。すなわち、実行される前にマルウェアについて探索されて安全なプログラムコードに翻訳される必要がある。図１−図４のそれらの説明を続けて参照して、図５に示される例示的な実行方法５００を以下に説明する。
【００４７】
ステップ５０２で、実行方法５００はアイドルにとどまり、翻訳されたプログラムコードが実行できるようになるまで待つ。本発明の実際の実施の形態では、翻訳されたプログラムコードは翻訳方法４００（図４）が基本ブロックの翻訳を完了する時、実行できるようになる。
【００４８】
ステップ５０４で、実行方法５００は実行が予定されている基本ブロック内で命令を選択する。本発明の１つの実施の形態では、安全なプログラムコードに翻訳された基本ブロックは一時的な記憶のために使用されるメモリの領域又は「バッファ」内に記憶される。「バッファ」に割り当てられたメモリアドレスは潜在的なマルウェアにより変更されない。選択された各命令について、実行方法５００は命令を実行させる。そして、実行が中断条件を生じたかどうかに関して決定が行われる。選択された命令が中断条件を発生した場合、実行方法５００は中断条件のソースを識別する。いくつかの場合、中断条件はメモリ内で「アンパック」（すなわち、復号）中のプログラムコードから発生する。この場合、変更された又は書き換えられた基本ブロックは実行される前に安全なプログラムコードへ翻訳される。
【００４９】
ステップ５０６で、実行方法５００は選択された命令を実行させる。当業者には知られているように、ＣＰＵの主要な目的は命令を実行することである。すなわち、実行方法５００のこの実施を実現するためにいくつかの商業的に利用可能なＣＰＵのいずれか１つが使用できる。典型的に、ＣＰＵは命令がメモリから順次に「取り出され」てそして「実行」される「取り出し及び実行」サイクルに従う。本発明に関して、命令は潜在的なマルウェアを記憶しているメモリ位置の代わりにバッファから「取り出される」。上述したように、バッファは計算装置をマルウェアの影響にさらすことなく安全に実行できる翻訳されたプログラムコードを含む。
【００５０】
実行中、方法５００は、選択された命令が違法又は特権操作の実行を試みるかどうかを決定する。例えば、選択された命令はゼロで数を割り算する算術演算又は特権メモリ位置へのアクセスを実行することを試みる。本発明の１つの実施の形態では、潜在的なマルウェアから翻訳された安全なプログラムコードは実行中及び中断実行中に発生するエラー条件をプログラムコードが検出できるように構成されている。もし、エラー条件が実行中に識別された場合、前に開発された例外ハンドラーがエラー状態からの回復を試みる。当業者には知られているように、例外ハンドラーは中断を処理する構造化メソッドを使用するイベントドリブンルーチンである。いくつかの場合、エラー状態は回復可能であり、プログラム実行は中断条件が出会った後に再開される。別の場合では、中断条件がクリティカルであり、プログラム実行が完了前に停止する。しかし、プログラム制御が例外ハンドラーに移転される前に、実行を再開するのに必要な情報がエラー状態が回復可能なイベント内に記憶される。
【００５１】
図５に示されるように、ステップ５０８で、選択された命令が実行された後、実行方法５００は中断条件が実行の結果として発生したかどうかを決定する。中断条件は限定的ではなく、実行により（１）現在の基本ブロック中の実行ポイント後のデータが変更されている、及び（２）実行が予定されているその後の基本ブロック内のデータが変更されている場合を含む、異なる場合において発生する。以下により詳細に説明するように、実行方法５００はこれらの中断条件を異なって処理する。ステップ５０８で、もし、中断条件が検出された場合、検出方法５００は以下に説明されたブロック５００に進む。反対に、もし、ステップ５０８で中断条件が検出されなければ、実行方法５００はステップ５１０へ進む。
【００５２】
ステップ５１０で、実行方法５００は現在の基本ブロックの全ての命令が実行されたかどうかを決定する。前述したように、本発明がプログラムコードを実行する基本ユニットは基本ブロックである。もし、現在の基本ブロック中の全ての命令が実行された場合、実行方法５００は以下に説明するステップ５２０へ進む。反対に、もし、現在の基本ブロック中の命令が実行されていない場合、方法５００はステップ５０４へ戻り、そして、現在の基本ブロック中の全ての命令が実行されるまでステップ５０４乃至５１０が繰り返される。
【００５３】
ステップ５１２で、実行方法５００はステップ５０８で識別された中断条件がプログラムコードの即座の翻訳を必要とするかどうかを決定する。例えば、選択された命令の後に実行が予定される現在の基本ブロック中のプログラムコードが変更されるように実行が潜在的なマルウェアを「アンパック」（すなわち、復号化）する場合は、変更されたプログラムコードの翻訳が実行の再開前に行われる。図４に関して前述したように、プログラムコードの基本ブロックはマルウェア検出の目的のために本発明により分割、合併、又はその他の方法により操作される。現在の基本ブロック中のプログラムコードが現在実行ポイント後で変更された場合、現在の基本ブロックは２つの基本ブロックに分割される。第一は既に実行されたプログラムコードを含んでおり、第二は選択された命令の後のプログラムコードを含んでいる。以下にさらに詳細に説明するように、第二の基本ブロックは実行前にマルウェアについてスキャンされてそして安全なプログラムコードに翻訳される。もし、プログラムコードの即座の翻訳が必要でない場合、実行方法５００は以下に説明するステップ５１６へ進む。反対に、即座のプログラムコードの翻訳が必要な場合、実行方法５００はステップ５１４へ進む。
【００５４】
ステップ５１４で、実行方法５００は基本ブロックがスキャンされて安全なプログラムコードへ翻訳される。より詳細には、もし、ステップ５１４に到達した場合、基本ブロックは現在の実行ポイントに基づいて２つの基本ブロックに分割される。選択された命令の後に実行が予定されているプログラムコードを含む基本ブロックは、実行前にスキャン及び安全なプログラムコードへの翻訳が必要であるとしてマークされる。プログラムコードの基本ブロックを安全なプログラムコードへ翻訳する方法の１つの実施の形態が図４を参照して上述されている。そして、実行方法５００が以下に説明するステップ５２０に進む。
【００５５】
ステップ５１６で、実行方法５００は、現在の基本ブロック後に実行が予定される引き続く基本ブロック内のプログラムコードが実行の結果として変更された理由でステップ５０８において識別された中断条件が生じたかどうかを決定する。例えば、その後の基本ブロックが変更されるように選択された命令の実行がプログラムコードを「アンパック」（すなわち、復号）する場合、その後の基本ブロックが実行前にマルウェアについて探索されて安全なプログラムコードに翻訳される。もし、ステップ５０６で識別された中断条件が引き続く基本ブロック中のプログラムコードの変更された理由で生じた場合、実行方法５００はステップ５１８に進む。反対に、中断条件が異なる理由で生じた場合、実行方法５００は以下に説明するステップ５２０へ進む。
【００５６】
ステップ５１８で、実行方法５００は、実行前に基本ブロックがマルウェアについて探索されて安全なプログラムコードに翻訳されるように、選択された命令の実行の結果として変更された基本ブロックをマークする。図４（ステップ４１２で）を参照して説明したように、走査済み変数及び翻訳済み変数が各基本ブロックと関連付けられている。これらの変数は基本ブロックがマルウェアについて探索されているか又は安全なプログラムコードに翻訳されているかどうかについて示す。ステップ５１８で、実行方法５００は、実行前にマルウェアについてスキャンが必要で安全なプログラムコードへ翻訳することが必要な基本ブロックを示すために、実行の結果として変更された各基本ブロックに関連した変数の値を変更する。
【００５７】
ステップ５２０で、実行方法５００はステップ４０６（図４）で初期化されたデータ構造を更新する。前述したように、本発明は基本ブロック間で実行のフロー（流れ）を追跡するためにデータ構造を使用する。本発明のこの観点を実現するために、ブロックマネージャ２０８（図２）は実行の制御を獲得してデータ構造の更新を実行する。当業者には理解されるように、実行方法５００を用いて基本ブロックを実行することは実行の元のフローを変更することができる。例えば、基本ブロックの実行はメモリ内にロードされたデータを前に復号化されたデータにより変更させることができる。明らかに、この状態では、基本ブロック間の実行の元のフローは変化している。この結果、実行方法５００は実行の結果として発生した変化を反映するためにデータ構造を更新する。典型的に、実行が予定されている次の基本ブロックは安全なプログラムコードに翻訳されて、翻訳方法４００と実行方法５００により実行される。そして、実行方法５００はステップ５２２に進み、そこで終了する。
【００５８】
本発明の好適な実施の形態が説明されたが、本発明の精神と範囲から逸脱することなくさまざまな変更ができることが理解される。
【図面の簡単な説明】
【００５９】
【図１】本発明が識別のために使用できるポリモルフィックマルウェアのコンポーネントを示すブロック図。
【図２】本発明によるダイナミック翻訳の実行とプログラムコードの実行に適した計算装置のコンポーネントのブロック図。
【図３】本発明によるアーキテクチャニュートラルフォーマットを利用した安全プログラムコードに潜在的なマルウェアを翻訳するプロセスを示すブロック図。
【図４Ａ】本発明による潜在的なマルウェアを安全なプログラムコードに翻訳するために使用できる翻訳方法の例示的な実施の形態を示すフロー図。
【図４Ｂ】本発明による潜在的なマルウェアを安全なプログラムコードに翻訳するために使用できる翻訳方法の例示的な実施の形態を示すフロー図。
【図５】本発明によるプログラムコードを実行するために使用できる実行方法の例示的な実施の形態を示すフロー図。
【図１】
2008523471.tif 000003
【図２】
2008523471.tif 000004
【図３】
2008523471.tif 000005
【図４Ａ】
2008523471.tif 000006
【図４Ｂ】
2008523471.tif 000007
【図５】
2008523471.tif 000008