偽装レベル
偽装が成功した場合は、クライアントがサーバーをある程度クライアントにすることに同意したことを意味します。 さまざまな程度の偽装は偽装レベルと呼ばれ、クライアントを 偽装するときにサーバーに与えられる権限の量を示します。
現時点では、匿名、識別、偽装、委任の 4 つの偽装レベルがあります。 次の一覧では、各偽装レベルについて簡単に説明します。
-
anonymous (RPC_C_IMP_LEVEL_ANONYMOUS)
-
クライアントはサーバーに対して匿名です。 サーバー プロセスはクライアントを偽装できますが、偽装トークンにはそのクライアントに関する情報は格納されていません。 このレベルは、ローカルのプロセス間通信トランスポートでのみサポートされます。 他のすべてのトランスポートは、このレベルを自動的に昇格して識別します。
-
identify (RPC_C_IMP_LEVEL_IDENTIFY)
-
システム既定のレベル。 サーバーはクライアントの ID を取得できるため、クライアントを偽装して ACL チェックを実行できます。
-
偽装 (RPC_C_IMP_LEVEL_IMPERSONATE)
-
サーバーはクライアントのセキュリティ コンテキストを偽装しつつ、そのクライアントに代わってアクションを実行できます。 サーバーはクライアントとしてローカル リソースにアクセスできます。 サーバーがローカルの場合は、クライアントとしてネットワーク リソースにアクセスできます。 サーバーがリモートの場合は、サーバーと同じコンピューター上にあるリソースにのみアクセスできます。
-
delegate (RPC_C_IMP_LEVEL_DELEGATE)
-
最も強力な偽装レベル。 このレベルを選択すると、サーバーはローカル、リモートにかかわらず、クライアントのセキュリティ コンテキストを偽装しつつ、そのクライアントに代わってアクションを実行できます。 偽装中に、クライアントの資格情報 (ローカルとネットワークの両方) を任意の数のコンピューターに渡すことができます。
代理人レベルで権限借用を機能させるには、次の要件を満たす必要があります。
- クライアントは、偽装レベルをRPC_C_IMP_LEVEL_DELEGATEに設定する必要があります。
- Active Directory サービスでは、クライアント アカウントを "アカウントは機密性が高く、委任できません" とマークすることはできません。
- サーバー アカウントは、Active Directory サービスの "委任に対して信頼済み" 属性でマークする必要があります。
- クライアント、サーバー、および "ダウンストリーム" サーバーをホストしているコンピューターはすべて、ドメインで実行されている必要があります。
偽装レベルを選択すると、クライアントは、クライアントの偽装にどの程度進むことができるかをサーバーに指示します。 クライアントは、サーバーとの通信に使用するプロキシの偽装レベルを設定します。
偽装レベルの設定
偽装レベルを設定するには、次の 2 つの方法があります。
- クライアントは、 CoInitializeSecurity の呼び出しを通じて、プロセス全体で設定できます。
- クライアントは、 IClientSecurity::SetBlanket (またはヘルパー関数 CoSetProxyBlanket) の呼び出しを通じて、リモート オブジェクトのインターフェイスにプロキシ レベルのセキュリティを設定できます。
偽装レベルを設定するには、dwImpLevel パラメーターを使用して、適切なRPC_C_IMP_LEVEL_xxx値を CoInitializeSecurity または CoSetProxyBlanket に渡します。
異なる認証サービスでは、異なるエクステントへの委任レベルの偽装がサポートされます。 たとえば、NTLMSSP はクロススレッドおよびクロスプロセスデリゲートレベルの偽装をサポートしますが、クロスコンピューターはサポートしていません。 一方、Kerberos プロトコルでは、コンピューターの境界を越えた委任レベルの偽装がサポートされていますが、Schannel では委任レベルでの偽装はサポートされていません。 偽装レベルのプロキシがあり、偽装レベルを委任するように設定する場合は、偽装レベルを除くすべてのパラメーターの既定の定数を使用して SetBlanket を呼び出す必要があります。 COM はローカルで NTLM と Kerberos プロトコルをリモートで選択します (Kerberos プロトコルが機能する場合)。
関連トピック
フィードバック
フィードバックの送信と表示