図4●「Blaster」ウイルスの感染手順
まずはRPCサービスへ細工を施したメッセージを送信して,バッファ・オーバーフローを引き起こす。そして,リモートシェルを起動してから,Blaster本体を送り込む。

ネットにつなぐだけで感染するBlaster

 セキュリティ・ホールを利用するウイルスは,ユーザーが「Webページを閲覧するだけで」あるいは「HTMLメールを読むだけで」感染する恐れがある。いずれの場合でも,ユーザーのアクションを必要とする。ところが,2003年8月に出現した「Blaster」や「Welchia」などは,ネットワークに接続しているだけで感染するので「新型ウイルス」などと報道された。

 ネットワークに接続しているだけで感染するウイルス(厳密にはワーム)は以前から存在する。例えば,2001年7月の「Code Red」や2003年1月の「SQL Slammer」は,ネットワークに接続しているWindowsマシンに勝手に侵入して感染する。これらは,Windows上で稼働するIIS(Internet Information Server/Services)やSQL Serverといったサーバーソフトのセキュリティ・ホールを利用する。つまり,ネットワークを介して特定のサービスを提供するサーバーマシンだけが対象となった。サーバーマシン上で稼働するサーバーソフトは,クライアントからのリクエストを待っている。このリクエストとして,セキュリティ・ホール(例えばバッファ・オーバーフロー)を突くようなデータが送られてくると,サーバーソフトのプロセスが乗っ取られ,ウイルスを実行されてしまう。

 一方,サービスを利用するだけのクライアント・マシンにはその心配はなかった。リクエストを待ち受けるサービスが稼働していないので,悪質なデータを送られてもバッファ・オーバーフローなどを引き起こすことはない。

 ところが,サーバーソフトをインストールせずに,クライアントとして使っているWindowsマシンでも,DCOMなどの機能を標準で備え,サーバーとしての役割を果たすようになった*17

 これらの機能はユーザーの利便性を考慮して初期設定で稼働するとともに,使用するポートを開けてある。もし,これらの機能にセキュリティ・ホールが見つかれば,細工が施されたデータを送られるだけで,悪質なプログラム──すなわち,ウイルス──を実行させられる恐れがある。

 2003年8月,それは現実のものとなった。クライアントとして使っているパソコンでも,ネットワークに接続するだけで感染する「Blaster」の出現である。Blasterが利用するのは,2003年7月に公開された「RPCインターフェイスのバッファオーバーランによりコードが実行される」のセキュリティ・ホールである*18。リクエストを待ち受けるRPCサービスの実装に,バッファ・オーバーフローのセキュリティ・ホールが見つかった。異なるマシン上のDCOMを使うプログラム同士は,RPCサービスを介して通信する。バッファ・オーバーフローのセキュリティ・ホールは,RPCサービスが,あるプログラムから要求を受けて,DCOMを使う別のプログラムを呼び出す部分に見つかった。初期設定で,RPCサービスが使うポートは開かれ,DCOMは有効になっている。このため,ほとんどすべてのWindowsマシンが感染対象となった。

 Blasterの感染過程は次の通りである(図4[拡大表示])*19。Blasterは感染対象マシンへ,細工を施したRPCメッセージを送信する。すると,RPCサービスのプロセスがバッファ・オーバーフローして,プロセスが乗っ取られ,RPCメッセージ中のコードが実行される(図4(2))。このコードにはBlasterは含まれていない。TCPポート4444番で外部からの接続を待つシェル(cmd.exe)を起動するだけである(図4(3))。

 その後,このシェル上でtftpコマンドを実行して(図4(5)),現在Blasterが稼働しているマシンから,Blasterの実体である「msblast.exe」をダウンロードさせる(図4(7))。そして,msblast.exeをシェル上で実行する(図4(9))。

 msblast.exeが実行されると,さらに別のマシンに感染を広げようとするとともに,レジストリを改変して,Windowsを起動するたびにmsblast.exeが実行されるようにする。また,Windowsが不安定になって,再起動させられる場合がある。このほか,Windows UpdateへアクセスするためのURLの一つ「http://windowsupdate.com」へDoS(サービス妨害)攻撃を仕掛けるように仕組まれていた*20

(勝村 幸博=IT Pro)