如何确保真实世界的负载平衡WCF服务免受重播攻击

问题描述

在创建新的WCF服务端点以提高Web服务安全性的同时,我开始研究如何防止重放攻击。乍一看,这很容易,WCF具有打开的“ DetectReplays”标志,所有内容均已排序。但是,即使对使用的机制有一个简短的了解(在内存随机数缓存和重复拒绝中),也表明这不是实际的实现。坦率地说,他们根本无法实施它。在此级别上足够担心安全性的任何人都将在其Web场中运行多个服务器,因此,此机制将允许N次攻击,其中N是您拥有的服务器数量。因此,无需进行任何扩展即可应对流量激增,并可能使服务器不堪重负。更不用说重复创建调用会造成的混乱。

我们可以打开粘性会话...但不要那样做,因为那是完全不同的问题。

进一步的调查表明,Microsoft自己也认识到此问题: https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/preventing-replay-attacks-when-a-wcf-service-is-hosted-in-a-web-farm 即使按照Microsoft的标准,这也很简洁,而且毫无用处。他们确认了问题,指出存在解决方案,然后仅提供有关如何实施的最基本提示

Google搜索显示没有人写过任何有关如何使用它的内容。搜寻源代码表明他们在内部使用此机制和内存实现来提供功能。它在SecurityProtocolFactory中使用此属性,如果未提供任何内容,则将NonceCache设置为内存中版本。 但是,如何在WCF中设置和使用SecurityProtocolFactory?

我知道许多人会做出我不应该担心重播攻击的反应,因为传输安全性将解决这一问题。但是,这不再是正确的。令人惊讶的是,对TLS 1.3版本的一些优化似乎已悄然删除了此功能。参见https://blog.cloudflare.com/introducing-0-rtt/

问题是:

  1. 我是否在考虑这个问题,这真的有问题吗?
  2. 有人真的可以使用Microsoft实现吗?如果是这样,如何!?
  3. 其他人在做什么?每个人都只是忽略了这个问题,没有意识到TLS 1.3问题吗?

我尝试在localclientsecurity设置上设置NonceCache变量,但没有任何影响。

var sbe = (SymmetricSecurityBindingElement) bec.Find<SecurityBindingElement>();

         if (sbe != null)
         {
            // Get the LocalSecuritySettings from the binding element.
            LocalClientSecuritySettings lc = sbe.LocalClientSettings;
            lc.DetectReplays = true;
            lc.NonceCache = new MyNonceCache();
         }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...