[基礎解説]

Windowsセキュリティ・メカニズム入門(後編)

―― Windows OSのセキュリティ・チェックの仕組みを知る ――

1.管理者権限でログオンするとは?

畑中 哲
2006/06/16

 前編では、Windows OSにおけるセキュリティの仕組みについて、プロセスとそこに割り当てられているトークンや特権について解説した。後編では、管理者権限とトークンの関係や、実際にトークンの内容を書き換えた場合の挙動の変化などについて解説する。

「管理者権限でログオンする」ということの意味

 よく「管理者権限でログオンする」ということがある。だが厳密には、「管理者権限」などというものは存在しない。例えば、「管理者特権」という特権は存在しない。

 「管理者権限でログオンする」などというのは、通常、ローカルAdministratorsグループに所属するユーザーとしてログオンすることをいう。

 ローカルAdministratorsグループに所属するユーザーとしてログオンすると、最初のプロセスのトークンに「私はローカルAdministratorsグループに属しています」という情報が記載される。また、ローカルAdministratorsグループに与えられている特権すべてがそのトークンに記載される。

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

 Windows OSのデフォルト設定では、オブジェクトのACLには、通常ローカルAdministratorsグループに対してフル・コントロールを許可することが記載されている。

デフォルトのACL
オブジェクトのACLには、デフォルトでは、ローカルAdministratorsグループに対してフル・コントロールを許可することが記載されている。

 また、Windows OSのデフォルトの設定では、ローカルAdministratorsには多くの特権が与えられている。

デフォルトの特権
デフォルトでは、ローカルAdministratorsには多くの特権が与えられている(下線部がローカルAdministratorsグループ)。ローカルAdministratorsに所属するユーザーは、これらの特権を利用することができる。

 これらの結果、ローカルAdministratorsに所属するユーザーとしてログオンすると、それ以降に起動するプロセスすべてで、さまざまなオブジェクトに対してフル・コントロールの権限でアクセスでき、多くの特権的操作を行うことができる。

ローカルAdministratorsグループに所属しているユーザーでログオンした場合のプロセスとトークンの関係
ローカルAdministratorsグループに所属しているユーザーでログオンした場合のプロセスとトークンの関係(クリックすると別ウィンドウで開きます)
ユーザーAliceはローカルAdministratorsグループに属している。このアカウントでログオンすると、最初のプロセスのトークンには「ローカルAdministratorsグループに属している」という情報が記載される。Aliceが子プロセスを起動すると、親プロセスのトークンがコピーされ、親プロセスと同様に、いわゆる管理者権限を必要とする操作を行うことができる。
  ローカルAdministratorsグループのユーザーAliceでログオンする。
  Windows OSが最初のプロセス(エクスプローラ)向けにトークンを作成する。
  このトークンには、セスのトークンには「ローカルAdministratorsグループに属している」という情報や、持っている特権の一覧が記録されている。
  新しく子プロセスを起動する。
  トークンの内容がコピーされる。
  トークンの内容は親プロセスのトークンと同じなので、同じ特権を持っている。
  何か特権的な操作を行おうとする。
  Windows OSは、そのプロセス(の所有者)が誰であるかをチェックする。
  トークンに、その特権的操作が記載されているかどうかをチェックする。
  トークンに記載があるので、特権的操作を許可する。
  子プロセスから、Windows OSの持つオブジェクトへフル・コントロールでアクセスしようとする。
  オブジェクトのACLと照合し、アクセスが許可されているかどうかをチェックする。
  アクセスを許可する。

 つまり、「管理者権限でログオン」するといろいろなことが実行できるのは、ログオンしたユーザーに「管理者権限」というものがあるからではない。ローカルAdministratorsグループに対して、たまたま強力なアクセス権を認めるACLが付いているオブジェクトが多く、また、たまたまデフォルトで多くの特権が与えられているからにすぎない。まとめると次のようになる。

