(57)【要約】解析仮想マシン（ＡＶＭ）が、仮想マシン内で解析下にあるコンピュータコードを仮想的に実行することにより確認される挙動を表す挙動フラグを格納するレジスタを含むソフトウェアプロセッサを使用して、コンピュータコードを解析する。ＡＶＭは、挙動フラグが挙動フラグレジスタにセットされるシーケンスを格納するシーケンサを含む。ＡＶＭは、完全な仮想マシンで解析されるコードをエミュレーション実行することによりマシン性能を解析し、観察された挙動を記録する。エミュレーション及び解析が完了すると、ＡＶＭは、挙動フラグレジスタ及びシーケンサを実マシンに戻し、終了する。【選択図】図１
2004517390.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアプロセッサを有する、コンピュータコード挙動解析用の仮想マシンシステムであって、
仮想マシン内で解析下にあるコンピュータコードを仮想的に実行することにより観察されるコンピュータコードの挙動を表す挙動フラグを格納する挙動レコードと、
解析下にあるコンピュータコードを仮想的に実行している間、挙動フラグが挙動レコードにセットされるシーケンスを格納するシーケンサと、
解析下にあるコンピュータコードが、シミュレートされたメモリ及びシミュレートされたオペレーティングシステムと相互作用して、挙動フラグを発生させる、ホスト実コンピュータシステムを表すシミュレートされたメモリ及びシミュレートされたオペレーティングシステムとを含み、
仮想マシンは、仮想マシンを終了する前に、挙動レコードを表すデータをホスト実コンピュータシステムに送る仮想マシンシステム。
【請求項２】
ソフトウェアプロセッサを有する、コンピュータコード挙動解析用の仮想マシンシステムであって、
仮想マシン内で解析下にあるコンピュータコードを仮想的に実行することにより観察されるコンピュータコードの挙動を表す挙動フラグを格納するレジスタまたは構造と、
挙動フラグが挙動フラグレジスタまたは構造にセットされるシーケンスを格納するレジスタまたは構造と、
仮想マシン内で解析下にあるコンピュータコードのすべてのエントリポイントを格納するエントリポイントテーブルと、
仮想マシンが初期化されたとき、仮想マシンにより確保されたメモリにロードされた割り込みサービスルーチンをポイントする割り込みベクトルアドレスを格納する構造と、
入出力ポートをシミュレートするメモリ構造と、
プロセッサメモリをシミュレートするメモリ構造と、
解析下にあるコンピュータコードの動作が意図されている実オペレーティングシステムにより戻された値をシミュレートする１以上のオペレーティングシステムシミュレーションシェルとを含む仮想マシン。
【請求項３】
ソフトウェアプロセッサは、エントリポイントテーブル内に規定された各エントリポイントから、解析下にあるコンピュータコードまたは解析下にあるコンピュータコードの一部の実行を開始し、挙動フラグセットを含む挙動パターンを発生する請求項２に記載のシステム。
【請求項４】
ソフトウェアプロセッサは、エントリポイントテーブル内に規定された各エントリポイントから、解析下にあるコンピュータコードの実行を開始し、挙動フラグがセットまたはリセットされたシーケンスを発生する請求項２に記載のシステム。
【請求項５】
ソフトウェアプロセッサは、仮想マシンシステム内で高水準言語を解読する請求項２に記載のシステム。
【請求項６】
ソフトウェアプロセッサは、エントリポイントテーブル内に規定された各エントリポイントから、解析下にあるコンピュータコードまたは解析下にあるコンピュータコードの一部の実行を開始し、挙動フラグセットを含む挙動パターンを発生する請求項５に記載のシステム。
【請求項７】
ソフトウェアプロセッサは、エントリポイントテーブル内に規定された各エントリポイントから、解析下にあるコンピュータコードの実行を開始し、挙動フラグがセットまたはリセットされたシーケンスを発生する請求項５に記載のシステム。
【請求項８】
ソフトウェアプロセッサは、３２ビットまたは６４ビットのプログラムコードを実行し、オペレーティングシステムのシミュレーションシェルは、アプリケーションプログラムインタフェースコールに応答する請求項２に記載のシステム。
【請求項９】
ソフトウェアプロセッサは、エントリポイントテーブル内に規定された各エントリポイントから、解析下にあるコンピュータコードまたは解析下にあるコンピュータコードの一部の実行を開始し、挙動フラグセットを含む挙動パターンを発生する請求項８に記載のシステム。
【請求項１０】
ソフトウェアプロセッサは、エントリポイントテーブル内に規定された各エントリポイントから、解析下にあるコンピュータコードの実行を開始し、挙動フラグがセットまたはリセットされたシーケンスを発生する請求項８に記載のシステム。
【発明の詳細な説明】
【０００１】
優先権主張及び関連出願
本願は、２０００年１０月２４日に出願された米国仮特許出願第６０／２４２，９３９号の優先権を主張し、その内容全体は、本願明細書に参照により援用されたものとする。本願は、２０００年８月１８日に出願された米国特許出願第０９／６４２，６２５号に関連し、その内容全体は、本願明細書に参照により援用されたものとする。
【０００２】
技術分野
本発明は、仮想マシンシステムに関し、さらに詳しく言えば、自動コード解析に適し、コンピュータシステムに与えられる実行可能プログラムを含むデータを解析可能な仮想マシンシステムに関する。
【０００３】
背景技術
パーソナルコンピュータの時代では、ウィルスなどのプログラムを含む悪意のあるコードの検出が、常に重大な関心事である。通信用の電子メール使用の急成長を含んだインターネット及び大量のデータ交換などの通信ネットワークの成長と伴に、通信またはファイル交換を介したコンピュータの感染が、ますます重要な考慮すべき事柄となっている。感染は、さまざまな形態をとるが、典型的に、コンピュータウィルス、トロイの木馬プログラム、または他の形態の悪意のあるコードに関係する。電子メールを仲介したウィルス攻撃の最近の事件は、その繁殖速度と被害の規模の両方で劇的なものとなっており、インターネットサービスプロバイダ（ＩＳＰ）及び会社は、サービス問題及び電子メール能力の損失の損害を受けている。多くの場合、ファイル交換または電子メールを仲介した感染を適切に防ぐ試みにより、コンピュータのユーザーが著しい不便さを感じている。ウイルス攻撃を検出し、及び対応する改良された方法が望まれている。
【０００４】
ウィルスを検出するための１つの従来技術は、シグネチャスキャンである。シグネチャスキャンシステムは、既知の悪意のあるコードから抽出したサンプルコードパターンを使用し、他のプログラムコードにおけるこれらのパターンの発生をスキャンする。場合によっては、スキャンされたプログラムコードがエミュレーションを介して最初に解読され、その結果得られたコードは、シグネチャまたは関数シグネチャに対してスキャンされる。このシグネチャスキャン方法の主な制限として、既知の悪意のあるコードのみしか検出されず、すなわち、既知の悪意のあるコードの格納されたサンプルシグネチャと一致するコードのみしか感染したことを確認されないことが挙げられる。以前に確認されていないすべてのウィルスまたは悪意のあるコード及びシグネチャデータベースの最後の更新後に生じたすべてのウィルスまたは悪意のあるコードは、検出されないことになる。したがって、新しく生じたウィルスは、この方法で検出されないばかりか、以前に抽出されシグネチャデータベースに含まれているシグネチャが上書きされたコードをもつウィルスも検出されない。
【０００５】
さらに、シグネチャ解析技術は、予測したようにシグネチャがコードに並んでいなければ、ウィルスの存在を確認できない。また、ウィルスの作者たちは、操作コードを置き換えたり、ダミーまたはランダムコードをウィルス関数に挿入したりすることにより、ウィルスの正体を分かりにくくする場合がある。ウィルスのペイロードを繁殖及び伝送する力を弱めることなく、シグネチャスキャンプログラムにより検出できない程度まで、ウィルスのシグネチャを変更する意味のないコードが挿入されることがある。
【０００６】
別のウィルス検出方法は、完全性（インテグリティ）のチェックである。完全性チェックシステムは、既知の良性のアプリケーションプログラムコードからコードサンプルを抽出する。コードサンプルは、実行可能プログラムヘッダ及びファイル長などのプログラムファイルからの情報と、プログラムファイルの作成日及び作成時間とともに格納される。プログラムファイルは、このデータベースに対して一定間隔でチェックされて、プログラムファイルが修正されていなか確かめる。完全性チェックに基づいたウィルス検出システムの主な欠点として、アプリケーションプログラムに何らかの修正が実行されたとき、非常に多数のウィルス活動警告が出ることが挙げられる。例えば、完全性チェックプログラムは、ユーザーが、コンピュータのオペレーティングシステムをアップグレードしたり、アプリケーションソフトウェアをインストールまたはアップグレードしたりすると、長い修正ファイルリストを発生する。ユーザーは、警告がコンピュータシステムへの本物の攻撃を表すときを決定することが難しくなる。
【０００７】
チェックサムモニタリングシステムは、各プログラムファイルに対して巡回冗長検査（ＣＲＣ）値を発生することにより、ウィルスを検出する。プログラムファイルの修正は、ＣＲＣ値の変動により検出される。チェックサムモニタは、悪意のあるコードがモニタリングを打ち破ることがより難しいという点で、完全性チェックシステムより優れている。その一方で、チェックサムモニタは、多数の間違った警告が出て、その警告が本当のウィルスまたは感染を表すかを確認することが難しいという点で、完全性チェックシステムと同じ制限をもつ。
【０００８】
挙動中断システムは、ターゲットコンピュータのオペレーティングシステムと相互作用し、潜在的に悪意のある挙動をモニタすることにより、ウィルスの活動を検出する。このような悪意のある挙動が検出されると、その活動は遮断され、ユーザーは、潜在的に危険な活動が起きようとしていることが知らされる。潜在的に悪意のあるコードは、ユーザーによりこの活動の実行が許容されることがある。これにより、システムの有効性がユーザー入力に依存するため、挙動中断システムは、若干信頼性の低いものになる。さらに、常駐の挙動中断システムは、悪意のあるコードにより検出され使用不可にされることがある。
【０００９】
感染を検出するための別の従来の方法は、おとりファイルの使用である。この方法は、典型的に、既存及び活動中の感染を検出するために、他のウィルス検出方法を組み合わせて使用される。これは、悪意のあるコードが、ターゲットコンピュータで現在動作中で、ファイルを修正中であることを意味する。ウィルスは、おとりファイルが修正されるとき検出される。多くのウィルスは、おとりファイルに気付き、非常に小さく構造から明らかにおとりファイルであるファイルや、ファイル名に所定のコンテンツを有するファイルを修正しない。
【００１０】
ウィルス及び他の悪意のあるコードタイプを検出するための改良された技術が望まれているのは明らかである。
【００１１】
本発明の態様は、仮想マシン技術のある特徴を利用する。「仮想マシン」の概念は、当業者に知られており、仮想マシンにはさまざまな利用法がある。「仮想マシン」の利点は、他のハードウェアプラットフォームに対して意図されたコードなどの他の環境下にあるハードウェアプラットフォームで実行しないコードを実行する能力を含む。仮想マシン技術の他の応用は、マルチユーザー及びマルチ処理システムにおいて見い出され、このシステムでは、各プロセスがそれ自体の仮想マシン内で動作する。
【００１２】
仮想マシンは、コンピュータハードウェアと高水準言語（ＨＬＬ）との間のインタフェース（ホスキンズ（Ｈｏｓｋｉｎｓ）の米国特許第５，８７２，９７８号）、パラレルプロセッサを形成するための実マシンのネットワーキング（ウォルシュ（Ｗａｌｓｈ）らの米国特許第５，７７４，７２７号）、マルチタスキングまたはマルチユーザーコンピュータ環境を作るための実マシンのネットワーキング（カネダ（Ｋａｎｅｄａ）らの米国特許第４，４００，７６９号）など、さまざまなコンピュータの機能に適用されてきた。また、仮想マシンは、クロスプラットフォームＨＬＬコードの移植性が要求される場合（アレグザンダー（Ａｌｅｘａｎｄｅｒ，ＩＩＩ）らの米国特許第６，１１８，９４０号）に適用されてきた。
【００１３】
発明の開示
本発明の態様によれば、ソフトウェアプロセッサを有するコンピュータコード挙動解析用の仮想マシンシステムが提供される。プロセッサは、仮想マシン内で解析下にあるコンピュータコードを仮想的に実行することにより観察されるコンピュータコードの挙動を表す挙動フラグを格納する挙動レコードを格納する。シーケンサが、解析下にあるコンピュータコードを仮想的に実行している間、挙動フラグが挙動レコードにセットされるシーケンスを格納する。ホスト実コンピュータシステムを表すシミュレートされたメモリ及びシミュレートされたオペレーティングシステムが提供され、解析下にあるコンピュータコードが、シミュレートされたメモリ及びシミュレートされたオペレーティングシステムと相互作用して、挙動フラグを発生させる。仮想マシンは、仮想マシンを終了する前に、挙動レコードを表すデータをホスト実コンピュータシステムに送る。
【００１４】
本発明の別の態様によれば、ソフトウェアプロセッサを有するコンピュータコード挙動解析用の仮想マシンシステムが提供される。仮想マシンは、仮想マシン内で解析下にあるコンピュータコードを仮想的に実行することにより観察されるコンピュータコードの挙動を表す挙動フラグを格納するレジスタまたは構造を含む。また、仮想マシンは、挙動フラグが挙動フラグレジスタまたは構造にセットされるシーケンスを格納するレジスタまたは構造をさらに含む。レジスタまたは構造は、仮想マシン内で解析下にあるコンピュータコードのすべてのエントリポイントを格納する。仮想マシンが初期化されたとき、構造が、仮想マシンにより確保されたメモリにロードされた割り込みサービスルーチンをポイントする割り込みベクトルアドレスを格納する。メモリ構造が、入出力ポートをシミュレートし、別のメモリ構造が、プロセッサメモリをシミュレートする。１以上のオペレーティングシステムシミュレーションシェルが、解析下にあるコンピュータコードの動作が意図されている実オペレーティングシステムにより戻された値をシミュレートする。
【００１５】
実施形態の詳細な説明
本発明の好ましい実施形態によれば、実コンピュータシステムでプログラムコードが実行される方法と同様の方法で、エミュレートされたコンピュータシステム内でプログラムコードを実行する解析仮想マシン（ＡＶＭ）が提供される。解析仮想マシンの好ましい実施形態は、物理入力または出力を生じさせず、または、解析下にあるプログラムコードと実または物理コンピュータシステムとの間の任意の相互作用を許容しない。その代わり、入出力動作、システムコール及び命令が、解析下にあるコードにトランスペアレントな方法でシミュレートされる。システム機能、オペレーティングシステムのアプリケーションプログラムインタフェース（ＡＰＩ）コール、入出力コマンド及び所定のメモリ位置の変更がすべて、解析されているコードの実行中、解析仮想マシンによりログ記録されることが好ましい。解析仮想マシンは、挙動パターンと、仮想実行中に挙動パターンビットが設定されたシーケンスを表すシーケンス構造との両方として、ログ記録されたデータを実または物理コンピュータシステムに戻すことが最も好ましい。
【００１６】
本願明細書に記載される解析仮想マシン（ＡＶＭ）は、自動コード関数解析と挙動抽出において使用されるように意図されている。「コード」は、トークン化型またはソースコードのテキストフォーマットのいずれかのバイナリマシンコードまたは高水準言語（ＨＬＬ）のいずれかである。解析仮想マシンは、渡されたエントリポイントテーブルにある各エントリポイントから、解析されるコードを実行する。ＡＶＭは、コードを仮想的に実行しながら、システムコール、入出力（Ｉ／Ｏ）動作及びメモリアクセスをモニタする。ＡＶＭのエミュレートされた中央演算処理装置（ＣＰＵ）内で、機械語の命令または高水準言語の命令のいずれかが実行される。ＡＶＭ環境内において、アプリケーションコードにより呼び出されるオペレーティングシステム関数、アプリケーションにより実行される入出力ポート読み取り書き込み動作及びメモリ読み取り書き込み動作がシミュレートされる。
【００１７】
従来の解析システムは、仮想実行することなくコードをスキャンしていた。このようなシステムでは、アプリケーションコードが、ファンクションコールまたはターゲットコードスニペットに対してスキャンされる（アーノルド（Ａｒｎｏｌｄ）らの米国特許第５，４４０，７２３号）。このスキャン方法にはいくつかの欠点があり、第１の欠点として、コードパターンマッチが、実際に実行されるコードと同期しない場合があることが挙げられる。このスキャン方法の第２の欠点として、関数への直接アクセス、すなわち、ドキュメント化されたコール構造を介していない関数アクセスが検出されないことが挙げられる。さらに、コード実行により満たされるメモリの制御フィールドが存在しないため、このスキャン方法では解析されない。第３の欠点として、悪意のあるコードの作者が、「何もしない」コードを関数テンプレートに挿入したり、これまでにない方法で関数を呼び出したりすることにより、そのコードの実際の関数を偽装する可能性が高いことが挙げられる。これらの欠点により、スキャン解析システムの精度が下がる。
【００１８】
本発明の好ましい実施形態は、本願明細書に提示するような解析仮想マシンを用いる。このような仮想マシンは、各エントリポイントから始まる実際のプログラムフローとともにアプリケーションプログラムコードを実行する。このような特別に好ましい解析仮想マシンを使用する場合、アプリケーションプログラムコード内に含まれる関数の正確な表示が得られる。「何もしない」命令は、コードを偽装するさい、もはや有効なものではなくなる。これまでにない方法で関数を呼び出すことも、ＡＶＭが実マシンと同様に応答するように特別に好ましい方法で与えられれば効果がなくなる。
【００１９】
以下にさらに詳細に説明するように、コード解析で仮想マシンを使用する利点は、従来のネーティブマシンと比較した場合、安全な環境でコードを実行することにより、コードが解析されることである。ここで言う「安全」とは、実コンピュータシステムのオペレーティングシステム、プログラム及びデータが、解析下にあるコードと相互作用しないため、解析下にあるコードによりダメージを与えられる可能性が低いということである。それにもかかわらず、あたかも実プロセッサシステムを使用してネーティブマシンでコードが実行されたかのように、通常のコード実行とともに解析が行われる。
【００２０】
このようにして、解析仮想マシンの好ましい実施形態は、シミュレーション用に複数のオペレーティングシステム及びハードウェアプラットフォームに対応できる。コンピュータシステムの構成は、柔軟に修正可能である。さらに、システムの動作を監視することができる。本発明の好ましい実施形態において、未知のプログラムコードの挙動を解析するために、ＡＶＭの仮想オペレーティングシステムに監視関数が組み込まれるものがある。図１は、物理コンピュータシステム内でのＡＶＭの現行の実施形態のブロック図を示す。コンパイラベースの仮想マシンと同様に、ＡＶＭは、コードストリームのフローを処理する。コンパイラベースの仮想マシンと異なり、コードが実行され、仮想オペレーティングシステム関数が呼び出される。
【００２１】
図１は、ＤＯＳ  ＭＺタイプの実行可能プログラムまたはＤＯＳバイナリＣＯＭまたはＳＹＳプログラムにより使用されるブートセクタローダを含み、このようなプログラムを実行するために初期化されたＡＶＭのインスタンスを起動するコンピュータシステムの構成を示す。参照符号１００が付与されたボックス内の領域は、実マシン、すなわち、物理中央演算処理装置（ＣＰＵ）と、物理メモリと、ユーザー入出力チャネルとを含むコンピュータのハードウェアを表す。入出力チャネルは、キーボードと、マウスと、ビデオディスプレイと、ディスクドライブと、演算処理装置に接続された他の周辺機器とを含む。オペレーティングシステム１０２は、おそらく他の仮想マシン内において実行の過程にあるデバイスドライバ及びアプリケーションプログラムとともに物理メモリ１０６に格納される。このようなソフトウェアはすべて、実中央演算処理装置（ＣＰＵ）１０５により実行される。ブロック図には、１つのデバイスドライバ、すなわち、ファイルシステムフックデバイスドライバ１０１が示されている。ファイルシステムフックデバイスドライバ１０１は、実オペレーティングシステムのファイルシステムにフックし、ハードディスクドライブに格納されたファイルへの修正をＡＶＭを開始するアプリケーションに知らせる。
【００２２】
オペレーティングシステムソフトウェア１０２は、メモリ１０６にあり、実マシン１００内で動作する。解析仮想マシン２００の結果を初期化し受け取るアプリケーションプログラム１０３は、実マシン上に存在し、解析仮想マシン２００のように、オペレーティングシステム１０２の環境内で実行する。解析仮想マシン２００が初期化された後、アプリケーションプログラムは、エントリポイント、ファイルタイプ、及びプログラムのメインエントリポイントを保有するセグメントを含むバッファを、１０３を介してプログラムローダプリプロセッサ２１１に送る。
【００２３】
仮想マシンが作られると、物理メモリ１０６の一部が、仮想マシンにより使用するためにアプリケーションプログラムにより確保される。このメモリブロックは、参照符号２１０が付与され、物理メモリ１０６に存在する。プリプロセッサ２１１は、解析仮想マシンにより使用するための仮想メモリブロック２１０を容易し、仮想アドレス００００〜１０２３にある割り込みベクトルテーブル（ＩＶＴ）、仮想アドレス１０２４〜１２７９にあるＤＯＳパラメータ、プログラム領域及びＶＧＡディスプレイ用に確保されたメモリ（仮想アドレス０Ａ０００ｈにマッピング）など、すべて適切なシミュレートされたオペレーティングシステムのメモリブロックを作成する。プログラムローダプリプロセッサ２１１は、メモリ制御ブロック（ＭＣＢ）を作成して、エントリポイントコードをこのメモリにロードする。ＩＢＭ  ＰＣベースのメモリマップの６４０Ｋ領域を超えるシミュレートされたハイメモリに、仮想割り込みサービスルーチンが作成される。解析下にあるプログラムコードにより参照されるすべてのアドレスは、ソフトウェアメモリマッパ２０７により、このメモリモデル内で適合するようにリマッピングされる。
【００２４】
プログラムローダ２１１が、仮想ＤＯＳメモリモデルの初期化を完了した後、仮想ＣＰＵ２０５は、プリフェッチ機構２０３を介してフェッチングプログラム命令を開始する。フェッチされソフトウェア命令デコーダ２０４により復号された各命令の第２のバイト（Ｏｒ／ｍバイト）に応じて、ソフトウェアまたは仮想ＣＰＵは、データフェッチ機構２０８及びメモリマッパ２０７を使用して、レジスタスタック２０６または仮想メモリ２１０からフェッチする。
【００２５】
ソフトウェアＣＰＵ２０５は、データに所望の動作を実行し、Ｏｒ／ｍバイトにより決定される宛先にその結果を書き込む。参照されたオペレーティングシステム関数は、オペレーティングシステムシミュレータ２０１においてシミュレートされる。割り込みサービスシミュレータ２１２において割り込みサービスがシミュレートされ、仮想メモリ２１０内のアドレス００００〜１０２３にベクトルが格納される。ハイメモリにある割り込みサービスは、割り込みベクトルテーブルとシミュレートされた割り込みサービス２１２との間のリンクとして作用する。また、メモリブロック２１０は、システムスタック及びアプリケーションコードスタックを含む。システム及びアプリケーションコードスタックは、解析下にあるアプリケーションコード内に含まれるアドレスに作成され、アプリケーションごとに異なるため示されていない。データは、これが要求されていることを制御バイトＯｒ／ｍが示せば、メモリ２１０に確保された仮想スタック領域からフェッチされる。
【００２６】
ソフトウェアＣＰＵ２０５は、プリフェッチ機構２０３と、命令デコーダ２０４とを有する。命令がフェッチ、復号及び実行されると、解析下にあるプログラムコードは、シミュレートされた関数を実行する。各シミュレートされた関数の実行は、挙動フラグレジスタ２０９にフラグをセット及びリセットし、これらの動作が生じるシーケンスは、シーケンサ２１３に記録される。その結果得られた挙動フラグパターンは、シーケンサ構造とともに、解析仮想マシンを開始したアプリケーションに送られる。その後、解析仮想マシンは、本発明の好ましい実施形態において終了する。
【００２７】
ＡＶＭの好ましい実施形態内のプロシージャフローのブロック図を示す図６に、このプロセスがさらに示されている。図６は、他の図と同様に、好ましい実施形態を示すが、本発明の範囲を限定するように意図されたものではない。プログラムローダプリプロセッサ関数は、左上隅に示されている。アプリケーションプログラムは、ファイルタイプと、コード長と、エントリポイントオフセットと、全エントリセグメントコードを含む長さ「ｌｅｎ」のバッファとともに、ＳＳ（スタックセグメント）と、ＳＰ（スタックポインタ）と、ＣＳ（コードセグメント）と、実行可能ファイル内に含まれるＩＰ（命令ポインタ）レジスタ値とを送る。その後、ローダプリプロセッサは、仮想メモリとしてＡＶＭにより使用するために物理メモリのブロックを確保する。仮想メモリ用に確保されるメモリブロックのサイズは、この時点で、６４０００ｈバイト（４０９６００十進法数）に制限される。しかしながら、仮想メモリのサイズは、ＡＶＭの動作に関与しないため、制限的であることを考慮すべきではない。
【００２８】
仮想メモリマップは、割り込みベクトルテーブルと、ＢＩＯＳパラメータ領域と、ＤＯＳパラメータ領域と、環境ストリングテーブルと、プログラムセグメントプリフィックス（ＰＳＰ）と、ディスプレイアダプタメモリブロック（０Ａ０００ｈにマッピング）とを含むように初期化される。ディスプレイアダプタメモリブロックより上に、割り込みベクトルテーブル（ＩＶＴ）内に含まれる１０２４個の割り込みの各々に対して割り込みサービスルーチン（ＩＳＲ）が作成される領域が確保される。残りのメモリは、メモリ制御ブロック（ＭＣＢ）により制御されるメモリブロックとして構成される。制御アプリケーションプログラムによりＡＶＭに送られるエントリセグメントコードは、仮想メモリのＭＣＢメモリブロック内に配置される。次に、仮想プロセッサのセグメントレジスタ、すなわち、ＳＳ、ＥＳ、ＤＳ、ＣＳ、ＧＳ及びＦＳは、仮想メモリに配置された実行可能コードのタイプに依存する値で初期化される。その後、レジスタスタックＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＳＰ、ＥＢＰ、ＥＳＩ、ＥＤＩ及びフラグレジスタが初期化される。挙動レジスタでフラグをセット及びリセットするモニタ関数は、個々のオペレーティングシステムコール、割り込みコール及びＡＰＩコールとともに、アドレスリマッパ及び割り込みサービスルーチン内に組み込まれる。以下の命令処理ループの各々の間、ＡＶＭは、最大許容ＣＰＵ時間が超過されたかをチェックする。この仮想ＣＰＵ時間制限は、解析下にあるコードによりＡＶＭがエンドレスループに入るデッドロック状態を断ち切るために課せられることが最も好ましい。ＣＰＵ時間制限を適切に構成することにより、リスクのあるデッドロックがある長い解読または多形ループを処理することができる。
【００２９】
ＩＰレジスタは、仮想メモリにあるエントリポイントにポイントする。仮想実行プロセスのこのポイントで、仮想ＣＰＵは、１２バイトプリフェッチキューを満たし始める。バイトは、インテル（Ｉｎｔｅｌ）のペンティアム（Ｐｅｎｔｉｕｍ）命令セット参照に応じて復号されることにより、この１２バイトキューの第１のバイトは、命令ワードの関数を決定する。命令ワードは、演算、割り込みコールまたはオペレーティングシステムＡＰＩコールを含む。他のプロセッサの実施形態において、他の命令セット参照が適切であり、特定の詳細が異なる場合があることは言うまでもない。異なるプロセッサ及び異なるオペレーティングシステムの実施形態で解析仮想マシンを実施する方法は、この記載から明らかになるであろう。
【００３０】
演算の場合、プリフェッチキューの第２のバイト（Ｏｒ／ｍバイト）に格納されている値に応じて、仮想メモリ、プリフェッチキューまたはプロセッサのレジスタのいずれかから正確なデータを引き出すＦｅｔｃｈＤａｔａプロシージャが呼び出される。このようにして引き出されたデータは処理され、例えば、データに適用された多数の他の算術または論理演算子により、加算、除算、乗算または処理される。その後、実行された演算結果を評価し、それに応じて仮想フラグレジスタにフラグをセットするＳｅｔＦｌａｇプロシージャが呼び出される。ＳｅｔＳｉｇｎプロシージャは、処理された結果のサインを調節する。ＭｅｍＲｅｍａｐプロシージャは、仮想メモリにある宛先のアドレスをその入力とする。このアドレスは、仮想メモリ用に確保された４０９６００バイトに適合するようにリマップされる。アドレス空間修正のモニタリングは、ＭｅｍＲｅｍａｐプロシージャにおいて実行される。
【００３１】
割り込みコールの場合、コールインデックスは、割り込みベクトルテーブル（ＩＶＴ）にあるアドレスを参照することにより、適切な割り込みサービスルーチンに制御を渡すプロシージャに送られる。その後、仮想ＢＩＯＳ、仮想ＤＯＳ、仮想ＤＰＭＩ、仮想Ｗｉｎｄｏｗｓ（ネーティブＡＰＩ）、または解析下にあるコードがそのプロシージャの一つをポイントするようにＩＶＴを修正したら、解析下にあるコードのいずれかにおいて、適切な割り込みサービスルーチンを実行することにより、解析が継続される。
【００３２】
ＡＰＩコールの場合、コールは、関連する序数をコールに付与し、仮想ＡＰＩに制御を渡すプロシージャに送られる。この仮想ＡＰＩは、実オペレーティングシステムＡＰＩの機能性ではなく応答をシミュレートするプロシージャを含む。ＡＰＩ機能のモニタリングは、各ＡＰＩプロシージャにおいて実行される。ＡＰＩ機能は、仮想メモリの領域を修正するため、その後の仮想ＡＰＩコールは、正確な予測結果を読み返すことができる。
【００３３】
このイベントシーケンスは、終了プログラムシーケンスコールに出会うか、現在のセグメント外へのファージャンプが実行されるまで、継続して生じる。ブランチ命令に出会うと、ＡＶＭは、ジャンプするように元のプログラマにより意図されたパラメータを使用するが、ブランチ命令において使用された条件とともに、エントリポイントテーブルにあるブランチの他方を格納する。エントリポイントテーブルは横断されて、エントリポイントテーブルにある各エントリポイントからコードが実行される。エントリポイントテーブルにおいて、複製はできない。すべてのエントリポイントが処理されると、その結果得られた挙動パターンは、シーケンサ構造とともに、コーリングアプリケーションに戻されて、ＡＶＭは、確保されたメモリブロックを解放して終了する。その後、実コンピュータシステム内のコーリングプログラムは、ＡＶＭにより解析されたコードを評価するために、挙動パターン及びシーケンサを検討できる。
【００３４】
図２は、高水準言語を実行するのに適したタイプの、コードインタープリタシェルをロードしたＡＶＭの構成を示す。プログラムローダ３０１は、プログラムコードを個々のラインに分割し、プログラムラインをインデックスし、それらを仮想メモリ３１０に配置する。このロード動作中、コードからエントリポイント情報が抽出され、各エントリポイントが参照したプログラムラインインデックスとともに、エントリポイントテーブルに配置される。プログラムコードにおいて使用された変数は、プログラムコードを介したＡＶＭの第２のパスにおいて抽出される。変数は、変数インデックス、変数タイプ及び変数の現在の値を含む変数メモリ３１０にある変数構造に格納され、エミュレーション前にゼロに初期化される。この時点で、コードインタープリタ３０５は、制御を受け取り、エントリポイントテーブルにある第１のエントリポイントから命令のフェッチを開始する。命令が解釈されて、命令がフェッチされる位置で変数構造にある変数に動作するか（ジャンプ命令）、システムサービス（ファイルを開く、ファイルを書き込む、など）を呼び出し、アプリケーションプログラムインタフェース（ＡＰＩ）コールを実行する。サービスシミュレーションプロシージャ３１２において、システムサービスがシミュレートされる。Ｃａｌｃ．Ｎｅｘｔプロシージャ３０８は、メモリ３１０におある次のライン番号を計算して、Ｆｅｔｃｈ  Ｎｅｘｔプロシージャ３０７により、次の命令ラインがフェッチされる。挙動フラグレジスタ３０２は、あるシステム変数、システムサービス及びＡＰＩコールの初期化をモニタする。これらのイベントは、挙動フラグレジスタ３０２にビットをセット及びリセットする。また、挙動レジスタフラグがセットまたはリセットされたシーケンスは、シーケンサ構造３０９に記録される。システムサービスの状態を一時的に格納するために、スクラッチパッドストレージ３０６が使用され、これは、アプリケーションプログラムコードにより後で参照されてよい。
【００３５】
システムは、各命令ラインに対してこのイベントシーケンスを実行し、エントリポイントテーブルのすべてのエントリポイントが処理されるまで、コードの各エントリポイントで継続する。その後、ＡＶＭは、シーケンサ構造とともに、コーリングプログラムに挙動パターンを戻し、ＡＶＭが終了する。図７に、ＡＶＭの図２のインスタンスの処理フローがさらに示され、同図は、ＶＢスクリプトコードなどの高水準言語（ＨＬＬ）プログラムの挙動パターンを解釈し抽出するためにＡＶＭが初期化された後の本発明のＡＶＭの実施形態における処理フローを示す。言語定義のキーワードリスト及びルールは、処理コアにより解釈された言語を定義する。図７において、ＶＢＡとＶＢＳとを兼ね備えたキーワードリストが示されているが、処理コアは、これらの言語に限定されるものではない。
【００３６】
図７のＡＶＭが初期化されると、実メモリの４０９６００バイト（１６進法０ｘ６４０００）ブロックが、仮想コンピュータメモリとして確保される。ローダ関数は、メモリを初期化した後、それにパスされるコードバッファを個々のラインとして仮想メモリにロードし、キャリッジリターン（ＣＲ＝０Ｄｈ）またはＣＲまたはＣＲ及びラインフィード（ＣＲ  ＬＦ＝０Ｄ  ０Ａｈ）キャラクタコードによりマークされる。これらのラインは、ソース構造にインデックスされることにより、各ラインはアドレスに割り当てられる。ソースラインの処理は、パス１で始まり、メニューエントリ、自動実行プロシージャ及び標準システム関数に付与されるプロシージャなど、コードに規定されたすべてのエントリポイントが、エントリポイントテーブルに配置される。パス２において、コードに存在するすべての変数が抽出され、仮想メモリ内の変数構造に配置される。各変数は、アドレス、変数タイプ、変数名、変数値として格納される。
【００３７】
この後、ＡＶＭ処理コアは、第１のエントリポイントからコードへ命令ラインのフェッチを始める。ラインは、キーワードリストと言語ルールを使用して復号される。コードラインによる変数参照は、変数構造からフェッチされ処理される。その後、変数値は、適切な位置に書き込まれる。オペレーティングシステム関数を実行するためのＡＰＩコールの場合、仮想ＡＰＩは参照され、ＡＰＩ関数の内部序数を探し、シミュレートされた関数を実行し、ＨＬＬコーリング関数にシミュレートされたコール値を戻す。実行中、処理フローにより、挙動レジスタ３０２（図２）のフラグがセットまたはリセットされ、これらのイベントのシーケンスがシーケンサ構造３０９（図２）に格納される。このプロセスは、エントリポイントテーブルのすべてのエントリポイントが処理されるまで継続し、その時点で、割り当てられたメモリは解放され、挙動レジスタ値及びシーケンサ構造は、解析用のアプリケーションプログラムに戻され、ＡＶＭは終了する。
【００３８】
本発明の実施形態において、本発明による解析仮想マシンには、３つの動作モード、すなわち、高水準モード、保護モード、実モードがある。実モードは、ＤＯＳなどのオペレーティングシステムに対応し、図１及び図６に、ＡＶＭの対応するインスタンスが示されている。高水準モードは、Ｐｅｒｌ、Ｖｉｓｕａｌ  Ｂａｓｉｃ、スクリプト言語などの高水準言語のプログラムを解析するために使用されてよい。図２及び図７に、ＡＶＭの高水準モードが示されている。
【００３９】
３２ビットＷｉｎｄｏｗｓコードまたはＬｉｎｕｘコードを解析するために、ＡＶＭの保護モードインスタンスが使用されてよい。例えば、図３に、保護モードを使用するためのＡＶＭの構成図が示されている。図３のＡＶＭの構造及び動作は、高水準及び実モードの解析仮想マシンの図及び詳細な記載から明らかであるため、本願明細書にさらに詳細に記載しない。実モード実施形態と比較した場合の主な違いは、保護モードシステムのカーネル及びＡＰＩ機能性である。保護モードのこれらの態様は、それがすでに仮想マシンを作動させているということと、割り込みではなくＡＰＩコールがなされているということを反映する。
【００４０】
図４は、ここに示される異なるモードにおいて解析仮想マシンにより使用されるさまざまなメモリマップを示す。図示されているように、異なるモードにより解析されるプログラムは別々にロードされる。その結果、解析仮想マシンは、これらの異なるモードの各々に対して特に構成され、解析するプログラムの実行が始まる場所及びプログラムを解析する方法を決定する。本願明細書に示されたメモリ割り当ては例示的なものであり、特定のシステムに対して最適化される必要がある。このように、ＡＶＭの正確な特徴及び本願明細書に示された実施形態を変更するために、将来的なプロセッサ及びプログラムの将来的な開発が予想される。
【００４１】
本発明の好ましい実施形態によるＡＶＭを実施した最終製品は、挙動フラグレジスタ及びシーケンサのコンテンツである。図５Ａ及び図５Ｂは、解析下にあるコードを特徴付けるために追跡される例示的かつ現在好ましい挙動セットを示す。この挙動リストは、潜在的に悪意のある挙動を正確に追跡し、現在考慮されているコード形態を正確に特徴付けるため、現在好ましいものである。将来的に異なる挙動セットまたは示された挙動セットの修正が望まれるであろうことが予想される。シーケンサは、挙動フラグレジスタの展開を追跡するデータ構造である。挙動レジスタにフラグを設定するシーケンスは、解析されるコードを解析し完全に特徴付けるさいに特に重要である。シーケンサは、コードを正確に特徴付けるようにサイズが適用されたデータ構造である。挙動レジスタのエンドパターンと、シーケンサに格納されたフラグセット及びリセットのシーケンスの両方が、仮想マシンを終了する直前に実マシンに送られる。その後、コーリングアプリケーションプログラムは、解析されたコードを特徴付けるために、これらの構造においてデータを使用する。
【００４２】
前述の記載では、実コンピュータ上の保護実行環境内において、アプリケーションプログラム（コード）の解析を実行する仮想マシンについて記載した。この解析仮想マシン（ＡＶＭ）は、仮想マシンにより確保されたメモリにおいて、アプリケーションソフトウェアプログラムの実行が意図されている適切なオペレーティングシステムのイメージを作成するプリプロセッサを含む。ＡＶＭは、オペレーティングシステムを確認し、アプリケーションプログラムを格納するファイルのヘッダ内にあるファイル形式及び制御フィールドと、解析されるプログラムコードにより、実行環境を構成するＡＶＭは、ＡＶＭ内に含まれるアプリケーションプログラムを実行するために、実コンピュータのオペレーティングシステムにより作動される。アプリケーションプログラムと、システムソフトウェア実行環境及び／またはコンピュータハードウェアとの間に存在する直接的な相互作用は許容されない。
【００４３】
ＡＶＭは、各解析に対してコンピュータ免疫システムアプリケーションにより作られ、その解析が完了すると消滅する。ＡＶＭは、多数の階層シェルから作られる。ＡＶＭシェルの構成は、解析を必要とするアプリケーションプログラムの形式に依存し、例えば、ネーティブプログラムコードが解析される場合は、ソフトウェアＣＰＵシェルがロードされるのに対して、高水準言語スクリプトまたはプログラムコードの場合は、適切な言語インタープリタがロードされる。したがって、ＡＶＭのプロセッサコアは、ＣＰＵ実行ネーティブコードまたは高水準言語インタープリタのいずれかとして存在する。アプリケーションソフトウェアプログラム内に含まれるオペレーティングシステムコールは、アプリケーションプログラムが物理コンピュータ環境内で実行するかのようにシミュレートされる。
【００４４】
アプリケーションプログラムは、アプリケーションソフトウェアプログラムの構造に応じて、ＡＶＭを介したいくつかのパスで実行され、アプリケーションプログラムの元の作成者により意図された任意のシーケンスにおいて実行されないこともある。ＡＶＭ内での実行目的は、プログラム内に含まれるあらゆる状況下にあるプログラムコード挙動を抽出する解析を実行することである。この目的が満たされると、解析仮想マシンは、発生した挙動パターンと、挙動パターンに記録されたイベントが生じたシーケンスを含むシーケンサ構造を保存し、終了する。
【００４５】
本願明細書に記載したＡＶＭは、２０００年８月１８日に出願された米国特許出願第０９／６４２，６２５号に記載されたコンピュータ免疫システム及び方法とともに使用するのに非常適しており、それを意図したものである。米国特許出願第０９／６４２，６２５号は、記載した解析仮想マシンの好ましい実施形態及び応用のさらなる態様を開示するものとして、その内容全体が本願明細書に参照により援用されたものとする。
【図面の簡単な説明】
【図１】
ＤＯＳ  ＭＺタイプの実行可能またはバイナリファイルを用いた解析仮想マシンの構成を示す。
【図２】
高水準言語（ＨＬＬ）のプログラムコードを用いた解析仮想マシンの構成を示す。
【図３】
ＰＥ、ＮＥまたはＬＥのＷｉｎｄｏｗｓ実行可能コードを実行する解析仮想マシンの構成を示す。
【図４】
バイナリ（ＣＯＭまたはＳＹＳ）実行可能ファイルを実行し、Ｖｉｓｕａｌ  Ｂａｓｉｃ（ＶＢ）実行可能ファイルを実行する解析仮想マシンのメモリマップを示す。
【図５Ａ】
解析仮想マシンの好ましい実施形態により発生する挙動パターン、シーケンサ及びエントリポイント構造をリストしたテーブルを略図的に示す。
【図５Ｂ】
解析仮想マシンの好ましい実施形態により発生する挙動パターン、シーケンサ及びエントリポイント構造をリストしたテーブルを略図的に示す。
【図６】
バイナリマシンコードを実行する解析仮想マシンの好ましい実施形態の略図的なプロシージャの流れ図を示す。
【図７】
ＨＬＬを実行する解析仮想マシンの好ましい実施形態の略図的なプロシージャの流れ図を示す。
【図１】
2004517390.tif 000003
【図２】
2004517390.tif 000004
【図３】
2004517390.tif 000005
【図４】
2004517390.tif 000006
【図５Ａ】
2004517390.tif 000007
【図５Ｂ】
2004517390.tif 000008
【図６】
2004517390.tif 000009
【図７】
2004517390.tif 000010
【国際公開パンフレット】
2004517390.tif 000011
2004517390.tif 000012
2004517390.tif 000013
2004517390.tif 000014
2004517390.tif 000015
2004517390.tif 000016
2004517390.tif 000017
2004517390.tif 000018
2004517390.tif 000019
2004517390.tif 000020
2004517390.tif 000021
2004517390.tif 000022
2004517390.tif 000023
2004517390.tif 000024
2004517390.tif 000025
2004517390.tif 000026
2004517390.tif 000027
2004517390.tif 000028
2004517390.tif 000029
2004517390.tif 000030
2004517390.tif 000031
2004517390.tif 000032
2004517390.tif 000033
2004517390.tif 000034
2004517390.tif 000035
2004517390.tif 000036
2004517390.tif 000037
2004517390.tif 000038
2004517390.tif 000039
2004517390.tif 000040
2004517390.tif 000041
【国際調査報告】
2004517390.tif 000042
2004517390.tif 000043
2004517390.tif 000044