[基礎解説] 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つである。もしもローカル・システムで実行しているサービスが脆弱性の悪用などによって乗っ取られれば、そのコンピュータ上のセキュリティは破たんする。もはやそのコンピュータ上では、誰が誰であるかすら信頼できなくなるのである。
■
後編では、管理者権限とトークンの関係や、実際にトークンの内容を書き換えた場合の挙動の変化などについて解説する。
INDEX | ||
[基礎解説] | ||
Windowsセキュリティ・メカニズム入門(前編) | ||
1.セキュアなOSに必要なこと | ||
2.プロセスとトークンとACL | ||
3.トークンと特権的操作 | ||
4.トークンの作成と書き換え | ||
Windowsセキュリティ・メカニズム入門(後編) | ||
1.管理者権限でログオンするとは? | ||
2.トークンの内容を確認する | ||
3.トークンの内容を書き換えてみる | ||
4.別のユーザーとして実行する機能とWindows 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をインストールしてみる
|
|