2.関連研究

コンピュータウイルスを検出する主な方法として、パターンマッチ法がある[1]。この方法はコンピュータウイルスとして特徴がある部分のコード(パターン)をデータとして登録し、それが検査対象のプログラムに含まれているかチェックすることでコンピュータウイルスを検出する方法である。登録されるデータはコンピュータウイルス全体のうちのごく一部に過ぎない。

この方法で未知のコンピュータウイルスを検出するのは偶然に過去のコンピュータウイルスのパターンが新種のコンピュータウイルスに含まれていた場合に限られる。しかしコンピュータウイルスの作者はパターンマッチ法での検出を避けるために、登録されているパターンが含まれないように新しいコンピュータウイルスを作る。そしてそれは命令を入れ替えたりコンパイル時の設定を変えるなどの容易な方法で可能である。

一方、未知のコンピュータウイルスを検出する方法としてヒューリスティック法がある[1]。ヒューリスティック法ではアンチウイルスプログラムは検査対象プログラムのコードを分析し、そのプログラムが行う動作を抽出する。その結果得られたプログラムの動作がコンピュータウイルスの動作と似ているか否かでコンピュータウイルスを検出する。ヒューリスティック法では複数の動作を比較し、動作の一致に対して得点を与え、一定の閾値を越えた場合にはヒューリスティックと判定する。

しかしこの方法ではコンピュータウイルスと似ている動作をする正当なプログラムを誤認する可能性がある。従ってヒューリスティック法ではコンピュータウイルスとして判断する閾値を高く設定して、確実にコンピュータウイルスと言える場合にしか検出することはできない。よってヒューリスティック法で検出できるコンピュータウイルスには限界がある。

伊吹賢一らの研究[5]ではヒューリスティック法をベースにコードを自動解析して比較する動作を学習し、得点を変化させる方法を提案している。伊吹賢一らはマクロウイルスを対象に実験を行った。

他の方法として、プログラムの実行時の動作からコンピュータウイルスを検出する方法がある[1]。この方法ではプログラムを実行したときにそのプログラムが呼び出したAPIやシステムコールなどから検出を行う。

この方法では条件が満たされなければコンピュータウイルスとして動作しないプログラムの場合、条件が満たされるまで検出できない。星澤裕二らの研究[6]ではこの動作条件の抽出を試みている。この研究では動作条件のヒントは得られているが、しかし完全な動作条件は抽出できていない。

またThomas Dullien、Daniel Bilarらの研究[2] [3] [4]はプログラムの構造からコンピュータウイルスを検出している。この方法ではプログラムの実行時の動作(API呼び出しやシステムコール)やコードそのもの(パターン)には注目せず、プログラムの構造のみに注目している。

コンピュータウイルスの検出というよりも、異常検出ではあるがForrest S.らの研究[7]はN-gram法でシステムコールの呼び出し列を特徴化することで異常検知を試みている。それをWindowsに応用した例として島本大輔らの研究[8]がある。