如果客户机/服务器应用程序使用质询/响应模式进行身份验证,例如SCRAM或类似模式,则通常涉及使用非uses (客户端和服务器端)来防止重放攻击。
服务器将根据与客户端连接的安全随机生成的数字生成服务器名。假设服务器存储最近接收的客户端当前,并发出服务器名以保证“旧的”或“无效的”不被接受,这将打开攻击向量。
攻击者可能会对他猜测的userid发起猛烈的请求挑战,以便用新值覆盖有效和商定的客户机/服务器当前,而实际客户端不知道这些挑战。如果在实际客户端的挑战和响应之间发生这种情况,服务器将拒绝访问,因为现在的访问将不再有效。这可能是某种拒绝服务攻击。
如果服务器决定仅在整个成功执行挑战/响应的情况下才更新存储中的实际有效服务器/客户端,则需要拒绝对最近的挑战未作出响应的用户的质疑请求。这也会打开一个攻击窗口。攻击可以向(猜测的)用户请求挑战,以防止他们从一开始就请求挑战。
假设服务器将跟踪未使用的非list列表,这两种攻击都将被阻止,但这将为攻击者请求大量挑战打开另一个向量,从而导致服务器将所有这些非the存储在存储中。触发I/O加载,并可能再次导致DoS。
无论如何,我目前还不了解如何在服务器端安全地实现当前处理,以防止这些DoS攻击。目前,我有一种感觉,一个交易的保护,以防止重播攻击,有利于DoS。
我知道还有其他方法可以通过在防火墙上进行请求节流来防止这种情况,但是如果可能的话,我想在挑战/响应实现级别上解决这个问题。谢谢你的想法和答案。
发布于 2016-04-20 15:51:29
你提出的两个问题是:
一种常见的技术是限制时间。比如说,用M分钟来做一个合适的M。
对于第一个问题,通过限制时间,服务器可以与客户端维护多个身份验证会话,每个会话都跟踪自己的当前状态。这对服务器来说不是很大的资源消耗,因为这些会话在M分钟后会自动删除。
第二个问题是通过时间限制客户端的不确定来解决的。要使此操作正常,客户端必须包含时间戳。否则,当服务器清除过期的非used,从而“忘记”已使用的非its时,您将面临超时重放攻击。所以客户的现在应该是timestamp + secure random number。通过将时间戳包含在时间标记中,可以确保不可以在超时后使用该时间戳。
WHen决定了M的值,它需要足够大来处理服务器和客户端之间的网络通信时间和时钟差异。我需要足够小,以充分降低你的资源需求。如果在认证过程中不需要用户交互,则M值为1,甚至小于1可能是合适的。如果需要用户输入,则需要更大的M。
资源丰富的攻击者可能仍然能够对您执行DoS,因为仍然有一个M分钟的窗口来执行此操作。但是这是一个很小的窗口,需要大量的攻击者资源。也就是说,它将是一个DDoS而不是一个直接的DoS。幸存下来的DDoS攻击本身就是一个问题。
https://security.stackexchange.com/questions/121024
复制相似问题