wcf - 将 WCF 时钟偏差增加到一个多小时的实际安全后果

标签 wcf wcf-security

我编写了一个 WCF 服务,它返回有关人名、地址和电话号码的“半私有(private)”数据。半私有(private)的意思是有一个用户名和
访问数据的密码,并且数据在传输过程中是安全的。然而,
恕我直言,没有人会花费任何精力来尝试获取数据,因为它大部分都是可用的
无论如何,在公共(public)电话簿中等等。在某种程度上,安全性有点像安全“剧院”,用于勾选政府实体强加给我们的一些框。

服务的客户端是一个应用程序,分发给已注册的
“用户”在他们自己的 IT 设置中运行。我们无法控制 IT
的用户——事实上,如果我们放太多,他们经常告诉我们“去跳”
对他们的系统的要求。

我们遇到的一个问题是拥有系统时钟的众多用户
这是不准确的。这可能是由真正的慢/快时钟引起的,或者
很可能是时区或夏令时区错误(把他们的
机器比“真实”时间晚一个小时)。我们是 WCF 绑定(bind)的一个特性
使用的是他们依靠时间的概念来检测重放攻击等。

 <wsHttpBinding>
    <binding name="normalWsBinding" maxBufferPoolSize="524288" maxReceivedMessageSize="655360">
      <reliableSession enabled="false" />
      <security mode="Message">
        <message clientCredentialType="UserName" negotiateServiceCredential="false"
          algorithmSuite="Default" establishSecurityContext="false" />
      </security>
    </binding>
  </wsHttpBinding>

不准确的客户端时钟会导致引发安全异常并
不满意的用户。

除了建议用户更正他们的时钟之外,我们知道我们可以
增加安全绑定(bind)的时钟偏差。

http://www.danrigsby.com/blog/index.php/2008/08/26/changing-the-default-clock-skew-in-wcf/

我的问题是,真正的实际安全后果是什么?
增加偏斜说2小时?如果攻击者可以执行一些
一种重放攻击,为什么时钟会倾斜 5 分钟的窗口
一定比2小时更安全吗?我认为执行任何
使用“消息”安全模式进行攻击需要的不仅仅是
在代理上捕获一些数据并再次发送数据
“重播”通话?在像我这样有数据的情况下
只有用户“阅读”,确实存在任何安全后果
完全允许“重放”攻击?

最佳答案

默认情况下,您将通过 Internet 公开的任何 Web 服务都可以通过各种地理位置(即跨时区)访问,并且将检查时间戳以避免重放攻击,应使用世界时 (UTC) 来检查那些时间戳。

在这种情况下,Web 服务还应该规定任何提取数据的消费者也应该使用 UTC 来标记他们的请求。这当然会消除您的服务器和客户端之间的任何时区冲突。

至于服务器和客户端之间的时钟偏差。您的服务器是否与常见的互联网时间服务器同步?如果是这样,您还可以在 Web 服务 API 中指定任何消费者还必须将其系统时钟与同一时间服务器同步,以提高服务质量和服务连接的可靠性。

不幸的是,您无法控制客户系统上的时钟!通过扩大服务器上的时钟偏差来尝试解决客户端的连接问题会降低系统的完整性,并且应该不惜一切代价避免,即使系统返回的数据只是半敏感的。如果所使用的数据对消费者来说足够重要,他们将很乐意遵守任何可以提高服务质量和对他们想要的数据的可访问性的更改。

关于wcf - 将 WCF 时钟偏差增加到一个多小时的实际安全后果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2040119/

相关文章:

WPF + 任务 + WCF = 没有 SynchronizationContext?

wpf - 使用 protobuf-net RuntimeTypeModel 和使用 WPF 客户端预编译时出现的问题

c# - System.ServiceModel.AddressAccessDeniedException:HTTP 无法注册 URL http::8080

wcf - 使用支持流的 basicHttpBinding 保护 WCF 服务

wcf - 自承载 WCF SSL

C# - JObject.Parse - 无效的 JSON

c# - Java 客户端的 WCF 服务

WCF HTTPS 自托管服务不起作用 ("connection to the server was reset")

javascript - 如何通过 AJAX 调用触发浏览器的基本身份验证对话框?

ajax - 如何在使用 AJAX 调用 WCF 服务时对用户进行身份验证?