您的位置: 首页 > 软件开发专栏 > 网络/安全 > 正文

如何逃离弱密码黑洞?

发表于:2020-04-14 作者:安全牛 来源:安全牛

全球远程办公大潮中,一些企业安全的脆弱性问题被放大,全球数据泄露事件的频率和规模以肉眼可见的速度逐年递增,如果说身份与访问管理是数据安全的“重灾区”,那么“弱密码”则无疑是“震中”。

据安全牛CSO社区的一些央企安全主管反映,密码相关的安全加固措施是疫情期间最重要的安全工作之一。

根据Verizon的《数据违规调查报告》,有81%与黑客相关的违规行为都利用了被盗密码或弱密码,只需一名员工的弱密码就可以撬开重兵把守、重金打造的企业网络安全防御体系。

事实上,虽然零信任、多因素认证是当下的企业网络安全的热点话题,但是冥顽不化的弱密码问题,依然是企业网络安全最大的软肋之一,Centrify最近的一项调查显示,受访的1000名IT决策者中,74%的入侵事件涉及特权账户访问。而今年RSAC2020的现场调查数据显示:

  • 接近四分之一的受访者(23%)使用相同的工作和个人账户密码,违反了行业最佳实践
  • 超过五分之一的受访者(21%)仍将密码存储在手机、计算机或打印文档中,同样违反了行业最佳实践

注意,以上调查是针对安全行业人士进行,普通企业员工的密码违规情况要比上面的数据严重得多!

弱密码黑洞

如今,一位普通消费者都至少使用20个以上的账户。二十个不同的账户,二十个不同的密码,延伸出一系列的安全问题和安全隐患(上图),甚至包括安全专家在内,都会犯下在不同账户中重复使用密码的低级错误。密码安全性已经成为在线账户安全的主要问题,导致数据泄露、账户接管、欺诈性金融交易、敏感数据泄漏、个人数据滥用等。

截止到今天(2020年),最大的数据泄漏主要来自配置不当的系统,包括身份验证薄弱。

总而言之,在业界的不懈努力下,密码安全性较差的现状依然未能得到解决。

问题已经足够浅显直白,但是我们有解决方案吗?

对于弱密问题,很多企业采取强制频繁更改密码并使用单点登录(SSO),以及将特权凭证存储在密码库等措施,但企业应该认识到:弱密问题并不是一种或几种技术方案(例如IAM和PAM)或者规则能够根除的,需要参考和制定一套完善的密码准则,以应对消费者、供应商和企业自身的数字身份管理挑战。

以下,安全牛针对目前远程办公的“安全痛点”,老话重提,围绕NIST的新版密码指南与大家一起就密码安全温故知新:

NIST的十三条密码准则

NIST SP 800-63是美国国家标准技术研究院(NIST)2017年发布的数字身份验证准则的新修订版(2020年3月更新),其中提供了有关密码安全性要求的准则。

尽管SP 800-63是79页的冗长文档,但本文主要关注的是第5节“身份验证器和验证者要求 ”,该章针对如何处理身份验证要求制定了许多具体准则。

简而言之,它是密码管理的一些最佳实践的整理,包括存储、使用和颁发。

那么,NIST 800-63到底在说什么呢?NIST 800-63的意义是什么?与先前发布的密码安全性准则有何不同?

如果你比较赶时间,可以花1分钟了解一下这个最新版NIST密码指南的快速列表:

(1) 不再需要定期重置密码

(2) 定义的最小密码字符数–8(用户生成)

(3) 密码中定义的字符数至少为64+

(4) 允许ASCII可打印字符,包括空格和表情符号

(5) 定义的最小密码字符数–6(系统生成)

(6) 密码找回避免使用密码提示/安全问题

(7) 限制密码的复杂性要求

(8) 鼓励2FA/MFA并避免2FA中使用SMS短信验证

(9) 避免暴露以下来源的密码:

  • 以前暴露的违规账号
  • 字典单词
  • 包含重复或连续字符的密码
  • 特定于上下文的词,例如服务的名称、用户 名及其派生词

(10) 将失败登录尝试次数限制为一定数量,例如10次

(11) 不要截断密码并始终将其存储在单向哈希中

(12) 引导用户使用指示器展示评估密码强度

(13) 通过盐化和单向哈希安全地存储密码,以防止密码猜测攻击

NIST 800-63有哪些重大更新?

  • 尝试淘汰过时的密码实践准则(例如定期更改密码)
  • 对2FA/MFA的用法给出了很好的建议
  • 增加旧/不良密码的作废要求
  • 强调密码字符数量/长度(最小和最大值)的重要性
  • 明确密码重置的理由
  • 明确定义最佳的密码盐化存储方式

NIST密码新政详解

以下,我们逐项解读NIST的密码“新政”:

1. 不再需要定期重置密码

一些服务提供商(例如在线银行)和企业会强制用户定期(例如30-90天)修改密码。但是问题是,如果密码很强并且没有受到破坏,为什么我们必须更改密码。

另外,当我们按定义的时间间隔定期更改密码时,我们倾向于引入较弱的密码。例如,您之前的密码是“ [Pr3ttyMeLikesD!$n3y]”。这个密码看上去非常强悍,但遗憾的是,在公开的密码泄露检查工具中,这条密码的检测结果是“阳性”。

虽然已经泄露,但如此“牛C”的密码用户是舍不得一下抛弃的,因此,很常见的做法是在原密码末尾添加一个或几个数字,例如 “ [Pr3ttyMeLikesD!$n3y] 9”,这样就可以满足提供程序的密码修改要求。

错了!

如果您的原始密码已被盗用,并且可以通过有针对性的攻击与之相关联,攻击者可以轻松地“猜出”您的“新密码”。

这就是为什么NIST的密码新规中强调避免强行使用任何类型的周期密码,因为这会进一步削弱密码流程。

2. 密码长度更加重要

我们都知道NIST新规则格外强调密码长度的重要性,但关键问题是如何设定密码长度的最大值和最小值的合理范围。

过去,密码长度受到限制是为了适应存储需求。但现在,随着散列值的存储,大小限制变得非常宽松,允许使用强而复杂的密码。

无论密码是“password”还是“ Itw@asAN!c3P@$$sword4ALL”,存储这两个密码所需的存储空间实际上没有差异,这将由服务提供商使用的哈希算法确定。根据NIST的新准则,用户创建的密码长度至少应为8个字符,最大长度应允许超过64个字符。这意味着在线服务提供商常见的20-32个字符密码长度限制需要大幅放宽。

但这引发了另一个问题:如果密码是由服务/系统创建的(例如初始密码和默认密码),密码字符数量(长度)的要求是什么?幸运的是,新规范中系统创建密码的最小值减少到6个字符。这种6个字符的密码可以在员工初始入职时设置。此后,将要求用户强制执行首次登录密码更改。

传统上,密码长度一直保持为少数字符,以适应存储需求。

与最初起草的时间范围相比,当前的存储成本要低得多。之所以认为存储是因为密码是以前以纯文本存储的,因此导致了许多数据泄露事件,包括但不限于a,b,c。

3. 哪些字符可以作为密码字符?

答案很简单。允许所有可打印的ASCII字符集。

简而言之,请允许使用标准键盘可以创建的任何内容,甚至允许空格作为密码的一部分!

那么,[ !@ #$%&*();',。/ <> ?:] 这样的特殊字符呢?

再次强调!创建密码时,不应限制特殊字符。

那么表情符号呢?