Procedimiento para 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 reproducción de mensajes, consulte Detección de reproducción de mensajes.
El siguiente procedimiento 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
Cree SecurityBindingElement para utilizar en CustomBinding. Para obtener más información, consulte: Procedimiento para crear un enlace personalizado mediante SecurityBindingElement. En el siguiente ejemplo se utiliza SymmetricSecurityBindingElement creado con CreateKerberosBindingElement de la clase SecurityBindingElement.
Utilizar la propiedad LocalClientSettings para devolver una referencia a la clase LocalClientSecuritySettings y establecer cualquiera de las propiedades siguientes, según corresponda:
DetectReplay
. Valor booleano. Esto rige si el cliente debería detectar las reproducciones del servidor. El valor predeterminado estrue
.MaxClockSkew
. 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.ReplayWindow
. ValorTimeSpan
. 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 delReplayWindow
último para los propósitos de detección de reproducción.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
Cree SecurityBindingElement para utilizar en CustomBinding.
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
Cree un <customBinding>.
Cree un elemento
<security>
.Cree un <localClientSettings> o <localServiceSettings>.
Establezca los siguientes valores de atributo según sea apropiado:
detectReplays
,maxClockSkew
,replayWindow
, yreplayCacheSize
. El ejemplo siguiente establece los atributos de<localServiceSettings>
:<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 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
Á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:
WSHttpBinding con la propiedad EstablishSecurityContext establecida en
false
.
Compilar el código
Los espacios de nombres siguientes son necesarios para compilar el código: