使用Web场环境中的共享缓存来检测WCF中的重放攻击

时间:2010-09-06 10:00:07

标签: wcf security wcf-security

我正在尝试弄清楚如何在Web场方案中使用WCF实现重放攻击检测机制。

WCF通过使用nonce缓存提供这种检测机制。如果我错了,请纠正我,但确保在邮件安全和Web场方案中防止此攻击的唯一方法是使用跨服务器共享的nonce缓存。

在WSE3.0中,过去可以提供nonce缓存自定义实现

http://msdn.microsoft.com/en-us/library/ff647945.aspx

但是在WCF中似乎没有任何方法可以这样做(没有配置选项,除了我在Reflector中发现NonceCache类被标记为密封和内部..)

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

首先,没有银子弹。每个选项都有其缺点。 Microsoft建议one of two options

  • 将消息模式安全性与有状态安全上下文令牌(启用或不启用安全对话)一起使用
  • 配置服务以使用传输级安全性

虽然使用传输级安全保护您的服务可以防止中间情况下的人员,但它不会保护您免受受感染的客户端的攻击。所以实际上它不是一个强大的解决方案,使用stateful security context tokens是两者中更好的方法。在开发和部署时,这需要考虑一些因素。

正如我在之前的回答中所述,没有银子弹。这是另一个选项(您可能已经考虑过),使用detectReplays,maxClockSkew,replayWindow和replayCacheSize设置。虽然我不确定它在WebFarm场景中的稳健性,但它应该可以在WCF的底层操作下工作。这是一个简短的article that demonstrates it。此选项的缺点是,如果您的maxClockSkew未设置为允许时区差异,那么当客户端与服务器位于不同时区时,您将收到失败。

答案 1 :(得分:0)

时间在流逝。...10年后...

WCF 4.5及更高版本,似乎有解决方案。他们添加了可扩展性点。但是实际上没有任何信息。官方文档在preventing-replay-attacks-when-a-wcf-service-is-hosted-in-a-web-farm中指出

为减轻这种情况,WCF 4.5提供了一个扩展点,使您可以通过从抽象类NonceCache派生一个类来实现自己的共享NONCE缓存

使用此NonceCache的类的源代码似乎是here

我仍在考虑实现此功能,但是由于互联网上完全没有关于此的信息,我想在这里做个说明,以防万一我再也没有回来。

为什么这是一个未被充分利用的功能?任何认真到足以在WCF中实施防重放攻击的人都将在负载均衡器后面拥有多台服务器。开箱即用的实现方式将无法正常工作,因为通常它将允许服务器的轮询在拒绝开始之前接受N个重放攻击。副作用是,这实际上会将服务器数量泄漏给攻击者。 我真的很困惑。每个人都在使用另一种防御吗?每个人都在发牢骚[发抖]吗?