コンピュータープログラムの内容や挙動パターンを分析することによって不正プログラムを検知する方法。ウイルス定義データベースを用意しスキャンを掛けることによって既知のウイルスを検知する方法(=リアクティブ)と併用される。未知ウイルスを検出することもできる。
ウイルス検知の技術は大別すると二つに分かれる。
1)リアクティブ(事後)
2)プロアクティブ(事前)
「リアクティブ」は、出現したウイルスを解析し、固有の情報(ハッシュ値など)を探り出し、その結果をインターネットを通じて各ユーザーの機器にダウンロードすることによってウイルス定義データベースを充実させ、機器内のデータをスキャンして感染していなかどうかを確認する方法である。
それに対して「プロアクティブ」は、それぞれのウイルスが固有に持っている情報に基づくのではなく、そのプログラムが実際にどのようなふるまいを行うのかを解析し、該当する可能性の高いものをウイルスと見なし検知する。
例えばESETの場合、以下の三つの技術を併用してプロアクティブ方式が作動している。
1)ジェネリックシグネチャ
不正プログラムと認められるものの、該当するハッシュ値がない場合、亜種に見られる特徴が確認されれば、ウイルスと判別する。
2)コード解析
ソースコードやスクリプトを解析し、既存の不正プログラムの基本構造(アルゴリズム)との共通性があれば、ウイルスと認定する。
3)エミュレーション解析
サンドボックスのような隔離された(仮想的)環境をコンピューターの中につくり、そこで動的にプログラムの挙動を監視し、ウイルスのふるまいをするかどうかを確かめる。
リアクティブは確実にそれぞれのウイルス(既知)を発見できるため、対策の基礎となっているが、絶えず出現している新たな脅威に対してその都度対応するのではなく、構造や内容によって判別しようとするプロアクティブも必須なのが、現状である。
リアクティブを強化する場合、ウイルス定義データベースを充実させることになるが、そうするとスキャンに時間がかかったり、ユーザーが「重い」と感じてしまう。
一方、データベースにはないものの怪しいと思われるプログラムの実行をできるだけ多く食い止めようとすると、それだけ誤検知の可能性も増えてしまう。
このように、リアクティブにもプロアクティブにも難点があるため、実際のウイルス対策ソフト(ソリューション)は、単に動作が軽快であったり高性能であれば良い製品というわけではなく、バランスが大事なのである。
できるだけ安全になるようにウイルスをできる限り多く検出できる性能を持つと同時に、機器への負荷を可能な限り避けることが望まれている。