欢迎转载,请支持原创,保留原文链接:http://blog.ilibrary.me

关于数据源

本文主要利用网上泄露的天涯用户密码数据,很老的数据了,做攻击应该是不具备价值了,有价值的话肯定早被那些网络骗子洗掉了。

数据总共是有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个天涯账号就可以破解其中一个的密码,然后,你就可以去发垃圾广告啦!(我怎么会说出这么没有品德的话来?)

所以,人不能懒啊,一定不要偷懒设这种规律性很强有很简单的密码,要不然账号被盗了都不知道为何。

我们在来看一下弱密码的规律.

  1. 第一类是重复的或者连续的数字。上面top 4的也属于这一类。还有什么666666888888, 888888881234567, 等等
  2. 一些示爱性的数字或者拼音,这估计都是年轻朋友设置的密码,暗藏了对恋人爱的欲望(Sorry, 是奉献)。 woaini, 1314520, iloveyou, woaiwojia, 520520, 5211314, 好像就这几个比较高频。荷尔蒙的力量真是强大!
  3. 键盘布局. qwerty, qwertyuiop,zxcvbn, zxcvbnm,147258369, qazwsxedc, 等等。这种应该是对密码强度有一定意识,选了一直好记的键盘布局,实际上不安全。
  4. 一些特殊的数字或者字符串。 圆周率3.1415926, windows, tianya, 这种有特殊意义的密码出现频率也比较高,比较容易猜.
  5. 测试账号, 机器人。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%.

结论

总体上来看,

  1. 简单密码是非常不可取的.
  2. 键盘密码,连续数字字母等密码也很容易通过字典破解。
  3. 个人生日,手机号做密码的比例很高,这也很容易成为社工的目标。
  4. 分析中发现,测试账号,水军,广告账号非常多。