マイクロソフト
セキュリティ レスポンス マネージャ
小野寺 匠

 今回は,User Access Control (UAC) について取り上げる。 UACは,Windows Vistaで初めて実装されたセキュリティ機能の一つである。管理者権限を使用するときに,確認のダイアログをを表示し,ユーザーに確認するための機能と思われがちだが,この機能はUACの一部に過ぎない(図1)。以下では,全体像を解説しよう。

図1●ユーザーが管理者権限を使おうとすると表示される確認用のダイアログ
図1●ユーザーが管理者権限を使おうとすると表示される確認用のダイアログ

UACとは?

 UACは,管理者権限を使うことなく一般ユーザー権限のみでアプリケーションを動作させるための各種の仕組み全体を指す。Windows XP以前は,多くの利用者が日常的に管理者権限をもつユーザー・アカウントを使ってパソコンを使用していた。このため,インターネットからのダウンロード,メールへのファイル添付など,色々な経路からのマルウエア侵入・感染を防ぐことが難しかった。

 管理者権限はOS内でほぼ全能の特別な権限であるため,あらゆる防壁が機能しない(管理者のもつ特別な権利により無視できる)。さらに,アプリケーションも管理者権限があることを前提に開発されたものが多く,それがマルウエアの侵入経路となっていた。この問題を解決するには,管理者権限を使わないことが一番。そのための機能がUACである。

 同時に,アプリケーション開発者に対して最小権限の原則を改めて意識付け,管理者権限を必要としない(または最小限に使用した)安全なアプリケーション開発を促すこともUACの重要な目的である。

なぜ管理者権限が必要なのか?

 そもそも,なぜ今までのアプリケーションは管理者権を必要としたのだろうか。答えは,主にインストール時のファイル・アクセスとレジストリ・アクセスにある。

 標準のインストール先となる%ProgramFiles%は,PowerUser以上の権限がなければデータを書き込むことができない。ユーザーに依存しないアプリケーションの情報を記録するために,HKLM(HKEY_LOCAL_MACHINE)レジストリにアクセスしていたことも挙げられる。

 この点からすると,アプリケーションのインストールで,インストーラが管理者権限を使うことはある意味,正しい管理者権限の使い方と言える。ただアプリケーションによっては,インストール後も%ProgramFiles%やHKLMに逐次データを書き込むものがある。この場合,アプリケーションの使用時にも管理者権限が必要になる。データの記録先を適切な場所に変更することで本来は管理者権限を使わずに実行できることを考えると,これは決して正しい権限の使い方とは言えない。

 とはいえ,過去の貴重なアプリケーション資産をすべて捨て去るわけにはいかない。ここでUACの効果が現れる。UACではフォルダやレジストリを仮想化することで,管理者権限がなくても処理が正常に進むようになっている。

仮想化

 UACによる仮想化では,ファイル・アクセスの場合,%SystemRoot%,%ProgramData%,%ProgramFiles%へのアクセスが仮想化され,%LoadlAppData%\VirtualStoreにリダイレクトされる(図2)。ただし例外もあり,*.exe,*.dll,*.sysの書き込みについては,アプリケーションのインストールと判断し仮想化によって互換性を確保するのではなく,管理者権限を求め,元のフォルダに書き込むようになっている。

図2●UACによる仮想化の仕組み
図2●UACによる仮想化の仕組み

 レジストリは,HKLM\Software以下への書き込みが,HKCR\Software\Classes\VirtualStore\Machine\Software にリダイレクトされる。ただしこの場合も,ファイル・アクセスの場合と同様に例外がある。HKLM\Software\Microsoft\Windows,HKLM\Software\Microsoft\WindowsNT,HKLM\Software\Classesについては,リダイレクトされることはない。

 仮想化されたファイルは,図34のように見ることができる。図は,試験的に%ProgramFiles%に「test」フォルダを作成し,アプリケーション(メモ帳)でファイルを保存した場合の例である。図3はファイルを保存したtestフォルダ,図4はリダイレクト先となる仮想化フォルダである。testフォルダにファイルは確認できず,「Compatibility Files(互換性ファイル)」というボタンが表示される。これをクリックすると対応する仮想化フォルダが表示される。

図3●保護されている元のフォルダ
図3●保護されている元のフォルダ

図4●仮想化フォルダ
図4●仮想化フォルダ

 これら仮想化されたフォルダやファイル,レジストリは,すべて各ユーザーの個人の所有するデータとなり他のユーザーが参照することはできない。逆にいえば他のユーザーやコンピュータ全体に影響を及ぼすことを防ぐことができる。