[基礎解説]
Windowsセキュリティ・メカニズム入門(後編)

2.トークンの内容を確認する

畑中 哲
2006/06/16

トークンの情報を表示するWhoAmIコマンド

 トークンの情報を表示するためのツールとして、WhoAmIというコマンド(ファイル名はwhoami.exe)が利用できる。

 残念ながら、Windows Server 2003のもの以外は、日本語での表示や、グループの属性(後述)の表示ができないといった欠点がある。特にグループの属性を表示できないのは不都合なので、Windows Server 2003のWhoAmIが利用できない環境では、代わりにWindows NT 4.0のリソースキットに含まれるProcess Explode(pview.exe)やSysinternalsのProcess Explorerツールなどを代用として使うとよい。

 WhoAmIは自分自身のプロセスのトークンを表示するツールである。WhoAmIは、しばしば現在デスクトップにログオン中のユーザーを知るために用いられる。だがそれは、ログオンして最初のプロセスに与えられたトークンが、

[スタート]メニュー(Explorer.exeプロセス)
 →コマンド・プロンプト(Cmd.exeプロセス)
 →Whoami(whoami.exeプロセス)

とコピーされて、whoami.exeプロセスのトークンに、デスクトップにログオンしたユーザーの情報がたまたま受け継がれているからにすぎない。現在デスクトップにログオンしているユーザーとは違うユーザーを表示するWhoAmIが、同一デスクトップ内で起動することもあり得る。通常は上記のようにデスクトップにログオンしたユーザーの情報が継承されているので、現在デスクトップにログオンしているユーザーを知るツールとして使用して構わないが、確実なところを知りたければWhoAmI以外の方法で調べる必要がある。

WhoAmIコマンドでトークンの情報を見る

 では、WhoAmIを実行してみよう。

 WhoAmIにはいくつかオプションがあり、オプションを付けると必要な情報を個別に見ることができる。「whoami.exe /all」とすると利用可能なすべての情報を見ることができる。

 オプションを付けずに実行すると、トークンのユーザーだけが出力される。以下はすべてWindows Server 2003で実行した場合の例である。

■トークンのユーザー

 プロセスの持つトークンのユーザー情報を表示させるには、「whoami /user」を実行する。

ユーザー名の表示
whoami /userコマンドを実行するとユーザー名が表示される。
  コマンドの実行。
  ユーザー名(ドメイン/コンピュータ名とユーザー名)。

 このユーザー情報により、このトークンを持つプロセスが「誰」であるかが分かる。誰であるかを特定する情報なので、必ず一人のユーザーしか表示されない。この出力例では、whoami.exeプロセスは「server」ドメインの「administrator」というユーザーとして動作していることになる。SIDという列は今回の解説では無視して構わない。

■トークンのグループ

 トークンに記述されているグループの情報を表示させるには、「whoami /groups」を実行する。

グループ情報の表示
whoami /groupsコマンドを実行すると、トークンに記載されているグループの情報が表示される。
  コマンドの実行。
  グループ名の一覧。
  各グループの属性。
  [有効なグループ]属性は、ACLの許可エントリと拒否エントリ両方のチェックに使われる。ほかに[拒否のみに使用するグループ]という属性もあり、ACLの拒否エントリのチェックに使われる。
  ローカルAdministratorsグループ。「管理者権限」のあるプロセスのトークンには、このグループが[有効なグループ]として含まれている。

 このグループ情報により、単に1人のユーザー情報だけでなく、さまざまなグループを加味して、トークンのアクセス・チェックが行われる。この例では、Everyone、BUILTIN\Users、BUILTIN\Administratorsなど、全部で9つのグループが含まれていることが分かる(画面中の)。

 どのグループがトークンに記載されるかは、基本的には、トークンのユーザーがどのグループに所属しているかによって決まる。だがこれまで述べたように、トークンは書き換えることができるので、あるユーザーがあるグループに所属しているからといって、そのユーザーとして起動したプロセスのトークンに、所属しているグループが必ずすべて記載されているとは限らない。

 トークン内のグループ情報には[属性]が付いている(画面中の)。通常は[有効なグループ]という属性が付いている(画面中の)。このグループは、ACLの許可/拒否エントリの両方のチェックに使われる。

 [有効なグループ]ではなく、[拒否のみに使用するグループ]属性が付いていることもある。そのグループは、ACLの許可エントリのチェックには使われず、拒否エントリのチェックにのみ使われる。ACLの許可エントリと拒否エントリとは、例えばファイルのACLの場合、下図のような画面で設定するエントリのことである。

ACLの[許可]と[拒否]エントリ
ACLには、あるユーザーやグループに対する「許可」を設定するエントリと、「拒否」を設定するエントリの2種類が含まれる。
  このユーザーやグループごとに、許可や拒否を設定する。
  許可エントリの例。ある特定のユーザーやグループに対して、これらの操作を許可する。[拒否のみに使用するグループ]属性の付いているグループは、このエントリのチェックには使われない。
  拒否エントリの例。ある特定のユーザーやグループに対して、これらの操作を禁止する。[拒否のみに使用するグループ]属性の付いているグループは、このエントリのチェックにのみ使われる。

 「管理者権限でログオン」してプロセスを起動すると、デフォルトではプロセスのトークンに[有効なグループ]属性を持つBUILTIN\Administratorsグループが記載される(先の「グループ情報の表示」画面の)。これが、さまざまなオブジェクトに対して強力なアクセス権が認められる源である。たとえユーザーが「管理者権限でログオン」していたとしても、BUILTIN\Administratorsグループが[有効なグループ]としてトークンに記載されていなければ、プロセスはオブジェクトにアクセスすることはできない。

■トークンの特権

 トークンに記述されている特権情報を表示させるには、「whoami /priv」を実行する。

特権情報の表示
whoami /privコマンドを実行すると、トークンに記載されている特権の情報が表示される。
  コマンドの実行。
  特権名。
  特権の内容。
  有効か無効かの情報。

 この特権リストが、トークンに与えられた特権の一覧である。[状態]に[有効]と[無効]があるが、[無効]なものも使用可能な特権としてトークンに与えられている。ただし正確にいうと、特権はただトークンに与えられただけでは無効となっていて、そのままではプロセスは特権的操作を行えない。各プロセスは必要に応じてトークン内の特権を有効にして特権的操作を行い、不要になったら無効にする。もちろん、そもそもトークンに記載されていない特権を有効にすることはできない。


 INDEX
  [基礎解説]
  Windowsセキュリティ・メカニズム入門(前編)
    1.セキュアなOSに必要なこと
    2.プロセスとトークンとACL
    3.トークンと特権的操作
    4.トークンの作成と書き換え
 
  Windowsセキュリティ・メカニズム入門(後編)
    1.管理者権限でログオンするとは?
  2.トークンの内容を確認する
    3.トークンの内容を書き換えてみる
    4.別のユーザーとして実行する機能とWindows Vista
 
目次ページへ  「基礎解説」


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

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間