减缓重复的密码攻击

信息安全 密码 蛮力
2021-09-06 18:03:34

我一直在阅读有关使用耗时公式从登录尝试中检查密码的建议,以便减缓重复攻击。

在检查密码的函数中睡一会儿就够了吗?

简化示例:

function check_password($user) {
  usleep(1000);
  return crypt($_POST["password"], $user->password) == $user->password;
}
2个回答

慢速散列旨在使离线攻击者的任务更加困难,他们可以获取散列密码数据库的副本。离线攻击者在他自己的机器上运行哈希函数。服务器上的延迟仅对在线攻击者有利,他们通过向诚实服务器发送请求来“尝试密码”。

在实践中,您需要两者:一些阻止在线攻击者的监管机制(例如延迟,但最好是更复杂一点的东西,以阻止在多个帐户上并行尝试多个密码的攻击者),以及作为第二个的慢散列(使用盐)防线,针对可以获取存储在服务器上的散列密码的只读视图的攻击者。

为了补充汤姆的出色答案,您可以使用在线服务执行的操作是添加攻击检测启发式。您可能会决定在 10 分钟内尝试 3 次失败的 paasword 将导致 10 分钟锁定,或向帐户持有人发送警告电子邮件。您可以标记来自两个以上 IP 地址或两个以上唯一会话的多个同时密码尝试。您可以对似乎过于喜欢尝试错误密码的人的 IP 地址进行 tar 处理。或者,您可能会想出自己的聪明新策略。

在线可以让您最大限度地减少服务的可用性,使其成为密码测试预言机。您可能想要实现的不仅仅是简单的延迟。