次の方法で共有


偽装レベル

偽装が成功した場合、クライアントはサーバーをある程度クライアントにすることに同意したことを意味します。 さまざまな権限借用の度合いは、偽装レベルと呼ばれ、クライアントを偽装するときにサーバーに与えられる権限の量を示します。

現在、4 つの偽装レベルがあります。匿名 の識別の偽装、委任 。 次の一覧では、各偽装レベルについて簡単に説明します。

匿名 (RPC_C_IMP_LEVEL_ANONYMOUS)

クライアントはサーバーに対して匿名です。 サーバー プロセスはクライアントを偽装できますが、偽装トークンにはクライアントに関する情報は含まれません。 このレベルは、ローカルのプロセス間通信トランスポートでのみサポートされます。 他のすべてのトランスポートは、このレベルを識別するように自動的に昇格します。

識別 (RPC_C_IMP_LEVEL_IDENTIFY)

システムの既定のレベル。 サーバーはクライアントの ID を取得でき、サーバーはクライアントを偽装して ACL チェックを実行できます。

偽装の (RPC_C_IMP_LEVEL_IMPERSONATE)

サーバーは、クライアントの代わりに動作しながら、クライアントのセキュリティ コンテキストを偽装できます。 サーバーは、クライアントとしてローカル リソースにアクセスできます。 サーバーがローカルの場合は、クライアントとしてネットワーク リソースにアクセスできます。 サーバーがリモートの場合は、サーバーと同じコンピューター上にあるリソースにのみアクセスできます。

デリゲート (RPC_C_IMP_LEVEL_DELEGATE)

最も強力な偽装レベル。 このレベルを選択すると、サーバー (ローカルまたはリモート) は、クライアントの代わりに動作しながら、クライアントのセキュリティ コンテキストを偽装できます。 偽装中に、クライアントの資格情報 (ローカルとネットワークの両方) を任意の数のコンピューターに渡すことができます。

代理人レベルで権限借用を機能させるには、次の要件を満たす必要があります。

  • クライアントは、偽装レベルをRPC_C_IMP_LEVEL_DELEGATEに設定する必要があります。
  • クライアント アカウントは、Active Directory サービスで "アカウントは機密性が高く、委任できません" とマークされないようにする必要があります。
  • サーバー アカウントは、Active Directory サービスの "委任に対して信頼済み" 属性でマークされている必要があります。
  • クライアント、サーバー、およびすべての "ダウンストリーム" サーバーをホストするコンピューターは、すべてドメインで実行されている必要があります。

偽装レベルを選択すると、クライアントは、クライアントの偽装を実行できる距離をサーバーに通知します。 クライアントは、サーバーとの通信に使用するプロキシの偽装レベルを設定します。

偽装レベルの設定

偽装レベルを設定するには、次の 2 つの方法があります。

  • クライアントは、CoInitializeSecurity呼び出して、プロセス全体に設定できます。
  • クライアントは、IClientSecurity::SetBlanket (またはヘルパー関数 CoSetProxyBlanket) を呼び出して、リモート オブジェクトのインターフェイスにプロキシ レベルのセキュリティを設定できます。

偽装レベルを設定するには、適切なRPC_C_IMP_LEVEL_xxx値を CoInitializeSecurity渡すか、dwImpLevel パラメーターを使用して CoSetProxyBlanketします。

認証サービスによって、異なるエクステントへの委任レベルの偽装がサポートされます。 たとえば、NTLMSSP はクロススレッドおよびクロスプロセス デリゲート レベルの偽装をサポートしますが、クロスコンピューターはサポートしません。 一方、Kerberos プロトコルでは、コンピューターの境界を越えた委任レベルの偽装がサポートされますが、Schannel では委任レベルでの偽装はサポートされません。 偽装レベルのプロキシがあり、権限借用レベルをデリゲートに設定する場合は、偽装レベルを除くすべてのパラメーターの既定の定数 使用して SetBlanket を呼び出す必要があります。 COM は NTLM をローカルに選択し、Kerberos プロトコルをリモートで選択します (Kerberos プロトコルが機能する場合)。

委任と偽装の