다음을 통해 공유


방법: 메시지 재생을 검색하도록 설정

공격자가 두 당사자 간에 메시지 스트림을 복사하고 하나 이상의 당사자에게 스트림을 재생하는 경우 리플레이 공격이 발생합니다. 완화되지 않은 경우 공격을 받기 쉬운 컴퓨터는 스트림을 올바른 메시지로 처리하여 항목에 대한 중복 주문과 같은 잘못된 결과의 범위에 있게 됩니다.

메시지 재생 검색에 대한 자세한 내용은 메시지 재생 검색를 참조하세요.

다음 프로시저에서는 WCF(Windows Communication Foundation)를 사용하여 재생 검색을 제어하는 데 사용할 수 있는 다양한 속성을 보여 줍니다.

코드를 사용하여 클라이언트에서 재생 검색을 제어하려면

  1. SecurityBindingElement에서 사용할 CustomBinding를 만듭니다. 자세한 내용은 방법: SecurityBindingElement를 사용하여 사용자 지정 바인딩 만들기를 참조하세요. 다음 예제에서는 SymmetricSecurityBindingElement 클래스의 CreateKerberosBindingElement를 사용하여 만든 SecurityBindingElement를 사용합니다.

  2. LocalClientSettings 속성을 사용하여 LocalClientSecuritySettings 클래스에 대한 참조를 반환하고 다음 속성을 적절히 설정합니다.

    1. DetectReplay. 부울 값입니다. 이 값은 클라이언트가 서버로부터 재생을 검색해야 하는지 여부를 제어합니다. 기본값은 true입니다.

    2. MaxClockSkew. TimeSpan 값입니다. 재생 메커니즘이 클라이언트와 서버 간에 허용하는 오차 횟수를 제어합니다. 보안 메커니즘은 보낸 타임스탬프를 검사하고 보낸 시간이 아주 오래되었는지 여부를 확인합니다. 기본값은 5분입니다.

    3. ReplayWindow. TimeSpan 값입니다. 이 값은 매개자를 통해 서버에서 메시지를 보낸 후 클라이언트에 도달하기까지 메시지가 네트워크에 있을 수 있는 시간을 제어합니다. 클라이언트는 재생 검색을 위해 최신 ReplayWindow 내에서 보낸 메시지 서명을 추적합니다.

    4. ReplayCacheSize. 정수 값입니다. 클라이언트는 캐시에 메시지 서명을 저장합니다. 이 설정은 캐시에서 저장할 수 있는 서명 수를 지정합니다. 최신 재생 창 내에서 보낸 메시지 수가 캐시 한계에 도달하면 가장 오래 전에 캐시된 서명이 시간 제한에 도달할 때까지 새 메시지가 거부됩니다. 기본값은 500000입니다.

코드를 사용하여 서비스에서 재생 검색을 제어하려면

  1. SecurityBindingElement에서 사용할 CustomBinding를 만듭니다.

  2. LocalServiceSettings 속성을 사용하여 LocalServiceSecuritySettings 클래스에 대한 참조를 반환하고 앞에서 설명한 대로 속성을 설정합니다.

클라이언트나 서비스에 대한 구성에서 재생 검색을 제어하려면

  1. <customBinding>을 만듭니다.

  2. <security> 요소를 만듭니다.

  3. <localClientSettings> 또는 <localServiceSettings>를 만듭니다.

  4. detectReplays, maxClockSkew, replayWindowreplayCacheSize 특성 값을 적절히 설정합니다. 다음 예제에서는 <localServiceSettings><localClientSettings> 및<localClientSettings> 요소 모두의 특성을 설정합니다.

    <customBinding>  
      <binding name="NewBinding0">  
       <textMessageEncoding />  
        <security>  
         <localClientSettings
          replayCacheSize="800000"
          maxClockSkew="00:03:00"  
          replayWindow="00:03:00" />  
         <localServiceSettings
          replayCacheSize="800000"
          maxClockSkew="00:03:00"  
          replayWindow="00:03:00" />  
        <secureConversationBootstrap />  
       </security>  
      <httpTransport />  
     </binding>  
    </customBinding>  
    

예시

다음 예제에서는 SymmetricSecurityBindingElement 메서드를 사용하여 CreateKerberosBindingElement를 만들고 바인딩의 재생 속성을 설정합니다.

private SecurityBindingElement CreateSymmetricBindingForClient()
{
    SymmetricSecurityBindingElement b = SecurityBindingElement.CreateKerberosBindingElement();
    b.LocalClientSettings.DetectReplays = true;
    b.LocalClientSettings.MaxClockSkew = new TimeSpan(0, 3, 0);
    b.LocalClientSettings.ReplayWindow = new TimeSpan(0, 2, 0);
    b.LocalClientSettings.ReplayCacheSize = 10000;
    return b;
}
Private Function CreateSymmetricBindingForClient() As SecurityBindingElement
    Dim b = SecurityBindingElement.CreateKerberosBindingElement()
    With b.LocalClientSettings
        .DetectReplays = True
        .MaxClockSkew = New TimeSpan(0, 3, 0)
        .ReplayWindow = New TimeSpan(0, 2, 0)
        .ReplayCacheSize = 10000
    End With
    Return b
End Function

재생 범위: 메시지 보안만

다음 프로시저는 메시지 보안 모드에만 적용됩니다. 전송 모드 및 메시지 자격 증명을 사용한 전송 모드에서 전송 메커니즘은 재생을 검색합니다.

보안 대화 참고 사항

보안 대화를 사용하는 바인딩에서 보안 대화 부트스트랩 바인딩뿐만 아니라 애플리케이션 채널에 대해 이러한 설정을 조정할 수 있습니다. 예를 들면 애플리케이션 채널에 대해 재생을 해제할 수 있지만 보안 대화를 설정하는 부트스트랩 채널에 대해서는 재생을 사용하도록 설정할 수 있습니다.

보안 대화 세션을 사용하지 않는 경우에는 서버 팜 시나리오에서, 그리고 프로세스가 재활용되는 경우 재생 검색이 작동하지 않을 수도 있습니다. 이 내용은 다음과 같은 시스템 제공 바인딩에 적용됩니다.

코드 컴파일

참고 항목