権限借用

偽装とは、スレッドを所有するプロセスのコンテキストとは異なるセキュリティ コンテキストでスレッドを実行する機能です。 クライアントのセキュリティ コンテキストで実行している場合、サーバーはある程度クライアント「です」。 サーバー スレッドは、クライアントの資格情報を表すアクセス トークンを使用して、クライアントがアクセスできるオブジェクトへのアクセスを取得します。

偽装の主な理由は、クライアントの ID に対してアクセス チェックを実行させることです。 アクセス チェックにクライアントの ID を使用すると、クライアントに与えられた権限に応じて、アクセスが制限または拡張される可能性があります。 たとえば、ファイル サーバーに機密情報を含むファイルがあり、これらの各ファイルが ACL によって保護されているとします。 クライアントがこれらのファイル内の情報に不正にアクセスするのを防ぐために、サーバーはファイルにアクセスする前にクライアントになりすますことができます。

偽装用のアクセス トークン

アクセス トークンは、プロセスまたはスレッドのセキュリティ コンテキストを記述するオブジェクトです。 これらは、ユーザー アカウントの ID とユーザー アカウントで利用できる権限のサブセットを含む情報を提供します。 すべてのプロセスには、プロセスに関連付けられているユーザー アカウントのセキュリティ コンテキストを記述するプライマリ アクセス トークンがあります。 既定では、プロセスのスレッドがセキュリティ保護可能なオブジェクトと対話するときに、システムはプライマリ トークンを使用します。 ただし、スレッドがクライアントを偽装すると、偽装スレッドにはプライマリ アクセス トークンと偽装トークンの両方があります。 偽装トークンはクライアントのセキュリティ コンテキストを表します。このアクセス トークンは、偽装時にアクセス チェックに使用されます。 偽装が終了すると、スレッドはプライマリ アクセス トークンのみを使用する状態に戻ります。

OpenProcessToken 関数を使用して、プロセスのプライマリ トークンへのハンドルを取得できます。 OpenThreadToken 関数を使用して、スレッドの偽装トークンへのハンドルを取得します。

アクセス トークン

委任と偽装