Last Reviewed: 5/1/2003

[技術文章] プログラム実行時の振る舞い監視によるコンピュータウイルス検出技術


現在の技術

現在、コンピュータウイルスの検出技術は、パターンマッチングが主流です。
パターンマッチングは、コンピュータのメモリや、ハードディスク上のファイルを着目し、過去に発見されたウイルスの特徴的なシグネチャと比較してウイルスを検出します。
パターンマッチングは誤検出が少ない技術ですが、既知のウイルスしか検出できません。
現在、1日に、約10〜20種類の新しいウイルスが見つかっています。
新しいウイルスを検出するためには、頻繁にアップデートされるウイルス・シグネチャ・ファイルを速やかにアンチウイルス会社から入手し、コンピュータにインストールしなければなりません。
しかし、新しいウイルスは、過去のウイルスの形をほんの少し変えたものが多いのです。
つまり、実際のウイルスの振る舞いは、どれも非常に似ています。
ウイルスの検出技術は、パターンマッチングの他に、ヒューリスティックスキャンがあります。
ヒューリスティックスキャンは、擬似的にコードを実行し、ウイルスに似た挙動をしないか、エミュレーションします。
しかし、実行ファイルのインストラクションを全てエミュレーションできるとは限りません。(技術的な問題による。)
またプログラムサイズが大きく、複雑に暗号化されたウイルスのエミュレーションには、非常に時間がかかります。

商用ソフトウエアにまつわる課題の解決

スパイウエアは、インターネット経由でその作成者または発信者に情報を送信するアプリケーションプログラムです。
スパイウエアは、バックドア・ウイルスと似た振る舞いをします。
悪質なスパイウエアはユーザー情報や、キーストロークを盗み、特定の通信チャネルを通して、他のマシンへ情報を送信します。
しかし、アンチウイルス企業の多くは、そのポリシーとしてスパイウエアなどの商用ソフトウエアを検出しません。
ハードディスクを破棄する際に使用するデータを消去する商用ソフトウエアがあり、それがあなたの友達から電子メールであなたに送られてくるかも知れません。
つい実行してしまう可能性もゼロではないでしょう。
合法的にデータを消去するプログラムは、アンチウイルスでは検出できません。
プログラムを実行した結果が、コンピュータや、ユーザーのビジネスにインパクトを与えても、現在のアンチウイルス技術では、それらの脅威を完全に防ぐことは不可能です。

Windowsにウイルスが多い理由

現在のウイルスは、MacやLinuxで活動するものもありますが、圧倒的にWindowsで活動します。
その一つの要因として、Windowsを使うほとんどの人々は、アドミニストレータ権限をログオン・ユーザーに加えていることが挙げられます。
アドミニストレータ権限は、アプリケーションをインストールする際に必要ですが、UNIXのようにシステム管理のために一時的に、root(特権ユーザー)になる習慣がWindowsにはありません。
Windowsでは、アドミニストレータのような特権ユーザーのまま、メールで送られてきた、不審なファイルをしばしば実行します。
アドミニストレータ権限は、システムの全ての資源にアクセスできます。つまりはシステムが稼動するために必要な重要なファイルを改ざんできます。
こういった環境で、ウイルスを実行すると、コンピュータの重要なファイルが改ざんされ、さらにはインターネットを通して、世界中のコンピュータが感染することがあります。
プログラムの実行環境は、ユーザーのためにもっと適切に保護されるべきです。

SecureVM のデザイン

コンピュータ上で、新規にプロセスを生成するか、または実行中のプロセスにアタッチして、コンピュータに重要な変更を加えることができるシステムコール約40種類(Windows版)を監視します。
監視対象のプロセスの振る舞いと、過去のコンピュータウイルスの特徴的な振る舞いを比較します。

現在のOSの多くは、カーネルモード(スーパーバイザモード)と、ユーザーモードが存在し、各ユーザーモードプロセスは、個別のコンテキストと、仮想アドレス空間を持っています。
そのため、同じユーザーモードプロセス同士が、他のプロセスのメモリをアクセスできないようになっています。
Windowsを含めたOSで、他のプロセスの振る舞いをコントロールするには、カーネルドライバを書き、システムコールをフックする方法(米コンピュータ・アソシエイツ社のeTrust Access Control等)がありますが、SecureVMの振る舞い監視は、Debuggerというソフトウエア開発で使われる特別な機能を使用して実装されています。
SecureVMの振る舞い監視は、全てユーザーモード、つまりアプリケーション層で行うことが特徴です。
カーネルドライバによって、しばしば引き起こされるシステムダウンなどの致命的なエラーは発生しません。
監視アプリケーションからのAPI呼び出しは、SecureVMによりキャッチされスタックフレームから、API呼び出しのネストと、パラメータ等が厳密にチェックされます。
検出方法、及び派生技術のいくつかは、特許出願されています。