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

3.トークンの内容を書き換えてみる

畑中 哲
2006/06/16

トークンの書き換えの例

 トークンが重要であることを示すサンプルとして、TokenTest.exeというコマンドを作成・用意した。コマンド・プロンプト(cmd.exeプロセス)を起動し、そのトークンのローカルAdministratorsグループを[拒否のみに使用するグループ]属性に変えたり、トークンから特権を取り除いたりすることができる。これはWindows 2000以降のOSで実行する必要がある。

Column:TokenTest.exeツール

 これは、新しい子プロセスを起動し、そのプロセスのトークンのローカルAdministratorsグループを[拒否のみに使用するグループ]属性に変えたり、トークンから特権を取り除いたりするためのツールである。以下のリンクを右クリックしてローカル・コンピュータ上に保存、解凍し、コマンド・プロンプト上から起動して実験していただきたい。詳しい使い方については、.ZIPファイル内のドキュメントを参照のこと。

  このツールを実行すると、次のようなダイアログが表示される。

TokenTest.exeツールの実行画面
このツールを起動すると、このようなダイアログが表示される。[はい]か[いいえ]をクリックすることにより、プロセスのトークンの属性を変更することができる。
  これをクリックすると、ローカルAdministratorsグループの属性を[拒否のみに利用するグループ]に変更する
  これをクリックすると、トークンからほとんどの特権を取り除く。
  これをクリックすると、終了する。

 このツールを起動し、[はい]か[いいえ]をクリックすると、トークンの内容が変更された新しいコマンド・プロンプトのウィンドウが起動する。その中でWhoAmIコマンドを実行すると、特権がどのように変更されたかが分かる。

 このツールで起動されたコマンド・プロンプト内で「管理者権限」が必要な操作を実行してみたり、さらに子プロセスを起動して「管理者権限」が必要な操作を実行してみるとよい。以下の例では、Administratorsグループに属するユーザーでシステムにログオン後、このツールを使ってトークンを変更し、WhoAmIコマンドでその結果や効果を確かめている。

ローカルAdministratorsグループを取り除いた例

 以下は、コマンド・プロンプト(cmd.exeプロセス)のトークンから、ローカルAdministratorsグループを取り除いた場合の例である。先のツールを使ってコマンド・プロンプトを起動し、Administratorsグループをトークンから取り除いている。

 トークンのBUILTIN\Administratorsグループの属性が[拒否のみに使用するグループ]になっていることに注意していただきたい(画面中の)。

 これにより、デスクトップにログオンしているこのserver\administratorというユーザーは、「管理者権限」を持っている(Domain Adminsグループに属しているので、「ドメインの管理者権限」さえ持っている)にもかかわらず、このコマンド・プロンプト、およびそこから起動した子プロセスでは、デフォルトのACLを持ったオブジェクトへの強力なアクセスを行うことができない。

 例えば[コントロール・パネル]の[システム]アプレット(コマンド・プロンプトからsysdm.cplで起動できる。画面中の)では、「このコンピュータの ID を変更できるのは管理者のみです。」というメッセージが表示され、操作を拒否されていることが分かる。

管理者権限がない場合のシステムのプロパティの例
管理者アカウントでログオンしているにもかかわらず、トークンからローカルAdministratorsグループを削除すると、このように操作を行うことができなくなる。
  コンピュータ名を確認、変更するには、このタブを選択する。
  このように、コンピュータ名を変更することができなくなる。

 このほか、コマンド・プロンプト上でWindowsのシステム・ディレクトリにファイルを作成しようとしても(上記のechoコマンドなど)、やはり拒否される(画面中の)。

 一方、さまざまな特権はトークンに残っているので、「管理者権限」が必要な特権的操作は行うことができる。例えば、コンピュータの時刻を変更することは可能である。

ほぼすべての特権を取り除いた例

 以下は、コマンド・プロンプト(cmd.exe プロセス)のトークンから、ほぼすべての特権を取り除いた場合の例である。先のツールを使ってコマンド・プロンプトを起動し、トークンからほとんどの特権を取り除いている

 トークンの特権がほとんどなくなっていることに注意していただきたい(画面中の)。

 これによって、デスクトップにログオンしているこのserver\administratorというユーザーは「管理者権限」を持っている(Domain Adminsグループに属しているので、「ドメインの管理者権限」さえ持っている)にもかかわらず、このコマンド・プロンプト、およびそこから起動した子プロセスでは、特権的操作を行うことができない。

 例えば[日付と時刻]コントロール・パネル(コマンド・プロンプトからtimedate.cplで起動する。画面中の)では、「システムの時刻を変更する特権がありません」というメッセージで操作を拒否される。

システムの時刻を変更する特権を削除した場合の例
管理者アカウントでログオンしており、トークンにローカルAdministratorsグループが有効なグループとして含まれているにもかかわらず、トークンからほぼすべての特権を削除すると、システムの時刻を変更することもできなくなる。
  時刻の変更操作が拒否される。

 また、コンピュータをシャットダウンしようとしても拒否される(先の画面中の)。

 特権を必要としない操作は、通常通り、プロセスのトークンとオブジェクトのACLの比較で許可/拒否が決まる。トークンには[有効なグループ]属性を持つBUILTIN\Administratorsグループが記載されているので、例えば、コマンド・プロンプト上でWindowsのシステム・ディレクトリにファイルを作成するような操作(先の画面中の)は実行することができる。

 お互いのプロセスは独立しているので、このようなトークンの違うプロセスでも、1つのデスクトップ内で共存することができる。デスクトップに誰がログオンしているかではなく、このように1つのデスクトップ内でも独立した各プロセスのトークンによって、アクセスは判定される。

異なるトークンを持つ2つのプロセスの例
同一のエクスプローラ・プロセス(同一のプロセスデスクトップ)内でも、それぞれのプロセスごとに異なるトークンを持つことができる。トークンはプロセスごとに独立しているので、このように、異なる属性を持つプロセスが共存することができる。

 同一デスクトップ内で、上のコマンド・プロンプトと下のコマンド・プロンプトのトークンが異なることに注目していただきたい。


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


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

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間