가장 수준
가장에 성공하면 클라이언트가 어느 정도 서버가 클라이언트가 되도록 하기로 동의했음을 의미합니다. 다양한 수준의 가장은 가장 수준이라고 하며 클라이언트를 가장할 때 서버에 부여되는 권한을 나타냅니다.
현재는 익명 , 식별, 가장, 대리자 등 네 가지 가장 수준이 있습니다. 다음 목록에서는 각 가장 수준에 대해 간략하게 설명합니다.
-
익명(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 서비스에서 "위임에 대해 신뢰할 수 있는" 특성으로 표시되어야 합니다.
- 클라이언트, 서버 및 "다운스트림" 서버를 호스트하는 컴퓨터는 모두 도메인에서 실행되어야 합니다.
가장 수준을 선택하면 클라이언트가 클라이언트를 가장하는 데 얼마나 멀리 갈 수 있는지 서버에 알릴 수 있습니다. 클라이언트는 서버와 통신하는 데 사용하는 프록시에서 가장 수준을 설정합니다.
가장 수준 설정
가장 수준을 설정하는 방법에는 두 가지가 있습니다.
- 클라이언트는 CoInitializeSecurity호출을 통해 프로세스 전체에서 설정할 수 있습니다.
- 클라이언트는 IClientSecurity::SetBlanket(또는 CoSetProxyBlanket도우미 함수)에 대한 호출을 통해 원격 개체의 인터페이스에서 프록시 수준 보안을 설정할 수 있습니다.
적절한 RPC_C_IMP_LEVEL_xxx 값을 CoInitializeSecurity 전달하거나 dwImpLevel 매개 변수를 통해 CoSetProxyBlanket 전달하여 가장 수준을 설정합니다.
다른 인증 서비스는 서로 다른 익스텐트까지 대리자 수준 가장을 지원합니다. 예를 들어 NTLMSSP는 크로스 스레드 및 크로스 프로세스 대리자 수준 가장을 지원하지만 컴퓨터 간은 지원하지 않습니다. 반면 Kerberos 프로토콜은 컴퓨터 경계를 넘어 대리자 수준 가장을 지원하지만 Schannel은 대리자 수준에서 가장을 지원하지 않습니다. 가장 수준에 프록시가 있고 가장 수준을 위임하도록 설정하려는 경우 가장 수준을 제외한 모든 매개 변수에 대한 기본 상수를 사용하여 SetBlanket 호출해야 합니다. COM은 로컬로 NTLM 및 Kerberos 프로토콜을 원격으로 선택합니다(Kerberos 프로토콜이 작동하는 경우).
관련 항목