다음을 통해 공유


보안 개요

WWSAPI(Windows Web Services API)의 보안 프레임워크는 다음을 제공합니다.

  • 전송 보안을 사용하여 메시지 무결성, 기밀성, 재생 검색 및 서버 인증.
  • SOAP 메시지 보안 또는 전송 보안을 사용하여 보안 토큰 유효성 검사, 인증서 신뢰 및 해지 검사 등과 같은 클라이언트 인증

보안 프로그래밍 모델

보안은 통신 채널과 연결됩니다. 채널 보안은 다음 단계로 구성됩니다.

  • 애플리케이션의 보안 요구 사항에 적합한 하나 이상의 보안 바인딩 을 만들고 초기화합니다.
  • 이러한 보안 바인딩을 포함하는 보안 설명을 만듭니다.
  • 클라이언트 쪽에서 채널 또는 서비스 프록시 를 만들거나 해당 보안 설명을 전달하는 수신기 또는 서비스 호스트 (서버 쪽)를 만듭니다.
  • 열기, 수락, 보내기, 받기, 닫기 등의 일반 채널 프로그래밍 단계를 수행합니다.

채널에서 보내고 받은 메시지는 제공된 보안 설명에 따라 런타임에 의해 자동으로 보호됩니다. 필요에 따라 보안 설명 또는 보안 바인딩의 바인딩 전체보안 설정에서 채널 전체 보안 설정을 하나 이상 지정하여 이러한 단계를 미세 조정할 수 있습니다.

보낸 사람 ID의 필수 권한 부여는 수신된 각 메시지에 연결된 보안 처리 결과를 사용하여 애플리케이션에서 수행해야 합니다. 권한 부여 단계는 보안 설명에 지정되지 않으며 런타임에 의해 자동으로 수행되지 않습니다.

지원되지 않는 바인딩, 적용할 수 없는 속성/필드, 필수 속성/필드 부족 또는 잘못된 속성/필드 값과 같은 보안 설명의 오류로 인해 채널 또는 수신기 만들기가 실패합니다.

보안 바인딩 선택

애플리케이션에 대한 보안을 디자인할 때 기본 결정은 보안 설명에 포함할 보안 바인딩을 선택하는 것입니다. 다음은 애플리케이션의 보안 시나리오에 적합한 보안 바인딩을 선택하기 위한 몇 가지 지침입니다. 유용한 추론은 먼저 애플리케이션에서 사용할 수 있는 보안 자격 증명 유형(예: X.509 인증서, Windows 도메인 사용자 이름/암호, 애플리케이션 정의 사용자 이름/암호)을 이해하고 해당 자격 증명 형식을 사용할 수 있는 보안 바인딩을 선택하는 것입니다.

채널 및 보안

위에서 설명한 대로 보안 범위는 채널로 지정됩니다. 또한 채널 작업은 모든 보안 바인딩에서 일관되게 보안 단계에 매핑됩니다.

  • 채널 만들기: 보안 설명에 지정된 보안 바인딩 집합의 유효성이 검사되고 이후 채널에 대해 고정된 상태로 유지됩니다. WS-Trust 기반 협상에 사용할 사이드 채널을 포함한 채널 스택의 모양도 결정됩니다.
  • 채널 열기: 보안 바인딩의 일부로 제공되는 모든 자격 증명이 로드되고 보안 세션이 설정됩니다. 일반적으로 열린 채널에는 '라이브' 보안 상태가 포함됩니다. 클라이언트 채널을 열면 런타임에서 서버 인증을 수행할 서버의 엔드포인트 주소도 지정합니다.
  • 채널 열기 및 닫기 사이: 이 단계에서 메시지를 안전하게 보내고 받을 수 있습니다.
  • 메시지 보내기: 보안 컨텍스트 토큰은 필요에 따라 가져오거나 갱신되며 보안 설명에 따라 전송된 각 메시지에 보안이 적용됩니다. 보안을 적용할 때 발생하는 오류는 보내기 오류로 애플리케이션에 반환됩니다.
  • 메시지 수신: 보안 설명에 따라 받은 각 메시지에서 보안이 확인됩니다. 메시지 보안 확인 오류는 수신 오류로 애플리케이션에 반환됩니다. 이러한 메시지별 오류는 채널 상태 또는 후속 수신에 영향을 미치지 않습니다. 애플리케이션은 실패한 수신을 취소하고 다른 메시지에 대한 수신을 다시 시작할 수 있습니다.
  • 채널 중단: 채널의 모든 I/O를 중지하기 위해 채널이 언제든지 중단될 수 있습니다. 중단 시 채널은 오류가 발생한 상태로 전환되며 더 이상 전송 또는 수신을 허용하지 않습니다. 그러나 채널은 여전히 일부 '라이브' 보안 상태를 유지할 수 있으므로 모든 상태를 완전히 삭제하려면 후속 채널이 닫힙니다.
  • 채널 닫기: 열린 상태에서 만든 보안 상태가 삭제되고 세션이 중단됩니다. 보안 컨텍스트 토큰이 취소됩니다. 채널 스택은 유지되지만 '라이브' 보안 상태 또는 로드된 자격 증명을 포함하지 않습니다.
  • 채널 무료: 모든 보안 리소스와 함께 생성 시 빌드된 채널 스택이 해제됩니다.

