コールグラフと制御フロー解析によるマルウェアの静的解析と分類
アブストラクト
本研究では,コールグラフとプログラム中の制御フロー解析を組み合わせ,マルウェアを精度良く静的に分類する手法について提案する.本手法の特徴は,マルウェア作成者側による,わずかな改変では検出を回避できない点が挙げられる.
今日,マルウェアは利益目的で作成され大量の亜種が存在する.それらの亜種はアンチウイルスプログラムによる検出を避けるために,わずかに改変されている.その検出を避けるための改変は容易であり,安価で亜種を作ることができる.一般的なマルウェアの検出方法としてパターンマッチ法がある.パターンマッチ法では検査対象となるプログラムにバイト列が含まれているか調べるだけであり,この方法では既存のマルウェアしか発見できない.パターンマッチ法ではマルウェアの解析を行い,そのパターンを作成した者がマルウェアを分類して名前を決定する.解析者の経験に基づいて分類を行うので,誤って分類されることもある.
一方,未知のマルウェアを検出する方法としてヒューリスティック法がある.ヒューリスティック法では検査対象となるプログラムのコードを分析することで未知のマルウェアの検出が可能である.しかしヒューリスティック法では誤認という問題がある.またアンチウイルスプログラムのヒューリスティック法では分類まではできない.
プログラム解析の手法は,動的解析と静的解析の大きく2つに分類される.まず,プログラムの実行時の動作からマルウェアを検出する方法(動的解析)がある.この方法の問題点は,検査対象のプログラムがマルウェアとして動作するまで検出ができないことである.
他方,プログラムの構造からマルウェアを検出する方法(静的解析)の研究が近年盛んに行われている.静的解析で用いられる方法の1つに,プログラムのコードに対して制御フロー解析を行い,プログラムのコードをグラフ化して比較を行う方法がある.しかしマルウェア全体を制御フロー解析すると巨大なグラフになってしまう.グラフを分割するなど,どのように工夫してグラフの比較を行うかがポイントとなる.
本研究は,マルウェアの検体コードに対して,コールグラフと制御フローの解析に基づいて,多少のコード改変に対する耐性を有しながら,かつ精度良く亜種分類する手法について提案している.実行可能プログラムの構造やコード列の解析に基づく静的解析時に問題となる点として,上位言語での実装は同一であったとしても,コード生成時のコンパイラの最適化設定変更や,異なるコンパイラを利用すること等で,動作が同一のマルウェアであっても異なるコードが生成されており,それらを検出できなかったり分類を誤ってしまうことが挙げられる.このようなコードの違いにも対応できる方法を考える.また静的解析ではマルウェアとは関係ない正常なコードを多く付加することで,プログラム全体のうちのマルウェアのコードの比率を下げて検出を回避する方法がある.これに関しても検討を行う.
具体的にはプログラムを逆アセンブルし,コード内のAPI呼び出しや制御フローを静的解析することで特徴を抽出し,マルウェアの検出と分類を行う.また特徴の共通部分グラフを比較することからもマルウェアの検出と分類を試る.API呼び出しを抽出する方法では,逆アセンブルした結果をコールグラフに沿って解析し,呼び出されているAPIを抽出する.抽出したAPIの並びを1つの配列とみなし,各々のプログラムから求めたこの配列を比較する.結果として各プログラムの違いを数値化することに成功した.
制御フロー解析の結果は巨大なグラフとなるため,単純な比較はできない.従って,各プログラムの関数を1つの単位として関数内部の制御フローが完全に一致するか否かを比較する.一致した関数の比率から各プログラムが一致する割合を求めることができる.制御フロー解析の結果からあるAPIが呼び出されたときに,次に呼び出される可能性のあるAPIを求めてグラフ化した.このグラフの一致するエッジの割合を求めることで各プログラムが一致する割合を求めることができる.またコールグラフと制御フロー解析を組み合わせることでマルウェアが正常に実行された場合のフローを推測し,その実行によって呼び出されるAPIを抽出することでマルウェアの検出と分類が行えるか検討した.
実際のマルウェア検体を対象として,本手法の有効性を確認するための亜種分類試行実験を行った.実験の結果からはAPI呼び出しや制御フローから特徴を抽出し分類することは可能であった.マルウェアの分類ができることで,新たに作られたマルウェアがどの既知のマルウェアに似ているかわかる.それによって機能を推定したり,また解析者が解析を行う上での手がかりとなる.新しいマルウェアの解析にどの解析者を割り当てるのか,また解析を進める方針が早い段階でわかることは,大量の亜種が作られる今日のマルウェア対策にとって大変有用である.