6.今後の課題

制御フロー解析のグラフから比較を行う方法を追求するならばThomas Dullien、Daniel Bilarらの研究[2] [3] [4]のように関数の呼び出し関係も取り入れる方法がある。また彼らはAPIには注目していないが、APIも解析の対象とすることも考えられるだろう。

API推移の解析についてさらに発展させるならば、その頻度を考慮するとともにNが2よりも大きい場合も検討する必要があるだろう。この方向に進むならばForrest S.ら[7]や島本大輔ら[8]の研究の静的解析への応用という性格がより強くなる。

今回、最長パスに関しては良い結果が得られなかった。最長パスではエッジの重みはすべて同じとして扱ったが、エッジの重みを頻度などにより変化させる方法も考えられる。単純に長いパスを見つけるのではなく、よりコンピュータウイルスらしい動作を行っているパスを探す方法もある。

またAPI推移から最長パスを求めるのではなく、直接に制御フロー解析から最長パスを求めることも考えられる。しかしこの方法を試したところ制御フロー解析のグラフは大きいので、解を求めるのに時間がかかってしまった。これはスタート(エントリーポイント)からの正規のルートの他に多数の巨大な閉じたルートを検出してしまうことが原因である。制御フロー解析の結果を利用するならば、関数単位に分割したり、グラフの無駄なノードを探して削除するなどの工夫が必要だと考えられる。

上記のようにコンピュータウイルスに多く用いられるAPIの重みを大きくすることで、コンピュータウイルスに正常なコードが付加されていてもコンピュータウイルスのコードを抽出できると思われる。制御フロー解析では多くのコンピュータウイルスに含まれている関数を探して、その頻度に応じて重みを変えることでも同様の効果が期待できるだろう。

本研究では複数のPerlおよびC言語のプログラムを作成した。これらのプログラムを用いて解析結果を生成するMakefileにより自動的に結果を得られる。しかしコンピュータウイルスのバイナリから直接結果を得ることはできず、逆アセンブルや難読化されたコードの復号は個別に行う必要がある。Makefileによる解析結果の生成は、新しい検体を追加する毎に再構築が必要になる。この逆アセンブルや難読化されたコードの復号を統合し、また複数のプログラムの連携を見直して検体の追加処理が容易に行えるようにしたい。