Vistaの地平

第8回 管理者権限での実行を制限するユーザー・アカウント制御UAC(後編)

1.UACの技術

畑中 哲
2007/04/19


「Vistaの地平」は、Windowsベースの情報システムを管理するIT Proを対象に、Windows Vistaの注目機能について解説する新コーナーです。

Index
Windows Vistaとは何か?
Windows Vistaのユーザー・インターフェイス
カーネルの改良とフォント、セキュリティ機能の強化
TCO抑制に向けた各種運用管理機能が強化されたVista
Vistaのハードウェア要件
より高機能になったVistaのバックアップ機能
管理者権限での実行を制限するユーザー・アカウント制御UAC(前編)
管理者権限での実行を制限するユーザー・アカウント制御UAC(後編)
スパイウェアからコンピュータを保護するWindows Defender
IPv6を取り込んだVistaのネットワーク機能
機能が向上したWindows Vistaのグループ・ポリシー
機能性/実用性がさらに強化されたオフライン・ファイル
Windows Vista SP1
セキュリティが強化されたWindowsファイアウォールの概要
セキュリティが強化されたWindowsファイアウォールの管理

 前回は、Windows Vistaにおける「ユーザー・アカウント制御(User Account Control。以下UAC)」の概要と、UACによる操作のブロックの例(ダイアログ・ボックスの表示)について見てきた。今回は、UACの内部的な仕組みと、従来のアプリケーションとの互換性問題などについて詳しく見てみよう。

UACの技術

 前回は、Windows Vistaを使い始めて最初に目に触れるであろう、UACの基本的な動作について説明した。重要な新機能なので、もう少し技術的な舞台裏を知っておいて損はないだろう。あらかじめ、以下の記事を参照していただくことをお勧めする。なお、ここでもなるべく要点を絞るために、技術的な正確さには欠ける点があることをお断りしておく。

従来のWindows OSにおける管理者ユーザーの扱い

 従来のWindows OSでは、管理者ユーザーとしてログオンすると、最初のプロセスのトークンに「私はローカルAdministratorsグループに属しています」という情報が記載される。また、ローカルAdministratorsグループに与えられている特権すべてがそのトークンに記載される。トークンとは、例えるなら運転免許証のようなものであり、トークンの持ち主の情報(ユーザー名や所属しているグループ名などの情報)や、所有する権利(例えば、システム時刻を変更する権利)などの情報が記載されている。あるプロセスが何らかの操作を行うとする場合、システムによってそのトークンが調べられ、該当する権利を持っている場合にのみ、その操作が許可される(詳細は「プロセスとトークンとACL」参照)。


従来のWindows OSで管理者ユーザーとしてログオンする
従来のWindows OSで最初のプロセス向けに作成されたトークンには、ローカルAdministratorsグループに所属しているという情報のほか、ローカルAdministratorsグループに与えられているすべての特権が記載されている。

 このトークン上のグループ情報と特権情報こそが、管理者ユーザーを管理者ユーザーたらしめているものである。管理者ユーザーでログオンすると、トークンには、ローカルAdministratorsグループに所属しているという情報と、ローカルAdministratorsグループに与えられているすべての特権が記載され、以後起動されるプロセスにはこのトークンがコピーされる。ローカルAdministratorグループにはあらかじめ多くの特権が与えられているので、その結果として、これらのプロセスでは、Windows OSの多くのオブジェクトに対して、フル・コントロール権限でアクセスすることができるし、多くの特権的操作を行うことができる。

 このあたりの仕組みは重要なので、よく理解しておいていただきたい。ローカルAdministratorsグループのユーザーでログオンしたから特権的操作ができるのではなく、ローカルAdministratorsグループのユーザーでログオンすると、そのプロセスのトークンには多くの特権が与えられるので、結果として、システムに対して特権を行使することができるのである。詳細については「管理者権限でログオンするとは?」を参照していただきたい。

 だが、管理者権限のあるユーザーでログオンしても、最初に作成されるプロセスのトークンから多くの特権が取り除かれているとどうなるだろうか。そう、特権的な操作が(一般ユーザーと同様に)制限されることになるのである。これがWindows VistaのUACの基本的なアイデアである。

