问题
我经常与我的 CTO 进行辩论,辩论通常是这样的......
CTO: My password expired, that should never happen.
Me : It's a security risk to never expire passwords.
CTO: It's a security risk to force passwords to be reset because users have bad habits.
Me : Yes but the security is in the user not the system, enforcing password expiry ensures the system is secure in the event of an unknown breach of the userbase.
这就引出了一个有趣的问题,我们两人主要都不是系统管理员,但作为需要为此应用政策的职位,我们对于正确答案应该是什么并不一致。
我的立场
如果强制所有用户在 X 时间内更改密码,系统会更加安全,其中 X 是通过确定用于保护密码的算法强度以及将原始值(使用暴力)破解回原始密码的预计时间来计算的。
CTO 的地位
强迫用户经常更改密码的行为会导致随着时间的推移形成模式/****123“类似”模式,或者用户写下密码,这意味着用户的“坏习惯”对系统的风险比数据以更技术的方式(例如通过暴力破解)被泄露更大。
所以我想知道
有什么方法可以证明我们是否应该根据某些行业最佳实践来执行密码重置策略?
或者
我们之中有人完全错了吗?
答案1
你的 CTO 更正确,但这是一个更复杂的问题。NIST (https://csrc.nist.gov/)或许是“行业最佳实践”的参考。
当谈到密码长度时,而不是复杂性或频繁更改,才是关键。(https://nakedsecurity.sophos.com/2016/08/18/nists-new-password-rules-what-you-need-to-know/) 他们建议使用短语或句子,而不是单个单词。
在存储密码之前先描述哈希值,这在逻辑上比纯文本更好。问题是多 GPU 系统每秒可以计算和检查数十到数百个哈希值。
下面的链接讨论了这些变化。我建议在对密码进行哈希处理之前特别注意对密码进行加盐处理。
https://nakedsecurity.sophos.com/2016/08/18/nists-new-password-rules-what-you-need-to-know/
https://www.passwordping.com/surprising-new-password-guidelines-nist/
答案2
是的,如果您不强制密码过期,则会增加安全风险。
正如您的 CTO 所说,由于我们有坏习惯,密码最终会以某种方式泄露,例如在用户输入字段中输入密码,在某些应用程序配置文件中将其保持未加密状态等。
强制用户更改密码可以加强可用性方面的安全性,15 天后过期的密码泄露将迫使攻击者在接下来的 2 周内利用它,而永久密码将为外部危险敞开大门。
如果您也从攻击者的角度来看待这一点,那么当您知道自己可能在窃取数据数周后嗅探到密码,却发现该过程进行到一半时所有密码都已更改,您必须重新开始,这将是相当令人畏惧的。
有时,让系统更难被破解的最佳方法不是使其更加健壮,而是让人们知道他们会浪费时间,从而完全避免造成伤害。
在我看来,你有一个懒惰的 CTO,他不想起新密码。
答案3
和往常一样,这并不容易。
目前(最初提出问题时的情况可能有所不同)暴力破解“坏”密码(例如,通过一些常见的替换规则使单个字典单词变得“安全”)所需的时间比您考虑的密码过期时间跨度要短得多,至少如果密码哈希数据库可用的话。
另一方面,除非攻击者拥有大量资金,否则破解“好”密码(如 16 个真正的随机字母数字字符)在几年内仍然是不可能的。如果你面对的是大玩家,标准密码可能不适合你。
许多其他问题,例如前面提到的“不良用户习惯”也同样适用。
另一件需要考虑的事情是,密码过期也会导致生产力下降和 IT 支持的额外成本/工作。
因此,在我看来,如今比干预密码过期更好的选择可能是投资密码保险箱硬件、基于生物识别/智能卡或其他双因素身份验证方法......
但是,通常如果不聘请对您的要求、风险和可能性进行非常详细的分析的人,您将无法获得最终答案。
答案4
你错了,你的 CTO 是对的。
强制更改密码会激怒用户,从而逃避安全保护。这会导致明显的安全漏洞,例如:
- 显示器上贴有便签,上面写有密码。
- 密码后缀为计数器(例如,密码 1 变成密码 2 - 如果您可以检测到这一点,那么您就会遇到真正的大问题,因为您以纯文本形式存储密码。)
请注意,此处的选项 2) 直接反驳了您关于未知安全漏洞的安全论点。如果攻击者发现您的密码是“password124”,他就会尝试“password125”。以及任何其他常见的变异。
有关良好密码管理的更多详细信息,另请参阅指导方针美国政府等实体:
验证者不应要求随意更改记忆的秘密(例如定期更改)。但是,如果有证据表明验证者受到损害,则验证者应强制更改。
用非技术术语来说,这意味着 Expiration == 不好,但如果您有合理理由相信用户的密码已泄露,则可以根据具体情况执行。或者,如果您的整个用户表都泄露了,则全局执行。
也可以看看这个问题在 Security.se 上。