パソコン・ショップに行くと,店頭にはさまざまなウイルス対策ソフトが並んでいる。ウイルスの脅威からパソコンを守るには,こうしたウイルス対策ソフトが有効だ。ただ,単にインストールするだけでなく,ウイルス対策ソフトを常に動かしておき,定期的にアップデートすることが重要,とよく言われる。Part2では,ウイルス対策ソフトのしくみを探ることで,なぜウイルス対策ソフトを常駐させ,アップデートが欠かせないか,という理由を確認しよう。また,ソフトによって対応できるウイルスの数が大きく違っている理由や,特定のウイルスを検出できない理由なども,明らかにする。

 ウイルス対策ソフトの一番の目的は,「ウイルスに感染するのを未然に防ぐ」ことである。つまり,「病気を治す薬」というよりも,病気にかからないように予防する「ワクチン」なのである。ここは,とても重要なポイントだ。

 もちろんウイルス対策ソフトは,感染したファイルを元に戻す機能も備えている。しかし,これはあくまでも補助的機能でしかない。あとで説明するように,感染してからウイルス対策ソフトを買ってきて導入したのでは,もはや手遅れという場合もある。

常時動かして監視する

 さて,ウイルス対策ソフトはどのタイミングでウイルスの感染を検出するのだろうか。大きく分けると,(1)常時動いていて,ユーザーがアクセスしようとしたファイルを調べる,(2)定期的あるいはユーザーの指示によってパソコン内のファイルをくまなくチェックする――という二通りの方法がある。

 このうち,侵入を未然に防ぐという意味で重要なのは,(1)である。ウイルス対策ソフトを常に動かしておけば,ウイルスがどこから侵入してきても,ユーザーが感染したファイルにアクセスした瞬間に発見できる(図1)。

図1●ウイルス対策ソフトの一番の目的は感染を未然に防ぐこと
図1●ウイルス対策ソフトの一番の目的は感染を未然に防ぐこと
[画像のクリックで拡大表示]

 だから,よく言われるように,ウイルス対策ソフトを常駐させておくのが重要なのである。ウイルス対策ソフトを常に動かしておかないのは,役割を半減させているようなものだ。

 一方,(2)のパソコン内にあるファイルをくまなくチェックするのは,例えば新種のウイルスが侵入してきて,(1)の段階で発見できなかった場合などに役立つ(図2)。ウイルス対策ソフトといえども完璧ではないので,定期的にチェックするのは重要である。

図2●定期的にパソコンの全ディスクのファイルがウイルスに感染していないかチェックするのも重要だ
図2●定期的にパソコンの全ディスクのファイルがウイルスに感染していないかチェックするのも重要だ
[画像のクリックで拡大表示]

検出の基本はデータの単純比較

 ウイルスを検出するタイミングがわかったら,次はウイルス対策ソフトがどのように感染ファイルを判別するのかを詳しく見ていこう。

 そもそも,プログラムがウイルスに感染しているかどうかというのは,だれかがそう判断しているだけで,パソコンから見れば,ウイルスだろうがゲーム・ソフトだろうがまったく同じプログラムである。

 つまり,ウイルスを検出するには,だれかが定義した「このプログラムはウイルスである」という情報に基づいて判断しているのだ。これがウイルス対策ソフトの基本的なウイルス検出方法である。あらかじめ用意されているウイルスのパターンとプログラム・ファイルの内容を比較して,内容が同じならばウイルスと判断する(図3)。この手法は「パターン・マッチング」と呼ばれる。どんなウイルス対策ソフトも,このパターン・マッチングを使うのが基本である。

図3●ウイルス・チェックの基本はパターン・マッチング
図3●ウイルス・チェックの基本はパターン・マッチング

一つひとつデータベースを調べる

 パターン・マッチングのしくみはきわめて単純だ。ウイルス対策ソフトはあらかじめ個々のウイルスの「特徴(パターン)」を記録したデータベースを持っている。ウイルス定義データベースの呼び方は,各社バラバラだが,内容はどれも同じである。

 ウイルス定義データベースには,検出すべきすべてのウイルスの情報が格納されている。つまり,5万種類のウイルスが調べられるソフトだったら5万種類分のウイルス情報が入っている。当然,新しいウイルスが見つかれば,データベースに追加される。

 パターン・マッチングは,ウイルス対策ソフトがこの定義データベースを使ってチェックすべきファイルの中身とデータベースを一つひとつ比較していくのである。実際には,ウイルスの特徴となるデータが,検査対象のファイルの一部と一致するかを比較する。

 こう聞くと大変な作業のように思えるかもしれないが,こうしたデータの比較処理はコンピュータの得意分野である。あるファイルが何万種類もあるウイルスのどれかと一致するかどうかを調べるとしても,検出処理はあっという間に終わる(遅くて数秒程度)。

 なお,最近のウイルス対策ソフトは,パターン・マッチング以外のウイルス検出手法も採用しており,さまざまな手法を組み合わせてウイルスを検出するのが一般的である。しかし,現状ではあくまでも補助的な機能に過ぎず,基本となるのはやはりパターン・マッチングである。