UACが有効なWindows Vista

 UACが有効なWindows Vistaでは、今までのWindows OSのような「完全な」トークン(=ローカルAdministratorsグループに与えられているすべての特権を利用できる権利を持つトークン)が最初のプロセスに与えられない。

ログオンすると、最初のプロセスが「フィルタした」トークンで起動する

 UACが有効なとき、Windows Vistaは完全なトークンからいくつかの情報を削除する(フィルタする)。そしてこのフィルタしたトークンで、最初のプロセスを起動する。

UACを有効にして管理者ユーザーとしてログオンする
UACが有効なとき、Windows Vistaは完全なトークンからいくつかの情報を削除する(フィルタする)。そしてこの「フィルタした」トークンで、最初のプロセスを起動する。
  「完全なトークン」には、ログオンしたユーザーが所属しているグループや、ユーザーとグループに与えられた特権すべてが記載される。
  「フィルタしたトークン」からは、特定のグループに所属しているという情報が削除される。また、あらかじめ決められたいくつかの特権だけが記載される。

 UACを有効にして管理者ユーザーとしてログオンすると、最初に「完全なトークン」から管理者特有の記載を取り除いた、「フィルタしたトークン」が作成される。そして、最初のプロセスにはこのフィルタしたトークンが与えられる。

[基礎解説]トークンの作成と書き換え

 以後起動するプロセスはみな、このフィルタしたトークンを継承していく。そして、ユーザーのプロセスは、自分自身のトークンを書き換えられない。その結果、管理者ユーザーとしてログオンしても、システム全体に影響のある操作は許可されないのである。これがWindows VistaにおけるUACの仕組みである。

フィルタしたトークンでは、管理者ユーザーが一般ユーザーより弱くなることがある

 管理者ユーザーだけではなく一般ユーザのトークンもフィルタされる。だが管理者ユーザーと一般ユーザーとでは、フィルタされる事項が異なる(フィルタされる事項の詳細については、次の「フィルタの詳細」を参照)。結果として、フィルタしたトークンでは、管理者ユーザーが一般ユーザーより弱くなることがある。

 例えば、「Usersのアクセスを許可、Administratorsのアクセスを拒否」というアクセス制御リスト(ACL)を持ったオブジェクトに、一般ユーザーはアクセスできるが、管理者ユーザーはアクセスできない。

 また、「永続的共有オブジェクトの作成」特権を管理者ユーザーと一般ユーザーの両方に与えると、フィルタしたトークンに特権が残るのは、一般ユーザーの方である。管理者ユーザーのトークンには残らない。

フィルタの詳細

 次に、実際にどのようなトークンがフィルタされるのかを見てみよう。

フィルタの詳細―1.グループのフィルタ

 以下のグループがフィルタの対象となり、トークンから削除される。

グループ名 相対識別子(RID)
Domain Admins DOMAIN_GROUP_RID_ADMINS
Domain Controllers DOMAIN_GROUP_RID_CONTROLLERS
Cert Publishers DOMAIN_GROUP_RID_CERT_ADMINS
Schema Admins DOMAIN_GROUP_RID_SCHEMA_ADMINS
Enterprise Admins DOMAIN_GROUP_RID_
    ENTERPRISE_ADMINS
Group Policy Creator Owners DOMAIN_GROUP_RID_POLICY_ADMINS
Administrators DOMAIN_ALIAS_RID_ADMINS
Power Users DOMAIN_ALIAS_RID_POWER_USERS
Account Operators DOMAIN_ALIAS_RID_ACCOUNT_OPS
Server Operators DOMAIN_ALIAS_RID_SYSTEM_OPS
Print Operators DOMAIN_ALIAS_RID_PRINT_OPS
Backup Operators DOMAIN_ALIAS_RID_BACKUP_OPS
RAS and IAS Servers DOMAIN_ALIAS_RID_RAS_SERVERS
Pre-Windows 2000 Compatible Access DOMAIN_ALIAS_RID_
    PREW2KCOMPACCESS
