笔者之前介绍了如何高效排查自己所在企业组织的信息系统用户是否使用了弱密码,其中的一个关键点是需要使用有代表性的弱密码库和泄露密码库进行排查。
一般来说,笔者写文章都是授人以鱼不如授人以渔,不过在弱密码这个事情上也不妨再具体一些。
笔者:国际认证信息系统审计师、软考系统分析师、软件工程硕士
所以这次就简单介绍一下 weakpass.com 这个网站。
在具体介绍前面依然还是先强调一下,在零信任普及之前,密码爆破依然是行之有效的攻击方法,弱密码排查防范依然是防守方的重点工作而且是放在首位的工作。
密码的本质是字符的随机组合,但由于人性的原因,人为设计的密码往往带有一定的规律。
所以两个互不相识的人用同一个密码的可能性是存在的,更不用说很多人是1个密码打天下。
因此,用完全随机的密码组合去做爆破,效率不如用曾经被人使用的密码去做爆破。
而 WEAKPASS 这个网站收集了大量曾经泄露在互联网上的密码库。对于网络安全的防守方,就可以用来做弱密码排查的用途。
当然,在攻击方的角度看,这些密码库也可以用于密码穷举或者发动密码喷射攻击,所以攻防是网络安全一件事的两面。
除了 WEAKPASS 之外,比如 GITHUB 上也有类似的资源收集,读者也可以自行搜索获取。笔者专门介绍 WEAKPASS,那是因为它自有一些特点。
WEAKPASS 对收录的每一批密码,都给出了一些关键统计数据和典型样本。比如:
https://weakpass.com/wordlist/1931
这是来自于 Hashes.org 的密码(该网站现已关闭),压缩包为 3.44 GB,解压后占硬盘 13.99GB,共包含密码 1,397,237,946 个。
其中包含的密码例子,比如:golovar123, 4421099612, 84564330,steli_79 等等,都是很典型的弱密码;也有相对复杂的,比如JANtsa95!,AnHYVTQW4Nowc,bhuuNCzA3X,这些应该是泄露过的密码。
WEAKPASS 对该批密码,给出了典型 MASK 匹配的统计结果和按密码长度分布的统计结果,这对于判断密码库本身的有效性、又或者研究普通人对密码这件事的态度也有一定用途。
另外,WEAKPASS 对于一些常见的信息摘要算法或密码加密算法给出了全部计算一次该密码表的时间。
对于这个包含了近14亿个密码的清单,WEAKPASS 认为 MD5 算法是2分钟,NTLM 算法是89秒,NetNTLMv2 算法是95秒,md5crypt 算法是1小时,sha512crypt 算法是13小时,WPA2 算法是1小时。
所有这些时间都不算长,可以对应回去笔者在《攻防演练在即:如何高效全面地排查信息系统用户状态和弱密码》中提到的,用信息系统的密码加密算法按弱密码清单排查用户弱密码,没有了密码错误重试限制之下的排查速度其实是很快的。
WEAKPASS 还提供了所有密码的大集合。其中只包含可打印字符的 All-in-One-P 包,31GB 的压缩文件包含了15,462,473,182个密码,用 MD5 算法全部算一次也只是约23分钟。上到 sha512crypt 算法稍好点,也只是需要6天。
如果读者是防守方,想想现在一次攻防演练的时间持续至少是两周,更别说更有耐心和获利动机的真实攻击者。
所以一旦被攻击方通过诸如 SQL 注入的方式获取到了用户的密码数据,就用这密码库过一遍,没加盐的基本上活不过当天。如果这个系统是商品化、比较容易获取的(比如OA系统,财务系统之类),可以肯定密码加密算法早已被攻击队掌握,那么加的盐也无济于事。
所以网络安全防御必须是组合拳,弱密码排查只是其中比较直接也比较重要的一环。
值得注意的是,WEAKPASS 提供了名为 CRACK-JS 的基于浏览器的在线破解摘要值(Hash 值),也就是如果是常见弱密码的摘要值可以逆向找出密码。当然这必须是特别常见的,比如“1234”。下面就简单测试一下。
1、首先用能计算 MD5 摘要值的任意计算器,计算出“1234”的 MD5 摘要值。笔者电脑上有 MariaDB,于是习惯性地用 SQL 命令计算:
SELECT MD5('1234')
得到
+------------------------------------+
| "md5('1234')" |
+------------------------------------+
| "81dc9bdb52d04dc20036dbd8313ed055" |
+------------------------------------+
2、复制粘贴摘要值到 WEAKPASS 的 Hash Cracker 在线破解工具的 Hashes 输入框,然后点击 Magic Crack 按钮。
3、破解界面快速地找出了该摘要值的对应字符串:
其实这个功能实际用途不算很大,因为它不可能逆向加了盐的密码所计算的密码摘要值。但除此之外,该功能还算是很完整的,支持自定义规则和单词表。
但如果知道盐是多少,那就可以用他的 CUSTOM 按钮调出规则配置,自己加上盐,配合单词表,一定程度上能增加了这个工具的实用性,比如下面的简单例子,加的盐是字符串 aaa,添加到密码的后面,然后通过自定义规则(使用正则式),从密码摘要值 7ae3cabfc4d7f89f7610477c3b2c5c45 还原出密码 1234:
又如加盐是添加到密码前面时,规则就要按正则式匹配规则调整,相应地也能还原出密码:
但如果是动态盐(每个账号都不同),那就无可奈何了。
顺带说,有些系统的设计是把动态盐和密码的 Hash 值在数据库中设计为一张表的两个字段,这种设计是错误的,一旦有 SQL 注入漏洞就等于全盘托出。
其实网络上可以获取到的泄露密码库是很多的,但如果收集过程不加以处理,则涉嫌侵犯个人信息保护法,所以最后说说关于自行收集密码库的一些须知:
1、只收集密码,不要收集账号及其他相关的信息;
2、排除掉用软件预生成的密码清单,不是没有用,但最好还是来自真实世界。况且软件生成,自己也可以写个简单程序生成。
3、排除掉彩虹表,明文形式的才有用。
本站微信订阅号:
本页网址二维码: