ラック コンピュータセキュリティ研究所 岩井 博樹

 セキュリティソフトのウイルス検出では、前回紹介したパターンマッチングだと「パターン*1と一致しない=ウイルスではない」と判定せざるを得ない。プログラムコードを少しだけ書き換えた亜種*2ならジェネリックパターン*3を使って検出できる場合もある。しかし、コードが全く異なる新種のウイルスにはパターンマッチングは無力だ。そこで、違った側面からウイルスを検出しようとしたのが「ヒューリスティック」である。

 ヒューリスティックは、プログラムの構造や動作(振る舞い)、その他の属性を解析して評価することで、ウイルスであるかどうかを判定する。多くのセキュリティソフトで採用されており、現在、ウイルス検出を支える重要な技術の一つになっている。今回は、ヒューリスティックの基本的な仕組みや具体的な検出方法について解説する。

語源はギリシャ語の「発見的」

 ヒューリスティックは、ギリシャ語で「発見的」という意味である。セキュリティソフトに限らずコンピュータ科学の世界では一般的な用語として使われ、「必ず正解が求められるわけではないが、ある程度正解に近いものを得られる方法」「複雑な問題を素早く解決するために効果的な方法。しかし、その解答は完全ではない」といった意味を持つ。

 セキュリティソフトのヒューリスティックは、あるプログラムがウイルスに近いものかどうかを判定するための方法である。はっきりと、「このプログラムはXXXXXという名前のウイルスだ」という判定はできない(図1)。 挙動不審者を見つける

図1●ヒューリスティックでウイルスを検出した例<br>結果にある「Bloodhound.Exploit.337」を調べると、あるぜい弱性(CVE-2010-2265)を悪用するウイルスだとわかる。
図1●ヒューリスティックでウイルスを検出した例
結果にある「Bloodhound.Exploit.337」を調べると、あるぜい弱性(CVE-2010-2265)を悪用するウイルスだとわかる。
[画像のクリックで拡大表示]

 ヒューリスティックの動作を理解しやすくするために、ウイルス検出を警察の犯罪捜査に例えて説明してみよう。パターンマッチングとヒューリスティックによる検出方法を比較する。

 犯罪捜査において、パターンマッチングによる検出は指名手配されている容疑者を捕まえるようなものである。警察は、既に似顔絵や指紋データなどを入手しており、それと一致する人を逮捕すればよい。

 一方のヒューリスティックは、似顔絵や指紋データがない状況で犯人を捜し出す。警察は対象者の身辺を調査したり、行動が不審かどうかを観察したりすることで犯人を見つける。

 犯人かどうかを判定するポイントは、定義ファイルに記述されている。例えば、図2のように「留守宅の周りをウロウロする」といった行動が定義されていれば、その行動をとる該当者を犯人かもしれないと判定する。

図2●ヒューリスティックとパターンマッチングの違い
図2●ヒューリスティックとパターンマッチングの違い
パターンマッチングは、既知のウイルスでないと検出できない。ヒューリスティックは、構造や振る舞い判断するので未知のウイルスでも検出できることがある。

 このように、ヒューリスティックの判定は「かもしれない」という推測に基づく。パターンマッチングと違って、「犯人だ」と決めるとそれが誤認逮捕になる危険性がある。これがコンピュータの世界だと、正当なファイルをセキュリティソフトが「ウイルスだ」と判定してしまうことになる。

 そのため、ヒューリスティックはほかのウイルス検出方法の補完的な役割を担うことが多い。あくまで、ウイルスである可能性を示唆する技術である。

 それでも、振る舞いの怪しさが一定レベルに達すると、セキュリティソフトは「ウイルスだ」と判定することもある。プログラムに対して、どのポイントをチェックし、どのレベルに達したらウイルスだと判定するかの基準は、ソフトベンダーの腕の見せ所になっている。

 なおセキュリティソフトのベンダーは、ヒューリスティックによる検出を別の名称で呼ぶことがある。例えば「プロアクティブ脅威スキャン」(シマンテック)もしくは「プロアクティブディフェンス」(カスペルスキー)、「ルールベース」(トレンドマイクロ)などである。