问题描述
在创建新的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/
问题是:
- 我是否在考虑这个问题,这真的有问题吗?
- 有人真的可以使用Microsoft实现吗?如果是这样,如何!?
- 其他人在做什么?每个人都只是忽略了这个问题,没有意识到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 (将#修改为@)