【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
   
[基礎解説]
Windowsセキュリティ・メカニズム入門(前編)

4.トークンの作成と書き換え

畑中 哲
2006/06/01

トークンの決定

 各プロセスは、それぞれ自分自身の独立したトークンを持っている。では、その各トークンの内容はいつどのように決定されるのだろうか。

 プロセスは、起動時に親プロセスのトークンのコピーを受け取る。例えば、[スタート]メニューの[ファイル名を指定して実行]でメモ帳を起動したときは、Explorer.exeプロセスからNotepad.exeプロセスを起動しているので、メモ帳(Notepad.exe)のトークンは、[スタート]メニュー(つまりExplorer.exe)からコピーしたトークンを与えられる。

トークンの継承
各プロセスは、それを起動した親のプロセスから、起動時にトークンのコピーを受け取る。

最初のプロセスのトークン

 では、最初のプロセスのトークンはどのように決められるのか。子プロセスから親プロセスをたどっていくと、どこかで最初のプロセスに行き着く。ユーザーがWindowsシステムにログオンすると、最初に[スタート]メニュー(Explorer.exeプロセス)が起動するが、その最初のプロセスのトークンはどのように決まるのだろうか。

 結論を言うと、これはログオン処理によって決まる、ということである。

 ユーザーがログオン画面でユーザー名とパスワードを入力すると、Windows OSはそれが正しいかどうかを判定し、正しければトークンを作成し、最初のプロセスを起動する。以後のプロセスは、その最初のプロセスに渡されたトークンのコピーを受け取ることになる。

最初のプロセスのトークン
ユーザーがWindowsシステムにログオンすると、ログオン処理の過程で、最初に起動するプロセスのトークンが作成され、そのプロセスに渡される。

プロセスのトークンは書き換えられる

 ログオン時にトークンが決まり、以後の子プロセスはそのコピーを受け取るのなら、トークンは1つだけ作って、すべてのプロセスでそのトークンを共有すればよいようにも思える。だが何度か述べたように、Windowsでは各プロセスはそれぞれ自分自身の独立したトークンを持っている。そのため、次の図のような共有状態には「なっていない」。

すべてのプロセスが共通のトークンを持つ例(実際はこうなっていない)
ログオン時にトークンが決まり、以後の子プロセスはそのコピーを受け取るとすると、このようにすべてのプロセスが1つのトークンを共有することも考えられる。だが、実際にはこのようにはなっていない。

 一見、このような共有状態ならシンプルでよいようにも思える。だが実際には、このような共有状態に「なっていない」ことによる利点がある。各プロセスのトークンが独立していると、それらのトークンを個別に書き換えることができるのである。デフォルトでは子プロセスは親プロセスのトークンのコピーを持つが、子プロセスは別のトークンで起動することもできる(次の図参照)。このとき、親プロセスのトークンは変化しない。もしトークンを共有していたら、1つのプロセスのトークンを書き換えると、すべてのプロセスのトークンに影響してしまう。

トークン内容の書き換え
プロセスを起動すると、トークンの内容がコピーされ、(初期の内容は同じであるが)独立した別のトークンとなる。そのためトークンの内容を書き換えると、親プロセスと異なるトークンを持つことができる。

トークンの書き換えとセキュリティ

 このようにトークンを書き換えられるのなら、勝手に身分証明書を作成できるということだから、セキュリティは破綻していると考えるかもしれない。

 だが実際には、ファイルやレジストリなどと同様にトークンもまたオブジェクトであり、トークン自身がACLを持っている。トークンにアクセスしようとしても、そのトークン自身のACLで認められたアクセスでなければ、Windows OSはそのアクセスを認めない。また、特定のプロセスのトークンに限らず、一般にトークンを書き換えるには特権が必要となっている。トークンを書き換えるための特権を持っていないプロセスは、どのトークンも書き換えることはできない。

 このような制限により、プロセスのトークンを書き換えられるユーザーは、デフォルトではローカル・システム(サービスの実行に使われるユーザー)だけとなっている。誰でも勝手に身分証明書を作成できるというわけではないのである。

 逆にいえば、ローカル・システムは、デフォルトで自由にトークンを書き換えることができる。つまり、ローカル・システムのトークンを持っているプロセスは、デフォルトで、そのローカル・コンピュータ内では自由に身元を名乗ることができるのである。これは、ローカル・システムの持つ最も強い力の1つである。もしもローカル・システムで実行しているサービスが脆弱性の悪用などによって乗っ取られれば、そのコンピュータ上のセキュリティは破たんする。もはやそのコンピュータ上では、誰が誰であるかすら信頼できなくなるのである。

 後編では、管理者権限とトークンの関係や、実際にトークンの内容を書き換えた場合の挙動の変化などについて解説する。End of Article


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

ホワイトペーパーTechTargetジャパン

Windows Server Insider フォーラム 新着記事

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

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています