Windowsのユーザー・アカウントを「Power Users(標準ユーザー)」グループに所属させるのは,ユーザーに与える権限を最低限に抑えながら,それでいて権限の小ささに伴う様々な苦痛を回避できる一般的な手法である。Power Usersグループのメンバーであれば,ソフトウエアのインストールや電源とタイムゾーンの設定変更,ActiveXコントロールのインストールといった,「Users(制限ユーザー)」のメンバーには許可されていない様々なアクションが可能である。ただしその一方で,セキュリティが犠牲になることも忘れてはならない。

 なぜならPower Usersグループのメンバーは,自分自身をすべての権限を持つAdministrator(管理者)に昇格できることが,多くの記事によって指摘されているからだ(例:マイクロソフトのサポート技術情報「Windows Server 2003,Windows 2000,またはWindows XPでPower Usersグループのメンバーが管理者権限およびアクセス許可を取得できる場合がある」)。ただし筆者は,この権限昇格の仕組みについて,詳細な資料を見つけられなかった。そこで筆者は,この問題について調査してみることにした。調査の全文は筆者のブログに掲載したので,ここでは重要な点を紹介しよう。

Power UsersはWindowsディレクトリに書き込みできる

 まず最初に,筆者はPower Usersグループのメンバーが「Windows」ディレクトリ下にファイルを作成できることを発見した。Windows本来の設定では,AdministratorsグループのメンバーとLocal Systemアカウントにしか,Windowsディレクトリ下のファイルに対する書き込みが許可されていない。しかし,これには明らかな例外がある。「ntoskrnl.exe」である。Power Usersグループのメンバーでも,WindowsのコアOSファイルを置き換えたり書き換えたりできるのだ。本来,Windowsのシステム・ファイルが書き換えられると,5秒後にはWindowsファイル保護機能がバックアップ・ファイルを元に書き換えられたシステム・ファイルを復元する。しかし,Power Usersグループのメンバーであれば,Windowsファイル保護を回避できる。ファイルを置き換えて修正データをディスクに書き込むという単純なプログラムを実行し,Windowsファイル保護が働く前にシステムを再起動してしまうのだ。

 しかし,Power Usersグループのメンバーがこのぜい弱性を利用して上位の権限を得るには,どうすればいいのだろうか。答えは,Windowsが権限チェックに使用している「SeSinglePrivilegeCheck」という関数にあった。ユーザーは,この関数のエントリ・ポイントに対してパッチを当てるだけで,チェックされる権限をユーザーが持っていることを示す「TRUE」の値を常に返すようにできる。このように変更されたカーネル上では,ユーザーはドライバのロードやファイル所有権の取得,トークン作成などを含むすべての権限を持っているように見え,ユーザーはシステムをコントロールする管理者権限を簡単に得られるようになる。

 ntoskrnl.exeを置き換えることだけが,Windowsディレクトリを経由して管理者権限の隙を突く方法というわけではない。「schedsvc.dll」に対するデフォルトのアクセス許可では,Power Usersグループのメンバーに対する変更が許可されている。schedsvc.dllは,Windowsのタスク・スケジューラ・サービスを実装しているDLLである。Power Usersグループのメンバーは,schedsvc.dllを他のファイル,例えばユーザーのアカウントをLocal Administratorsグループに追加してしまうような任意のDLLに置き換えられるのだ。

任意のサービスをLocal Systemアカウントで実行可能

 次に筆者は,Power Usersグループのメンバーが「Program Files」ディレクトリに対して持つアクセス権を調査した。そして,Power UsersグループのメンバーがProgram Filesディレクトリに存在するあらゆるファイルやディレクトリを変更可能であり,その結果Windowsのインストール時に作成されるファイルやディレクトリを変更できることを発見した。Windowsのサービスを実現しているファイル・イメージを置き換えてしまうことは,管理者権限を取得する最も手っ取り早いやり方である。

 Windowsのサービスを調査して分かったのは,「SERVICE_CHANGE_CONFIG」というサービスに対して書き込み権限を持っているユーザーは,サービスの起動時に任意の実行ファイルを開始するようにシステムを設定できるということと,「WRITE_DAC」というアクセス権があれば,ユーザーはサービスに対するアクセス権を変更して,「SERVICE_CHANGE_CONFIG」へのアクセス権を入手できる,ということである。

 筆者は,Power Usersグループのメンバーが,「DComLaunch」というサービスに対する書き込み権限を持っていることを見つけた。「DComLaunch」は,任意のDCOMサービスをサービスとして起動するだけでなく,非常に強力なLocal Systemアカウント権限で実行可能にするシステム・サービスである。つまりPower Usersグループのメンバーは,DComLaunchのイメージ・パスを変更して独自のイメージを参照するようにし,その上でシステムを再起動すれば,いとも簡単にシステムの管理者権限を入手できるのである。

 本来Windowsは,サード・パーティ製アプリケーションによって作成されたサービスに対してPower Usersグループのメンバーによる書き込みを許可しないように設定している。しかし,サード・パーティ製アプリケーションの中には,カスタムのアクセス権を構成して,Power Usersグループのメンバーによる書き込みを許可するものもある。そのため,サード・パーティ製アプリケーションによる新たなぜい弱性の発生を完全に回避するのは不可能だ。

 Microsoftの最新OSである「Windows Vista」は,Power Usersグループの権限を制限することによって,これまで説明してきたすべてのぜい弱性を排除しており,Power UsersグループのメンバーとUsersグループのメンバーとの間の差を無くしている。それでも,システム管理者であれば,Power UsersグループのことをUsersグループと同じぐらい安全だなどと思ってはならない。