一部のWindows APIはプライマリトークンを返し、一部は偽装トークンを返します。一部のAPIはプライマリトークンを必要とし、他のAPIは偽装トークンを必要とします。例えばプライマリトークンと偽装トークンの相違点
、LogonUser
は通常、ログオンタイプ(dwLogonType
)としてLOGON32_LOGON_NETWORK
を使用している場合を除き、プライマリトークンを返します。ほとんどの場合、
、返されたハンドルは、あなたがへの呼び出しで使用できるプライマリトークンですCreateProcessAsUser関数です。ただし、LOGON32_LOGON_NETWORKフラグを指定すると、LogonUserはDuplicateTokenExを呼び出してプライマリトークンに変換しない限り、CreateProcessAsUserで使用できない偽装トークンを返します。
SetThreadToken
は偽装トークンが必要ですが、かなり同じように見えるImpersonateLoggedOnUser
のいずれかがかかります。
CreateProcessAsUser
とCreateProcessWithTokenW
の両方がプライマリトークンを必要とし、両方のは、プライマリトークンがDuplicateTokenEx
を呼び出して偽装トークンから取得することができますが、トークンの種類はを何を意味するのですか?
用語集では、次の言葉:
アクセストークンは、ログオンセッションのセキュリティ情報が含まれています。ユーザーがログオンするとアクセストークンが作成され、ユーザーの代わりに実行されるすべてのプロセスにトークンのコピーが作成されます。トークンは、ユーザー、ユーザーのグループ、およびユーザーの特権を識別します。システムは、トークンを使用して、セキュリティ保護可能なオブジェクトへのアクセスを制御し、ローカルコンピュータ上でさまざまなシステム関連の操作を実行するユーザーの機能を制御します。アクセストークンには、プライマリと偽装の2種類があります。
一般的にのみ、Windowsカーネルによって作成されたアクセストークン。そのプロセスのデフォルトのセキュリティ情報を表すプロセスに割り当てることができます。
サーバーは、セキュリティ操作でクライアントプロセスを「偽装」することができ、クライアントプロセスのセキュリティ情報をキャプチャするために作成されたアクセストークン。
しかし、それは完全には有用ではありません。誰かが "カーネル"のような大きな男の子の言葉を使いたいと思っていたようですが、これは他に(プロセスに割り当てられている以外に)プライマリトークンを使うことができ、カーネルの他に誰がアクセスを作成できるかトークン?
(これは、カーネルがカーネルモードで実行されるものの一部であり、エグゼクティブなどもあります)、つまりユーザーモードコードでもトークンを作成できるという意味ですか?ユーザーモードのコードでトークンを作成できる場合は、Object Managerオブジェクトの場合と同様に、システムコールを使用してトークンを作成する必要があります。
とにかく、基本的な質問に答える:トークンタイプの違いは何ですか?何か 通常はが作成されています。
ドキュメント化されたCreateTokenおよびCreateTokenEx関数を使用してユーザーモードからトークンを作成することもできますが、これらの関数はSSP/AP(「セキュリティサポートプロバイダ/認証」からのみ呼び出すことができるため、パッケージ")。 –
良い点。 SSP/APインターフェイスを実装する必要があるだけでなく(「SpLsaModeInitialize」関数テーブルを関数テーブルなどに戻す必要がある)、「普通の」SSPとは異なり、SSP/APはLSASSの一部として実行されるため、 'NT AUTHORITY \ SYSTEM'アカウントで実行し、' SeCreateTokenPrivilege'、 'SeTcbPrivilege'などを持っています。セキュリティ上の理由から、彼らは同じ要求を持っています( 'ZwCreateToken'はそれほど厳しいものではないかもしれませんが)。 – conio
偽装トークンが破棄されたら、スレッドはどうなりますか? – Dolev