5.まとめ
関数呼び出し関係に沿ってAPIを抽出する方法では私自身が解析を行った結果に近い結果が得られた。しかしコンピュータウイルスの作者がこの方法を知った場合、関数の内部でコードの順番を入れ替えたり、独立して行われる処理の順番を入れ替えるなどの方法で検出できないようにすることが比較的容易にできる。作者側がこの方法を想定していないからこそ検出できたと言える。
関数ごとに制御フロー解析を行いグラフを求めて一致するグラフを探す方法でも良い結果が得られた。本研究では単純に関数単位のグラフだけを比べていたがThomas Dullienはそれに加えて関数の呼び出し関係も考慮した上で全体の構造を比較している。Thomas Dullien、Daniel Bilarらの研究[2] [3] [4]は本研究のこの方法をより追求し発展させたものだと言える。
API推移比較する方法でも良い結果が得られた。本研究ではそのAPI推移が存在するか否かだけで比較を行った。これはN-gram法でN=2としてその頻度を考慮しない方法にあたる。これはForrest S.ら[7]や島本大輔ら[8]の研究を静的解析に応用したものだと言える。
最長パスからAPIを抽出する方法では良い結果は得られなかった。これは制御フロー解析からAPI推移を求め、さらにそこから最長パスを求めるという何段階もの変換を行ったために、元の検体の特徴が劣化してしまったと考えられる。
静的解析では十分に大きな正常なコードの中にコンピュータウイルスのコードを入れた場合、全体に占めるコンピュータウイルスのコードの比率が低くなり、検出が正しく行われなくなる。本研究の提案でもコンピュータウイルスのコードに正常なコードを加えた場合、正常なコードが他のコンピュータウイルスと一致しない部分として解析されるために距離が大きくなってしまう。この問題は後述する6.今後の課題で対策を示す。
3-1-3.API抽出の比較と3-2-4.同一構造の関数の発見を比べるとW32/Korgo.TがW32/Korgo.Vなどと異なる検体として扱われているなど同一構造の関数を発見する方法の方が完全に一致する検体に対して厳密になっている。また値が急激に増加する傾向がありText maid 1.9OとText maid 1.9Pなどの例外があるもののほとんどの場合には同一構造の関数の発見する方法の方が値が大きくなる。しかしおおよそ2つの検体の比較の結果は似ていると言える。3-3-3.API推移の比較はさらに他の方法に比べて距離の値が大きくなる傾向がある。
提案した方法のいづれでも正常なプログラム(ネットワーク関連のプログラム)と各コンピュータウイルス間の距離はおおよそ9000を越えている。正常なプログラムをコンピュータウイルスと誤認することはないと思われる。
各異なる種類のコンピュータウイルス間の距離も大きな値となっており異なる種類を正しく分類できている。
一方、亜種間の距離であっても他のどの亜種とも距離が大きくなっている検体もある。検体と検体の中間に位置する検体を入手できなかったために距離が大きなったと考えられる。またコンピュータウイルスの分類と命名は解析者が経験に基づいて行っているものであり、本研究で抽出したコードの特徴とは異なる基準で分類と命名が行われている場合もある。