RPC_SECURITY_QOS 構造体 (rpcdce.h)
RPC_SECURITY_QOS構造では、バインディング ハンドルのサービス品質のセキュリティ設定を定義します。 Windows エディションでのバージョンの可用性については、「解説」を参照してください。
構文
typedef struct _RPC_SECURITY_QOS {
unsigned long Version;
unsigned long Capabilities;
unsigned long IdentityTracking;
unsigned long ImpersonationType;
} RPC_SECURITY_QOS, *PRPC_SECURITY_QOS;
メンバー
Version
使用されている RPC_SECURITY_QOS 構造体のバージョン。 このトピックでは、 RPC_SECURITY_QOS 構造のバージョン 1 について説明します。 その他のバージョンについては、「 RPC_SECURITY_QOS_V2、 RPC_SECURITY_QOS_V3、 RPC_SECURITY_QOS_V4 、 RPC_SECURITY_QOS_V5 」を参照してください。
Capabilities
アプリケーションに提供されているセキュリティ サービス。 機能は、ビットごとの OR 演算子を使用して組み合わせることができるフラグのセットです。
値 | 意味 |
---|---|
|
プロバイダー固有の機能が必要ない場合に使用されます。 |
|
このフラグを指定すると、RPC ランタイムはセキュリティ プロバイダーに相互認証を要求します。 一部のセキュリティ プロバイダーでは、相互認証がサポートされていません。 セキュリティ プロバイダーが相互認証をサポートしていない場合、またはサーバーの ID を確立できない場合、このようなサーバーへのリモート プロシージャ コールはエラー RPC_S_SEC_PKG_ERRORで失敗します。
メモ RPC は SSP に依存して、どのセキュリティ オプションが正常にネゴシエートされたかを示します。RPC は、セキュリティ サービス プロバイダー (SSP) がオプションをネゴシエートできなかったと報告する呼び出しに失敗します。 ただし、一部のセキュリティ プロバイダーは、オプションが正常にネゴシエートされなかった場合でも、オプションのネゴシエーションが成功したことを報告することが知られています。 たとえば、NTLM では、相互認証をサポートしていないにもかかわらず、下位互換性の理由から相互認証のネゴシエーションが成功したことが報告されます。 セキュリティ オプションに関する動作を判断するために使用されている特定の SSP を確認します。
|
|
現在、実装されていません。 |
|
証明機関 (CA) がサーバーの信頼された CA の一覧にない場合でも、クライアントの資格情報を受け入れます。 この定数は、SCHANNEL SSP でのみ使用されます。 |
|
このフラグを指定すると、クライアント上の RPC ランタイムに対して、委任をサポートするセキュリティ コンテキストを確立するためのエラーを無視するように指示されます。 通常、クライアントが委任を要求し、セキュリティ システムが委任をサポートするセキュリティ コンテキストを確立できない場合は、エラー RPC_S_SEC_PKG_ERRORが返されます。このフラグを指定すると、エラーは返されません。
メモ Windows XP 以前のクライアント エディションではサポートされていません。Windows 2000 以前のサーバー エディションではサポートされていません。
|
|
このフラグは、RPC 呼び出しを行うマシンに対してサーバーがローカルであることを RPC に指定します。 この状況では、RPC は、 ServerPrincName または Sid メンバーで指定されたプリンシパルによって登録されたエンドポイントのみを取得するようにエンドポイント マッパーに指示します (これらのメンバーは 、RPC_SECURITY_QOS_V3、 RPC_SECURITY_QOS_V4、 RPC_SECURITY_QOS_V5 でのみ使用できます)。 詳細については、「解説」を参照してください。
メモ Windows XP 以前のクライアント エディションではサポートされていません。Windows 2000 以前のサーバー エディションではサポートされていません。
|
|
設定されている場合、RPC ランタイムは SChannel SSP を使用して、暗号化サービス プロバイダー (CSP) による PIN プロンプト ダイアログ ボックスを表示せずにスマートカードベースの認証を実行します。
RpcBindingSetAuthInfoEx の呼び出しでは、AuthIdentity パラメーターは、次のメンバーを含むSEC_WINNT_AUTH_IDENTITY構造体である必要があります。
|
IdentityTracking
コンテキスト追跡モードを設定します。 次の表に示す値のいずれかに設定する必要があります。
値 | 意味 |
---|---|
|
セキュリティ コンテキストは 1 回だけ作成され、クライアント側で変更された場合でも、通信全体で変更されることはありません。 これは、RPC_SECURITY_QOSが指定されていない場合の既定の動作です。 |
|
クライアントのトークン内の ModifiedId が変更されるたびにコンテキストが変更されます。 すべてのプロトコルで ModifiedId が使用されます (注を参照)。
Windows 2000: すべてのリモート プロトコル ( ncalrpc 以外のすべてのプロトコル) では、AuthenticationID (LogonId とも呼ばれます) を使用して、クライアントの ID の変更を追跡します。 ncalrpc プロトコルでは ModifiedId が使用されます。 |
ImpersonationType
サーバー プロセスがクライアントを偽装できるレベル。
値 | 意味 |
---|---|
|
既定の偽装レベルを使用します。 |
|
クライアントは、識別情報をサーバーに提供しません。 サーバーは、クライアントを偽装したり、クライアントを識別したりできません。 多くのサーバーでは、この偽装の種類の呼び出しが拒否されます。
メモ セキュリティ プロバイダーによっては、この偽装の種類をRPC_C_IMP_LEVEL_IMPERSONATEと同等として扱う場合があります。 Windows セキュリティ プロバイダーから、これは、ncalrpc 以外のプロトコル シーケンスで使用する場合にのみ、RPC_C_AUTHN_WINNTによって行われます。 また、RPC_C_AUTHN_GSS_NEGOTIATE、RPC_C_AUTHN_GSS_SCHANNEL、RPC_C_AUTHN_GSS_KERBEROSによって行われます。
|
|
サーバーはクライアントの ID を取得し、クライアントを偽装してAccess Controlリスト (ACL) チェックを実行できますが、クライアントを偽装することはできません。 詳細については、「 偽装レベル 」を参照してください。
メモ セキュリティ プロバイダーによっては、この偽装の種類をRPC_C_IMP_LEVEL_IMPERSONATEと同等として扱う場合があります。 Windows セキュリティ プロバイダーから、これは、ncalrpc 以外のプロトコル シーケンスで使用する場合にのみ、RPC_C_AUTHN_WINNTによって行われます。 また、RPC_C_AUTHN_GSS_NEGOTIATE、RPC_C_AUTHN_GSS_SCHANNEL、RPC_C_AUTHN_GSS_KERBEROSによって行われます。
|
|
サーバーは、ローカル システムではクライアントのセキュリティ コンテキストを偽装できますが、リモート システムでは偽装できません。 |
|
サーバーはクライアントのセキュリティ コンテキストを偽装しつつ、そのクライアントに代わってアクションを実行できます。 サーバーは、クライアントに代わって動作しながら、他のサーバーへの発信呼び出しを行うこともできます。 サーバーは、他のマシン上のクライアントのセキュリティ コンテキストを使用して、クライアントとしてローカル リソースとリモート リソースにアクセスできます。 |
注釈
次の一覧では、さまざまな Windows オペレーティング システムでの QOS バージョンの可用性を定義します。
- バージョン 1: Windows 2000 以降。
- バージョン 2: Windows XP Service Pack 1 (SP1) 以降。
- バージョン 3: Windows Server 2003 以降。
- バージョン 4: Windows Vista 以降。
- バージョン 5: Windows 8以降。
クライアント側のセキュリティ関数 RpcBindingInqAuthInfoEx と RpcBindingSetAuthInfo では、 RPC_SECURITY_QOS 構造を使用して、バインディング ハンドルのサービスのセキュリティ品質を問い合わせるか、設定します。
RPC では、RPC_C_QOS_CAPABILITIES_LOCAL_MA_HINT ヒントがサポートされています。 このヒントは、動的エンドポイントと相互認証が使用される場合にのみ使用されます。 さらに、 ncadg_ プロトコル シーケンスではサポートされていません。 このフラグがncadg_プロトコル シーケンスに使用されている場合、または相互認証を使用しない場合、RPC_S_INVALID_ARGは RpcBindingSetAuthInfoEx 関数呼び出しから返されます。 このフラグは、サービス拒否攻撃を防ぐために設計されています。 このフラグを使用すると、 ServerPrincName または Sid メンバーで指定されたプリンシパルによって登録されたエンドポイントに対してのみ、RPC ランタイムがエンドポイント マッパーに要求されます。 これにより、ローカル コンピューター上の攻撃者が RPC クライアントをだまして、エンドポイント マッパーに登録したスプーフィング エンドポイントに接続することを防ぎます。 攻撃はローカルのみであるため (多くのユーザーを持つターミナル サーバー コンピューターなど)、フラグはローカルで行われた RPC 呼び出しに対してのみ機能します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
Header | rpcdce.h (Rpc.h を含む) |