CSDN明文口令泄露的启示
2011年12月21日晚,某计算机专业的大学生寝室,某同学大叫到:“兄弟们,最新的日本XX女星的AV片已经下好,大家快过来看啊,相当精彩啊~~~”,然而,这个寝室里的其它同学似乎没有听到这哥们的呼喊,于是,这哥们又叫了三次,没有人理他,因为大家都在眉飞色舞地谈论着CSDN的明文密码和用户帐号泄露的事情,并在网上查找着下载CSDN那600万的用户数据……上面这个故事是我编的,只是想描述一下昨晚的情形。
其实,CSDN明文密码并不是什么稀奇的事情,我是2000年注册CSDN的吧,当时找回口令的机制就是把口令直接传回来了,这一定是明文了。去年去CSDN参加移动互联网沙龙的时候,范凯和蒋涛说过明文密码的事,不过他们说的是很早以前的事了,而且一笔带过了。1年后的今天,事情又暴了,可见,“出来混的,迟早是要还的”这句话是几近真理的。
我在以前的BLOG里就提到过CSDN的明文密码(在“如何设计用户登录功能”一文)和 帐号泄露(“如何设计自己的口令”) 的事(由此可见,酷壳里的很多文章里的事都应验了,因为我知道“出来混的,迟早是要还的”)
(可悲吧?还是程序员的网站呢,明文口令和用户信息泄露有悖于一个程序员网站的称号)
泄露的密码分析
我昨晚下载了www.csdn.net.sql文件,并分析了一下这个文件,经过各种awk, grep, sort, uniq, sed后,下面是我看到的东西:
- 有近45万的用户使用 123456789 和 12345678 做口令。
- 有近40万的用户使用自己的生日做口令。
- 有近15万的用户使用自己的手机号做口令。
- 有近25万的用户使用自己的QQ号做口令。
- 设置成弱口令的用户占了590万,也就是那种就算你用MD5或是SHA散列的也能很快就被暴力破解出来的口令。
- 只有8000多个用户的口令里在8个长度以上,并有大写字母,小写字母,数字,并不在字典表里。
(很好,这回泄露的还不单单只是明文用户密码和用户邮件,还有用户的手机号,生日和QQ号。挺好的)
下面,我们来看一下top 100的口令是什么?(第一列是采用这个密码个数,第二列是密码,我擦 dearbook是什么啊)简单地看了一下,top 一万的口令都很SB。比如什么woshishui, 123abc, aaa123456,01010101,haohaoxuexi,msconfig 相当的2B,还有P@ssw0rd,q1w2e3r4t5,看似文艺,实际很2的口令…. (可悲吧?还是程序员的网站呢,自己设的口令有悖于一个程序员的称号)
235033 123456789
212751 12345678
76346 11111111
45902 dearbook
34953 00000000
19986 123123123
17791 1234567890
15033 88888888
6995 111111111
5966 147258369
5553 987654321
5459 aaaaaaaa
5145 1111111111
5025 66666666
4435 a123456789
4096 11223344
3667 1qaz2wsx
3649 xiazhili
3610 789456123
3497 password
3281 87654321
3277 qqqqqqqq
3175 000000000
3143 qwertyuiop
3094 qq123456
3077 iloveyou
3061 31415926
2985 12344321
2886 0000000000
2826 asdfghjkl
2797 1q2w3e4r
2580 123456abc
2578 0123456789
2573 123654789
2540 12121212
2515 qazwsxedc
2396 abcd1234
2380 12341234
2348 110110110
2298 asdasdasd
2243 22222222
2166 123321123
2160 abc123456
2145 123456
2138 a12345678
2113 123456123
2106 a1234567
2100 1234qwer
1989 qwertyui
1986 123456789a
1971 aa123456
1918 asdfasdf
1891 99999999
1859 999999999
1859 123456aa
1854 123456123456
1699 520520520
1656 963852741
1652 741852963
1652 55555555
1589 33333333
1480 qwer1234
1384 asd123456
1339 77777777
1316 qweasdzxc
1285 code8925
1273 11112222
1268 ms0083jxj
1245 zzzzzzzz
1214 111222333
1206 qweqweqwe
1200 3.1415926
1183 123456qq
1148 147852369
1136 521521521
1121 asdf1234
1111 123698745
1109 1123581321
1058 asdfghjk
1054 q1w2e3r4
1038 12345678a
1003 woaini1314
991 1234abcd
988 123qweasd
975 1qazxsw2
967 woaiwojia
920 321321321
910 05962514787
894 123456987
892 kingcom5
882 zxcvbnm123
882 5845201314
853 0987654321
847 wwwwwwww
835 11111111111111111111
805 12345600
783 11235813
777 1q2w3e4r5t
772 10101010
770 123456asd
老生长谈安全问题
从酷壳出现开始我就在老生长谈用户安全的东西了,今天借着这个事,大家再去重温一下酷壳的文章吧:
- Twitter禁用的口令。看看去吧,一个好的网站应该如何引导用户设置强口令。Apple ID也是这样,需要你输入的口令有大小写,数字,非数字和字母,等等。今天CSDN的这个列表应该成为各大网站“口令禁用列表”。
- 有朋友说,明文口令是巨2的一件事,是的。我可以告诉你,这个明文口令有可能存在于所有国内的网站上,比如:QQ,新浪,人人,开心,天涯……。对于安全问题,你要做最坏的假设,鲁迅先生说过:“不惮以最坏的恶意来推测中国人”,所以,对于中国的网站你要做如下最坏假设:1)其以明文存我的口令,2)其内部不良员工会把我的信息泄露出去。不信你可以看看下面的某QQ群里的截图:(看看多玩网明文口令的消息吧,再看看这个消息吧 QQ邮箱和QQ号的)
- 你可能会说用MD5和SHA散列口令就好了,这个只比明文好一点点,因为有rainbow table,国外的号称达到99%覆盖,国内的达到93%覆盖。你加salt也没有用。就算我只能拿得到你的被散列的密码,没有rainbow和salt,我一样可以使用暴力破解,甚至就是尝试一下字典里的密码就可以了。这会非常快的,你可以看看本站的这篇文章“破解你的口令”,现在暴力破解MD5和SHA的口令很快的,因为MD5和SHA性能太好了。所以,你需要看看“如何防范密码被破解”,其会告诉你加密口令要用一个性能差的算法——bcrypt。(也可以参看Web开发中需要了解的东西中的如何安全保存口令一文)
- 所以,你有必要地读一读我的这篇“如何管理和设计自己的口令”,不要在同一网站上使用相同的口令,把口令的级别分好的组。自己管理好自己的口令。
- 对于Web用户的安全问题,程序员们一定要看一下 这两篇文章,你要是不看的话,你没有资格开发Web项目。
- 当你看过 如何设计用户登录功能 一文后,你一定会头晕的,所以,我想告诉你,这种事情最好不要自己干,使用OpenID 和 OAuth吧,人家把这事干到了极致了。而且这样会带来两个好处:
- 用户不需要自己维护和管理一套新的帐号。
- 用户的资料放在国外,从政治上来说是安全的。(八卦一下:Google总部要求中国谷歌所有开发团队不得在本地保存用户的信息)
- 再说一点,再说说如何让自己内部的用户数据不会被不良员工外泄。所有的开发团队都不允许直接操作用户的数据库,只允许通过安全的接口来验证用户,用户信息的数据库中需要对操作者有审计功能,永远不允许不受信的人或操作进行全库扫描。当然,我相信,国内的开发团队绝对达不到这一步(包括某些银行)。
- 再说一下,真正的安全系统是协同整个社会的安全系统做出来的一道安全长城,而不是什么都要自己搞。比如:通过很多方法“耦合”和银行和电信其是别的第三方的安全策略,比如,让用户绑定邮箱,绑定手机,绑定信用卡等。
最后说一下,CSDN在这次事件的表现看上去还是很不错的,道歉也很诚恳,但是,我还是希望CSDN反思一下为什么数据库会泄露了?内部有不良员工?还是系统不安全被黑?不要只是诚恳道歉,还要找自己的原因。其它的网站可能就很恶劣了。包括新浪,人人,开心等,最恶心的就是腾讯,你说他的安全有问题,他还找一堆人来骂你。
祝大家新年快乐!