普通密码是否存在特别的风险?

信息安全 密码 攻击 蛮力
2021-08-31 18:08:07

问题我们是否应该禁止使用“password”和“12345”等常见密码?on User Experience 立即让我觉得这些常用密码非常危险,不是因为它们很弱,而是因为它们很常见

令我沮丧的是,该论点的安全方面似乎集中在但如果你禁止它们,用户将使用其他弱密码,这是一个部分有效的论点,但实际上使用列表中最常见的密码之一,如25 Worst Passwords是显着的更多的风险仅仅是因为它们很常见,而不是实际需要brute force破解来猜测它们的时间,对吧?

假设攻击将在暴力破解之前集中在常见密码上是否现实?在 and 的世界中rate-limited password entriescaptchas您似乎只能猜出 1-3 次密码猜测所有 5 个字母组合是不可行的,但猜测“密码”、“123456”和“qwerty”似乎是一种有效的可能性。

4个回答

一些用户体验专家说拒绝密码不是一个好主意。论据之一是您提供的论据:“但如果您禁止他们,用户将使用其他弱密码”,或者他们会添加随机字符,如 1234 -> 12340,这是愚蠢的、无意义的,然后会迫使用户离开通过“丢失我的密码”过程,因为他不记得他添加了哪些字符。

你有两个选择。我都喜欢他们(我解释了每个人的原因):

  1. 让用户输入他想要的密码。这与您的问题背道而驰,但正如我所说,如果您强制您的用户输入另一个密码,而不是 25 个已知最差密码之一,这将导致 1:糟糕的用户体验,2:可能丢失的密码和整个“丢失了我的密码”工作流程。现在,您可以做的是向您的用户表明此密码很弱,或者甚至通过说它是最糟糕的密码之一(带有指向它们的链接)来添加更多详细信息,他们不应该使用它等等等。如果您详细说明这一点,您将倾向于您的用户将他们的密码修改为更复杂的密码,因为现在,他们知道风险. 对于将使用 1234 的人,让他们这样做,因为可能有一个简单的原因:我经常在一些请求我的登录/密码的网站中输入一个愚蠢的密码,只是为了看看这个网站为我提供了什么。

  2. 添加一些规则,例如“至少一个数字和一个特殊字符,必须至少为 8 长”等。这将违背最差密码。另一方面,如果用户有一个不符合您的规则的非常复杂的密码,则会导致糟糕的用户体验。

最后,您必须在良好的用户体验或改进的安全性之间做出选择。现在这真的取决于您正在构建哪种项目:如果它是一个上传小狗照片的基本网站,也许您不必设置复杂的安全系统。但如果你是下一个贝宝,你应该这样做。

关于您关于蛮力的问题,这取决于您如何设置密码存储。如果添加盐和胡椒,可以对数据库进行暴力破解。如果您在登录页面中添加验证码,或者增加尝试和错误之间的时间,那么暴力破解将是不可能的。

攻击者可能首先使用最差的密码,但我不确定它是否会非常有效。即使他选择了前 3 个(关于您的验证码和 1-3 次猜测的规则),这将大大降低入侵帐户的可能性。

您在这里缺少的是大多数密码攻击,其中复杂性是一个问题(即:不涉及社会工程的攻击),离线发生。这意味着攻击者已经拥有自己的密码数据库副本,并且能够在自己的系统上自由运行分析,而不必担心目标系统会将其锁定。验证码和帐户锁定策略对这些攻击无效。

字典攻击比暴力攻击快得多所以,是的,假设攻击者在诉诸暴力之前会针对“通用”密码是现实的。John The Ripper,也许是最著名的离线密码破解工具之一,甚至将其用作默认操作。所以,如果你的密码是“password”或者“12345678”,很有可能不到一分钟就被破解了。一个随机生成的(或至少不那么常见的)相同长度的密码可能需要相当长的时间。

这取决于您的应用程序的需求,并不是一刀切。如果最坏情况的妥协方案只影响最终用户并且对他们造成轻微的不便(并且对您没有不便),那么简单的教育警告(此密码非常弱)并允许他们创建弱密码可能就足够了。

