假设我是一名邪恶黑客™,我刚刚入侵了一个网站,窃取了他们所有的 bcrypt 密码,并为了好玩而破坏了他们的网站。但由于它是 bcrypt,我无法破解任何东西。

我觉得在这种情况下我会做的(作为邪恶黑客™)是在重置密码表单中植入后门,这样一旦用户输入“旧密码”,他们的密码就会被泄露,而无需我强制使用 bcrypt。

我是不是想太多了?在密码泄露后匆忙填写“重置密码”表格是不是一个习惯?如果我(作为用户)有一个很长的随机密码(但不一定是唯一的密码),而且我发现密码存储得很安全,那么在密码泄露后我还能继续使用同一个密码吗?

这个问题的灵感来自于

10

  • 2
    感谢您写出这篇文章,这样我就不必尝试解释黑客攻击后网站很难重新获得信任。


    – 

  • 1
    我有点夸张了;当然,如果你的密码只是password123456,无论你使用什么都会被破解。但好的 bcrypt 可以让很多密码超出普通暴力破解的范围。


    – 

  • 3
    如果攻击者可以在登录表单中设置后门,他们就可以无需密码访问您的帐户。


    – 


  • 8
    “从数据库获取散列密码”和“我可以修改网站代码”之间存在巨大差异。如果你可以修改网站,那么泄露密码就毫无意义了。这不再是问题所在,你的思想实验就失败了。


    – 

  • 1
    有没有哪个(大型)网站在被入侵后继续使用相同的密码哈希值,就像什么都没发生过一样?对我来说,这种情况听起来非常奇怪。我希望任何一个半能干的网站所有者在被入侵后立即删除(或至少禁用)所有哈希值,并让每个用户都重置密码——在这种情况下,唯一的选择是设置新密码或不再使用该网站。


    – 


最佳答案
3

密码泄露后我可以继续使用相同的密码吗?

不会。您下次登录尝试时,明文肯定会被泄露给受感染的系统,就像填写更改密码表单一样。

一些更可行的选择是

  • 停止使用该网站
  • 使用“我忘记了密码”方法设置新密码,这样您就永远不会发送旧密码。但您仍需将密码视为可能泄露的密码。

1这是关于平等的陈述,而不是关于漏洞的保证。某些登录方案(例如 Kerberos)可能会提供密码知识证明,而无需透露密码……这将消除登录和更改密码步骤的问题。但是,您是否已经证明 Kerberos 质询没有被 HTTP 基本身份验证秘密取代?


入侵后,浏览器集成的密码管理器可能会对您造成伤害。现在,旨在让您确信自己已连接到正确端点的自动填充功能却出卖了您,并发送了您不应该发送的信息。

1

  • 2
    实际上,这是一个很好的观点 – 忘记密码是避免输入旧密码的好方法。(并且,要清楚的是 – 我在发布帖子后才意识到“使用”旧密码是愚蠢的 – 我最初想象的是一个通过 cookie 让你永远保持登录状态的网站)。


    – 


在这种情况下,如果攻击者可以对登录表单进行后门攻击,他们就可以无需密码访问您的帐户。

而且,你怎么会知道该网站已经被安装后门了?

但如果您确实知道,您仍然不应该尝试更改您的密码:以防您在其他网站上也使用它。

首先,如果您在多个网站(包括被入侵的网站)上使用相同的密码,则不应在被入侵的网站上重置密码,直到管理员确认该网站是安全的。相反,您应该将其他网站上的密码更改为不同的密码,这样您就可以更好地控制问题。

如果网站有“忘记密码”选项,您可能可以使用它来更改密码,因为它从不发送旧密码,但您仍应将新密码视为可能被泄露(感谢 Ben Voigt 提出这个建议!)。

另外,一般来说,在密码泄露后,你不应该使用相同的密码,因为即使黑客只有哈希值,它们在这方面仍然有用。如果有人通过某种方式找到了你的纯文本密码,他们将能够将其哈希值与他们的哈希值进行比较,并找出你在哪里使用该密码(无论是从过去的泄漏中还是通过反复试验)。

也就是说,如果黑客可以更改网站的代码,那么黑客可能也能够访问您在该网站上的数据,因此更改网站上的密码对于保护您的数据毫无作用。

为了获得最佳安全性并避免其他网站上的帐户被访问,请始终为每个帐户使用不同的密码 – 这样,即使其中一个帐户攻破,问题也只局限于一个网站,您不必担心其他帐户可能被访问。

您还应避免将个人信息存储在网上,因为这些信息很可能会在某个时候被泄露。如果服务是文件托管,请避免存储法律文件、任何身份信息或其他个人信息。如果您要这样做,至少要确保您使用的服务会加密您的数据 – 这样即使黑客得到它,他们也无法读取它。我见过的许多文件托管服务已经这样做了(一个例子是 mega.nz)。但是,我仍然不建议在线存储任何类似的东西,即使它是加密的。