RPC_SECURITY_QOS_V3_A 구조체(rpcdce.h)
RPC_SECURITY_QOS_V3 구조는 바인딩 핸들에서 버전 3 보안 서비스 품질 설정을 정의합니다. Windows 버전의 버전 가용성에 대한 설명을 참조하세요.
구문
typedef struct _RPC_SECURITY_QOS_V3_A {
unsigned long Version;
unsigned long Capabilities;
unsigned long IdentityTracking;
unsigned long ImpersonationType;
unsigned long AdditionalSecurityInfoType;
union {
RPC_HTTP_TRANSPORT_CREDENTIALS_A *HttpCredentials;
} u;
void *Sid;
} RPC_SECURITY_QOS_V3_A, *PRPC_SECURITY_QOS_V3_A;
멤버
Version
사용 중인 RPC_SECURITY_QOS 구조체의 버전입니다. 이 항목에서는 RPC_SECURITY_QOS 구조의 버전 3을 설명합니다. 다른 버전은 RPC_SECURITY_QOS, RPC_SECURITY_QOS_V2 및 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 및 이전 서버 버전에서 지원되지 않습니다.
|
IdentityTracking
컨텍스트 추적 모드를 설정합니다. 다음 표에 표시된 값 중 하나로 설정해야 합니다.
값 | 의미 |
---|---|
|
보안 컨텍스트는 한 번만 만들어지고 클라이언트 쪽에서 변경하더라도 전체 통신 중에 수정되지 않습니다. RPC_SECURITY_QOS_V3 지정되지 않은 경우 기본 동작입니다. |
|
컨텍스트는 클라이언트 토큰의 ModifiedId가 변경될 때마다 수정됩니다. 모든 프로토콜은 ModifiedId를 사용합니다(참고 참조).
Windows 2000: 모든 원격 프로토콜( ncalrpc 이외의 모든 프로토콜)은 LogonId라고도 하는 AuthenticationID를 사용하여 클라이언트 ID의 변경 내용을 추적합니다. ncalrpc 프로토콜은 ModifiedId를 사용합니다. |
ImpersonationType
서버 프로세스가 클라이언트를 가장할 수 있는 수준입니다.
값 | 의미 |
---|---|
|
기본 가장 수준을 사용합니다. |
|
클라이언트는 서버에 식별 정보를 제공하지 않습니다. 서버는 클라이언트를 가장하거나 클라이언트를 식별할 수 없습니다. 많은 서버가 이 가장 형식의 호출을 거부합니다. |
|
서버는 클라이언트의 ID를 가져오고 클라이언트를 가장하여 ACL(Access Control List) 검사를 수행할 수 있지만 클라이언트를 가장할 수는 없습니다. 자세한 내용은 가장 수준을 참조하세요.
참고 일부 보안 공급자는 이 가장 유형을 RPC_C_IMP_LEVEL_IMPERSONATE 동일한 것으로 간주할 수 있습니다.
|
|
서버는 로컬 시스템에서 클라이언트의 보안 컨텍스트를 가장할 수 있지만 원격 시스템에서는 가장할 수 없습니다. |
|
서버가 클라이언트의 보안 컨텍스트를 가장하여 클라이언트 역할을 대신 수행할 수 있으며, 서버는 클라이언트를 대신하여 작업하는 동안 다른 서버로 나가는 호출을 수행할 수도 있습니다. 서버는 다른 컴퓨터에서 클라이언트의 보안 컨텍스트를 사용하여 로컬 및 원격 리소스에 클라이언트로 액세스할 수 있습니다. |
AdditionalSecurityInfoType
u 공용 구조체에 있는 추가 자격 증명의 유형을 지정합니다. 지원되는 상수는 다음과 같습니다.
지원되는 상수 | 의미 |
---|---|
|
u 공용 구조체에 추가 자격 증명이 전달되지 않습니다. |
|
u 공용 구조체의 HttpCredentials 멤버는 RPC_HTTP_TRANSPORT_CREDENTIALS 구조를 가리킵니다. 이 값은 프로토콜 시퀀스가 ncacn_http 경우에만 사용할 수 있습니다. 다른 프로토콜 시퀀스는 RPC_S_INVALID_ARG 반환합니다. |
u
u.HttpCredentials
RPC_HTTP_TRANSPORT_CREDENTIALS 구조의 형태로 RPC에 전달할 추가 자격 증명 집합입니다. AdditionalSecurityInfoType 멤버가 RPC_C_AUTHN_INFO_TYPE_HTTP 설정되면 사용됩니다.
Sid
SID(보안 식별자)를 가리킵니다. SID는 ServerPrincName 멤버의 대안이며 하나만 지정할 수 있습니다. 보안 공급자가 SCHANNEL SSP인 경우 Sid 멤버를 비 NULL 로 설정할 수 없습니다. 일부 프로토콜 시퀀스는 보안을 위해 내부적으로 Sid 를 사용하고 일부는 ServerPrincName을 사용합니다. 예를 들어 ncalrpc 는 내부적으로 Sid 를 사용하고 호출자가 SID와 ServerPrincName을 모두 알고 있는 경우 SID가 전달되는 경우 ncalrpc 를 사용하는 호출이 훨씬 더 빠르게 완료될 수 있습니다. 반면, ncacn_ 및 ncadg_ 프로토콜 시퀀스는 내부적으로 ServerPrincName을 사용하므로 ServerPrincName을 제공하면 호출을 더 빠르게 실행할 수 있습니다.
설명
다음 목록은 다양한 Windows 운영 체제에서 QOS 버전의 가용성을 정의합니다.
- 버전 1: Windows 2000 이상.
- 버전 2: Windows XP SP1(서비스 팩 1) 이상
- 버전 3: Windows Server 2003 이상.
- 버전 4: Windows Vista 이상.
- 버전 5: Windows 8 이상.
클라이언트 쪽 보안 함수 RpcBindingInqAuthInfoEx 및 RpcBindingSetAuthInfo 는 RPC_SECURITY_QOS 구조를 사용하여 바인딩 핸들에 대한 서비스 품질을 문의하거나 설정합니다.
RPC는 RPC_C_QOS_CAPABILITIES_LOCAL_MA_HINT 힌트를 지원합니다(Windows XP 및 이전 클라이언트 버전에서는 지원되지 않으며 Windows 2000 및 이전 서버 버전에서는 지원되지 않음). 이 힌트는 동적 엔드포인트 및 상호 인증을 사용하는 경우에만 사용됩니다. 또한 ncadg_ 프로토콜 시퀀스에 대해 지원되지 않습니다. 이 플래그가 ncadg_ 프로토콜 시퀀스에 사용되거나 상호 인증을 사용하지 않고 사용되는 경우 RpcBindingSetAuthInfoEx 함수 호출에서 RPC_S_INVALID_ARG 반환됩니다. 이 플래그는 서비스 거부 공격을 방지하도록 설계되었습니다. 이 플래그를 사용하면 RPC 런타임이 ServerPrincName 또는 Sid 멤버에 지정된 보안 주체에 의해 등록된 엔드포인트에 대해서만 엔드포인트 매퍼에 요청합니다. 이렇게 하면 로컬 컴퓨터의 공격자가 RPC 클라이언트를 속여 엔드포인트 매퍼에 등록된 스푸핑 엔드포인트에 연결하지 못하게 합니다. 공격은 로컬 전용이므로(예: 많은 사용자가 있는 터미널 서버 컴퓨터에서) 플래그는 로컬로 수행된 RPC 호출에 대해서만 작동합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
머리글 | rpcdce.h(Rpc.h 포함) |