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