用户密码薄如纸

jopen 11年前

用户密码薄如纸
感谢XKCD的漫画,现在世界上所有的黑客猜密码的时候,都会试试「对马电池订书钉」(correcthorsebatterystaple)这个密码。

前情提要:可能各位煎蛋蛋友看了题图和这句话后,会有点懵。其实「对马电池订书钉」出自XFCD发表的漫画名为「密码强度」:

用户密码薄如纸

但是……这幅漫画显然太低估黑客们的实力了:

用户密码薄如纸
本周,Ars网站邀请了三位黑客破解了16,000多个hash过的密码-成功率90%!

OK,这可能是煎蛋史上最臭最长的文章,翻译君为了体量诸位蛋友的耐心,先上一个删减版把这事儿说清楚:

黑客告诉你,你的密码不是因为又臭又长就安全,而是因为没人惦记你,所以暂时安全。


咳,然后是献给好学蛋友们的正文:

3 月,博客作者Nate Anderson,下载了一份侧漏的暴库密码表,内含超过16,000个hash过的真实密码,经过百度知道的简单培训,结果只花了大概能煎3个蛋的功 夫,破解了其中一半的密码。这给所有人提了一个警醒:如果一个没有经过任何训练的蛋友,就能达到这个程度,想一下一个职业黑客能搞出多大动静。

不用自行脑补了,我们请来了三位职业黑客,使出浑身解数,来破解Anderson练手的那份密码表,展开了终极PK。你会看到包括数字,大小写,标点符号的长密码是如何被快速破处出的。

这 份密码表里总共有16,449个hash过(MD5)的密码。任何负责的网站,都不会明文存储用户的密码信息,而是用MD5加密,这种加密过程是不可逆 的,也就是说,就算拿到MD5密文,也不可能直接「反求」出原文。比如 「passwd」 被hash过以后,密文是 「5f4dcc3b5aa765d61d8327deb882cf99」 。

虽 然Anderson的47%破解率已经非常不错,但对于职业黑客来说,还是不足挂齿。为了证明这点,我们请来他们来演示一下,说真的,他们没有让我们失 望。就算三个里成绩最差的一个——他用最弱的硬件,花了一个小时,用最小的字典,中间还接受了一次采访,也搞定62%的密码,而最好成绩是90%。

这个三人黑客团队包括一名密码破解软件专家,一名安全顾问,和一名匿名自由黑客。其中最牛的一名黑客是来自S.C.G., 使用一台只配置一块AMD 7970 GPU的家用电脑,花了20小时破解了90%,共14,734个密码。免费GPU密码破解软件oclHashcat-plus(参 加测试的黑客都使用这款软件)的开发负责人,Jens Steube 也取得了不俗的成绩,他在一个多小时的时间里,用一台双AMD 6690 GPU的机器,搞定了 13,486个密码,占全部的82%!另外一名诨号 moniker radix的黑客,用一块AMD 7970,搞定62%的密码,也差不多花了1个小时,如果不是被我们打扰接受采访,他应该能取得更好的成绩。

黑 客穷举破解密码所用的「字典」里,包括了很多密码明文,这些常用的密码字符组合,来自于很多大型网站的用户数据中,包括像「123456」, 「password」之类,这些属于弱暴了的密码,还有稍微好一点的,像「p@$$word」、「123456789j」、「LETMEin3」等也同样 不堪一击。在这些字典里,你还能找到一些理论上强悍的密码,比如「LOL1313le」、「1368555av」、[Oscar+emmy2]之类:

用户密码薄如纸

截 图里展示了一部分黑客字典中的密码组合。像这次参与PK的黑客手里的字典,有接近1亿种常见密码。但像「momof3g8kids」、 「Coneyisland9/」这样的密码,虽然不在他们的字典里,一样没能幸免,他们是怎么做到的呢?答案来自于两个方面:网站没能保护用户密码的 MD5信息,和用户没有使用足够强壮的密码。

嗖嗖地,妥妥的

「这些弱暴的密码」radix说道,他不愿意透露真名,「说明他们真的不是很在乎自己的密码安全,别用MD5加密,这对他们来说其实并不难」。

MD5 算法,是一种快速简单的的「报文编译」方法,由它生成的密文,也是黑客最喜欢拿来练手的对象,一块GPU显卡,就能在1秒钟内遍历8亿个字符组合,比较起 来看,加密过程就费时费力的多,比如在苹果Mac OSX系统,和大多数基于Unix的系统上采用的SHA512加密算法,一个明文密码需要经过5,000次hash。这点小障碍也就让一块GPU每秒少跑 了2,000次而已,类似的还有bcrypt,scrypt,和 PDKDF2。

