私は頻繁にアンチウイルスプログラムが役に立っているのかと聞かれる。私はいつも「イエス」と答えていたのだが、最近は自分でもなぜだろうと考え始めた。

 われわれは、インターネット上で生き残るためには、コンピュータにはアンチウイルスアプリケーションの保護が必要だと言われてきた。もしこれが本当なら、次のような疑問が出てくる。

  • なぜ未だにコンピュータは感染するのか。
  • もしアンチウイルスプログラムを使わなければ、もっとひどいことになるのか。

 これらの疑問について、私は十分な事実を知らないことに気づいた。そこで、私はアンチウイルスの手法について調べ始めた。わかったのは次のようなことだ。

問題は何か

 悪者たちには動機がある。マルウェアに感染したコンピュータを利用して金銭を得ることは、ほかの違法行為よりも簡単で安全なのだ。しかしわれわれ(被害者)の方にも、狙われている自分の財産を守りたいという動機がある。では、なぜサイバー犯罪者の方が優勢なのだろうか。まず、彼らには次のような有利な点がある。

  • 脆弱性のあるソフトウェア。これは前提条件だ。ソフトウェア、特に複雑なコードには、必ず悪用可能なバグが存在する。
  • 奇襲の要素。普通のユーザーは、ソフトウェアの脆弱性を探したりすることはない。しかしサイバー犯罪者は、ほかの人が知らないうちに悪用するチャンスを得ようと、ソフトウェアの弱点を見つけようとしている。
  • 後手に回っている。マルウェアがどのようなものになるかは予想が難しく、アンチウイルス開発者の打つ手は受動的なものになっている。

 最近Googleに起こったことが、もっともよい例だろう。攻撃者はInternet Explorerに存在する未知の(ゼロデイ)脆弱性を利用し、Googleの安全だと考えられていたネットワークに侵入した。この事例が、前述の3項目にどれだけ当てはまるかを見てみよう。

  • 脆弱性のあるソフトウェア。Internet Explorerには悪用可能な脆弱性が存在した。
  • 奇襲の要素攻撃者だけがその脆弱性を知っていた。
  • 後手に回っている。アンチウイルス企業は検知方法を開発しようとしており、Microsoftは事後になってからInternet Explorerのパッチを準備した。

 ここまででは、まだなぜアンチウイルスアプリケーションがわれわれのコンピュータを保護できていないのかを理解できず、経験を積んだソフトウェアエンジニアにこの問題について尋ねてみた。彼は、見つけられないものを取り除くことの困難さについて指摘した。控えめな表現での話だ。しかし、私は理解した。マルウェアの検知はわれわれが考えているほど簡単ではないのだ。次のステップは、それがなぜかを調べることだ。

マルウェアの検知

 マルウェア検知の手法は2つに分かれる。シグネチャに基づくマルウェア検知と、挙動に基づくマルウェア検知だ。アンチウイルスアプリケーションは、プログラムの洗練度によってその一方、あるいは両方の手法を利用する。シグネチャに基づくマルウェア検知はかなり古くからあるため、まずはこちらについて見てみよう。

シグネチャに基づくマルウェア検知

 シグネチャに基づくマルウェア検知は、パターン認識に依存している。その動作原理はこうだ。アンチウイルスアプリケーションは、問題になっているファイルをスキャンし、コードの特定のバイトをマルウェアのシグネチャデータベースと比較する。もしスキャンされたファイルのパターンが、データベースにあるものと一致すれば、そのファイルはマルウェアであると見なされる。その場合アンチウイルスアプリケーションは、プログラムの設定次第で、そのファイルを隔離または削除する。

欠点

 現在、シグネチャに基づくマルウェア検知はほとんどすべてのアンチウイルスプログラムに含まれている。しかし、アンチウイルス企業は次のような理由からシグネチャに基づくマルウェア検知から脱皮しようとしている。

  • シグネチャに基づくマルウェア検知の手法は、新たなマルウェアや未知のマルウェアには効果がない。
  • 新たなマルウェアは日々作り出されており、シグネチャデータベースはかなり頻繁に更新される必要がある。

 これらは妥当な懸念であり、このためアンチウイルス企業は、多くの時間と手間を挙動に基づくマルウェア検知に投資している。

挙動に基づくマルウェア検知

 挙動に基づくマルウェア検知は、ソフトウェアの作りではなく、プログラムがどのように動作するかをモニターするというものだ。もし普通ではない挙動が検知されると、もしそのソフトウェアが正しいものに見えても、そのプログラムにはフラグが立てられる。挙動に基づくマルウェア検知には、2つのタイプがある。異常に基づくマルウェア検知と、仕様に基づくマルウェア検知だ。

異常に基づくマルウェア検知

 異常に基づくマルウェア検知で重要なのは、何を正常な挙動だと見なすかという判断だ。従って、通常のプロファイルからの逸脱を怪しい(異常)と考える。例えば、あるプログラムは通常、実行されたときにファイルを作成しないとする。そして、突然そのプログラムがあるファイルをOSのシステムフォルダに移動したとする。すると、この種類のアンチウイルスソフトウェアは、直ちにこの行動にフラグを立てる。

 異常に基づくマルウェア検知は、さらに2つに分けることができる。

  • 受動的検知。スキャニングによって、プログラムの通常のプロファイルからの逸脱を検知する。
  • 積極的検知。この検知方法では、問題のプログラムをサンドボックスや仮想マシンなどのコントロールされた環境で実行してみる。そして、そのプログラムの挙動を観察する。もしそのプログラムの挙動が特定の条件に一致すれば、怪しいものとしてフラグが立てられる。

 異常に基づくマルウェア検知は良さそうに見えるが、欠点もある。このタイプの検知方法には誤検出がよく起こるということだ。これは、単純に近年のプログラムの複雑さが増しているためだ。さらに、もし攻撃者がマルウェアのコードを真っ当なプログラムのように振る舞うよう気をつければ、そのプログラムが検知されることはない。異常に基づくマルウェア検知を行うソフトウェアの例としては、Threatfire Zero-Day Malware Protectionが挙げられる。

仕様に基づくマルウェア検知

 現在のところ、仕様に基づくマルウェア検知(資料のIV-B)がマルウェアの問題の軽減に対して一番期待の持てる手法だ。これは、あらゆるプログラム(OSもアプリケーションも含めて)のすべての行動を、あらかじめ定められた方針に基づいて仲介するという手法だ。例えば、もしそのように方針を設定すれば、コンピュータの責任者に指定されたウェブサイトからダウンロードされたファイルの実行を禁止することも可能だ。

 仕様に基づくマルウェア検知の利点は、その柔軟性と、異常に基づくマルウェア検知に比べ誤検知が最小限で済むことだ。仕様に基づくマルウェア検知の例としては、NovaShield AntiMalwareが挙げられる。

分かったこと

 私はコンピュータでファイルが隔離された経験はほとんどない。私はほかのことにも気づいた。典型的なアンチウイルスプログラムで保護されていながら感染したコンピュータの多くは、問題のマルウェアを除去するために特別なスキャナーが必要になるということだ。この記事を書いてみて、私はその理由を知ることができた。

最後に

 「後悔するよりは安全側に倒した方がいい」と考えるタイプの私は、今後もアンチウイルスプログラムを使うことを勧めていきたい。ただし、勧めるアンチウイルスプログラムの種類は変えていく。今後は異常に基づくマルウェア検知や仕様に基づくマルウェア検知の仕組みを持っているものを勧めていくことにする。

この記事は海外CBS Interactive発の記事を朝日インタラクティブが日本向けに編集したものです。原文へ

関連記事