Network Configuration Operators DOMAIN_ALIAS_RID_
   NETWORK_CONFIGURATION_OPS
Cryptographic Operators DOMAIN_ALIAS_RID_
   CRYPTO_OPERATORS
フィルタの対象となるグループ

 実際にはこれらのグループはトークンから消えるのではなく、「拒否のみに使用するグループ(USE_FOR_DENY_ONLY)」の属性が付く。この属性については次の記事を参照していただきたい。

フィルタの詳細―2.特権のフィルタ

 フィルタしたトークンに記載される特権は、グループがフィルタされるかどうかによって異なる。

グループがフィルタされる場合

 次の特権以外の特権がフィルタの対象となり、トークンから削除される。

特権 特権名
走査チェックのバイパス SeChangeNotifyPrivilege
システムのシャットダウン SeShutdownPrivilege
ドッキング ステーションからコンピュータを削除 SeUndockPrivilege
プロセス ワーキング セットの増加 SeIncreaseWorkingSetPrivilege
タイム ゾーンの変更 SeTimeZonePrivilege
グループがフィルタされた場合に残る特権

グループがフィルタされない場合

 次の特権がフィルタの対象となり、トークンから削除される。

特権 特権名
トークン オブジェクトの作成 SeCreateTokenPrivilege
オペレーティング システムの一部としての機能 SeTcbPrivilege
ファイルとその他のオブジェクトの所有権の取得 SeTakeOwnershipPrivilege
ファイルとディレクトリのバックアップ SeBackupPrivilege
ファイルとディレクトリの復元 SeRestorePrivilege
プログラムのデバッグ SeDebugPrivilege
認証後にクライアントを偽装 SeImpersonatePrivilege
オブジェクト ラベルの変更 SeRelabelPrivilege
グループがフィルタされない場合に削除される特権

ダイアログ・ボックスで許可すると、子プロセスが「完全な」トークンで起動する

 UACに対応しているアプリケーションは、システム全体に影響のある操作をするときに、完全なトークンをWindowsに要求する。Windowsはユーザーにダイアログ・ボックスで許可を求める。

 ユーザーが許可すると、子プロセスが完全なトークンで起動する。フィルタしたトークンで動作している親プロセス自身は、完全なトークンを得るわけではない。

子プロセスを完全なトークンで起動する
ユーザーがダイアログ・ボックスで許可すると、子プロセスが完全なトークンで起動する。完全なトークンで起動した子プロセスがさらに孫プロセスを起動すると、ユーザーに許可を求めることなく、完全なトークンで起動する。
  UACに対応しているアプリケーションは、システム全体に影響のある操作をするときに、完全なトークンをWindowsに要求する。
  Windowsはユーザーにダイアログ・ボックスで許可を求める。
  ユーザーがダイアログ・ボックスで許可すると、完全なトークンで子プロセスが起動する。
  フィルタしたトークンで動作している親プロセスのトークンは変化しない。
  完全なトークンで起動した子プロセス。
  完全なトークンのプロセスがさらに起動した孫プロセス。ユーザーに許可を求めることなく、完全なトークンで起動する。

 完全なトークンで起動した子プロセスがさらに孫プロセスを起動すると、完全なトークンで起動する。そのとき再びユーザーに許可を求めることはない。


 INDEX
  Vistaの地平
  第8回 管理者権限での実行を制限するユーザー・アカウント制御UAC(後編)
  1.UACの技術
    2.UACと従来のアプリケーションとの互換性
    3.アプリケーションの昇格とUACの設定

 「 Vistaの地平 」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間