Ophcrack彩虹表(RainbowTables)原理详解
彩虹表( Table)是⼀种破解哈希算法的技术,是⼀款跨平台密码破解器,主要可以破解MD5、HASH等多种密码。它的性能⾮常让⼈震惊,在⼀台普通PC上辅以 CUDA技术,对于NTLM算法可以达到最⾼每秒103,820,000,000次明⽂尝试(超过⼀千亿次),对于⼴泛使⽤的MD5也接近⼀千亿次。更神奇的是,彩虹表技术并⾮针对某种哈希算法的漏洞进⾏攻击,⽽是类似暴⼒破解,对于任何哈希算法都有效。⼀、彩虹表原理
先讲述⼀些基本概念:
Tables
可以说长期进⾏密码学研究的⼈很少有不知道这个的。在很多年前,国外的⿊客们就发现单纯地通过导⼊字典,采⽤和⽬标同等算法破解,其速度其实是⾮常缓慢的,就效率⽽⾔根本不能满⾜实战需要。之后通过⼤量的尝试和总结,⿊客们发现如果能够实现直接建⽴出⼀个数据⽂件,⾥⾯事先记录了采⽤和⽬标采⽤同样算法计算后⽣成的Hash散列数值,在需要破解的时候直接调⽤这样的⽂件进⾏⽐对,破解效率就可以⼤幅度地,甚⾄成百近千近万倍地提⾼,这样事先构造的Hash散列数据⽂件在安全界被称之为Table表(⽂件)。
Rainbow Tables
最出名的Tables是Rainbow Tables,即安全界中常提及的彩虹表,它是以的⽤户帐户LM/NTLM散列为破解对象的。简单说明⼀下,在Windows2000/XP/2003系统下,账户密码并不是明⽂保存的,⽽是通过微软所定义的算法,保存为⼀种⽆法直接识别的⽂件,即通常所说的SAM⽂件,这个⽂件在系统⼯作时因为被调⽤所以不能够被直接破解。但我们可以将其以Hash即散列的⽅式提取,以⽅便导⼊到专业⼯具破解,提取出来的密码散列类似于下⾯:
:500:96e95ed6bad37454aad3b435b51404ee:64e2d1e9b06cb8c8b05e42f0e6605c74:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
user1:1001:732b2c9a2934e481cd0a8808b19097ef:778620d5d5de064154e689fa4790129f:::
user2:1002:a042f67a99758fd727b99b2375d829f9:6127ee12a83da34fc19953e538e4d580:::
若是以传统破解⽅式⽽⾔,⽆论是本地,还是内⽹在线破解,效率都不是很⾼。据实际测试,单机环境下,破解⼀个14位长包含⼤⼩写字母以及数字的⽆规律密码,⼀般是需要3~~9⼩时的,这个时间值会随着密码的复杂度及计算机性能差异提升到⼏天甚⾄数⽉不等。虽然说⼤部分⼈都不会使⽤这样复杂的密码,但对于⽬前很多密码⾜够复杂并且长度超过10位的密码⽐如“Y1a9n7g9z0h7e”,还是会令⿊客们头痛不已。
2003年7⽉瑞⼠洛桑联邦技术学院Philippe Oechslin公布了⼀些实验结果,他及其所属的安全及密码学实验室(LASEC)采⽤了时间内存替换的⽅法,使得密码破解的效率⼤⼤提⾼。作为⼀个例⼦,他们将⼀个常⽤操作系统的密码破解速度由1分41秒,提升到13.6秒。这⼀⽅法使⽤了⼤型查表对加密的密码和由⼈输⼊的⽂本进⾏匹配,从⽽加速了解密所需要的计算。这种被称作“内存-时间平衡”的⽅法意味着使⽤⼤量内存的⿊客能够减少破解密码所需要的时间。
于是,⼀些受到启发的⿊客们事先制作出包含⼏乎所有可能密码的字典,然后再将其全部转换成NTLM Hash⽂件,这样,在实际破解的时候,就不需要再进⾏密码与Hash之间的转换,直接就可以通过⽂件中的Hash散列⽐对来破解帐户密码,节省了⼤量的系统资源,使得效率能够⼤幅度提升。当然,这只是简单的表述,采⽤的这个⽅法在国际上就被称为Time- Trade-Off ,即刚才所说的“内存-时间平衡”法,有的地⽅也会翻译成“时间—内存交替运算法”。其原理可以理解为以内存换取时间,可由下图3表⽰:
图著名的“内存-时间平衡”法运算原理图
具体算法⽅⾯的内容本⽂就不再涉及,对于想进⾏更⾼深层次探究的读者,可以仔细参考2003年的这篇详细⽂档《Making a Faster Crytanalytical Time-Memory Trade-Off》以及2005年的⽂档《Time-Memory Trade-Offs: False Alarm Detection Using Checkpoints》。
正是由于Rainbow Tables的存在,使得普通电脑在5分钟内破解14位长⾜够复杂的Windows帐户密码成为可能。
图对Windows账户进⾏Rainbow Tables破解
如上图4可以看到,类似于c78j33c6hnws、yemawangluo178、38911770这样的Windows帐户密码⼏乎全部在180秒即3分钟内破出,最短只⽤了5秒,个别稍长的密码破解开也没有超过3分钟。
我们先来做点科普,哈希(Hash)算法就是单向散列算法,它把某个较⼤的集合P映射到另⼀个较⼩的集合Q中,假如这个算法叫H,那么就有Q = H(P)。对于P中任何⼀个值p都有唯⼀确定的q与之对应,但是⼀个q可以对应多个p。作为⼀个有⽤的Hash算法,H还应该满⾜:H(p)速度⽐较快;给出⼀个q,很难算出⼀个p满⾜q = H(p);给出⼀个p1,很难算出⼀个不等于p1的p2使得 H(p1)=H(p2)。正因为有这样的特性,Hash算法经常被⽤来保存密码————这样不会泄露密码明⽂,⼜可以校验输⼊的密码是否正确。常⽤的 Hash算法有MD5、SHA1等。
破解Hash的任务就是,对于给出的⼀个q,反算出⼀个p来满⾜q = H(p)。通常我们能想到的两种办法,⼀种就是暴⼒破解法,把P中的每⼀个p都算⼀下H(p),直到结果等于q;另⼀种办法是查表法,搞⼀个很⼤的数据库,把每个p和对应的q都记录下来,按q做⼀下索引,到时候查⼀下就知道了。这两种办法理论上都是可以的,但是前⼀种可能需要海量的时间,后⼀种需要海量的存储空间,以⾄于以⽬前的⼈类资源⽆法实现。
我们可以简单的算⼀下,对于14位的⼤⼩写加数字(先不算特殊字符了)组成的密码的集合有多⼤?
⾃然就是(26*2+10)^14 = 62^14 = 1.24 * 10^25,这个就约等于12亿亿亿,即使我们每纳秒可以校验⼀个p(⼀秒钟10亿次,⽬前PC做不到),暴⼒破解法也⼤概需要4亿年;如果我们采⽤查表法,假定Hash的结果是128Bit即16字节的,光存放Hash(不存放明⽂P)就需要10^26字节的存储空间。什么?现在硬盘很便宜?没错现在 1GB硬盘⼤概是五⽑钱,那么按这个来算光存储这个Hash⼤概需要5亿亿⼈民币来买硬盘。所以有些⽂章说彩虹表就是依赖查⼀个巨⼤的表来破解Hash,简直是个⽆知的玩笑。
也正因为如此,我们⼀直都认为Hash是⾜够安全的,⼗⼏位的密码也是强度⾜够的,直到彩虹表的出现。现在我们来看看彩虹表是怎么⼲的。
彩虹表的根本原理就是组合了暴⼒法和查表法,并在这两者之中取得⼀个折中,⽤我们可以承受的时间和存储空间进⾏破解。它的做法是,对于⼀个Q = H(P),建⽴另⼀个算法R使得 P = R(Q),然后对于⼀个p,这样进⾏计算:
p0 -H-> q1 -R->p1 -H-> q2 -R->p2 -H-> q3 -R->p3 … -H-> q(n-1) -R->p(n-1) -H-> qn -R->pn
人生励志格言简单的说,就是把q⽤H、R依次迭代运算,最后得到pn,n可能⽐较⼤。最后我们把p0和pn都存储下来,把其他的结果都丢弃。然后⽤不同的p0代⼊计算,得到多个这样的p的对⼦。
我们在做破解的时候,给出了⼀个q,我们来寻p。我们先把q做⼀次R运算得到⼀个值例如叫c1,然后把c1和每⼀个p对的最后⼀个做⽐较,假如和某⼀个 pn相等,那么有可能这个pn所对应的p(n-1)就是我们在追寻的q,为了验证我们把pn对应的p0再做⼀次链式计算,⽐对qn 是否就是给出的q,如果是,很明显p(n-1)就是我们在追寻的p,因为 p(n-1) -H-> qn。如果不是就继续寻直到遍历所有的q0qn对。
事情还刚刚开始,我们再算q -R-> c1 -H-> -R-> c2,再⽐对c2是否是qn,如果是,那么p(n-2)就可能是p;再算c3、c4直到c(n-1),不知道这样说你明⽩了吗?
总的来说,就是⽤⼀个p0pn对来存储了⼀个链⼦的数据,如果n很⼤,就可以⼤⼤减⼩了存储的空间。这样带来的问题是必须做n次⽐对,时间更长,但是我们不需要瞬间破解,等待⼏秒乃⾄⼏天破解⼀个密码都是可以接受的。
⼆、获得彩虹表
彩虹表可以使⽤RainbowCrack或Cain来⽣成。表分割得越细,成功率就越⾼,⽣成的表体积也越⼤,所需时间也越长。但下载⽐⽣成快得多,有⼈做过测试,4核4GB内存的机器,⽣成2GB彩虹表,需要花费7天时间,⽽7天按2MB的带宽(256K/S左右)⼏乎可以下载48GB左右,效率明显要超过⽣成。当然,你要是有超级计算机⽣成的话,也不妨⾃⼰⽣成。对于⼴⼤⽹络安全爱好者来说,
还是直接下载来得靠谱!
三、彩虹表的使⽤
彩虹表⼯具很多,常⽤到的彩虹表⼯具有Ophcrack、rcracki_mt、Cain等,主流的彩虹表有以下三种。二十大开幕式时间
春卷皮的做法⾼级的表要花钱买,免费的表有(推荐只下2和5,要求⾼的可以下载3和5):
1.XP free(LM表:包含⼤⼩写+数字)380MB(官⽹免费下载)
2.XP free fast(和前⼀个⼀样,但是速度更快)703MB(官⽹免费下载)
3.XP special(LM表:⼤⼩写+数字+所有符号包括空格)7.5G
4.Vista free (NTLM表:包含常⽤密码)461MB(官⽹免费下载)
5.Vista special(NTLM表:包含6位的全部可打印字符,7位的⼤⼩写字母数字,8位的⼩写和数字)8G一米等于多少厘米
最⼩彩虹表是最基本的字母数字表,就这样它的⼤⼩就有388MB,这是Ophcrack启动盘默认的表,该
表可以在11分钟内破解所有可能14位数字字母密码组合中的99.9%。国内有⽐较流⾏的传说中的120G的彩虹表,国外还有⼏T的海量彩虹表。win2003及以前的windows操作系统的密码采⽤的LM算法加密,⽽Vista、Win7、Win2008/R2采⽤的是NTLM,NTLM⽐LM安全得多。
LM和NTLM详解:
1、话说在远古时期,DES当道。微软在考虑9X系统⼝令加密的时候就⾃然地采⽤了国家标准DES⼀次加密8字节,留⼀位校检,还剩7字节(下⽂有解释),也就是LM(Lan Manage)的核⼼。
2、那有⼈要问了,万⼀我的⼝令是8位怎么办呢?不⽤怕,微软的程序员很“聪明”:先把前7位加密,后⼀位补6个0,再当7位⼀起加密不就可以了吗,结果就真的这么做了。
3、这就导致破解LM密码只需7位⼀分割,然后再逐块破解,这⼤⼤减低了破解的难度。因为最后⼀块往往不够7位,⼀般瞬间即可得出结果。也就是7位和13位的密码,在破解者眼⾥⼏乎是⼀样的,因为13位的后6位很快就能破解出来,⽽且可以根据后6位猜测出前7位的密码,这就是为什么我们破解XP和2003密码很快的原因,因为他们都使⽤了LM加密⽅式。
4、由于LM的种种不安全性,微软在设计NT系列操作系统时采⽤了新的⼝令存储⼿段,即NTLM技术(New Technology Lan Manage),采⽤MD4+RSA存储,⽴马安全性要⾼很多。但是为了保证兼容
性,直到2003微软仍然保持着LM的加密⽅式,也就是在2000、2003和XP 中,我们的⼝令同时保存了两份,⼀份LM⼀份NTLM,我们仍然可以通过LM破解2003的⼝令。
5、在Vista和2008、Win7中,微软终于下定决⼼对LM斩草除根,只留下NTLM,破解难度增⼤。
6、回到彩虹表,由于LM最多只有7位,所以它的彩虹表很⼩。⽽NTLM⽤了散列函数,所以理论上⼝令是可以⽆限长的,所以NTLM的彩虹表往往很⼤,120G肯定是不够完成所有可打印字符的,最⼤的彩虹表已经是T量级了。
dearjohn某⼈⽤彩虹表测试破解MD5的⼩结:
ophcrack的表不⽀持破解md5,具体讲.rt .rtc .rti格式的,只需对⽐⼀组数据就可以。同样是破解12位的纯数字密码:
.rt的需要20GB .rtc的需要8.75GB .rti的需要1.67+1.67+1.68+1.71=6.72GB
明显是.rti的⼩,但是我试过,我下了上⾯.rti格式破解12位的6.72GB的表中的1.67GB,其破解效果很让我惊讶,我本以为纯数字的破解出来的可能性是四分之⼀,因为我只下了4个表中的⼀个,我只下了那1.67GB,但我试着破解了⼏个12位数字加密的32位md5,结果⼤多数都能跑出来,很少有跑不出的,汗。但当我惊喜时发现他并不⽀持破解16位的md5,然后去那国外的官⽅论坛去逛了逛,才发
现这并不⽀持破解16位的md5。原来⽼外不来16位这⼀套,但我们国内的⽹站⽤16位的md5占绝⼤多数,所以⼊侵时⼤部分得到的是16位的MD5密码,⽽⽼外的就不来16位的,郁闷。什么品牌电动车好
Ophcrack⽂档描述了它所能使⽤的彩虹表之间的差异:
字母数字表 10k 388MB 包含所有字母数字混合密码中99.9%的LanManager表。这些都是⽤⼤⼩写字母和数字组成的密码(⼤约800亿组合)。
由于LanManager哈希表将密码截成每份7个字符的两份,我们就可以⽤该表破解长度在1到14之间的密码。由于LanManager哈希表也是不区分⼤⼩写的,该表中的800亿的组合就相当于12*10的11次⽅(或者2的83次⽅)个密码。
字母数字表 5k 720MB 包含所有字母数字组合的密码中99.9%的LanManager表。但是,由于表变成2倍⼤,如果你的计算机有1GB以上的RAM空间的话,它的破解速度是前⼀个的4倍。
扩展表 7.5GB 包含最长14个⼤⼩写字母、数字以及下列33个特殊字符(!”#$%&’()*+,-./:;?@[]^_`{|} ~)组成的密码中96%的LanManager表。该表中⼤约有7兆的组合,5*10的12次⽅(或者2的92次⽅)密码。
NT 8.5 GB 我们可以使⽤该表来破解计算机上的NT哈希表,这是LanManager 哈希表所做不到的。该
表包含了⽤如下字符组成的可能密码组合的90%:
·最⾼6位字符由⼤⼩写字母、数字以及33个特殊字符(同上⾯列举的⼀样)
·7 ⼤⼩写字母及数字
·8 ⼩写字母及数字
该表包含7兆种组合,对应7兆的密码(NT哈希表不存在LanManager哈希表的弱点)。
注意:所有这些彩虹表都有其特定适⽤的密码长度和字母组合。太长的密码(如数⼗位),或者包含表中没有的字符,那么⽤彩虹表就⽆法破解。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论