另 外一个漏洞就是用户自己,选择好记的单词当作密码,好记就代表容易被破,比如「momof3g8kids」看上去好记又难猜,但实际上,「mom」、 「kids」都是每一个黑客手里必备的破解词汇。越来越彪悍的硬件和软件,能让黑客轻而易举地不断尝试这些词汇的各种组合,除非用户细心设计,否则好记的 密码就是正中黑客下怀。

而 且必须指出,这次三名黑客并不知道这份密码表是从哪个网站得来的,这就等于封杀了他们的一项技能。一般,当得到一份hash过的密码表后,他们第一个步就 是「去那个网站看看他们的密码设置要求和强度」radix说道,如果黑客知道这个网站的密码强度和其它约定,这就大大减小了他们的工作强度,让黑客可以有 针对性地采取破解策略。

破解步骤

要 细说他们是如何破解强密码的,那就需要对他们三个人的方法和策略进行比较分析,因为他们的硬件和方法都不太一样,也不能说得哪个人的水平更高一些,打个比 方,这是一场游戏通关,那么一关定比一关难,第一轮破解,一般能搞定其中50%的密码,后面的成功率就越来越少,到最后的阶段,他们只能纯靠运气,得到几 百个密码明文。

举 例来讲,在Goseney动手的第一阶段,只花了16分钟,就干掉了10,233个hash密文,也就是62%的样子。他先用6位以内的密码开路,用暴力 穷举法对付1~6个字符的密码组合由95个字符组成的密码,包括26个小写,26个大写,10个数字,33个符号。猜完一轮这样的排列组合(956 + 955 + 954 + 953 + 952+95 个),只花了2分32秒就得到了1,316个正确结果。

当密码长度超过6位,Gosney开始改变策略,用精心挑选的字典进行穷举。因为随着密码长度的增加,字符组合成指数级增长。1小时能搞定所有6位密码,但要遍历更长的密码,可能要花费数周,甚至数年。所以,对于暴力穷举破解的方法,有一种说法叫:「长度防火墙」:

用户密码薄如纸
暴力穷举可以很好地对付6位以下的密码,但对于8位以上的密码,就算开动Amazon的EC2云计算也无能为力。

黑 客当然不会一条道走到黑,Gosney 下一步的暴力穷举将只针对7~8位,全小写字母的情况。这将大大减少穷举所需时间,而且收获也不少,成功破解1,618个密码。接着他继续尝试7~8位全 大写的情况,又得到了708个结果。因为他们的排列组合是268+267,每一步只许41秒。最后,他尝试全部由数字组成长度从1~12位的情况,得到 312个密码,耗时3分21秒。

用 光了以上入门级暴力破解法,黑客Gosney这才开始拉开架势,拿出自己潜心调教多年的「字典」,通过在HashCat软件中内置的「best64」规则 (一种基于密码统计学的破解行为模式),他能在9分04秒内,跑完了6,228个hash密文,然后他利用上一步破解所得到的所有明文密码,通过另一组名 叫「d3ad0ne」的规则过滤获得「字符组合特征」,让他在一秒钟内,又得到了51个密码明文。

「正常情况下,我先用暴力穷举法,完成1~6位的密码破解,因为就算是单GPU,也能几乎瞬间完成用MD5加密的密码」。Gosney在邮件中解释道:

因为这一步很快就能完成,所以,我的字典几乎都 是6位以上的密码组合。这可以让我节省不少磁盘空间,也可以利用GPU的蛮力,加快我之后用字典破解的速度。对于数字组合也是这样,我可以很快破解纯数字 的密码,所以在我的字典里没有任何数字组成的密码,然后才是我的字典文件+bast64规则文件。我们的目的就是先挑软柿子捏。

从 简单密码下手对于被「掺盐」(cryptographic salt)的密码特别有用。「掺盐」是用来对付黑客的「彩虹表」(一种明文和密文对应的穷举表)和类似的字典技术,掺盐就是在用户密码后面,再加上随机字 符,然后再hash的技术。除了防御彩虹表,掺盐也减慢了暴力穷举法的破解速度。

但「掺盐」的关键在于,只有在掺入不同的盐巴(字符)情况下,才能明显减慢破解速度。这就意味着,掺盐的效果,会随着破解的进行而逐渐降低。黑客可以通过破解简单密码的结果,逐渐排除盐巴的干扰。当然,这次PK活动使用的密码没有被掺盐。

