如何:启用消息重播检测
当攻击者复制双方之间的消息流并将该消息流向一方或多方重播时,将发生重播攻击。除非攻击程度降低,否则受到攻击的计算机会将该流处理为合法消息,从而导致产生大量不良结果,例如某项的冗余排序。
有关消息重播检测的更多信息,请参见消息重播检测(可能为英文网页)。
下面的过程演示在用 Windows Communication Foundation (WCF) 控制重播检测时所使用的各种属性。
使用代码在客户端上控制重播检测
创建要在 CustomBinding 中使用的 SecurityBindingElement。有关更多信息,请参见 如何:使用 SecurityBindingElement 创建自定义绑定.下面的示例使用通过 SecurityBindingElement 类的 CreateKerberosBindingElement 创建的 SymmetricSecurityBindingElement。
使用 LocalClientSettings 属性返回对 LocalClientSecuritySettings 类的引用,并根据需要设置任何下列属性:
DetectReplay.一个布尔值。该值控制客户端是否应当检测来自服务器的重播。默认值为 true。
MaxClockSkew.TimeSpan 值。控制重播机制在客户端和服务器之间可以容忍多大程度的时间偏差。该安全机制检查发送的时间戳,并确定在过去它是否返回过快。默认值为 5 分钟。
ReplayWindow.TimeSpan 值。该值控制某消息在由服务器(通过中间方)发送之后、到达客户端之前在网络中存留的时间。客户端跟踪在最后一个 ReplayWindow 中发送的消息的签名,以进行重播检测。
ReplayCacheSize.一个整数值。客户端在缓存中存储消息的签名。此设置指定缓存中可以存储的签名数目。如果最后一个重播窗口中发送的消息数达到缓存限制,则拒绝新消息,直到最旧的缓存签名达到时间限制为止。默认值为 500000。
使用代码在服务上控制重播检测
创建要在 CustomBinding 中使用的 SecurityBindingElement。
使用 LocalServiceSettings 属性返回对 LocalServiceSecuritySettings 类的引用,并按照上面所述设置这些属性。
在客户端或服务的配置中控制重播检测
创建 <security> 元素。
创建 localClientSettings element或 localServiceSettings element。
根据需要,设置下列属性值:detectReplays、maxClockSkew、replayWindow 和 replayCacheSize。下面的示例设置 <localServiceSettings><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>
示例
下面的示例使用 CreateKerberosBindingElement 方法创建 SymmetricSecurityBindingElement,并设置绑定的重播属性。
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;
}
重播范围:仅限消息安全
请注意,下面的过程仅适用于“消息安全”模式。对于“传输”和“使用消息凭据传输”模式,传输机制将检测重播。
安全对话说明
对于启用安全对话的绑定,可以针对应用程序通道和安全对话引导绑定来调整这些设置。例如,可以对应用程序通道关闭重播,但是对建立安全对话的引导通道启用重播。
如果不使用安全对话会话,则重播检测不保证在服务器场方案中和回收进程时检测重播。这适用于系统提供的下列绑定:
EstablishSecurityContext 属性设置为 false 的 WSHttpBinding。
编译代码
编译该代码需要以下命名空间:
另请参见
参考
LocalClientSecuritySettings
LocalServiceSecuritySettings
概念
安全对话和安全会话
如何:使用 SecurityBindingElement 创建自定义绑定