与不安全的HTTP相比,此身份验证过程中的安全漏洞是什么?

时间:2017-02-02 10:46:54

标签: security authentication md5 sha256

这里的第一个问题:)

我一直在阅读很多关于如何在没有https的网站上安全登录的问题。它们都非常有趣,大多数答案归结为“如果您关心安全性,请使用SSL!”。我同意这一点,但我也想知道,这个特定程序的缺陷是什么(一个用户(=我),没有会话:密码总是与< html>标记的完整内容一起发送,替换该文件的当前内容。):

  • 服务器向页面发送两个变量:随机令牌A和B =派生自(A)。
  • 客户端发送回md5(密码+时间戳+ B)和A。
  • 服务器从A派生B以执行与客户端相同的md5hash并匹配服务器和客户端的哈希值。
  • 服务器允许每个IP地址每秒不超过1个请求。

假设攻击者知道A和B的所有有效对,除了重放攻击(在散列有效的100ms时间范围内)和他猜测正确哈希的纯粹运气之外,他/她是否有任何方式成功进行身份验证在这个特定的时间表?

当然,攻击者仍然可以尝试所有可能的密码,但使用https不会改变。

我并不是说这对于不能使用https的网站来说是一个有用的策略,只是想知道是否存在我没​​有想到的理论缺陷。

如果网站目前没有流量,您会如何强行进入?

2 个答案:

答案 0 :(得分:1)

这里有几个缺陷:

  • 你不应该使用md5。请使用其他一些散列算法(例如sha256)
  • 为了做你想说的话,服务器需要以明文形式存储密码。这是一种非常糟糕的做法,就好像你被黑客攻击一样,所有的密码都会受到损害。相反,您应该存储密码的盐渍哈希。更多信息:https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet
  • 此方法是不可行的,因为服务器无法知道时间戳,除非客户端和服务器的时钟同步到毫秒(不要假设它们将是)。即使时钟完全同步,这仍然不起作用。从客户端获取时间戳到数据包到达服务器的时间是可变的,服务器需要准确知道该时间。如果没有正确的时间戳,服务器将无法计算哈希值。删除时间戳将导致重播攻击。
  • 执行中间人攻击的攻击者可以动态更改HTML(或其他)代码并删除散列函数(假设它在JavaScript中执行)。然后,浏览器将以明文形式传输密码。当然,身份验证将失败,但攻击者将拥有密码。
  • 也可能存在其他缺陷,但这些足以让我认为该方法效率低下。

底线:使用HTTP进行用户身份验证。我还没有听说过任何基于HTTP的安全认证的情况。如果SSL非常昂贵,则只能将其用于登录页面。这仍然是一种非常糟糕的做法,因为攻击者可以通过窃取会话cookie(以及其他中间人攻击)来执行会话劫持,但至少密码不会以这种方式显示。

答案 1 :(得分:1)

您所描述的是较大的程序中的一个小技术细节,您根本不会详细介绍。我假设该程序的更大目的是登录?然后交换此令牌后会发生什么?用户是否收到某种类似cookie的永久令牌?那么这很容易受到:

  • 中间人攻击所有通信
  • 本地网络数据包嗅探,由Firesheep attack
  • 着名宣传

即使如果很大,如果)这个特殊的令牌方案完美无瑕,整个通信链都可以被第三方和所有私人数据观察到(包括未经授权的用户可以在特权网络位置(→session hijacking)清楚地读取识别cookie。