经 过第一轮的摧枯拉朽,10,233个hash密文已经告破,进入第二个阶段,黑客开始采用「混合破解的策略」。就和之前提到的游戏通关的比喻一样,随着难 度的增大,第二阶段需要花费的时间会大大增加,而且战果也会减少,准确的说,只有2,702个密码告破,耗时5小时又12分钟。

就 和名字一样「混合破解法」,结合了暴力穷举和字典破解两种路数,这大大拓展的字典所涵盖的组合种类,并且把组合数量控制在能接受的范围里。第一轮,黑客在 所有字典条目的后面,加上两个随机字符包括符号和数字,这样在11分25秒内,有破获585个密码。第二轮加上3个随机字符,耗时58分钟,得到527个 结果,第三轮再接再厉,加上四个随机数字,25分钟内又得到435个密码明文,第四轮,加上四个随机字符包括一个数字和三个小写字母,再斩获451个密码 明文。

面对可观的战果,Gosney认为,这只用了一张GPU卡的结果而已。

「你注意到我们只加上了2~3个长度的随机字符,但到4个长度,我们只能用数字了,因为只有1块显卡的GPU,想要跑完+4位随机字符和数字的组合会耗费很长时间,所以我只能放弃。」

毫无疑问,说这话的Gosney,已经用这台25GPU交火的怪兽机搞过更长的密码,他在去年10月透露了这台名叫「镭池」机器:

用户密码薄如纸

用户密码薄如纸

因为GPU的并行运算能力是随着运算单元的增加而线性增长,这让Gosney很好地利用这些资源,让他能在每秒获得350亿次的运算速度,去挑战微软的NTLM加密算法。

第二阶段,Gosney继续采取差不多的战术。在这个阶段结束的时候,他总共斩获 12,935个密码明文,也就是完成了78.6%的破解工作,总共耗时5小时28分钟。

很 多黑客都知道有一个有趣的现象,就是在同一个网站下,用户的密码会非常相似...尽管这些用户互天南海北,互相都不认识。通过已经得到大部分的密码,黑客 开始分析这个未知网站的密码特征,来模仿这个网站用户的行为,去破解余下的密码。通过Markov Chains(一种统计学模型),黑客用HashCat生成了一份新的密码词典,Gosney认为,这本字典是高度优化和智能的,大大缩减了所需的字符组 合数量。

初 级的暴力穷举词典包含像「aaa」,「abb」这样的组合。但经过Markov Chains调教过的字典,通过分析已有密码明文,列举出了最有可能的密码组合。「Markov破解法」,可以把7位字符组合难度从 957降低到657,大概可以节省7个小时。一般来说,字符组合有「首字母大写,中间小写,数字在尾部」等显著特点,Markov破解法的命中率,几乎可 以和暴力穷举的命中率一样高。

「这让你的破解方法更具针对性,因为你对于具体的网站,有了具体的目标」,Gosney说道,当你获得了这些组合特征,你就能顺藤摸瓜直捣黄龙。

Gosney花了14小时59分钟,完成了第三阶段的破解工作,得到了1699个密码。有趣的是,在这个阶段,前962个密码花费了大概3个小时,但后面的737个密码却花费了12个小时。

黑客radix手里有2009年,线游戏服务商RockYou的被SQL注入攻击后,暴出的数据库,内含140万个密码明文,另外还有一份货真价实的更大的密码词典,但魔术师不会轻易透露机关,PK中radix也没有拿出这份字典。

猎杀哈希

光 用RockYou的暴库数据,radix就能取得和新手Anderson差不多的战绩,获得4900个密码明文,大概占总量的30%。接着,他用这份数 据,切掉后四位,加上四位随机数字,HashCat预估需要2个小时才能跑完,这要比radix预计的长,但他跑了20分钟以后,也得到了2,136个密 码明文。接着他又尝试了1~3位数字的组合,再次得到259个结果。

「分析,直觉,加一点点魔法」,radix说道,「提取模式,测试组合,把结果放入字典继续尝试,等等」,如果你知道你手里的密文的来源网站,你就能猜到和那个网站有关的领域里的词汇,然后你就能搞到你想要的结果。

于是radix从已经得到的7,295个密码分析,发现了一些明显的特征,比如三分之一的密码由8个字符组成,19%的是9个字符,16%有6个字符,69%由「字母+数字」组成,他还发现62%的密码全是小写字母和数字组成。

