図1,図2●筆者が設定したポリシー
図3●イベント・ログのシステム・ログ部の監査結果
図4●「フィルタ」機能を設定する
図5●監査結果を21個まで絞り込む
図6●Process Explorerで取り出した画面
図7●「フィルタ」機能の絞り込み条件を変更する
図8●監査結果が8個まで絞り込まれた
図9●,「logonui.exe」プロセスは「winlogon.exe」プロセスにより作成され,特殊な権限を与えられている
 皆さんは,Windowsの「ローカル・セキュリティ・ポリシー」という機能をご存じでしょうか。今回は,このローカル・セキュリティ・ポリシーを使って,Windowsログオン時のシステムの動きを探ります。ローカル・セキュリティ・ポリシーを使えば,Windowsユーザーの目に見えないところで自動的に動作を開始,あるいは終了しているプロセスを突き止めることができます。

ローカル・セキュリティ・ポリシーを設定する

 ローカル・セキュリティ・ポリシーは,ローカル・コンピュータのセキュリティを確保するための方針を定める機能を持っています。この機能は,ローカル・コンピュータのシステム情報を収集する機能と,ローカル・コンピュータの使用権限を制限する機能の2つに分類できます。今回は,2つの機能のうちの,システム情報を収集する機能を使います。

 筆者はこの記事を書くにあたり,図1[拡大表示],図2[拡大表示]のようにポリシーを設定してみました。今回設定したポリシーはすべてイベントを監査するためのものです。個々のポリシーの意味については,お時間のあるときにヘルプ情報で確認してみてください。ここでは,あまり深く考えずに,筆者と同じようにポリシーを設定してみてください。

 今回設定するポリシーでは,ログイン・イベントとシステム・イベントの監査を有効にしています。ポリシー設定後は,Windowsシステムを再起動する必要があります。ローカル・セキュリティ・ポリシーを実際に使用すれば,Windowsシステムへの理解が深まるばかりではなく,実践的なトラブルシューティング技術も習得できる便利な教材です。ぜひ使い方をマスターしておきたいところです。

監査結果の分析

 ポリシー設定後,Windowsを再起動すると,監査結果はイベント・ログに記録されます。イベント・ログに記録された内容を見てみましょう。筆者はWindows XP SP2環境に管理者としてログインしています。ログイン後イベント・ログのシステム・ログ部を開いてみると,図3[拡大表示]のような監査結果が記録されていました。

 イベント・ログには2000個にも及ぶイベントが記録されています。この中から目的に合った情報を絞り込む必要があります。イベント・ログには,情報を絞り込むための「フィルタ」という機能があります。フィルタ機能は,ツール・バー上の「表示」ボタンをクリックすると利用できます。

 それでは,「フィルタ」機能を図4[拡大表示]のように設定してください。監査項目の一部のチェックを外し,イベントID欄に「592」という数字を入れます。この592という数字は,「プロセス作成イベント」に割り当てられた識別子です。また,「ユーザ」欄に「system」という新しい絞り込み条件を追加しています。フィルタ条件設定後は,図5[拡大表示]のように情報が絞り込まれます。2000個ほど表示されていた情報が,約100分の1の21個まで絞り込まれています。

 表示されている21個の情報を分析する前に,Russinovich氏作成のProcess Explorerで取り出した画面をご覧ください(図6[拡大表示])。Windowsにログインすると,15個のプロセスが起動されていることになります。しかし図5の情報では,作成されるプロセスの数は15個ではなく,21個となっています。差分の6個のプロセスは,私たちが気づかないうちに,「こっそり」その動作を終了していることになります。そのようなプロセスの中に,スパイウエアなどの悪質なプロセスが含まれていたら大変です。筆者の環境の6個のプロセスは次のようなものでした。なお,これら6個のプロセスの機能や役割の説明は今回は割愛させていただきます。

C:\WINDOWS\SYSTEM32\logonui.exe
C:\WINDOWS\SYSTEM32\wuauclt.exe
C:\WINDOWS\SYSTEM32\ups.exe
C:\WINDOWS\SYSTEM32\mpnotify.exe
C:\WINDOWS\SYSTEM32\userinit.exe
C:\WINDOWS\SYSTEM32\imapi.exe

 この6個のプロセスを見る限り,スパイ活動を行うなどの悪質なプロセスは動いていないようです。しかし,よく考えてみると,現在私たちが調べているのは,「こっそり動作を終了した」プロセスではなく,「こっそり動作を開始した」プロセスです。そこで,図4の絞り込み条件を図7[拡大表示]のように変更します。

 イベントIDを592から593に変更しているだけです。593というイベントIDは,「プロセス終了イベント」に割り当てられた識別子です。筆者の環境では,図8[拡大表示]のように絞り込まれました。

 図8は,「こっそり動作を終了した」プロセスの数を示しています。しかし,その数は6個ではなく,5個となっています。次のプロセスは「こっそり」動作を開始していますが,他の5個のプロセスと同じ時期に動作を終了していません。

C:\WINDOWS\SYSTEM32\userinit.exe

 「userinit.exe」プロセスは,ログオン直後に起動するプロセスで,ログオン・スクリプトやシェルを実行し,各種ユーザー環境を初期化する機能を提供しています。Explorer.exeを自動的に起動しているのもこのプロセスです。

 このプロセスは,もう少し後の段階で動作を終了しています。このプロセスが,いつどのように動作を終了しているか知りたい人は,絞り込み条件を次のように変更してみてください。

「ユーザ」欄を「system」から,Windowsにログインしているユーザー名に変更する

 結論を言うと,「userinit.exe」プロセスを作成するユーザーと終了させるユーザーが異なっているのです。試してみてください。

 ここまでの説明を読んできた皆さんは,もしかすると,次のような疑問を持っているかもしれません。

こっそり動作を開始し,こっそり動作を終了するプロセスの調べ方は分かったが,それらのプロセスを作成しているプロセスの調べ方はどうすればよいのだろうか。また,どのように作成しているのだろうか。

 それではここで,図9[拡大表示]の画面をご覧いただきましょう。プロセスのプロパティこの画面を見ると分かると思いますが,「logonui.exe」プロセスは「winlogon.exe」プロセスにより作成され,特殊な権限を与えられています。この情報を取得するための絞り込み条件の設定方法はお分かりになるでしょう。お時間のあるときにぜひ挑戦してください。

今回のまとめ

  • Windowsにログインすると,さまざまなプロセスが起動される
  • それらのプロセスの一部は,Windowsユーザーの目に触れることはない
  • 自動で起動するプロセスを調べる場合には「ローカル・セキュリティ・ポリシー」を使う
  • 「ローカル・セキュリティ・ポリシー」が収集する情報は,目的に応じて絞り込むことが大切である
  • 情報の絞り込みは,「ユーザ」欄と「イベントID」欄に条件を設定して行う