如果您的应用程序需要像银行一样安全,或者您是保存客户信用卡详细信息的在线商家1(信用卡拒付意味着相当于盗窃+额外的银行费用),或者该帐户具有管理员权限,或... ,您应该尽最大努力防止帐户使用弱密码,当然不允许使用任何流行的密码。我会从一些在线资源(也包括标准英语词典)中创建一个包含数百万以上最受欢迎密码的排序数据库,并根据该密码检查密码是否通过了其他一些最低标准;例如,必须为 16+ 个字符或为 8+ 个字符且带有大写 + 小写 + 数字。

非常弱的密码(前 1000 个)可能会被僵尸网络随机在线攻击(即使您在多次错误尝试后使用验证码/延迟)。如果您的哈希数据库以某种方式受到损害,字典攻击会非常快速地脱机。

1注意:更好的解决方案可能是不保存信用卡详细信息,或者至少要求他们在尝试使用新 IP 地址时重新输入详细信息。

我确信攻击者会在开始暴力尝试之前先使用常用密码。即使 CAPTCHA(和其他检测/预防)设备到位,常见密码列表也比字典中的单词小得多。

我将采取不同的立场,并建议在大多数用例中禁止使用常用密码是有意义的。密码的强度与攻击者获得未经授权访问的难度有关。社区目前接受的密码质量是基于攻击者通过暴力破解、破解或其他方法获取访问权限的难度(即密码短语和助记符增加了路人记忆的难度)。 XKCD在这部漫画中非常准确地代表了这一点使用不同的大小写、符号等会增加密码的随机性,从而使攻击需要更长的时间才能成功执行,并且还会增加检测到尝试的可能性。

仔细观察攻击方法,前 25 个密码以及许多其他密码通常都出现在字典中。攻击者通常热衷于使用通用密码,并且通常会尝试首先遍历短名单。这类似于许多供应商提供具有众所周知的密码(即 cisco/cisco、admin/admin)的设备并且不强制更改众所周知的默认凭据的常见做法。从收益的角度来看,通常值得先尝试常用密码。攻击者可能不采用这种方法的唯一原因是攻击的目标是什么。在这种情况下,攻击者可能会更加谨慎,因为他/她不想抛出危险信号。

退后一步,我松散地使用“攻击者”一词。攻击者可以是机器人(或自动脚本)、脚本小子(不熟练或不熟练)或熟练的个人。许多安全论​​点在防止自动/非熟练攻击者和熟练攻击者之间混淆了基础。尽管用于检测和阻止自动/非熟练攻击者的技术通常遵循常识,但熟练的攻击者可能会了解传统的检测/预防策略并相应地调整他们的尝试。假设我指的是自动/非熟练攻击者,除非我限定了技能水平。

在尝试通过普通密码运行之后,如果有适当的预防或检测系统(即访问日志/审计日志、暴力检测),其他在线攻击方法(如暴力破解)将更难以成功启动。或者,离线攻击方法需要访问受保护的密码文件——如果攻击者可以访问凭证信息(无论是散列、加密还是以其他方式保护)。渗透测试人员(白帽)通常遵循使用已知帐户获得对系统的初始访问权限以更深入地访问网络的工作流程。无论如何,如果攻击者可以离线访问凭证存储,那么问题就不仅仅是密码了。

安全实践实际上涉及在可访问性方面进行权衡。不易访问的系统通常更安全比一个更容易访问的。UX/UI 人员将推销故事以使他们的生活更轻松(更易于访问的系统)。安全人员将不得不推销一个不太容易访问的系统。两者最终都必须确定一个 BU/发起人可以接受的立场。将前一点与大多数人指责的倾向(或者可能缺乏接受错误的意愿)以及最吱吱作响的轮子先上油的原则相结合。如果允许用户自由选择密码,并且攻击者获得未经授权的访问并造成严重破坏,“受害者”的第一反应将是“这是怎么发生的?” 手指开始到处指指点点,最后常常指向负责安全的人,问:“你为什么让我选择这个密码?” 一世' m 并不是说​​这很常见,但负责安全的个人最终要负责推行旨在保护用户(和品牌/雇主)的政策。我的观点是,有时让用户自己选择密码并不是一个好习惯。

再一次,价值访问取决于所提供信息的价值和用户的身份。