JP4950902B2 - ダイナミックトランスレーションによる先取りコンピュータマルウェアの保護 - Google Patents

ダイナミックトランスレーションによる先取りコンピュータマルウェアの保護 Download PDF

Info

Publication number
JP4950902B2
JP4950902B2 JP2007544568A JP2007544568A JP4950902B2 JP 4950902 B2 JP4950902 B2 JP 4950902B2 JP 2007544568 A JP2007544568 A JP 2007544568A JP 2007544568 A JP2007544568 A JP 2007544568A JP 4950902 B2 JP4950902 B2 JP 4950902B2
Authority
JP
Japan
Prior art keywords
program code
malware
execution
basic block
instruction
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.)
Active
Application number
JP2007544568A
Other languages
English (en)
Other versions
JP2008523471A (ja
Inventor
エム.マリネスク エイドリアン
イー.ステパン エイドリアン
マリウス ゲオルゲスク ゲオルゲ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2008523471A publication Critical patent/JP2008523471A/ja
Application granted granted Critical
Publication of JP4950902B2 publication Critical patent/JP4950902B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/16Protection against loss of memory contents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • 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/562Static detection
    • G06F21/563Static detection by source code analysis

Description

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

Claims (18)

  1. 潜在的なマルウェアを実行する要求の受信に応答して安全なプログラムコードを生成するためのコンピュータにより実施される方法であって、
    前記マルウェアに含まれているプログラムコードを復号するステップと、
    前記復号されたプログラムコードを安全で機能的に等価なプログラムコードに翻訳するステップであって、前記翻訳されたプログラムコードが翻訳後に変更されたか否かを判定し、変更があったときは、変更後のプログラムの実行前に、当該プログラムコードを再度翻訳する、ステップと、
    計算装置上で前記等価なプログラムコードを実行するステップと
    を含むことを特徴とする方法。
  2. 前記プログラムコードを復号するステップの前に、メモリ内に前記マルウェアの基本ブロックをロードするステップをさらに含むことを特徴とする請求項1に記載の方法。
  3. 前記プログラムコードを復号するステップの前に、前記マルウェアがマルウェア特性を有するプログラムコードを含むかどうかを決定するために、前記ロードされた基本ブロックを解析するステップをさらに含むことを特徴とする請求項2に記載の方法。
  4. 前記基本ブロックをロードするステップでは、前記基本ブロック内の第1の命令が識別されることを特徴とする請求項2に記載の方法。
  5. 前記基本ブロックをロードするステップでは、前記基本ブロック内の最後の命令が識別されることを特徴とする請求項2に記載の方法。
  6. 前記プログラムコードを復号するステップは、前記マルウェアから、アーキテクチャニュートラルプログラムコードを生成するステップを含むことを特徴とする請求項1に記載の方法。
  7. ソース言語が、X86-32ビットコンピュータアーキテクチャの仕様を満足することを特徴とする請求項6に記載の方法。
  8. 前記等価なプログラムコードに翻訳するステップは、
    前記マルウェア内の命令を選択するステップと、
    前記マルウェアの機能を実現することができないアーキテクチャニュートラルフォーマットの等価な命令の組を生成するステップと、
    前記アーキテクチャニュートラルフォーマットの等価な命令の組を実行可能なプログラムコードにコンパイルするステップと
    を含むことを特徴とする請求項1に記載の方法。
  9. 前記等価なプログラムコードに翻訳するステップは、
    前記復号されたプログラムコード内の命令を選択するステップと、
    前記マルウェアの機能を実現することができない実行可能な安全で機能的に等価の命令の組を生成するステップと
    を含むことを特徴とする請求項1に記載の方法。
  10. 前記等価なプログラムコードを実行するステップでは、当該等価なプログラムコードは、基本ブロック単位で実行されることを特徴とする請求項1に記載の方法。
  11. 前記基本ブロック単位での実行は、
    前記基本ブロック内の命令を選択するステップと、
    中央処理ユニットにより前記命令を処理するステップと、
    前記選択された命令の実行により中断時要件が生じたかどうかを決定するステップとを含むことを特徴とする請求項10に記載の方法。
  12. 前記選択された命令の実行により、当該選択された命令の後に実行される予定の基本ブロック内のプログラムコードを変更されるとき、前記基本ブロックは、2つの基本ブロックに分割されることを特徴とする請求項11に記載の方法。
  13. 前記等価なプログラムコードを実行するステップは、
    実行中に発生するエラーを検出するステップと、
    実行を中断して、例外ハンドラーを呼び出すステップと、
    前記例外ハンドラーが実行を完了した後に、実行の再開に必要な情報を記憶するステップと
    を特徴とする請求項11に記載の方法。
  14. 請求項1ないし13のいずれか1項の方法をコンピュータに実行させるための命令を記憶したことを特徴とするコンピュータ読取可能記憶媒体。
  15. 潜在的なマルウェアを安全に実行するための計算装置であって、
    前記マルウェアに含まれているプログラムコードを復号する手段と、
    前記復号されたプログラムコードを安全で機能的に等価なプログラムコードに翻訳する手段であって、前記翻訳されたプログラムコードが翻訳後に変更されたか否かを判定し、変更があったときは、変更後のプログラムの実行前に、当該プログラムコードを再度翻訳する、手段と、
    計算装置上で前記等価なプログラムコードを実行する手段と
    を備えたことを特徴とする計算装置。
  16. プログラムコードがメモリ内にロードされたときに、プログラムの実行フローを追跡するブロックマネージャと通信するように構成されたメモリをさらに含むことを特徴とする請求項15に記載の計算装置。
  17. 前記復号されたプログラムコードを翻訳する手段は、前記復号されたプログラムコードを、アーキテクチャニュートラルフォーマットのプログラムコードに翻訳するように動作するプラグイン・モジュールをサポートするように構成されていることを特徴とする請求項15に記載の計算装置。
  18. 前記プログラムコードを復号する手段は、計算装置上で実行できるプログラムコードに、アーキテクチャニュートラルフォーマットのプログラムコードをコンパイルするように動作するプラグイン・モジュールをサポートするように構成されていることを特徴とする請求項15に記載の計算装置。
JP2007544568A 2004-12-06 2005-12-05 ダイナミックトランスレーションによる先取りコンピュータマルウェアの保護 Active JP4950902B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/005,000 2004-12-06
US11/005,000 US7636856B2 (en) 2004-12-06 2004-12-06 Proactive computer malware protection through dynamic translation
PCT/US2005/043773 WO2006062849A2 (en) 2004-12-06 2005-12-05 Proactive computer malware protection through dynamic translation

Publications (2)

Publication Number Publication Date
JP2008523471A JP2008523471A (ja) 2008-07-03
JP4950902B2 true JP4950902B2 (ja) 2012-06-13

Family

ID=36575761

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007544568A Active JP4950902B2 (ja) 2004-12-06 2005-12-05 ダイナミックトランスレーションによる先取りコンピュータマルウェアの保護

Country Status (6)

Country Link
US (1) US7636856B2 (ja)
EP (1) EP1800434B1 (ja)
JP (1) JP4950902B2 (ja)
KR (1) KR101213821B1 (ja)
CN (1) CN101438529B (ja)
WO (1) WO2006062849A2 (ja)

Families Citing this family (68)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7810158B2 (en) * 2004-12-16 2010-10-05 At&T Intellectual Property I, L.P. Methods and systems for deceptively trapping electronic worms
US8719924B1 (en) * 2005-03-04 2014-05-06 AVG Technologies N.V. Method and apparatus for detecting harmful software
US20070067844A1 (en) * 2005-09-16 2007-03-22 Sana Security Method and apparatus for removing harmful software
US8646080B2 (en) * 2005-09-16 2014-02-04 Avg Technologies Cy Limited Method and apparatus for removing harmful software
US7349931B2 (en) * 2005-04-14 2008-03-25 Webroot Software, Inc. System and method for scanning obfuscated files for pestware
US7571476B2 (en) * 2005-04-14 2009-08-04 Webroot Software, Inc. System and method for scanning memory for pestware
US7591016B2 (en) * 2005-04-14 2009-09-15 Webroot Software, Inc. System and method for scanning memory for pestware offset signatures
US7562293B2 (en) * 2005-05-27 2009-07-14 International Business Machines Corporation Method and apparatus for processing a parseable document
US8078740B2 (en) 2005-06-03 2011-12-13 Microsoft Corporation Running internet applications with low rights
GB2427048A (en) 2005-06-09 2006-12-13 Avecho Group Ltd Detection of unwanted code or data in electronic mail
US7730040B2 (en) * 2005-07-27 2010-06-01 Microsoft Corporation Feedback-driven malware detector
US8407785B2 (en) 2005-08-18 2013-03-26 The Trustees Of Columbia University In The City Of New York Systems, methods, and media protecting a digital data processing device from attack
WO2007133178A2 (en) * 2006-04-21 2007-11-22 The Trustees Of Columbia University In The City Of New York Systems and methods for inhibiting attacks on applications
US8185737B2 (en) 2006-06-23 2012-05-22 Microsoft Corporation Communication across domains
US8261344B2 (en) * 2006-06-30 2012-09-04 Sophos Plc Method and system for classification of software using characteristics and combinations of such characteristics
US8365286B2 (en) * 2006-06-30 2013-01-29 Sophos Plc Method and system for classification of software using characteristics and combinations of such characteristics
US8151352B1 (en) * 2006-07-14 2012-04-03 Bitdefender IPR Managament Ltd. Anti-malware emulation systems and methods
US8190868B2 (en) 2006-08-07 2012-05-29 Webroot Inc. Malware management through kernel detection
US20080127114A1 (en) * 2006-11-28 2008-05-29 Amit Vasudevan Framework for stealth dynamic coarse and fine-grained malware analysis
GB2444514A (en) 2006-12-04 2008-06-11 Glasswall Electronic file re-generation
US9729513B2 (en) 2007-11-08 2017-08-08 Glasswall (Ip) Limited Using multiple layers of policy management to manage risk
US7945787B2 (en) * 2007-04-13 2011-05-17 Computer Associates Think, Inc. Method and system for detecting malware using a remote server
US7912894B2 (en) * 2007-05-15 2011-03-22 Adams Phillip M Computerized, copy-detection and discrimination apparatus and method
US10019570B2 (en) 2007-06-14 2018-07-10 Microsoft Technology Licensing, Llc Protection and communication abstractions for web browsers
GB2452479A (en) * 2007-08-31 2009-03-11 Sony Corp Content protection through deletion of a decryption key in response to a predetermined event
US8341736B2 (en) 2007-10-12 2012-12-25 Microsoft Corporation Detection and dynamic alteration of execution of potential software threats
US8353041B2 (en) * 2008-05-16 2013-01-08 Symantec Corporation Secure application streaming
US8732825B2 (en) * 2008-05-28 2014-05-20 Symantec Corporation Intelligent hashes for centralized malware detection
US8745703B2 (en) * 2008-06-24 2014-06-03 Microsoft Corporation Identifying exploitation of vulnerabilities using error report
US8938806B1 (en) 2008-06-26 2015-01-20 Emc Corporation Partial pattern detection with commonality factoring
US20090328210A1 (en) * 2008-06-30 2009-12-31 Microsoft Corporation Chain of events tracking with data tainting for automated security feedback
US8522200B2 (en) 2008-08-28 2013-08-27 Microsoft Corporation Detouring in scripting systems
US20100058474A1 (en) * 2008-08-29 2010-03-04 Avg Technologies Cz, S.R.O. System and method for the detection of malware
US9122797B2 (en) * 2008-09-30 2015-09-01 Honeywell International Inc. Deterministic remote interface unit emulator
US11489857B2 (en) 2009-04-21 2022-11-01 Webroot Inc. System and method for developing a risk profile for an internet resource
US9087195B2 (en) * 2009-07-10 2015-07-21 Kaspersky Lab Zao Systems and methods for detecting obfuscated malware
EP2438511B1 (en) 2010-03-22 2019-07-03 LRDC Systems, LLC A method of identifying and protecting the integrity of a set of source data
US8082585B1 (en) * 2010-09-13 2011-12-20 Raymond R. Givonetti Protecting computers from malware using a hardware solution that is not alterable by any software
US9058492B1 (en) * 2011-02-14 2015-06-16 Symantec Corporation Techniques for reducing executable code vulnerability
US9032526B2 (en) 2011-05-12 2015-05-12 Microsoft Technology Licensing, Llc Emulating mixed-code programs using a virtual machine instance
US20120331303A1 (en) * 2011-06-23 2012-12-27 Andersson Jonathan E Method and system for preventing execution of malware
US9495541B2 (en) 2011-09-15 2016-11-15 The Trustees Of Columbia University In The City Of New York Detecting return-oriented programming payloads by evaluating data for a gadget address space address and determining whether operations associated with instructions beginning at the address indicate a return-oriented programming payload
CN103257914B (zh) * 2012-02-16 2016-08-17 联想(北京)有限公司 一种获取电池信息的方法和电子装置
US9424427B1 (en) 2012-03-16 2016-08-23 Bitdefender IPR Management Ltd. Anti-rootkit systems and methods
CN104798075A (zh) * 2012-09-28 2015-07-22 惠普发展公司,有限责任合伙企业 应用随机化
US9043906B2 (en) * 2012-11-28 2015-05-26 William Christopher Hardy System and method for preventing operation of undetected malware loaded onto a computing device
RU2514142C1 (ru) 2012-12-25 2014-04-27 Закрытое акционерное общество "Лаборатория Касперского" Способ повышения эффективности работы аппаратного ускорения эмуляции приложений
US9471783B2 (en) * 2013-03-15 2016-10-18 Mcafee, Inc. Generic unpacking of applications for malware detection
US20150007330A1 (en) * 2013-06-26 2015-01-01 Sap Ag Scoring security risks of web browser extensions
GB2518880A (en) 2013-10-04 2015-04-08 Glasswall Ip Ltd Anti-Malware mobile content data management apparatus and method
CA2831711A1 (en) * 2013-10-31 2015-04-30 Ibm Canada Limited - Ibm Canada Limitee Performing safe conditional-load and conditional-store operations
US9330264B1 (en) 2014-11-26 2016-05-03 Glasswall (Ip) Limited Statistical analytic method for the determination of the risk posed by file based content
US10291647B2 (en) 2015-04-27 2019-05-14 The Johns Hopkins University Apparatus and method for enabling safe handling of malware
US10713146B2 (en) * 2015-06-26 2020-07-14 AVAST Software s.r.o. Dynamic binary translation and instrumentation with postponed attachment to running native threads
RU2622627C2 (ru) 2015-09-30 2017-06-16 Акционерное общество "Лаборатория Касперского" Способ обнаружения вредоносных исполняемых файлов, содержащих интерпретатор, посредством комбинирования эмуляторов
US10437998B2 (en) * 2015-10-26 2019-10-08 Mcafee, Llc Hardware heuristic-driven binary translation-based execution analysis for return-oriented programming malware detection
US9858423B2 (en) * 2016-01-11 2018-01-02 International Business Machines Corporation Application modification based on a security vulnerability
US10528734B2 (en) * 2016-03-25 2020-01-07 The Mitre Corporation System and method for vetting mobile phone software applications
US10169581B2 (en) * 2016-08-29 2019-01-01 Trend Micro Incorporated Detecting malicious code in sections of computer files
EP3352110B1 (en) * 2017-01-23 2020-04-01 Cyphort Inc. System and method for detecting and classifying malware
CN107015491B (zh) * 2017-04-13 2019-05-14 北京机械设备研究所 一种顺序控制方法
US11126721B2 (en) * 2018-06-28 2021-09-21 Intel Corporation Methods, systems and apparatus to detect polymorphic malware
WO2020056390A1 (en) * 2018-09-15 2020-03-19 Quantum Star Technologies LLC Bit-level data generation and artificial intelligence techniques and architectures for data protection
US20220292201A1 (en) * 2019-08-27 2022-09-15 Nec Corporation Backdoor inspection apparatus, backdoor inspection method, and non-transitory computer readable medium
CN112527457A (zh) * 2020-12-11 2021-03-19 成都云铀子网络科技有限公司 一种通用Unicorn模拟指令执行的虚拟机实现方法
US20220269784A1 (en) * 2021-02-25 2022-08-25 Quantum Star Technologies Inc. N-dimensional model techniques and architectures for data protection
US11836252B2 (en) 2021-06-23 2023-12-05 Acronis International Gmbh Machine learning through iterative memory analysis for malware detection
US11921850B2 (en) 2021-06-23 2024-03-05 Acronis International Gmbh Iterative memory analysis for malware detection

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU3776793A (en) * 1992-02-27 1993-09-13 Intel Corporation Dynamic flow instruction cache memory
US5398196A (en) * 1993-07-29 1995-03-14 Chambers; David A. Method and apparatus for detection of computer viruses
US6067410A (en) * 1996-02-09 2000-05-23 Symantec Corporation Emulation repair system
US5765030A (en) * 1996-07-19 1998-06-09 Symantec Corp Processor emulator module having a variable pre-fetch queue size for program execution
US5826013A (en) * 1995-09-28 1998-10-20 Symantec Corporation Polymorphic virus detection module
US6330691B1 (en) * 1996-02-23 2001-12-11 Institute For The Development Of Emerging Architectures Llc Use of dynamic translation to provide breakpoints in non-writeable object code
US5732210A (en) * 1996-03-15 1998-03-24 Hewlett-Packard Company Use of dynamic translation to provide fast debug event checks
US5951698A (en) * 1996-10-02 1999-09-14 Trend Micro, Incorporated System, apparatus and method for the detection and removal of viruses in macros
JPH10301772A (ja) * 1997-04-30 1998-11-13 Sony Corp 情報処理装置および情報処理方法、並びに記録媒体
US6275938B1 (en) * 1997-08-28 2001-08-14 Microsoft Corporation Security enhancement for untrusted executable code
US6357008B1 (en) * 1997-09-23 2002-03-12 Symantec Corporation Dynamic heuristic method for detecting computer viruses using decryption exploration and evaluation phases
US6631514B1 (en) * 1998-01-06 2003-10-07 Hewlett-Packard Development, L.P. Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations
US6704925B1 (en) * 1998-09-10 2004-03-09 Vmware, Inc. Dynamic binary translator with a system and method for updating and maintaining coherency of a translation cache
US7069583B2 (en) * 2000-07-14 2006-06-27 Computer Associates Think, Inc. Detection of polymorphic virus code using dataflow analysis
US7350235B2 (en) * 2000-07-14 2008-03-25 Computer Associates Think, Inc. Detection of decryption to identify encrypted virus
US20030041315A1 (en) * 2001-08-21 2003-02-27 International Business Machines Corporation Debugger with automatic detection of control points influencing program behavior
US20030101381A1 (en) * 2001-11-29 2003-05-29 Nikolay Mateev System and method for virus checking software
GB2393274B (en) * 2002-09-20 2006-03-15 Advanced Risc Mach Ltd Data processing system having an external instruction set and an internal instruction set
US7367057B2 (en) * 2003-06-30 2008-04-29 Intel Corporation Processor based system and method for virus detection

Also Published As

Publication number Publication date
CN101438529B (zh) 2011-12-28
EP1800434A4 (en) 2010-12-29
EP1800434A2 (en) 2007-06-27
JP2008523471A (ja) 2008-07-03
KR101213821B1 (ko) 2012-12-18
KR20070083702A (ko) 2007-08-24
WO2006062849A3 (en) 2009-04-30
WO2006062849A2 (en) 2006-06-15
CN101438529A (zh) 2009-05-20
EP1800434B1 (en) 2017-03-22
US20060123244A1 (en) 2006-06-08
US7636856B2 (en) 2009-12-22

Similar Documents

Publication Publication Date Title
JP4950902B2 (ja) ダイナミックトランスレーションによる先取りコンピュータマルウェアの保護
US7624449B1 (en) Countering polymorphic malicious computer code through code optimization
US7367057B2 (en) Processor based system and method for virus detection
US7093239B1 (en) Computer immune system and method for detecting unwanted code in a computer system
Christodorescu et al. Malware normalization
US7836504B2 (en) On-access scan of memory for malware
US7937764B2 (en) Metamorphic computer virus detection
Lakhotia et al. A method for detecting obfuscated calls in malicious binaries
KR20040080843A (ko) 악성 암호화 스크립트에 대한 분석 및 해독 방법
Christodorescu et al. Software transformations to improve malware detection
US7350235B2 (en) Detection of decryption to identify encrypted virus
Yin et al. Automatic malware analysis: an emulator based approach
Stepan Defeating polymorphism: beyond emulation
Zhu et al. Dytaint: The implementation of a novel lightweight 3-state dynamic taint analysis framework for x86 binary programs
Geden et al. RegGuard: Leveraging CPU registers for mitigation of control-and data-oriented attacks
EP4332805A1 (en) Emulation-based malware detection
Wu et al. Efficient and automatic instrumentation for packed binaries
Chuan et al. Design and development of a new scanning core engine for malware detection
Huang et al. Mitigating Vulnerabilities in Closed Source Software
Zhang et al. DRSA: Debug Register-Based Self-relocating Attack Against Software-Based Remote Authentication
Středa Analysis of Virtual Machine based obfuscation
Kasina et al. Detection of polymorphic viruses in windows executables
Ganesh Static analysis of malicious Java applets
Yin Malware detection and analysis via layered annotative execution
Notoatmodjo Detection of Self-Mutating Computer Viruses

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20081119

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110610

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110912

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111007

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120110

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120117

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120207

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: 20120302

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120309

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150316

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4950902

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250