1.はじめに
今日、コンピュータウイルスは主に利益目的で作成され、膨大な数の亜種が存在する。それらの亜種はアンチウイルスプログラムによる検出を避けるために、わずかに改変されている。その検出を避けるための改変は容易であり、安価で亜種を作ることができる。
一般的なコンピュータウイルスの検出方法としてパターンマッチ法がある[1]。パターンマッチ法では検査対象となるプログラムにバイト列が含まれているか調べるだけであり、この方法では既存のコンピュータウイルスしか発見できない。
一方、未知のコンピュータウイルスを検出する方法としてヒューリスティック法がある[1]。ヒューリスティック法では検査対象となるプログラムのコードを分析することで未知のコンピュータウイルスの検出が可能である。しかしヒューリスティック法では誤認という問題がある。
プログラムの実行時の動作からコンピュータウイルスを検出する方法がある[1]。この方法の問題点は、検査対象のプログラムがコンピュータウイルスとして動作するまで検出ができないことである。
また最近ではプログラムの構造からコンピュータウイルスを検出する方法が研究されている[2] [3] [4]。
本研究ではわずかな改変では検出を回避できず、かつプログラムの実行前にコンピュータウイルスを検出する方法を検討する。具体的にはプログラムを逆アセンブルし、コード内のAPI呼び出しや制御フローを静的解析することで特徴を抽出し、コンピュータウイルスの検出を行った。また特徴の共通部分グラフを比較することからもコンピュータウイルスの検出を試みた。
実験の結果からはAPI呼び出しや制御フローから特徴を抽出し分類することは可能であった。しかし最長パスを比較する方法では良い結果は得られなかった。最長パスに関しては制御フローを利用したりパスに重みを付けるなどの改良の可能性、関数単位で分割して処理するなども検討できると思われる。