豊田 孝

 今回は,修正パッチの意味を考えてみることにします。ご承知のように,8月11日,「MSBLAST.EXE」というプログラムがインターネット経由で“知らぬ間に”多くの人のWindowsマシン内に作成される事件が発覚しました。プログラムの作成者は,「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run」レジストリに「windows auto update」というレジストリ・キーを追加作成し,その項目に"msblast.exe"という値を格納したといわれています。

 レジストリ名称から想像できるように,このレジストリ設定に成功すれば,Windowsシステムは,“起動時に黙って”,「MSBLAST.EXE」プログラム情報を基にプロセスとスレッドを内部で作成します。本連載を継続してお読みいただいている方は,以上の説明をそれほどの困難もなく理解できると思います。今回は,

“「MSBLAST.EXE」の感染を抑える修正パッチとは具体的にどのようなソフトウエアなのか”

を考えます。それでは早速,今回のサンプル・プログラムを実行してみましょう。

図1●サンプル・プログラムの実行結果
図2●「MSBLAST.EXE」関連の修正パッチに関する情報

今回のサンプル・プログラム

 まずはいつものように,サンプル・プログラムをこちらからダウンロードし,実行してみましょう。私のWindows XP環境では図1[拡大表示]のような結果が返されました。なおこのサンプル・プログラムは,デフォルトでは,Windows XP環境でのみ動作します。他の環境での使い方は後ほど説明します。

 画面内の「Total Instance Count」項目を見ると分かるように,私のWindows XP環境では「67」種類の修正パッチがすでに当てられています。画面を下方向にスクロールすると,すべての修正パッチを確認することができます。

 修正パッチが67種類というのは,誰が考えても多すぎます。平均的なWindowsユーザーは,おそらく,個々の修正パッチの意味を把握することはできないでしょう。今回発覚した「MSBLAST.EXE」の感染を抑える修正パッチは,「KB823980」というID番号を持っているといわれます。そこで,このID番号を基に「MSBLAST.EXE」関連の修正パッチに関する情報のみを表示してみます(図2[拡大表示])。

 ご覧のように,「KB823980」というID番号があり,各種の関連情報が表示されています。背景が黒で,赤い文字列の入った欄は,この修正パッチの実体情報です。インストールした人,インストールした日付,修正パッチの意味などともに,更新された具体的なファイルに関する情報が表示されています。

 ファイル名に含まれるrpc,つまり,Remote Procedure Call(リモート・プロシジャ・コール)から判断できるように,この修正パッチは,あるローカル・マシン上で動作しているプロセスから,他のリモート・マシン上で動作しているプロセスのプロシジャ(関数や手続きの意味)を呼び出すメカニズムの不具合を修正するためのものであることがわかります。そして,それぞれのファイルの格納位置から分かるように,この修正パッチは,システム・フォルダ内のシステム・ファイルの修正を行っています。つまり,「KB823980」修正パッチは,Windowsシステムの一部を更新するという意味を持っているわけです。

 各ファイルのビルド日付を見ると,7月6日となっています。私の場合,7月17日に修正パッチをインストールしていますから,7月6日と7月17日の間に「MSBLAST.EXE」プログラムを作成していた場合,ウィルスに感染した,ということになります。さて,皆さんはいつごろこの「KB823980」修正パッチをインストールしていますか?「InstalledDate:」が8月11日以降になっている場合には,システム管理部門の方と相談したほうがよいでしょう。

サンプル・プログラムの機能と拡張上のヒント

 それでは,今回のサンプル・プログラムの機能と拡張上のヒントを説明しておきます。今回のサンプル・プログラムはリスト1のようになっています。基本的には,これまでのサンプル・プログラムと同じように,標準化団体であるDMTFが定義したクラスから派生した「Win32_QuickFixEngineering」クラスを使用しているだけです。実は,このクラスは,第9回でも使用していましたが,残念ながら,実装面でそれほど親切なクラスではありませんでした。今回はそのクラスを補強する機能を投入しています。興味のある方は,ソース・コードを丹念に読んでみてください。

 このサンプル・プログラムをWindows 2000やWidows Server 2003環境で実行する場合は,次の部分を修正してください。

''''********************************************
''''''''本文説明精読のこと!
strTargetSP = "SP2" ←適用しているSPの次の番号
strTargetQE = "KB823980"
strTargetOS = "Windows XP" ←使用中のOS名に変更する
''''********************************************

 私は,Windows Server 2003でこのサンプル・プログラムを実行させてみましたが,正常に動作しています。そのときには,strTargetSP = "SP1",strTargetOS = "Windows Server 2003"に変更しました。

 さらに,次のコード・ブロックの一部を変更すると,「KB823980」以外の修正パッチの実体情報が返されるようになります。修正パッチの歴史(つまり,Microsoftとセキュリティホールの格闘の歴史)がそのまま表示されてきます。一部のシステム・ファイルは繰り返し更新されています。お時間のあるときにぜひ実行してみてください。

''''********************************************
''''''''本文説明精読のこと!
If ucase(oHelper_2.HotFixID)
= strTargetQE Then ←「'If」という具合にコメントアウトする
strBlasterInfo = SoundBlaster
(strTargetOS,strTargetSP,oHelper_2.HotFixID)
End If ←「'End」という具合にコメントアウトする
''''********************************************

 今回は以上で終了です。次回またお会いいたしましょう。ごきげんよう!