密码规律分析
关于数据源
本文主要利用网上泄露的天涯用户密码数据,很老的数据了,做攻击应该是不具备价值了,有价值的话肯定早被那些网络骗子洗掉了。
数据总共是有3000w条记录,只有用户名和密码,没有敏感信息。考虑到法律法规方面的因素,这里不提供任何数据源相关的链接和资料,想研究的同学自己去收集。谨记: 非法收集用户信息是要担责的。
最开始是想用pandas做分析, 但是加载的时候抛错(可能是因为数据量太大了):
raise ValueError('skipfooter not supported for iteration')
所以,最终选择把输入导入mysql,用sql来分析。
频度分析
首先分析哪些密码是最常用的密码。sql指令比较简单,就是简单分组再计数:
select password, count(password) as c from tianya3000w group by password order by c desc;
该命令在Macbook Pro i7, 16GB mem 上跑了 17分钟,总共有13223012条分组,也就是说密码重复度达到了 (3000 - 1322)/1322 = 126.9%, 也就是说挑一个账户,你都可以找出另外1.26个和它密码相同的账号。
重复次数操过千分之一的密码都贴在了本章节的底部。现在看是分析。
首先是简单密码123456 3.93%
,111111 0.969%
,000000 0.6%
, 123456789 0.57%
当之无愧的排在了榜首. 用这4个密码,随机尝试16个天涯账号就可以破解其中一个的密码,然后,你就可以去发垃圾广告啦!(我怎么会说出这么没有品德的话来?)
所以,人不能懒啊,一定不要偷懒设这种规律性很强有很简单的密码,要不然账号被盗了都不知道为何。
我们在来看一下弱密码的规律.
- 第一类是重复的或者连续的数字。上面top 4的也属于这一类。还有什么
666666
,888888
,88888888
,1234567
, 等等 - 一些示爱性的数字或者拼音,这估计都是年轻朋友设置的密码,暗藏了对恋人爱的欲望(Sorry, 是奉献)。
woaini
,1314520
,iloveyou
,woaiwojia
,520520
,5211314
, 好像就这几个比较高频。荷尔蒙的力量真是强大! - 键盘布局.
qwerty
,qwertyuiop
,zxcvbn
,zxcvbnm
,147258369
,qazwsxedc
, 等等。这种应该是对密码强度有一定意识,选了一直好记的键盘布局,实际上不安全。 - 一些特殊的数字或者字符串。 圆周率
3.1415926
,windows
,tianya
, 这种有特殊意义的密码出现频率也比较高,比较容易猜. - 测试账号, 机器人。
googletester
竟然出现了6001次,注册信息'Google测试员1003', 'googletester', 'googlead1003@hainan.net'
.vicekw
,shmily
,deeven
. 这些密码要么特殊标记,要么是非常见字符串,但是重复次数非常高。
占比超过千分之一的密码都挑了出来(3756878 12.5%):
123456 1179757
111111 296869
000000 183219
123456789 176212
123123 104891
123321 59308
5201314 55707
12345678 54913
666666 50601
111222tianya 47494
888888 46770
1234567 40993
654321 39358
789456 28825
111222 28483
woaini 28350
112233 26583
1314520 25456
0 24639
7758521 24525
88888888 23472
11111111 22997
121212 22721
1234567890 22680
131313 22295
555666 21221
999999 21155
a123456 20816
1 20456
123654 20440
123 19820
980099 19212
333333 18365
520520 17600
147258 16279
zxcvbnm 16037
aaaaaa 16004
100200 15711
222222 15530
abc123 15366
00000000 14302
110110 13242
147258369 13038
1111111 12381
iloveyou 12241
123456a 12195
323232 11856
987654321 11758
5211314 11482
qazwsx 11058
393041123 10788
555555 10554
qwqwqw 10374
7758258 10333
tangkai 10102
qwerty 9887
7777777 9718
qqqqqq 9630
456123 9624
zzzzzz 9570
12345 9523
123123123 9378
159357 9185
521521 9007
31415926 8881
123qwe 8819
789456123 8665
778899 8199
1234 8176
1qaz2wsx 7698
456789 7522
666888 7390
dedewang 7207
123698745 7165
1314521 7068
vicekw 7020
123789 7017
201314 6969
777777 6932
101010 6884
qyahzn 6846
168168 6650
987654 6584
159753 6581
password 6537
asdfgh 6379
llllll 6266
googletester 6001
634142554 5884
123000 5863
123456abc 5781
123abc 5708
tianya 5626
qwertyuiop 5577
qweasd 5459
qq123456 5445
789789 5432
314159 5424
963852 5263
asdasd 5252
qazqaz 5217
1q2w3e4r 5154
*123456 5045
0000000 5012
asdfasdf 4990
369369 4866
594232 4865
yj2009 4843
ffffff 4838
11223344 4692
131420 4682
qwe123 4663
584520 4624
ASDFGHJKL 4621
456852 4603
741852 4575
131421 4534
ABC123456 4530
deeven 4529
abcd1234 4512
476730751 4415
007007 4341
1111111111 4304
123654789 4225
110119 4180
9233923 4175
135246 4149
zxcvbn 4121
780813 4102
999999999 4093
741852963 4030
147852 4022
753951 3994
321321 3984
123qweasd 3972
0123456 3962
211314 3959
518518 3947
456456 3939
811224bai 3939
888999 3900
111 3862
0123456789 3819
QQWWEE 3748
444444 3744
windows 3741
123457 3709
963852741 3708
asd123 3657
010203 3651
3.1415926 3639
258369 3639
336699 3632
qazwsxedc 3590
qaz123 3585
654123 3567
1234560 3550
1111 3547
12341234 3545
147369 3540
1q2w3e 3531
q123456 3529
12344321 3460
321654 3382
woaiwojia 3359
az123456 3332
119119 3320
112358 3318
qwe123456 3315
7758520 3305
911911 3300
1314 3297
520530 3297
0000000000 3263
564335 3222
951753 3207
3429795 3196
7654321 3166
110120 3164
11111 3127
135790 3125
ww111111 3116
abcdefg 3103
102030 3096
686868 3084
shmily 3057
258258 3041
733733 3022
87654321 2997
生日分析
我们来分析一下有多少人会把生日做为密码的一部分。为了简化分析,我们不考虑只摘取生日一部分的情况,只考虑年月日(YYYYMMDD)的情况, 包括在生日前后加其它字符的情况。
sql: select count(*) from tianya3000w where (password REGEXP '(19|20)[0-9]{2}[0|1][0-9]([0-2][0-9]|30|31)');
总共有184w, 总占比6.13%, 用生日做密码的人确实多,只要个人生日泄露,用生日做密码的人就危险了。
手机号分析
统计所有待手机号的密码数量: select * from tianya3000w where (password REGEXP '(13[0-9]|178|18[2-8]|15[0-2])[0-9]{8}');
统计出来总计74.9w, 占比2.50%
和用户名相似度分析
很多人喜欢把用户名包含在密码里面,方便记忆。我用sql统计了一下密码里面包含用户名的数量: select count(*) from tianya3000w where (user like password);
有31.4016w(1.05%)人使用了用户名作为密码的一部分。 其中31.393w人用户名和密码完全一样, select count(*) from tianya3000w where (user = password);
通过用户名直接破解密码的概率为1%
键盘布局分析
我就简单摘取排名靠前的几种组合来统计一下百分比吧。
下列是占比较高的键盘型密码, 总数(125845, 0.42%).
zxcvbnm, 16037
zxcvbn, 4121
qazwsx, 11058
qwerty, 9887
1qaz2wsx, 7689
qwertyuiop, 5577
qweasd, 5459
qazqaz, 5217
1q2w3e4r, 5154
qwe123, 4663
123qweasd, 3972
ASDFGHJKL, 4621
qazwsxedc, 3590
qaz123, 3585
1q2w3e, 3531
# 小键盘密码
753951, 3994
147852, 4022
147258369, 13038
147369 , 3540
321654, 3382
963852741, 3708
密码长度
统计了一下平均的密码长度,sql select avg(length(password)) from tianya3000w;
平均长度为8.2812, 貌似还不错
纯数字密码
纯数字密码是最容易暴力枚举的密码,
# select all possible phone number
select count(*) from tianya3000w where (password REGEXP '(13[0-9]|178|18[2-8]|15[0-2])[0-9]{8}');
总共有18941611 63.14%
, 比例非常大。
测试,水军,马甲账号,广告
这个数据特征比较难识别,这里只能简单做些正则匹配,真实结果肯定比这里查询出来的结果要高出很多很多。
这里主要统计了忽悠重灾区的几个关键词面膜
,减肥
,健身
, 养生
, 保健
, 外加了几个通用的广告性名称。
另外, test
和测试
作为显著的测试账号标识也参与了统计。
select count(*) from tianya3000w where (user REGEXP '(test|测试|马甲|销售|代理|微商|面膜|减肥|健身|养生|保健)');
查询出来总共886589 2.955%
, 测试及广告用户比例达到了2.955%.
结论
总体上来看,
- 简单密码是非常不可取的.
- 键盘密码,连续数字字母等密码也很容易通过字典破解。
- 个人生日,手机号做密码的比例很高,这也很容易成为社工的目标。
- 分析中发现,测试账号,水军,广告账号非常多。