本連載では、システム管理者が知っておくべきコンピュータ・ウイルスに関する知識や、行うべきセキュリティ対策にはどのようなものがあるかということを示し、単に技術的な観点からだけではないコンピュータ・ウイルスの知識とその対策について解説します。正確な知識と対策を学ぶことで、コンピュータ・ウイルスから企業を守っていく助けとなれば幸いです。(編集局)
前回はウイルスによって企業が受ける被害を、直接的な被害と、間接的な被害に分けて説明した。今回はウイルスに正しく対処するために、ウイルスの技術について学んでいく。ここでの「ウイルス」は「ユーザーの意思にかかわらず不利益をもたらす不正なプログラム」のことを指す。
1983年に最初のウイルスといわれている「Elk Cloner」が世に現れた。当時のコンピュータのOSといえば、AppleDOS 3.0やMS-DOS 3.0が出たころで、インターネットなどは一般社会において影も形もなかったころである。そこから20余年たったいま、コンピュータやOSの性能は進化し、一般家庭のパソコンまでがインターネットによって世界中と接続されるようになった。このネットワークの進化とともに、ウイルスも当然のように進化を続けている。ウイルスの進化は、ウイルスを駆除しようとする人々と、ウイルス作成者とのいたちごっこの歴史である。
現在のウイルスは高度な技術によって作成されていることが多い。皆さんが知っているウイルスの技術はもはや古い知識かもしれない。そのためウイルスの技術を理解していくことで、ウイルスの挙動や被害を把握し、対策に役立てていただきたい。
連載の第1回でウイルスの感染タイプについて簡単に述べたが、ここでは感染タイプ別にその技術についてもう少し掘り下げてみる。
ブートセクタ感染型のウイルスは、その名のとおりブートセクタに感染するウイルスである。フォーマットされたディスクでは最初の物理セクタ(ハードディスクでは論理セクタ)がブートセクタとなる。コンピュータが起動(ブート)すると、まずBIOSプログラムがディスクを探し出し、ブートセクタをプログラムとして実行することでOSが起動する。つまり、ブートセクタにはプログラムが存在するのである。
この必ず実行されるブートセクタにウイルスプログラムが存在すると、コンピュータの起動時にウイルスが実行される。ブートセクタというのは、ハードディスクにはもちろん、データしか入っていない(システムディスクではない)フロッピーディスクにも存在する。
ブートセクタ感染型のウイルスは、既存のブートセクタを移動または置き換えることで感染する。ウイルスがブートセクタから実行されると、メモリに自分自身をインストール(常駐)して、通常のブートセクタのプログラムを起動する。つまり、OS上で動作しているウイルス対策ソフトウェアなどが動作する前に、ウイルスプログラムがコンピュータを制御してしまう可能性がある。
ファイル感染型のウイルスはファイル自体に感染するタイプのウイルスである。「ウイルス」という名前に最も当てはまるタイプのウイルスである。実行可能なファイルにウイルスのコードを追記したり、リンクしたりすることで感染する。
ファイル感染型ウイルスには感染パターンとして次のものが挙げられる。
媒体に感染するブートセクタ型ウイルスと、ファイルに感染するファイル感染型ウイルスのそれぞれの特徴を活かしたウイルスである。媒体の移動で感染するブートセクタ型ウイルスは、フロッピーディスクやリムーバブルメディアなどでほかのコンピュータに移動することでしか感染を広げることができず、またファイル感染型ウイルスはプログラムが実行されるまで感染を広げることができない。
これらの弱点をカバーし、両者の長所を活かそうとした複合感染型のウイルスであるが、ファイルコードの量は必然的に増えるため、ウイルス自体が複雑になってしまうので広範囲に感染した例が見当たらない。
インタプリタ型のウイルスはVBAマクロやVBAスクリプトなどによって記述されたウイルスである。マクロウイルスやスクリプトウイルスと呼ばれるウイルスがこのタイプである。ソースコードをコンパイルすることなく実行できることからインタプリタ型と呼ばれている。実行可能なファイルに感染するのではなく、単なるデータファイルに感染する。
このマクロやスクリプトは単体では実行することができず、それらのマクロやスクリプトをサポートする何らかのアプリケーション上でしか動作することができない。ウイルスの動作はアプリケーションに依存することとなる。つまり、OS別に同様の動作をするアプリケーションがあれば、OSの垣根を越えて感染する可能性があるということである。
インタプリタ型ウイルスは、マクロやスクリプトの動作をサポートする多くのアプリケーション向けに作成することは可能であるが、その普及率からかMicrosoft WordやExcelのマクロウイルス以外はあまり見掛けることはない。
ワームは単独のプログラムで動作し、ネットワーク環境を利用して自分自身のプログラムをほかのコンピュータにコピーしながら自己増殖を繰り返すプログラムの総称である。自己増殖の際には、TCP/IPのプロトコルを利用したり、ネットワークを使うアプリケーションの機能を利用する。
ワーム単体ではほかのファイルなどに感染することはないが、ワームの機能に上記に挙げたタイプのウイルスの機能を備えたものをワーム型ウイルスと呼ぶ。このワーム型ウイルスの場合には、ウイルスの特徴を用いてほかのファイルなどに感染することがある。ワームは単独のプログラムなので、ワームが起動されるためには何らかの手段でプログラムを実行する必要がある。実行の手段としては次の2通りである。
トロイの木馬は単独のプログラムで動作し、ユーザーに何らかの不利益を与えるプログラムの総称である。主に、利用ユーザーの意図したある活動をすると見せ掛けて、ユーザーにとって不利益な活動をするプログラムのことを指す。ワームと異なる点は、トロイの木馬自体は自己増殖しない点である。
ワームも同様であるが、トロイの木馬も単独のプログラムであるので、既存のファイルの動作に影響を与えるわけではない。ワームやトロイの木馬自体の動作がユーザーに目に見える形で不利益を与えない限り、発見することは難しい。例えば、通常のメールクライアントソフトに見せ掛けて、ユーザーの個人情報を密かに漏えいさせているアプリケーションがあったとしてもだれも気が付かないかもしれない。この場合、このアプリケーションはトロイの木馬としては認識されないことになってしまう。
ウイルスもプログラムの一種であるが、通常のプログラムでは使わない手法がいくつか使われている。そのうちの1つがステルス技術である。このステルス技術は、ウイルスプログラムが存在することや、ウイルスプログラムが動作していることを隠ぺいするために用いられる技術である。
隠ぺいする目的は、ウイルスをウイルス対策ソフトウェアなどによって駆除されないようにし、生存確率を上げることにある。つまり、ウイルス対策ソフトウェアの技術が進化するとともに、ウイルスを隠ぺいしようとするステルス技術も進化しているのである。
第2回で述べたようにウイルスの被害から回復するのは大変であるが、ウイルスの駆除自体は実はそれほど難しいことではない。ウイルスの場合には基本的には感染したファイルやブートセクタなどを感染前のオリジナルのものと置き換えるだけである。ワームやトロイの木馬の場合には、そのプログラムを削除すればよい。ただし、駆除することと被害から完全に回復することとは異なるので注意が必要である。
ウイルスはどのような形式であれ、コンピュータ上にウイルスプログラムを追記する。ディスク上やメモリ上などを問わずに何らかの形でウイルスプログラムが存在しないことには、コンピュータがウイルスに感染したことにはならない。ウイルス対策ソフトウェアは、ウイルスを特定できる文字列やコード、ファイルの増加などをキーにして検出する。この検知から逃れるためにステルス技術が活用されている。
ウイルスはステルス技術によって主に次のような動作を行う。
このステルス技術には実にさまざまな技術が用いられている。ウイルスプログラムの技術としては、後に述べるポリモーフィック(Polymorphic)型とメタモーフィック型(Metamorphic)が主なものであるが、それ以外のステルス技術も併用されている。よく利用されるステルス技術としては次のような技術がある。
このほかに全く検出されない方法としては、何の不利益も与えないウイルスを作成すると検出されることはないが、ウイルスとしては意味がないところである。
ウイルス対策ソフトウェアが登場したとき、その技術の基本はパターンマッチングという手法が使われていた。これはあらかじめウイルスのパターンを登録した定義ファイルと、ウイルスプログラムのパターンを比較することでウイルスを検出していた。
このパターンマッチング手法の裏をかく技術として登場したのがポリモーフィックと呼ばれるステルス技術である。このポリモーフィックはウイルスプログラムを暗号化することで、パターンマッチングの検出から逃れるという手法である。暗号化を行う際の鍵を変えることで、ファイルサイズやコードが異なるという、さまざまなパターンのポリモフィズム(多形性)を持つウイルスを生み出す。
このポリモーフィック型のウイルスはウイルスプログラムのすべてを暗号化するわけではない。すべて暗号化してしまうと、当然のことながら復号することができないからである。ポリモーフィック型のウイルスは、暗号化されたウイルスとしての機能を持つ本体部分と、それを復号するロジックを持つ部分に分かれる。ウイルスプログラムが実行された際に、復号ロジックが働き、暗号化されたウイルス本体を復号し、ウイルスとしての機能を発動させる。
ただし、このパターンマッチングを完全に逃れられるかと思えるポリモーフィック型ウイルスにも弱点がある。それは、復号するロジックの部分は変化しないということである。この復号ロジックの部分を検出することでウイルスとして認識し、検出することができるようになる。
ここ数年で登場した新しいステルス技術を利用したウイルスがメタモーフィック型である。メタモーフィック型はポリモーフィック型のように部分的に暗号化するのではなく、自分自身を実際に書き換えてしまう手法である。自分自身を書き換えるメタモーフィックの基本的な技術は下記の3つである。
これらをウイルスが感染する際に実現することで、さまざまなパターンのメタモーフィズム(著しい変化)を持つウイルスを生み出す。暗号化するわけではないが、一見して全く違うプログラムのように見えるウイルスプログラムとなる。プログラムを組んだことがある方ならお分かりかと思うが、同じ機能を実現するプログラムでもさまざまな組み方(書き方)ができるのである。
このメタモーフィック型ウイルスは検出するのが困難になる。同じウイルスでも同じパターンを持つウイルスが二度と現れない可能性もあるので、パターンマッチングによる検出が意味をなさないこととなる。
先にウイルスの技術の進化について述べたが、当然のようにアンチウイルスの技術も進化している。ここでは現在ウイルス対策ソフトウェアで主に使われている「パターンマッチング手法」「ジェネリック手法」「ヒューリスティック手法」について説明する。
パターンマッチング手法は、ウイルスの特徴を記したウイルス定義データベースを用いて対象となるファイルとウイルス定義データベースの内容を比較し、同一または検出可能な程度で類似している場合にウイルスプログラムとして検出する手法である。
この手法の利点としては高い検出率で具体的にウイルスプログラムが特定できることと、検出のスピードが速いことである。しかし、当然ながらウイルス定義データベースに登録されていないパターンを持つウイルスは検出することができない。つまり、パターンマッチングを活用しているウイルス対策ソフトウェアを使っていても、ウイルス定義データベースを更新せずに古いまま使っていると、最新のウイルスを検出することができないのである。
パターンマッチング手法を活用する場合には、常にウイルス定義データベースを最新版に保つ必要がある。
ジェネリック手法は、実行しているプログラムをリアルタイムに監視し、不正な動作を検出して、その動作が実行される前に阻止する手法である。このジェネリック手法はモニタリングとブロッキングという2つの動作を行う。メモリに常駐してモニタリングを行い、OSに対して不正な動作を行うシステムコールや、OSが制御していないのにプログラムファイルを変更したり削除したりしようとする試みを監視する。そして、ウイルスらしき命令がコールされると命令の実行を遮断(ブロッキング)する。
この手法の利点としては未知のウイルスであっても、不正な動作を行うプログラムをウイルスとして検出できることにある。しかし、この不正な動作を見極めることが難しい。ジェネリック手法の場合においても不正な動作を見極めるためのルールを記したルール定義データベースが存在する。このルールに沿ってウイルスを検出するのであるが、正規のプログラムでもディスクへ直接書き込みを行ったり、ファイルを削除するといった動作を行うことがあるため、ウイルスによる不正な指令なのか、正常な指令なのかを正確に見極めるためのルールを作成することが難しいのである。
パターンマッチング手法ほどではないが、このジェネリック手法を活用する場合においても、常にルール定義データベースを最新版に保つ必要がある。また、このジェネリック手法は「ビヘイビアブロッキング(Behavior Blocking)」と呼ばれることもある。
ジェネリック手法が動作中のプログラムをチェックするのに対し、ヒューリスティック手法は動作していない状態のプログラムの動作をチェックする手法である。このヒューリスティック手法には次の2つの方法がある。
この手法の利点として、プログラムは異なるが動作は同じといったメタモーフィック手法を用いたウイルスプログラムであっても検出できることにある。また、ジェネリック手法と同じく、不正な挙動を見つけることでウイルスであると判断するので、未知のウイルスであっても検出することができる。しかし、このヒューリスティック手法もジェネリック手法と同じく、ルールを作成することが難しいのである。
ここに挙げたどの手法も同じであるが、最新のウイルスを検出しようとする場合には、常にルール定義データベースを最新版に保つ必要がある。
これまで挙げたアンチウイルスの技術は、コンピュータ上でウイルスを検出するための技術の説明であるが、ウイルスを検出する場所についても進化している。
近年のウイルスのほとんどはメールなどを使いインターネットを利用して送り込まれてくるため、ユーザーのコンピュータに届く前のファイアウォールやゲートウェイ上、メールサーバ上などでウイルス対策ソフトウェアを動作させることによって、ウイルス駆除を行うという手法も用いられている。また、DDoS攻撃などを行ったり、不正なパケットを送信するといったネットワーク的な特徴を持つウイルスも増えてきていることから、IDSを利用してウイルスを検出する手法も存在する。
ある程度の規模のネットワークを利用している場合には、すべてのユーザーが利用するメールサーバやファイルサーバ、ファイアウォールやゲートウェイ上でウイルス対策ソフトウェアを動作させることで、より安全性を高めることができる。
これまで現在のウイルスやアンチウイルスの技術について説明してきた。アンチウイルスの技術が進化することにより、その網をかいくぐるためにさらにウイルスの技術は複雑になり、安易に新たな技術を使ったウイルスを製造することは難しくなっているかのように思われる。しかし、さまざまな亜種を簡単に生み出すウイルス製造ソフトもアンダーグラウンドでは利用されているため、技術にそれほど精通していなくても最新の技術を使ったウイルスを製造することができてしまう。
もちろん、ウイルス対策ソフトウェアのベンダも日々登場する新たなウイルスに対応するアンチウイルス技術を開発しているが、残念ながらどうしても攻撃側であるウイルス作成者の方が1歩先に進んでしまう状況にある。いまや、ウイルスに利用できそうなセキュリティホールが発見されたと報じられれば、その数時間後にはそれを利用したウイルスが作成されているという状況である。
ウイルス技術は進化しているが、ウイルスが不正な動作をするプログラムである以上は、ウイルスに対する対処方法は基本的には変わらない。ウイルスの動作や技術を理解することで、ウイルスに的確に対処できるようになっていただきたい。
次回は、「企業としてのウイルス対策」として、企業がとるべきウイルス対策について解説する。
いまさらというなかれ! 管理者のためのウイルス対策の基礎 第3回
ウイルスの感染タイプと技術
進化するステルス技術
防御する側――アンチウイルス技術の進化
上野 宣(うえの せん)
1975年京都生まれ。情報セキュリティを世に広げるべく、講演や執筆活動とさまざまな方面で活動中。近著に「今夜わかるTCP/IP」と「今夜わかるHTTP」(共に翔泳社から2004年12月発売)がある。
Copyright © ITmedia, Inc. All Rights Reserved.