没有对明文密码的长度施加任何最大值,这意味着攻击者可以简单地提交任意大且保证失败的密码,迫使运行 服务器执行由此产生的昂贵的哈希计算以尝试检查密码。
例如,在使用 PBKDF2 哈希器时,大小为 1 兆字节的密码将需要大约一分钟的计算时间来检查,“这允许通过重复提交大密码来进行拒绝服务攻击,从而在昂贵的相应哈希计算中占用服务器资源。”
场景一:如果用户名不存在,则不会计算密码哈希,因为用户名不存在。
场景二:如果用户名存在,则计算密码散列并与存储在数据库中的散列进行比较。如果比较的哈希值相同,则授予您访问系统的权限。如果没有,您将被拒绝。
场景 3 - 利用漏洞:
用户猜测如果用户名存在并且输入的密码例如是 1000000 A,那么当生成如此长密码的哈希以将其与存储在数据库中的哈希进行比较时,需要更长的时间并且增加时间测量. 因此,如果延迟增加,则用户名存在。
计算密码哈希(带盐的 MD5)的方式会导致在提供非常长的密码时影响 cpu 资源。
拒绝服务如果我们同时使用有效用户名和长密码执行多次登录尝试,则会导致服务器拒绝服务。我们在 Wordpress 7.32、Apache 和 MySQL 默认安装中观察到了两种不同的场景。根据登录尝试的次数和它们之间的时间,我们将有两种不同的情况:
-
DOS 攻击使整个服务器崩溃,因为达到了 RAM 和交换。也达到了CPU。
-
DOS 攻击使数据库崩溃。