セキュリティを形にする日本のエンジニアたち


第6回 ヒューリスティックエンジンの原理とは


丹田賢
株式会社フォティーンフォティ技術研究所
技術本部 沖縄研究開発部 シニアソフトウェアエンジニア
2011/5/31
yaraiが搭載するウイルス検出エンジンの1つに「HIPSエンジン」がある。これは、プログラムの挙動を監視し、「ウイルスらしさ」を判定する仕組みだ(編集部)

 これはウイルス? そうじゃない?

 いきなりだが、このレジストリキーを見てピンとくる方はいらっしゃるだろうか。

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit

 こちらはどうだろう。マルウェア解析に興味のある読者には見覚えがあるかもしれない。

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDriveTypeAutoRun

 もう1つ、

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

といえば、本稿の読者であればご存じだろう。

 これらのレジストリキーは、いずれもプログラムの自動実行に関係するものだ。1つ目と3つ目は指定したプログラムを自動実行するために使用され、2つ目はUSBメディアなどにおける自動実行機能の有効/無効を切り替えるために使用される。そして同時に、ウイルスが非常によく利用するレジストリキーの一部でもある。

 「ウイルスらしさ」を検出するHIPSエンジン

 弊社のyaraiが搭載するエンジンの1つに「HIPSエンジン」というものがある。HIPSとはHost-based Intrusion Prevention System(ホスト型侵入防止システム)の略であり、その名の通り侵入防止システムとして各プログラムの挙動を監視する。

 ウイルス検出の方法はいろいろあるが、HIPSエンジンは「ビヘイビア検出」として知られる検出方法を採用しており、監視しているプログラムが「ウイルスのような」活動を行った場合、その活動をブロックしたり、実行しても問題がないか、ユーザーに確認を求めたりする。

 監視対象は、前述の例に挙げたようにレジストリキーを変更しようとしていないか、システムフォルダの内容を変更しようとしていないかなど、ウイルスが頻繁に行う活動だ。また単なるレジストリやファイルへのアクセス監視だけではなく、「ウイルスのような振る舞い」も監視する。

 次のサンプルプログラムを見てみよう(興味のない方は読み飛ばしても構わない)。

// (さまざまな感染活動を行う)
//...

// バッチファイルを作成
HANDLE BatchFile = CreateFileA("delete.bat",             //...
WriteFile(BatchFile, ":loop\r\n",                                 //...
WriteFile(BatchFile, "@del \"%~f1\"\r\n",                    //...
WriteFile(BatchFile, "@if exist \"%~f1\" goto loop\r\n", //...
WriteFile(BatchFile, "@del \"%~f0\"\r\n",                    //...
CloseHandle(BatchFile);

// バッチファイルを実行し、終了する
char Self[MAX_PATH], Command[MAX_PATH*2];
GetModuleFileNameA(NULL, Self, MAX_PATH);
sprintf_s(Command, "delete.bat \"%s\" >NUL 2>&1", Self);
WinExec(Command, SW_HIDE);
exit(0);

 これは「ウイルスのような振る舞い」の1つを模したものだ。このプログラムを実行すると、「自分自身を削除するバッチ」を生成し、実行する。その結果、最後にはプログラムファイル(exe)もバッチファイルも残らない。

 ウイルスはしばしば、自身の痕跡を消すため、このような特徴的な振る舞いを見せる。HIPSエンジンはこういった「ウイルスのような振る舞い」も検出するようになっている。

 ヒューリスティック技術の課題と改善

 ところで、「ウイルスらしさ」とはどのように設定されるのだろうか?

 例えば、初めに挙げたレジストリを変更しようとしただけでウイルスと断定されてしまっては、使い物にならない。そればかりか、正規のアプリケーションがウイルスと誤検出されてしまい、迷惑ですらある。実はこれが、ヒューリスティック技術が直面している最大の課題なのである。

 図1は、ヒューリスティック技術と従来のパターンマッチング技術のウイルス検出能力の差異をイメージ化したものだ。

図1 従来技術とヒューリスティック技術の検出能力の差異

 ヒューリスティック技術は、近年急増している未知の脅威を検出できる汎用性がある半面、誤検出のリスクが付きまとう。検出能力を維持したまま誤検出を減らすためには、適切なヒューリスティックの判定ロジックを設計しなければならない。

 FFRのHIPSエンジン開発では、まず、多数のウイルスを分析して得られたノウハウを生かして「ウイルスらしさ」を設定した。次に、膨大な数の正常プログラムを収集、自動実行しながら評価し、実装の調整や、誤検出を回避する新しいロジックの追加などを繰り返し行っていくことで、この判定ロジックを作り上げている。

 現在ではさらに、統計的な手法から「ウイルスらしさ」を見いだす研究も行っている。図2はウイルスと正常プログラムを多数実行し、Internet Explorerにアクセス(実行・読み込みなど)したり、TCPで情報を送信したりするといった挙動を行ったプログラムの率を比較したものだ。

図2 ある挙動を行ったプログラムの率の比較(標本は本稿のため無作為に選定した各5000体)

 この図からは、Internet Explorerにアクセス(実行・読み込みなど)したり、TCPで情報を送信したりする振る舞いは、正常プログラムよりもウイルスのほうで、より多いことが読み取れる(Internet Explorerへのアクセスは、Internet Explorer がWindowsファイアウォールの例外として設定されていることを利用する挙動と思われる)。

 もちろんこの結果を受けて、「TCPで情報を送信するプログラム、イコール、ウイルス」と即座に判定できるわけではない。しかしながら、このような研究の積み重ねを基にしてHIPSエンジンは日々改善を重ね、検出率を高めている。

Profile
丹田賢(たんだ さとし)

株式会社フォティーンフォティ技術研究所
技術本部 沖縄研究開発部 シニアソフトウェアエンジニア

ウイルス・P2Pソフトウェア解析、セキュアプログラミング教材開発、セキュリティエンジニア技術研修セミナー講師などに従事。

ウイルスの動的解析技術の研究を専門とし、ルートキットも分析可能な命令レベルのトレースが可能な動的解析ツール「egg」を作成、Recon2011で講演予定。

現在は、ただただ青い鳥だけを求め、気付けば沖縄へ。Webマルウェア検知システムに関する研究開発に従事する。暑いのは嫌い。

Index
ヒューリスティックエンジンの原理とは
Page1
これはウイルス? そうじゃない?
プログラムの挙動を監視し「ウイルスらしさ」を検出するHIPSエンジン
ヒューリスティック技術の課題と改善

セキュリティを形にする日本のエンジニアたち 連載インデックス


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間