在谈论密码安全性时,很多讨论都集中在密码在暴力攻击中被猜到的风险上。对于用户注册了帐户的网站,暴力攻击的可能载体是什么?
直接在网站身份验证字段中输入用户名/密码对是一种方法,但通常会在尝试失败后超时或锁定来缓解。对被盗的散列密码数据库进行攻击是另一种方法,但假设数据库已被破坏。否则如何进行暴力密码攻击(假设我们谈论的是网站帐户,而不是 Unix 帐户、服务等)?
在谈论密码安全性时,很多讨论都集中在密码在暴力攻击中被猜到的风险上。对于用户注册了帐户的网站,暴力攻击的可能载体是什么?
直接在网站身份验证字段中输入用户名/密码对是一种方法,但通常会在尝试失败后超时或锁定来缓解。对被盗的散列密码数据库进行攻击是另一种方法,但假设数据库已被破坏。否则如何进行暴力密码攻击(假设我们谈论的是网站帐户,而不是 Unix 帐户、服务等)?
还能如何进行暴力密码攻击?
你已经涵盖了这两个基础,这就是它的真正意义。要么重复提交到任何可用的 Web 前端,要么设法通过破解数据库服务器、滥用 Web 软件来获取哈希的副本,你有什么。
Web 前端破解通常更多的是智能而不是蛮力,因此,它比你想象的要好。例如,给定一个网站,其中包含大约 100 人的公司目录(名字、名字和扩展名),我只需将一些算法猜测与该数据结合在一起,就能够“暴力破解”30% 的帐户。并且验证站点是 Microsoft Exchange,所以我保持在 NSA 建议锁定的阈值以下并且很好。(事实上,这是一个渗透测试,我在测试之前进行了验证,以确保我不会锁定用户,但很容易猜对)。即使猜的速度很慢,我在一天之内就完成了。
我看到相当一部分网站根据提供的凭据改变行为;提交一个不存在的用户名,与提交合法的用户名/密码对相比,您可能会收到唯一的错误消息或更快的 HTTP 响应。
一个想法-假设您成功窃取了登录用户的有效会话,并且密码更改功能需要您输入用户的现有密码-您可能能够成功地暴力破解密码更改表单而不会触发锁定或验证码来发现原始密码。
Gowenfawr 已经涵盖了用户枚举(如果我理解正确的话)。
大多数系统(如果不是全部),锁定策略适用于每个帐户。因此,应该可以遍历您认识的所有用户,尝试一定数量的密码,使您低于每个帐户的锁定阈值。一旦达到无效登录的宽限时间,您再试一次。
这不是也非常接近对用户密码的生日攻击吗?!
我读了一篇关于一个学生做了类似于网上银行的事情的文章。用户名是社保号,一般银行客户是30-40岁的男性。他为这个年龄组生成了随机的社会安全号码,并尝试了不同的密码(登录只有 4 位密码!)。我相信他每次尝试大约 2 万次都能够访问一个在线银行账户。
暴力破解成为热门讨论话题的原因主要是流行文化:不懂计算机如何工作的人相对容易理解,因此这类攻击有很多比喻和常见描述。它们的实际可行性更为有限。
话虽如此,自制软件系统通常以经过彻底分析的系统倾向于保护的方式易受攻击。例如,锁定的充分实施需要在每个用户和每个客户端的基础上收集和存储某些数据。没有经验的程序员不愿意或在政治上无法定义额外的 SQL 字段或表,从而忽略实施锁定策略的情况并不少见。一般的经验法则是,在没有适当安全分析的情况下设计的系统往往过分强调数据安全的可访问性方面,而低估了机密性方面,并且由于锁定对可访问性有直接影响,因此某些组织甚至可能不喜欢它网站。