我一直在阅读有关安全性的一些文献,特别是密码安全性/加密,而且我一直想知道一件事:三击规则是密码安全性的完美解决方案吗?也就是说,如果将密码尝试的次数限制为一小部分,之后将不接受所有身份验证请求,那是否不能保护用户免受入侵?我意识到获得对某些内容的访问权或控制权并不总是意味着要通过身份验证系统,但是此功能是否会使字典/蛮力攻击过时?有什么我想念的吗?
我一直在阅读有关安全性的一些文献,特别是密码安全性/加密,而且我一直想知道一件事:三击规则是密码安全性的完美解决方案吗?也就是说,如果将密码尝试的次数限制为一小部分,之后将不接受所有身份验证请求,那是否不能保护用户免受入侵?我意识到获得对某些内容的访问权或控制权并不总是意味着要通过身份验证系统,但是此功能是否会使字典/蛮力攻击过时?有什么我想念的吗?
Answers:
是的,它将使登录机制无法进行字典攻击。(不过,如果他们获得对数据库的访问权限并不重要。为了安全起见,您需要适当地对密码进行哈希处理和加盐处理。)
它还允许针对特定用户的DOS攻击。假设我想阻止您登录。我要做的就是对您的帐户进行3次伪造的登录尝试,然后在每次您进行必要的操作以重置登录名时再次进行。处理该问题比较棘手。
我也同意,它会使字典攻击作为在没有适当权限的情况下获得帐户访问权限的方式无效。然而:
如果实施不当,这种方法可能会将字典攻击变成针对系统的DOS攻击,从而阻止访问。例如,服务器可能充斥着身份验证尝试。解决此问题的一种方法是让身份验证服务控制对锁定帐户的后续访问的流程。例如,如果一个帐户被锁定,请在每次后续登录尝试之前提出一个延迟。但是,可能会在尝试登录和“拒绝访问”之间设置延迟,这为分布式拒绝服务攻击打开了大门,在此攻击中,攻击者会发起许多同时进行的身份验证尝试。
正如在另一个答案中提到的那样,这也可能使字典攻击变成针对被攻击帐户的合法所有者的原始DOS。减轻对合法所有者的影响的方法包括:
如果您担心无意中将健忘的用户视为攻击者,那么可以使用登录尝试的频率作为帐户受到攻击的证据,而不是控制一定次数的失败尝试后失败的登录尝试的流量。例如,如果在一秒钟内看到10次身份验证尝试,则可以使用上述方法之一来防止进一步的相似身份验证尝试。或者,您可以使用这种大量的登录尝试作为开始控制流的信号。这种方法在论坛上越来越流行,而在从特定IP进行一定数量的失败登录尝试之后,该IP在短时间内无法进行身份验证。
最后,防止用户反复受到DOS攻击的一种好方法是允许用户重置其密码和用户名。换句话说,将用户名和密码都视为秘密。如果用户名在其他地方使用(例如,在论坛中,如果用户名是用户的显示名称),则只需将此显示名称视为单独的名称即可。这种方法通常用于社交网络,其中身份验证中使用的用户名是一个人的电子邮件地址(可以更改,但很少共享),而网站上使用的显示名是用户定义的,可能会也可能不会被改变。
无论如何,我希望将这些方法中的一种或几种组合派上用场。