Compartir a través de


Cómo: Habilitar la detección de repetición de mensajes

Un ataque de reproducción se produce cuando un atacante copia una secuencia de mensajes entre dos partes y reproduce la secuencia a una o más partes. A menos que se mitigue, los equipos sujetos al ataque procesarán el flujo como mensajes legítimos, generando un intervalo de consecuencias erróneas, como las órdenes redundantes de un elemento.

Para obtener más información sobre la detección de la reproducción de mensajes, vea Detección de la reproducción de mensajes.

El procedimiento siguiente muestra varias propiedades que puede usar para controlar la detección de reproducción mediante Windows Communication Foundation (WCF).

Para controlar la detección de reproducción en el cliente utilizando código

  1. Cree SecurityBindingElement para utilizar en CustomBinding. Para obtener más información, vea Cómo: Crear un enlace personalizado mediante SecurityBindingElement. En el siguiente ejemplo se utiliza SymmetricSecurityBindingElement creado con CreateKerberosBindingElement de la clase SecurityBindingElement.

  2. Utilizar la propiedad LocalClientSettings para devolver una referencia a la clase LocalClientSecuritySettings y establecer cualquiera de las propiedades siguientes, según corresponda:

    1. DetectReplay. Valor de tipo booleano . Esto rige si el cliente debería detectar las reproducciones del servidor. El valor predeterminado es true.

    2. MaxClockSkew. Un valor TimeSpan. Rige qué sesgo temporal puede tolerar el mecanismo de reproducción entre el cliente y el servidor. El mecanismo de seguridad examina la marca de tiempo enviada y determina si se fue enviada demasiado lejos en el pasado. El valor predeterminado es 5 minutos.

    3. ReplayWindow. Un valor TimeSpan. Esto rige cuánto tiempo un mensaje puede vivir en la red después de que el servidor lo envíe (a través de los intermediarios) antes de alcanzar el cliente. El cliente realiza el seguimiento de las firmas de los mensajes enviados dentro del ReplayWindow último para los propósitos de detección de reproducción.

    4. ReplayCacheSize. Valor de entero. El cliente almacena las firmas del mensaje en una memoria caché. Este valor especifica cuántas firmas que puede almacenar la memoria caché. Si el número de mensajes enviado dentro de la última ventana de reproducción alcanza el límite de la memoria caché, se rechazan los nuevos mensajes hasta que las firmas almacenadas en memoria caché más antiguas alcancen el límite horario. El valor predeterminado es 500000.

Para controlar la detección de reproducción en el servicio utilizando código

  1. Cree SecurityBindingElement para utilizar en CustomBinding.

  2. Utilice la propiedad LocalServiceSettings para devolver una referencia a la clase LocalServiceSecuritySettings y establezca las propiedades como descrito previamente.

Para controlar la detección de reproducción en configuración para el cliente o servicio

  1. Cree un objeto customBinding Element.

  2. Cree un elemento <security>.

  3. Cree localClientSettings element o localServiceSettings element.

  4. Establezca los siguientes valores de atributo según sea apropiado: detectReplays, maxClockSkew, replayWindow, y replayCacheSize. El ejemplo siguiente establece los atributos de <localServiceSettings><localClientSettings> y un elemento :

    <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>
    

Ejemplo

El ejemplo siguiente crea SymmetricSecurityBindingElement mediante el método CreateKerberosBindingElement y establece las propiedades de reproducción del enlace.

Private Function CreateSymetricBindingForClient() 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
private SecurityBindingElement CreateSymetricBindingForClient()
{
    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;
}

Ámbito de reproducción: Solo seguridad del mensaje

Observe que los procedimientos siguientes solo se aplican al modo de seguridad de los mensajes. Para Transporte y Transporte con modos de credencial de mensaje, los mecanismos de transporte detectan las reproducciones.

Notas de conversación seguras

Para los enlaces que habilitan las conversaciones seguras, puede ajustar estos valores tanto para la aplicación como para el enlace de arranque de conversación segura. Por ejemplo, se pueden desactivar las reproducciones para el canal de la aplicación pero habilitarlas para el canal de arranque que establece la conversación segura.

Si no utiliza las sesiones de conversación seguras, la detección de reproducción no garantiza la detección de reproducciones en escenarios de granja de servidores y cuando se recicla el proceso. Esto se aplica a los enlaces siguientes proporcionados por el sistema:

Compilar el código

Vea también

Referencia

LocalClientSecuritySettings
LocalServiceSecuritySettings

Conceptos

Conversaciones y sesiones seguras
Cómo: Crear un enlace personalizado mediante SecurityBindingElement

Otros recursos

localClientSettings element