是否有任何理由显示无效用户名作为密码的相同消息?

信息安全 应用安全 验证 密码管理
2021-09-01 23:19:53

我看到了一个安全问题/要求,即网站登录返回的无效密码错误消息与不存在的用户相同。这个想法是,它不可能通过扫描错误消息来发现有效的用户名。

如果可以自行注册,这有什么不同吗?您不能允许两次使用相同的用户名进行注册,因此攻击者可以尝试使用用户名进行注册,直到找到有效的用户名。

谢谢

4个回答

如果至少有一种方法可以发现站点上可用的用户名,则意味着您可以尝试对这些特定帐户进行暴力破解/字典攻击/社交工程。在您描述的情况下,尝试在登录页面上隐藏错误原因不会产生任何明显的安全差异,因为否则发现真正的原因是微不足道的。

根据对您来说更重要的事情,您可以使您的登录过程对用户(和攻击者)更加友好,或者尝试保护您的注册(或任何其他)过程,这可能会揭示您的系统上存在哪些帐户。

在防御与典型 Web 应用程序的身份验证过程相关的此类情况时,您通常应考虑以下路线:

  • 注册/注册- 这可以揭示哪些帐户可用,并允许使用虚假/陈旧帐户、域名抢注等充斥您的系统。验证码通常可以提供良好的保护以及超时,但不会阻止手动、较慢的攻击. 我还建议不要提供有关用户名可用性或注册过程成功的提示。您可以说“感谢您的注册。我们会尽快发送一封确认电子邮件以确认帐户”(或类似的话)
  • 登录页面——这是显而易见的一点,大多数应用程序已经有了相当标准的保护,包括不泄露错误的良好做法等。减慢登录过程或监控滥用也有帮助。登录失败的锁定也是一种可能性,但您更容易受到拒绝服务攻击。
  • 忘记密码- 在考虑信息泄漏时,这通常被忽略。当有人将他们的电子邮件/用户名放在忘记密码字段中时,无论电子邮件/帐户是否已知,您都应该回复相同的消息。请注意,这可能会产生支持问题(“我输入了我的电子邮件,您的系统说它正在向我发送重置电子邮件,但我没有收到任何东西......”
  • 帐户详细信息/电子邮件更改- 许多应用程序允许您更改您的电子邮件地址甚至帐户名称。这也可能会泄露给定帐户或电子邮件地址是否已经存在。同样的规则在这里适用。

不,您在注册过程中别无选择,因为用户名必须是唯一的。但是,为了减轻您描述的攻击,您的系统应该在尝试之间强制延迟。例如,人类可能不会注意到 15 秒的延迟(因为选择新用户名需要更长的时间),但攻击者被限制为每分钟 4 次猜测。

在相关的说明中,有一个关于网站的都市传说,要求其使用具有唯一的密码和唯一的用户名。不用说,这并没有增强安全性。:-)

除了 Yoav 已经提到的非常好的几点:IMO 在注册期间完全防止信息收集的唯一方法是使用电子邮件地址作为用户名。通过这种方式,您可以向用于注册的地址发送电子邮件,而无需直接在网站上提供任何反馈。电子邮件的内容可能如下所示:

  • “a@bc [用户名 xy] 的帐户刚刚在 $site 注册。单击此处确认。”
  • “有人试图在 $site 为 a@bc [用户名 xy] 注册一个帐户,但是该帐户已经存在。如果您忘记了密码,请单击此处。如果您没有启动注册,请忽略此电子邮件。”

这样,只有电子邮件地址的所有者才能检查该地址的帐户是否已经创建。

正如 Yoav 所提到的,密码重置功能大部分时间都没有针对信息收集进行强化。我们刚刚分析了流行的云存储提供商的安全性,它们都至少可以通过密码重置功能收集信息。

是的,它确实有所作为。我可以扫描站点测试名称,直到找到一个有效的名称,然后用蛮力密码尝试敲击它。不知道有效的用户名意味着我必须猜测任何用户名都可能是有效的,这增加了我的不确定性并增加了测试用例的数量。

如果我知道我想暴力破解哪个帐户,那么不,消息没有区别并不重要。