这 些信息给了他继续破解的阶梯。后面,他采用「掩码破解法」,这和之前的「混合破解法」颇为相似,但要比暴力穷举节约大量时间,尝试「全小写字母+数字」的 1~6位密码组合,得到341个密码。但8位「全小写+数字」的组合所需时间,还是超出radix的期望,虽然复杂程度从528减到了268,就 radix手头的机器来说,这就是6小时和1个小时的区别,但他还是跳过了这一步。

于是radix改变了策略,使用HashCat内置的5,120种特殊规则,例如把「e」替换成「3」,删掉每一个单词的第一个字母,或者每隔一个字母加一个数字……在38秒之内,又破了1,940个密码。

「这就是黑客的乐趣所在」他说,「就像打猎,但你找的不是动物,而是哈希密文」。但他也承认密码破解技术的阴暗面,游走在道德的边境,如果多走一步,后果严重。

当另一位黑客Steube发现了一个密码组合:「momof3g8kids」的时候,忍不住说道:「这就是用户的密码逻辑,但我们并不知道这种逻辑,这给了我一些灵感,这就是我们为什么要盯着屏幕看结果」。

「momof3g8kids」被破解的原因是,Steube采用了「词典联合破解法」,他用多本词典的种的条目组合,发现了这个密码,其中,「momof3g」在一本1110万的大词典中收录,而「8kids」在另外一本较小的词典中。

「这太酷了!」他引用了本文开头,xkcd的那副著名的漫画说道:「告诉“对马电池订书钉”,这不灵」。

PK 过程中,最让人惊异的就是某些破获的密码明文,包括:「k1araj0hns0n」,「Sh1a-labe0uf」,「Apr!1221973」, 「Qbesancon321」,「DG091101%」……甚至包括了像「all of the light」这样包含空格的密码。Steube还在结果中看到了「Philippians4:6-7」和「qeadzcwrsfxv1331」,他表示: 「如果不是用暴力穷举,是不可能猜到这些密码的」。

GPU通用计算出现以后,很少有黑客在攻击中采用「彩虹表」(rainbow tables),这种过时的方,需要容量巨大的表文件。

当Reputation.com看到从自己网站被攻击后泄露的用户信息后表示,虽然看上去用户的密码加密信息不可能被破解,但我们还是立即通知用户更改自己的密码。

所有公司都应该认识到,就算用户密码被hash过,但发生信息泄露以后,用户应该立即更换密码,特别是那些在不同网站,却用相同密码的用户。黑客通常能从被暴库的密文中,破解60%~90%的密码。

必须承认,采用「掺盐」hash用户密码的的网站确实能减缓大量hash信息被破解速度,但「掺盐」并不能阻挡对单个hash密文和少量密文的破解,换句话说,如果黑客针对的是具体的某个帐户,比如银行经理,某位名流,「掺盐」也无能为力。

这三位黑客的高超技艺,也指出用户需要加强自己的密码保护意识。许多世界500强企业,都对雇员邮件帐号,和访问公司网络的密码有严格的规定,这大大增加了黑客攻击的难度。

「在企业行业领域,这确实不容易」,radix说道,「当我给一家企业做密码安全漏洞检查的时候,那简直了,我可能跑三天三夜也得不到一个字符。」

如果网站可以像那些大企业一样采取相同的安全策略,那用户密码就会安全很多。但这对于用户来说,要去记住11位的随机密码确实有点痛苦。

用户密码薄如纸

黑客破解hash密文的效率,与网站得知用户信息被泄露以后的反应,形成鲜明的对比。就在上个月,LivingSocial披露黑客攻破了他们的数据库,暴出了了5千万个用户姓名,地址和密码信息的hash内容,但网站负责人显然低估了这所带来的风险。

网站CEO Tim说:「虽然用户的密码已经被加密,而且很难被破解,我们的预防措施也能保证用户的数据是安全的,但我们还是通知大家,更新自己的网站密码」。

事实上,几乎没有什么能阻止黑客去解密hash信息。LivingSocial所用的SHA1算法,在黑客面前不堪一击。虽然他们也宣传用户的hash是被「掺盐」的,这也无法保证用户信息的安全。

由 此课件,Intel最近上线的一个网站,宣称能测试你的密码强度,是多么的不靠谱,它竟然评估说「BandGek2014」需要6年时间才能被破解,可笑 的是,这个密码可能在黑客手里,大概是被首先拿下的。问题的关键在与,大部分网站的密码强度要求,正好落在黑客的能力范围之内。

「你们已经看到了,我们在1小时之内破出了82%的密码,意味着有13,000人没有选择一个好密码,他们总以为自己选了一个好密码,但正相反,那些密码太糟糕了」。

用户密码薄如纸

文/煎蛋网