Windowsにログオンすると,さまざまなプログラムが自動的に動作を開始します。もし,それらのプログラムの中にスパイウエアが含まれていたら大変です。そこで今回は,Windowsシステムにログオンすると自動的に動作を開始するプログラムを調査してみましょう。

図1●Windowsログオン機能を提供する「winlogon.exe」
図2●Systemプロセスを構成するコンポーネント

Windowsログオンの意味

 まずは,Windowsにログオンすることの意味を復習しておきます。図1[拡大表示]をご覧ください。

 この画面は,本連載で何度か登場した,Mark Russinovich氏が開発したProcess Explorer(PE)というフリーソフトで取得しています。現在のPEはバージョン9.03で,こちらからダウンロードできます。

 図1は上下2つの画面で構成されています。上の画面を見ると,中ほどに「winlogon.exe」という文字列が見えます。これがWindowsログオン機能を提供するプロセスの名前です。ここでは「winlogon.exe」プロセスの表示位置に注目してください。表示位置から,次のようなことが分かります。

winlogon.exeプロセスは,smss.exeプロセスから起動されている。winlogon.exeプロセスの親プロセスであるsmss.exeプロセスは,Systemプロセスから起動されている

 皆さんの中には,この文章の意味が理解できない人もいるかもしれません。この文章は,Windowsのブート過程を示しています。例えば,winlogon.exeプロセスの祖母プロセスともいえるSystemプロセスは,図2[拡大表示]のようなコンポーネントで構成されています。

 ここでは,Systemプロセスは拡張子「.SYS」を持つファイルをたくさんロードしている,ということを覚えておいてください。拡張子「.SYS」を持つファイルは一般には「デバイス・ドライバ」などと呼ばれ,ハードウエア装置を制御するコードを提供しています。つまり,Windows環境を構成する各種のハードウエア装置をWindowsブート・プロセスの初期の段階で使用できる準備がなされているわけです。

 このような一連の準備作業を行っているのが,画面内の「ntoskrnl.exe」という,Windowsのカーネル部分を実装する実行プログラムです。この実行プログラムはハードウエア装置の初期化(デバイス・ドライバのロード)だけではなく,winlogon.exeプロセスの直接の親プロセスであるsmss.exeプロセスも起動します。ちなみに「smss.exe」プロセスの「ss」というのは,Sub System(サブシステム)を表します。以上から,Windowsログオンの意味は次のように整理できると思います。

Windowsログオンとは,Systemプロセスが整備したオペレーティング・システム環境を利用するための手続きである

 以上で,winlogon.exeプロセスの位置付けと意味がお分かりいただけたと思います。Systemプロセスが動作を開始する前には,マザーボード上のBIOS,ハードディスク上にあるブート・セクタ内のコード,OSローダなどが複雑に連係動作していますが,今回は,winlogon.exeプロセスの意味と役割をしっかり理解しておきましょう。

図3●AutorunsでWindowsログオン時に動作するプログラムを表示する
図4●Userinitは,Explorerを起動するとすぐに動作を停止する

Windowsログオンとともに動き出すプログラムを検出する

 Windowsログオン時に自動的に動作を開始するプログラムを調べる場合には,Autorunsというフリーソフトを使います。このフリーソフトもRussinovich氏が開発したものであり,こちらからダウンロードできます。現在のバージョンは,2005年4月1日に公開された7.01です。図3[拡大表示]の画面は,AutorunsでWindowsログオン時に動作するプログラムを表示している様子を示しています。

 ご覧のように,Windowsにログインするとさまざまなプログラムが動き出します。皆さんの環境ではどのようなプログラムが動いていますか。画面の中ほどを見ると,Windows Explorer(Explorer)が起動されています。Explorerを起動するのは,Userinitというプログラムです。このプログラムは,Explorerを起動するとすぐに動作を停止します。図4[拡大表示]のPEの画面で分かるように,Userinitというプロセス名はどこにもありませんね。

 得体の知れないプロセスが動いている場合,そのプロセスの動作を停止させるだけではなく,その親プロセスを停止しないと,知らないうちに動作が再開されてしまうこともあるかもしれません。そのような場合には,親プロセスの存在も確認し,親プロセスも同時に停止したり,(自信あれば)削除してしまうとよいと思います。

Autoruns使用上のヒント

 Autorunsは,いろいろな機能を提供しています。今回説明できなかった機能も含まれています。それらの機能の意味やWindowsとの関係などを知りたい方は,次回以降の連載をご覧ください。筆者は今回,次のようなオプション機能を有効にしてAutorunsを実行しました。

1.「View」メニューの「Show Winlogon Notification」オプション
2.「View」メニューの「Verifiy Code Signatures」オプション
3.「View」メニューの「Include Empty Locations」オプション

 これらの3つのオプションを選択後,「View」メニューの「Refresh」ボタンをクリックしました。Autorunsは,出力結果を保存しておく機能などもありたいへん便利なツールです。さらに,コマンドライン・バージョンのAutorunsを使用すると,CSV形式で結果を保存することもできます。お時間のあるときにぜひ自分の手で試してください。

 前回,ルートキットはカーネルモード・ルートキットとユーザーモード・ルートキットに大別されることを説明しました。今回の記事を読み終えた皆さんは,「カーネルモード」と「ユーザーモード」の違いがなんとなく分かったのではないでしょうか。以降の連載では,カーネルモードやユーザモードの違いなども順を追って説明していきます。

今回のまとめ

  • Windowsログオン時には,さまざまなプログラムが自動的に動作を開始する
  • そのようなプログラムには,Windows Explorerも含まれる
  • AutorunsはWindowsログオン時に動き出すプログラムを検出する機能を持っている