定義データベースの中身

 さらに,定義データベースとはどんなものかを知るために,新種のウイルスが登場したときに,ウイルス対策ソフト・ベンダーが定義データベースを作成する流れを追っていこう(図4)。

図4●ウイルス定義データベースができるまで
図4●ウイルス定義データベースができるまで
[画像のクリックで拡大表示]

 単純な定義データベース作成方法は,ウイルス・コードをそのまま比較用のデータベースとして使うやり方がある。この方法は,なんといっても対象となるウイルスを発見するという目的では一番確実な方法である。ウイルス・コードをそっくりそのまま比較用データとして使えば,相手が同じウイルスの形であれば,間違いなく検出できる。

 しかし,ウイルス対策ソフト・ベンダーは,この手法で定義データベースを作ることは基本的にない。それは,何万種類もあるウイルスをまるまる登録していたら定義データベース全体のサイズが膨大になってしまうからだ。こうなれば,当然パターン・マッチング処理に時間がかかるし,新しいウイルスが登場したときに,ユーザーが定義データベースをダウンロードする時間もかかる。

 さらに,ウイルスには,基本的には同じウイルスだが,ほんの一部分だけ違っている変種や亜種が存在することが多い。ウイルスのコードをそのままデータベースに登録すると,このような変種や亜種は検出できなくなる。つまり,柔軟性がまったくない

ピンポイントで特徴を抜き出す

 それではどうするか。答えは簡単,ウイルスの特徴となる部分だけをピンポイントで抜き出してパターンとして登録するのである。

 具体的な手法としては,単純にウイルス・コードの一部分だけ切り出してもいいし,ある程度大きな部分を切り出してその部分のハッシュをとってもいい。実際には,複数の場所を切り出してそれぞれに処理を加える場合もある。こうすることで「サイズが小さく」,「変種や亜種への応用が効き」,「誤認が少ない」定義データベースが作成される。

 ただし,口で言うのは簡単だが実際にこうやって定義データベースをうまく作るのはとても難しい。パターン・マッチングを使うかぎり,どんなウイルス対策ソフトでも検出能力自体にはあまり差は生じないが,定義データベースの作り方は解析するメーカーの技術力に大きく依存する。この結果,「このソフトは誤認が多い」,「誤認は少ないけどチェックするのに時間がかかる」といった話が出てくるのである。このあたりがウイルス対策ソフト・ベンダーの腕の見せどころとなる。

誤認はどうしても避けられない

 ウイルス定義データベースは,いろいろな工夫が盛り込まれている。しかし,世の中には無数にアプリケーション・プログラムが存在する。このため,ウイルス対策ソフトには正規のプログラムをウイルスと誤認してしまう可能性がつきまとう。実際,大手のウイルス対策ソフトが,有名なフリーソフトなどを誤認する事件が,過去に何度も起こっている。

 また,今はまったく誤認がないとしても,新しいアプリケーションが登場すれば,今の定義データベースで誤認する可能性がある。つまり,新しいウイルスに対応するために,定義データベースをアップデートするのではなく,新しい正規プログラムを誤認しないためにも,更新しなければならない。

専用の検出プログラムが加わる

 最近のウイルス対策ソフトは,単純なパターン・マッチングだけでウイルスを検出するわけではない。ウイルスが進化し,パターン・マッチングの裏をかくようになりつつあるからだ。これに対応できるように,対策ソフト側もさまざまな手法を取り入れている。

 例えば,Part1の「フェーズ2:潜伏」のところで登場した自己変異型や暗号化ウイルスに対抗する手法である。こうしたウイルスは,感染するたびに自分自身の姿を変える。このため,ある瞬間のウイルスの姿を基に定義データベースを作っても,ほかのファイルに感染した瞬間に形が変わってしまい,単純なパターン・マッチングが通用しない。