![]() |
|
Vistaの地平第8回 管理者権限での実行を制限するユーザー・アカウント制御UAC(後編) 1.UACの技術 畑中 哲 |
|
|
|
|
|
前回は、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はユーザーにダイアログ・ボックスで許可を求める。
ユーザーが許可すると、子プロセスが完全なトークンで起動する。フィルタしたトークンで動作している親プロセス自身は、完全なトークンを得るわけではない。
![]() |
||||||||||||||||||
子プロセスを完全なトークンで起動する | ||||||||||||||||||
ユーザーがダイアログ・ボックスで許可すると、子プロセスが完全なトークンで起動する。完全なトークンで起動した子プロセスがさらに孫プロセスを起動すると、ユーザーに許可を求めることなく、完全なトークンで起動する。
|
完全なトークンで起動した子プロセスがさらに孫プロセスを起動すると、完全なトークンで起動する。そのとき再びユーザーに許可を求めることはない。
![]() |
![]() |
INDEX | ||
Vistaの地平 | ||
第8回 管理者権限での実行を制限するユーザー・アカウント制御UAC(後編) | ||
![]() |
1.UACの技術 | |
2.UACと従来のアプリケーションとの互換性 | ||
3.アプリケーションの昇格とUACの設定 | ||
![]() |
![]() |
「 Vistaの地平 」 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
![]() |
|
|
|
![]() |