보안 API

보안에 대한 API 설명서는 다음 topics 그룹화됩니다.

보안

WWSAPI 보안 API 사용하는 경우 애플리케이션은 다음과 같은 몇 가지 보안 위험에 직면합니다.

실수로 잘못된 구성

WWSAPI는 다양한 보안 관련 구성 옵션을 지원합니다. 예제 WS_SECURITY_BINDING_PROPERTY_ID 참조하세요. WS_SECURITY_BINDING_PROPERTY_ALLOW_ANONYMOUS_CLIENTS 같은 이러한 옵션 중 일부는 애플리케이션이 다양한 보안 바인딩에서 제공하는 기본 보안 수준을 낮출 수 있도록 합니다. 이러한 옵션의 사용은 신중하게 평가하여 결과 공격 벡터가 없는지 확인해야 합니다.

또한 위에서 설명한 대로 WWSAPI를 사용하면 애플리케이션에서 보안 자격 증명이 전송되더라도 암호화를 사용하지 않도록 설정하는 등 메시지 교환을 완전히 보호하는 데 필요한 특정 단계를 의도적으로 사용하지 않도록 설정할 수 있습니다. 특정 시나리오를 사용하도록 설정할 수 있으며 일반 통신에 사용하면 안 됩니다. 이 시나리오를 사용하도록 설정하려면 WS_PROTECTION_LEVEL 구체적으로 낮춰야 하며, 애플리케이션은 반드시 필요한 경우가 아니면 해당 값을 변경해서는 안 됩니다. 이렇게 하면 보안 구성을 보장하도록 설계된 많은 검사를 사용하지 않도록 설정됩니다.

메모리에 기밀 정보 저장

메모리에 저장된 암호와 같은 기밀 정보는 예를 들어 페이지 파일을 통해 권한 있는 공격자가 추출하는 것에 취약합니다. WWSAPI는 제공된 자격 증명의 복사본을 만들고 해당 복사를 암호화하여 원래 데이터를 보호하지 않습니다. 원래 instance 보호하는 것은 애플리케이션의 책임입니다. 또한 암호화된 복사본은 사용되는 동안 잠시 암호 해독되어 추출할 창을 엽니다.

서비스 거부

보안 처리는 상당한 리소스를 사용할 수 있습니다. 모든 추가 보안 바인딩은 이러한 비용을 증가합니다. WWSAPI는 보안 확인 오류가 발생하는 즉시 보안 처리를 중단하지만, 중요한 작업이 수행될 때까지 권한 부여 결정과 같은 특정 검사가 수행되지 않을 수 있습니다.

메시지가 서버에서 처리되는 동안 보안 상태는 메시지 힙에 저장됩니다. 애플리케이션은 WS_MESSAGE_PROPERTY_HEAP_PROPERTIES 통해 해당 힙의 크기를 줄여 보안 처리 중에 메모리 사용을 제한할 수 있습니다. 또한 WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING 같은 특정 보안 바인딩으로 인해 서버가 클라이언트를 대신하여 리소스를 할당할 수 있습니다. 이러한 리소스에 대한 제한은 다음 WS_SECURITY_BINDING_PROPERTY_ID 값을 통해 구성할 수 있습니다.

  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_MAX_PENDING_CONTEXTS
  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_MAX_ACTIVE_CONTEXTS
  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_RENEWAL_INTERVAL
  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_ROLLOVER_INTERVAL

이러한 제한을 낮은 값으로 설정하면 최대 메모리 사용량이 줄어들지만 할당량에 도달하면 합법적인 클라이언트가 거부될 수 있습니다.