[ English ]
[ English ]
(2012年1月)
安天实验室 Liveck
在数据爆炸的今天,我们经常说“宇宙一般的海量数据”,对宇宙的研究需要不断地观察与总结。此次泄漏事件,到编写本文时据说已经有近30个用户数据库、超过20亿用户帐号信息在网上流传。此次分析仅是选取了其中较易获取到的一部分数据。在进行统计之前,我首先剔除了仅采用md5方式保存密码的数据;其次根据数据量和在中国网民中的流行度,选择了8个数据库作为分析的主要对象,并选取了1个数据库作为分析的对比对象;最后笔者用自己的帐号和一些朋友的帐号对上述的数据库做了抽样验证以确保数据的基本正确性。
此次分析的数据共涉及9个站点(命名为站点A到站点I,其中站点D是CSDN)共计用户数量超过1亿、口令数量超过3306万,不可不谓之壮观。
数量
|
比例
|
站点D用户数量
|
比例
|
|
用户数量
|
111775213
|
100.00%
|
6428632
|
5.75%
|
消重后的口令数量
|
33060578
|
29.58%
|
4037919
|
62.81%
|
口令中含有特殊字符的用户
|
3923457
|
3.51%
|
237675
|
3.70%
|
纯数字口令的用户
|
63214212
|
56.55%
|
2893401
|
45.01%
|
纯字母口令的用户
|
12141004
|
10.86%
|
79365
|
1.23%
|
纯小写字母口令的用户
|
11655558
|
10.43%
|
748554
|
11.64%
|
纯大写字母口令的用户
|
583986
|
0.52%
|
30396
|
0.47%
|
用户名作为口令的用户
|
4195863
|
3.75%
|
292662
|
4.55%
|
用户名一部分作为口令的用户
|
3678526
|
3.29%
|
188873
|
2.94%
|
用户名加一些字符作为口令的用户
|
1642673
|
1.47%
|
129390
|
2.01%
|
表1口令分布情况表
用户与口令的数量比约为1:0.2958,也就是说,每四个用户,就有一个用户的口令是其他用户用过的。而理想的安全状态应该是一用户一口令,即用户与口令的比例为1:1。这个比例值可以作为衡量站点口令安全情况的一个参考。一般一个有效的强口令应该由大小写字母、数字和特殊符号组成,而依照上表所述,中国过半的用户使用纯数字口令。这一习惯可能与普遍的银行卡、手机密码都仅允许使用数字有关。3.29%的用户名与口令是一样的,也就是说,超过367万用户的口令形同虚设。如果说中国有4.85亿网民
[1]
,那么大约有1500万网民是门户大开的。如果说网站的帐号是家,口令相当于开门的钥匙,那么这些网民的家就等于连锁都没有,谁都可以进去参观一下。
从图1中不难发现用户对6和8有着偏爱,也再一次证明了神奇的七正负二
[2]
原理。多数用户的口令长度都是5~9,更长的口令更安全,但是也意味着更难记忆。
图1 口令长度分布
而从图2中,我们则可以发现用户更愿意选择数字作为口令。
图2口令按键分布
每次用户口令泄漏的时候新闻报道者总是喜欢总结用户最常用的口令,当我们看到国外的用户喜欢用什么“iloveu”做口令的时候,我们总是嘲笑人家老外并乐此不疲。那么现在来看看国人自己的TOP吧。
排行
|
口令
|
用户数量
|
比例
|
1
|
123456
|
7516122
|
6.72%
|
2
|
123456789
|
1980576
|
1.77%
|
3
|
111111
|
1631232
|
1.46%
|
4
|
123123
|
807392
|
0.72%
|
5
|
12345678
|
746450
|
0.67%
|
6
|
000000
|
641088
|
0.57%
|
7
|
5201314
|
557722
|
0.50%
|
8
|
0
|
516282
|
0.46%
|
9
|
123321
|
326256
|
0.29%
|
10
|
11111111
|
291804
|
0.26%
|
11
|
111222tianya
|
265240
|
0.24%
|
12
|
a123456
|
264812
|
0.24%
|
13
|
666666
|
244262
|
0.22%
|
14
|
1234567
|
229292
|
0.21%
|
15
|
1314520
|
224386
|
0.20%
|
16
|
7758521
|
210072
|
0.19%
|
17
|
888888
|
201940
|
0.18%
|
18
|
123
|
193206
|
0.17%
|
19
|
1234567890
|
192456
|
0.17%
|
20
|
654321
|
174456
|
0.16%
|
21
|
woaini
|
161956
|
0.14%
|
22
|
112233
|
148884
|
0.13%
|
23
|
123123123
|
146106
|
0.13%
|
24
|
a321654
|
143898
|
0.13%
|
25
|
88888888
|
143648
|
0.13%
|
26
|
12345
|
136164
|
0.12%
|
27
|
123654
|
127012
|
0.11%
|
28
|
520520
|
125930
|
0.11%
|
29
|
aaaaaa
|
125162
|
0.11%
|
30
|
121212
|
121990
|
0.11%
|
31
|
00000000
|
121648
|
0.11%
|
32
|
789456
|
116758
|
0.10%
|
33
|
123456a
|
115594
|
0.10%
|
34
|
111222
|
112028
|
0.10%
|
35
|
5211314
|
110446
|
0.10%
|
表2 口令TOP35
表中列出了所有使用比率在千分之一以上的口令。按比例推算,有超过3259万人在使用“123456”做口令。如果把这个比例和银行卡信息 [3] 放在一起看,也许更可怕,犯罪者用1亿银行卡号与“123456”口令去试,结果发现有672万张卡可以取出钱来。即使每张卡只有100元,这也将是一个庞大的数字,超过了1亿元人民币。“123456”、“woaini”、“654321”、“5201314”、“5211314”看到这些口令笔者都忍不住咆哮:“这些口令都弱爆了,有木有!有木有!!!”
最常用的口令破解方法有三种:
字典破解;
暴力破解;
混合破解。
那么如果使用现有的数据作为基础效果会怎么样呢?
类型
|
总用户比例
|
站点C
|
站点D
|
站点E
|
站点F
|
站点G
|
站点I
|
TOP100口令
|
21.72%
|
21.32%
|
26.52%
|
21.34%
|
20.47%
|
22.37%
|
15.06%
|
特定模式弱口令
|
1.79%
|
3.13%
|
1.62%
|
0.45%
|
0.65%
|
3.03%
|
2.22%
|
用户名作为口令
|
3.75%
|
4.04%
|
4.55%
|
2.09%
|
2.45%
|
1.02%
|
1.53%
|
总计
|
27.26%
|
28.49%
|
32.69%
|
23.88%
|
23.57%
|
26.42%
|
18.81%
|
表3简单字典可以破解的口令比例
27.26%的用户可以通过TOP100口令尝试、特定模式弱口令(后续会针对特定模式弱口令进行分析)尝试、用户名作为口令尝试达到破解口令的目的。这是多么惊人的数字,超过1/4的用户的口令可以在201次尝试之内破解。再算一次刚刚的帐,1亿银行卡的话有27.26%可以轻易破解,每张卡100元也就是总计27.26亿元。也许转100元怕被发现,那么(按照好莱坞大片的情节)转1块钱,也能造就一个千万富翁(总计2726万元)。
除了表格中外,如果作为一个计算资源富裕的攻击者,还可以尝试穷举以下数据:
类型
|
总用户比例
|
站点C
|
站点D
|
站点E
|
站点F
|
站点G
|
站点I
|
手机号码口令
|
0.07%
|
0.06%
|
0.14%
|
0.00%
|
0.00%
|
0.06%
|
0.07%
|
mmddyyyy
|
0.06%
|
0.06%
|
0.12%
|
0.02%
|
0.13%
|
0.09%
|
0.01%
|
yymmdd
|
10.57%
|
7.53%
|
0.31%
|
10.45%
|
8.24%
|
16.59%
|
2.91%
|
yyyymmdd
|
6.35%
|
5.47%
|
10.69%
|
6.01%
|
4.77%
|
7.09%
|
2.86%
|
1900到2099
|
0.06%
|
0.02%
|
0.01%
|
0.04%
|
0.30%
|
0.05%
|
0.02%
|
电话或7、8位数字
|
21.66%
|
27.15%
|
6.93%
|
19.14%
|
20.02%
|
19.65%
|
14.36%
|
email
|
0.01%
|
0.00%
|
0.00%
|
0.00%
|
0.04%
|
0.00%
|
0.02%
|
总计
|
38.78%
|
40.29%
|
18.20%
|
35.67%
|
33.50%
|
43.52%
|
20.24%
|
表4适合穷举法破解的口令比例
虽然比较耗时,但是这些方法的效果也不错,只要肯用时间就能破解38.78%的帐号。好莱坞大片中的黑客总是能在几天、几小时、几分钟甚至几秒钟之内入侵一个系统,那么根据上述的数据我们可以粗略推算一下他的成功率大约是55.46%。当然要想提高对特定目标成功的成功概率还需要社会工程学 [4] 的知识。著名的黑客米特尼克在他的著作《欺骗的艺术》中对社交工程学进行了描述。
从上述的表格中可以发现,一些有趣的事实,例如:站点D和站点I的口令对抗穷举方面有显著优势;而且站点I相对较少TOP口令、特定模式弱口令、用户作为口令。据来源信息站点I是一款网页游戏、站点D是CSDN、站点C、E、F、G则为非IT专业论坛社区。在不断盗号的洗礼下,游戏用户的口令一般质量较高要强于其他用户,而IT技能较强的用户相对较少的使用数字、手机号、电话号、生日之类的作为口令。
总比例
|
站点C
|
站点D
|
站点G
|
站点I
|
|
消重后的口令数量/总用户数
|
29.58%
|
28.43%
|
62.81%
|
43.27%
|
65.20%
|
口令中含有特殊字符的用户
|
3.51%
|
0.41%
|
3.70%
|
4.56%
|
1.32%
|
纯数字口令的用户
|
56.55%
|
51.91%
|
45.01%
|
62.05%
|
36.37%
|
纯字母口令的用户
|
10.86%
|
10.24%
|
1.23%
|
9.97%
|
6.67%
|
纯小写字母口令的用户
|
10.43%
|
10.01%
|
11.64%
|
9.65%
|
6.49%
|
纯大写字母口令的用户
|
0.52%
|
0.13%
|
0.47%
|
0.17%
|
0.12%
|
用户名作为口令的用户
|
3.75%
|
4.04%
|
4.55%
|
1.02%
|
1.53%
|
用户名一部分作为口令的用户
|
3.29%
|
6.85%
|
2.94%
|
1.81%
|
3.96%
|
用户名加一些字符作为口令的用户
|
1.47%
|
0.65%
|
2.01%
|
3.18%
|
0.83%
|
表5各站点口令对比
从表中可以看到各站的用户口令比,站点D为1:0.6281,站点I为1:0.6520,由此映证了用户口令比可以在一定程度上体现站点的口令安全情况。
当口令泄漏事件发生后,某些人有目的的放出了一些垃圾数据或用已知的数据进行组合生成数据来混淆大家对特定厂商的关注,例如:站点G和站点H的口令TOP100与特说模式弱口令TOP100几乎完全相同,可以基本断定两份数据其中一份是伪造的。站点G的用户信息中我找到了我熟悉的几位同学,进行了询问,证明确实是早期该知名SNS社区的帐号且口令也正确。但站点H的信息则预期宣称的某知名微博毫无关系,系采用G的数据伪造而来。站点B的数据则更加离谱,口令中大量使用各大邮箱服务提供商的域名,其他口令则基本被站点C、F、G、H覆盖,基本可以断定,这份宣传是某知名网站的数据是由C、F、G、H的数据与部分随机生成数据伪造而成。
具体分析数据的过程是怎样的呢?在处理的过程中首先对数据进行着色,按照总体TOP100依照色轮进行着色。得到一个图谱 [5] 。
图 3 口令TOP着色图
从图谱中可以很容易的看到站点F和H的情况完全一样,数据等价。借鉴生物科学的基因图谱概念,如果两个生物的基因是类似的那么这两个生物也应该有一定亲缘关系。那么在这里我们可以认为如果两分数据的TOP100图谱是相似的,那么这两个站点也必然有一定亲缘关系。
在排除了上述的干扰数据并将一些对分析没有帮助的数据和错误数据删除后,我们可以得到一份干净的图谱。
排行
|
全体TOP
|
站点C
|
站点I
|
站点D
|
站点E
|
1
|
123456
|
123456
|
123456
|
123456789
|
123456
|
2
|
123456789
|
111111
|
123456789
|
12345678
|
123456789
|
3
|
111111
|
123456789
|
a123456
|
11111111
|
111111
|
4
|
123123
|
123123
|
5201314
|
00000000
|
123123
|
5
|
12345678
|
5201314
|
111111
|
123123123
|
5201314
|
6
|
5201314
|
a123456
|
123123
|
1234567890
|
789456
|
7
|
123321
|
123321
|
aaaaaa
|
88888888
|
123321
|
8
|
11111111
|
aaaaaa
|
1314520
|
111111111
|
1314520
|
9
|
a123456
|
7758521
|
q123456
|
147258369
|
12345678
|
10
|
666666
|
1314520
|
12345678
|
987654321
|
666666
|
11
|
1234567
|
123456a
|
123456a
|
aaaaaaaa
|
1234567
|
12
|
1314520
|
123
|
qq123456
|
1111111111
|
1234567890
|
13
|
7758521
|
woaini
|
7758521
|
66666666
|
7758521
|
14
|
888888
|
123123123
|
123
|
a123456789
|
888888
|
15
|
123
|
12345678
|
5211314
|
11223344
|
654321
|
16
|
1234567890
|
1234567890
|
woaini1314
|
1qaz2wsx
|
520520
|
17
|
654321
|
1234567
|
520131
|
xiazhili
|
a123456
|
18
|
woaini
|
112233
|
1234567
|
789456123
|
112233
|
19
|
112233
|
11111111
|
woaini
|
87654321
|
123654
|
20
|
123123123
|
5211314
|
q1q1q1q1
|
qqqqqqqq
|
147258369
|
21
|
88888888
|
qq123456
|
123321
|
000000000
|
5211314
|
22
|
123654
|
666666
|
520520
|
qwertyuiop
|
987654321
|
23
|
520520
|
asdasd
|
9958123
|
qq123456
|
147258
|
24
|
aaaaaa
|
7758258
|
qwe123
|
iloveyou
|
88888888
|
25
|
121212
|
123654
|
1314521
|
31415926
|
11111111
|
表6 口令图谱1
根据宣称的来源站点C是游戏门户网站、站点I是网页游戏、站点D是CSDN、站点E是论坛类社区,从途中亦可以看到四个站点明显的差异。一定程度上证明了来源信息是基本可靠的。
排行
|
全体TOP
|
站点D
|
站点E
|
站点F
|
站点G
|
1
|
123456
|
123456789
|
123456
|
123456
|
123456
|
2
|
123456789
|
12345678
|
123456789
|
123456789
|
111111
|
3
|
111111
|
11111111
|
111111
|
111111
|
123456789
|
4
|
123123
|
00000000
|
123123
|
123123
|
123123
|
5
|
12345678
|
123123123
|
5201314
|
5201314
|
123321
|
6
|
5201314
|
1234567890
|
789456
|
12345678
|
5201314
|
7
|
123321
|
88888888
|
123321
|
123
|
12345678
|
8
|
11111111
|
111111111
|
1314520
|
123321
|
666666
|
9
|
a123456
|
147258369
|
12345678
|
1314520
|
888888
|
10
|
666666
|
987654321
|
666666
|
1234567
|
1234567
|
11
|
1234567
|
aaaaaaaa
|
1234567
|
7758521
|
654321
|
12
|
1314520
|
1111111111
|
1234567890
|
666666
|
121212
|
13
|
7758521
|
66666666
|
7758521
|
5211314
|
789456
|
14
|
888888
|
a123456789
|
888888
|
888888
|
111222
|
15
|
123
|
11223344
|
654321
|
11111111
|
woaini
|
16
|
1234567890
|
1qaz2wsx
|
520520
|
654321
|
112233
|
17
|
654321
|
xiazhili
|
a123456
|
520520
|
1314520
|
18
|
woaini
|
789456123
|
112233
|
112233
|
7758521
|
19
|
112233
|
87654321
|
123654
|
woaini
|
88888888
|
20
|
123123123
|
qqqqqqqq
|
147258369
|
123654
|
11111111
|
21
|
88888888
|
000000000
|
5211314
|
1234567890
|
1234567890
|
22
|
123654
|
qwertyuiop
|
987654321
|
88888888
|
999999
|
23
|
520520
|
qq123456
|
147258
|
100200
|
555666
|
24
|
aaaaaa
|
iloveyou
|
88888888
|
147258
|
123654
|
25
|
121212
|
31415926
|
11111111
|
520131
|
123
|
表7口令图谱2
站点E、F、G则既有相似又有差异与E、G都属于论坛类,而F则属于SNS类的来源信息也可以认为符合。
很多网站采用MD5散列值方式保存口令,可以用口令图谱中的口令加快MD5反查的效率。例如前文表中TOP100的口令覆盖了20%以上的用户,那么对于很多网站来说,就会有20%的口令MD5仅仅需要在100个散列值中进行查找。一个完整的口令图谱的绘制将会诞生一个高效的彩虹表 [6] ,大幅提高攻击者的效率。
笔者使用上述站点形成的彩虹表对其他数据库进行了反查测试,效果良好对于一些站点甚至能达到50%以上的命中。
在上文中提到了特殊模式的弱口令,这类口令有十分明显的特点:采用用户名的一部分作为口令或者将口令的一部分作为用户名。例如:“a%pwd%”表示用户名为口令前加字母“a”,“%usr%123”表示口令为用户名后加字符串“123”。
排行
|
站点C
|
站点D
|
站点E
|
站点F
|
t站点G
|
1
|
a%pwd%
|
a%pwd%
|
www.%pwd%
|
www.%pwd%
|
%usr%A
|
2
|
q%pwd%
|
qq%pwd%
|
a%pwd%
|
%pwd%1
|
a%pwd%
|
3
|
qq%pwd%
|
%usr%%usr%
|
a%usr%
|
%usr%%usr%
|
%usr%A1
|
4
|
z%pwd%
|
%usr%123
|
qq%usr%
|
%pwd%2
|
%usr%A5
|
5
|
w%pwd%
|
q%pwd%
|
%usr%123
|
%pwd%0
|
%usr%A2
|
6
|
%pwd%1
|
w%pwd%
|
%usr%%usr%
|
a%pwd%
|
%usr%A3
|
7
|
aa%pwd%
|
%usr%1
|
qq%pwd%
|
%pwd%8
|
%usr%A4
|
8
|
l%pwd%
|
%pwd%1
|
w%pwd%
|
%pwd%3
|
%usr%A6
|
9
|
s%pwd%
|
z%pwd%
|
%usr%0
|
%pwd%4
|
%usr%A7
|
10
|
%pwd%123
|
%pwd%123
|
%pwd%123
|
%pwd%5
|
%usr%A8
|
11
|
%usr%1
|
l%pwd%
|
%pwd%1
|
%pwd%6
|
%usr%A9
|
12
|
asd%pwd%
|
A%pwd%
|
%usr%a
|
%pwd%7
|
%usr%1
|
13
|
x%pwd%
|
%usr%0
|
%pwd%2
|
%usr%1
|
%usr%123
|
14
|
as%pwd%
|
%usr%520
|
%usr%1
|
%pwd%9
|
%pwd%2009
|
15
|
li%pwd%
|
%usr%00
|
q%pwd%
|
%usr%456
|
%usr%%usr%
|
16
|
%pwd%a
|
s%pwd%
|
zhang%pwd%
|
%usr%123
|
qq%pwd%
|
17
|
%usr%0
|
%usr%11
|
wang%pwd%
|
qq%pwd%
|
%pwd%1
|
18
|
%pwd%0
|
%usr%123456
|
z%pwd%
|
%usr%0
|
%usr%0
|
19
|
qwe%pwd%
|
y%pwd%
|
%usr%456
|
a%usr%
|
q%pwd%
|
20
|
y%pwd%
|
%pwd%2010
|
%usr%520
|
%pwd%123
|
w%pwd%
|
21
|
%usr%123
|
%pwd%2
|
%pwd%520
|
q%pwd%
|
a%usr%
|
22
|
c%pwd%
|
%usr%1314
|
q%usr%
|
0%pwd%
|
z%pwd%
|
23
|
h%pwd%
|
c%pwd%
|
li%pwd%
|
%usr%@qq.com
|
%pwd%123
|
24
|
wang%pwd%
|
%usr%.
|
%pwd%2008
|
w%pwd%
|
%usr%a
|
25
|
a%usr%
|
li%pwd%
|
liu%pwd%
|
%usr%520
|
我是%pwd%
|
表8特殊模式弱口令
表中仅列出了全体中的一部分,其中常见的模式也有不少“姓氏拼音%usr%”、“姓氏拼音%pwd%”、“%usr%”与年份组合、“%pwd%”与年份组合之类,这些与直接用用户名来做口令也基本没有区别。
其中较为奇怪的数据是站点G中有大量类似“%usr%A” 且用户数量相当规整,相信该数据均为机器生成,可能与论坛机器人有关。利用一些发帖机器人常用的口令或口令模式作为过滤论坛自动注册机也许可以获得不错的效果。
分析到此总结一下:
1. 通常人的口令长度是5~9。如果要加强口令安全请使用字母数字混合且含有大小写字母的口令,如果可以请再添加几个特殊字符。
2. 用户口令比可以用来评估口令的安全情况。如果想要加强用户安全,建议保存口令的散列值,当发现口令散列值重复的时候提示用户请更改口令。或使用一用户一salt的方法,对口令进行混淆以防数据泄漏后根据统计信息或彩虹表破解口令散列值(用同类型网站的口令图谱)。
3. 仅依靠MD5的方式保存口令是不可靠的。
最后是一句话:加强站点自身安全建设,预防胜过任何补救方案。