Facebook 存储旧密码是否会损害安全性?

信息安全 密码 Facebook
2021-08-10 22:50:54

Facebook 存储旧密码哈希(连同旧盐),因此如果您尝试使用以前的密码登录,Facebook 会告诉您您更新了密码(以及何时)。不错的用户体验。除了这个网站不是ux.stackexchange.com

那么,这会带来哪些安全威胁呢?

另请参阅此处此处有关 Facebook 存储旧密码的信息。

4个回答

其他答案看起来很合理,但我想添加一些可能性。

如果攻击者从其他违规行为中恢复了您的一个或多个密码,似乎将它们插入 Facebook 的 UI 可能会泄露至少几种类型的信息:

  • 您是否在多个服务上使用了密码。
  • 有了已知的泄露日期,他们还可以获得有关您更新密码所需时间的数据点。

如果对已恢复密码的模式匹配表明您的密码中可能存在迭代器或突变模式,那么攻击者似乎也可以尝试他们见过的一两个密码,以支持或反驳有关您的密码如何演变的论点时间。

我猜任何攻击者在他们可以在没有人注意的情况下尝试多少这样的测试方面都会受到一定的限制,但似乎这些方面的信息可以告知已知用户如何更改密码的启发式方法,改进有关不同更新模式的常见程度的统计数据,以及帮助完善最易受攻击的用户/帐户的优先级列表。

这些在个人层面上似乎是相当小的风险,但似乎(Martin Bos 关于在 LinkedIn 违规中破解哈希的帖子很有启发性)小的启发式改进变成了相当不错的杠杆,可以在大规模违规的同时恢复更多密码改进启发式/杠杆。

这也是由阻止您重复使用密码的系统完成的。例如,如果在 Windows 中,您需要每月更改密码并且要求不重复使用过去一年的密码,则密码文件将包含您当前的密码哈希 + 之前的 11 个密码。

如果密码散列落入坏人之手并被破解,如果有人在任何其他网站上使用了他们以前的密码,则会存在安全风险。用户可以合理地期望在他更改密码之后从数据库中删除密码。

TL;DR安全风险仅在数据库泄露的情况下才会增加,其中旧密码存储在较弱的工作因素上

另一件事是通过受害者计算机上的病毒直接盗取密码。确定密码曾经有效可能会有所帮助,然后尝试对此进行一些变体,但这只会产生有限的效果,因为这种攻击可能会需要在线蛮力,这可能会失败。


一个如此重要的网站应该已经使用了安全密码哈希,例如 BCrypt 已经使用了适当的 Salt & Pepper。

在这种情况下,如果散列被泄露,那么攻击者接下来将不得不暴力破解大量可能的密码,以便可以确定原始密码。如果密码具有适当的熵水平,这可能需要很长时间。但是,有些用户很懒惰,会使用简单的密码。那些将首先被破解。

有两种类型的蛮力需要考虑。

  1. 在线蛮力,通常不会让你走得太远。该站点的公共服务器应该只允许您在验证码出现之前的给定时间段内尝试有限数量的密码,从而严重限制可以尝试的可能密码数量。

    还应该有额外的安全层。例如,如果足够多的验证码授权尝试继续失败,那么他们应该锁定帐户或阻止该 IP。

    因此,这种类型的攻击可能没有额外的安全风险。

  2. 离线蛮力是当数据库被破坏并且哈希被盗时。在这种情况下,不仅最新的哈希值会泄漏,旧的哈希值也会泄漏,因为正如你所说,那些没有被删除。

    在这种情况下,也没有额外的安全风险,因为破解旧的哈希将毫无用处。

    一个例外是如果调整了工作因子。较旧的密码可能存储在较弱的 Work Factor 上,在这种情况下,攻击者会首先破解较旧的密码,并将其用作破解最新密码的潜在提示。

    一旦离线哈希被暴力破解,攻击者将使用该密码访问主站点的帐户,或尝试用户可能重复使用相同密码的其他站点(即电子邮件或网上银行)。(所以不要重复使用密码)

相关服务的风险增加最多可与

  • 允许用户长时间保持密码不变(对应于最早存储哈希的年龄)
  • 假设攻击次数高出与存储的哈希数相对应的因子。

关于其他服务,只有当其中一个旧密码对另一项服务仍然有效时,风险才会增加,无论如何您都不应该这样做。

但是,如果所述服务使旧密码对某些用途有效(例如,允许旧密码作为丢失密码过程中的身份验证),则风险会急剧增加。