但是大多数Web应用程序每秒无法处理100个以上的登录请求。
这意味着什么:该文章的作者提出了未经证实(但并非完全不合理)的主张,即每秒发送100个以上的登录将是对“大多数” Web应用程序的有效拒绝服务攻击。
对于每次登录,典型的Web应用程序都必须对密码进行哈希处理,并将其与数据库中的哈希表示形式进行比较。如果webapp使用良好的哈希函数,则确实会使用大量CPU。因此,这种说法可能并不完全不合理,但是以我的经验,大多数Web应用程序仅使用MD5,SHA1或SHA256之类的简单哈希,这些哈希并不占用大量CPU。
那篇文章的最大错误出现在这里:
注意:以下示例基于每秒100个密码请求。
在下几段中,作者基于每秒100次尝试的最大攻击率,提出密码强度建议。对于攻击者连接到实时Web应用程序的在线攻击而言,这可能是一个合理的数字。
但是对于离线攻击而言,攻击者首先通过fx SQL注入攻击下载了整个数据库,这是完全错误的。例如,这是SHA1的NVIDIA CUDA实现,在小型服务器群集上每秒可完成4700万次哈希处理。
Web应用程序仅需要能够防止每秒100次尝试?
抱歉,但是不对,您误会了这一部分。现在,你从Web应用程序所有者的角度看它试图保护针对在线强力密码猜测攻击。你应该采取的行动很长谈到这个之前。
- 如果单个帐户有一定数量的失败登录尝试(3,5,10,25可以都是合理的数目),则应暂时禁用该帐户。(或者更好的做法是,不要禁用该帐户,而要减慢登录尝试的速度,也就是限制/限制速率。)
- 如果您每秒在整个系统范围内遇到数百次失败的登录尝试,则您的日志记录/监视框架(Nagios等)应向您发出警报,以使您意识到攻击的发生。
最后,您可能想阅读本文附带的FAQ,它使作者的意思更加清楚。他谈论的是最终用户如何生成合理的安全且仍然容易记住的密码-而不是服务器端的密码处理。
在问题编辑后更新:
根据大多数Web服务器的当前平均性能,在暴力攻击期间最大可能的登录尝试次数是多少?
对于像SHA1这样的简单哈希,我想说一台四核服务器,假设使用良好的编程技术,就可以应付每秒10,000个请求的非常粗糙的状况。这将完全取决于所使用的webapp框架和编程,因为HTTP连接处理开销将超过SHA1计算速度。如果我们在Prefork模式下将Apache与fx PHP一起使用,那么这个数字将非常吸引人,每台服务器每秒可能有2,000个请求。
假设您有一个无法使用tar-pitting或禁用临时帐户的系统的要求
然后更改需求-无法修复。
基于Web的系统上每秒的实际登录尝试次数非常有用。
同样,您应该具有警报功能,可以在蛮力攻击发生很久之前就将其通知您。