・ Administratorsグループのユーザー・アカウントでログオンする。

・ すると、ログオンした最初のプロセスに対して作成されるトークンに、ローカルAdministratorsに所属しているという情報と、ローカルAdministratorsグループに与えられているすべての特権が記載される。

・ 以後起動されるすべてのプロセスに、上のトークンの内容が(デフォルトではそのまま)コピーされる。

・Windows OSのデフォルト設定では、多くのオブジェクトのACLには、ローカルAdministratorsグループに対してフル・コントロールを許可することが記載されている。

↓
↓
↓

・ この結果、ローカルAdministratorsグループでログオンしたユーザーは、Windows OSの多くのオブジェクトに対して、フル・コントロールの権限でアクセスすることができるし、多くの特権的操作を行うことができる。

 「管理者権限でログオン」したとしても、トークンから「ローカルAdministratorsグループに所属している」という情報が削除されれば、そのプロセスは、「管理者権限を必要とする」ような操作は何もできなくなってしまう。

トークンからローカルAdministratorsグループに所属しているという情報を削除した場合のプロセスの例
トークンからローカルAdministratorsグループに所属しているという情報を削除した場合のプロセスの例(クリックすると別ウィンドウで開きます)
先の図と同様に、ローカルAdministratorsグループに属しているユーザーAliceというアカウントでログオンしている。そのため、最初のプロセスのトークンには「ローカルAdministratorsグループに属している」という情報が記載されている。ここでAliceが子プロセスを起動すると、親プロセスのトークンがコピーされるが、そこから「ローカルAdministratorsグループに属している」という情報を削除してみる。すると子プロセスからは、管理者権限を必要とする操作は一切行えなくなる。この例では、デスクトップにログオンしているのは、Aliceで、「管理者権限」を持っている。そして、Aliceの起動した子プロセスはAliceであるというトークンを持っている。にもかかわらず、この子プロセスは、「管理者権限を必要とする」アクセスや操作を行うことができなくなるのである。つまり、Aliceが「管理者権限」を持っているわけではない。Aliceの起動したプロセスのトークンに、ローカルAdministratorsグループに所属しているという属性が付いているから、いわゆる管理者権限を必要とする多くの操作が可能になっているのである。
  ローカルAdministratorsグループのユーザーAliceでログオンする。
  Windows OSが最初のプロセス(エクスプローラ)向けにトークンを作成する。
  このトークンには、セスのトークンには「ローカルAdministratorsグループに属している」という情報や、持っている特権の一覧が記録されている。
  新しく子プロセスを起動する。ここまでは先の図と同じ。
  親プロセスのトークンの内容がコピーされるが、そこから特権をすべて取り除いてみる。
  何か特権的な操作を行おうとする。
  Windows OSは、そのプロセス(の所有者)が誰であるかをチェックする。
  トークンに、その特権的操作が記載されているかどうかをチェックする。
  トークンに記載が「ない」ので、特権的操作を許可しない。
  子プロセスから、Windows OSの持つオブジェクトへフル・コントロールでアクセスしようとする。
  オブジェクトのACLと照合し、アクセスが許可されているかどうかをチェックする。
  Administratorsグループに所属していないので、アクセスを許可しない。

 また、たとえトークンがそのままでも、オブジェクトのACLに「ローカルAdministratorsグループにアクセスを許可する」という記載がないオブジェクトには、アクセスすることはできない。ローカルAdministratorsグループに与えられていない特権が必要な操作もできない。

 すべては各プロセスのトークン次第であり、各オブジェクトのACL次第であり、個別の特権次第である。もう一度繰り返すが、「管理者権限」というものはない。ましてや、デスクトップに誰がログオンしているかはまったく関係ない(デスクトップとは、不正確を承知でいえば、画面に表示されるウィンドウの境界線にすぎず、セキュリティ・チェックの境界線ではない)。


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


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

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間