2011年12月24日

CSDN及人人网的用户密码分析

本帖墙内镜像:
http://blog.csdn.net/program_think/article/details/7100551

本周,互联网上的一大新闻就是:多个知名网站被脱库,上千万用户资料侧漏。对俺这种长期在安全圈混的人,自然最关心泄漏出来的用户口令啦。这可是活生生的第一手材料啊。今天正好周末,俺就抽空分析了一下CSDN和RenRen的用户密码。毕竟这两个网站名气大,CSDN可以代表技术人员的圈子,人人网的用户据说高校学生居多。考虑到俺博客的读者不少,或许有些人热衷于网络安全,没准也对密码分析感兴趣,干脆就把分析结果分享到博客上。

  对于CSDN被泄露的600多万用户数据,俺多罗嗦几句:
  据CSDN官方的说法,这仅仅是2009年的数据。不过,据圈内的小道消息,其实黑客拿到了所有用户数据,这次只是公布了其中一部分。俺查了一下公布的数据,里面没有俺的帐号——可是俺 program_think 这个帐号在2009年1月份就在CSDN注册了。另外,里面也没有刘未鹏同学的帐号(pongba)——他更加是CSDN的老用户了。而有些网友是2010年注册的帐号,却出现在公布的数据中。所以,CSDN官方的说法很可疑。

★样本的说明


  CSDN的样本,总共是3列数据,分别是用户名、口令、邮箱。格式比较严谨,所有数据都可用。数据量大约是642万8千。
  RenRen的样本,总共2列,分别是用户名(同时也是邮箱)和口令。此样本的格式不太严谨。俺去掉了大约3万无效数据(比如用户名不是合法的邮箱地址),还剩大约473万5千。

★密码长度分布


长度范围CSDN (%)RenRen (%)
[1,6]1.9231.89
[7,12]90.8065.86
[13,18]7.171.70
[19, ]0.210.55


长度CSDN (%)RenRen (%)
50.513.10
61.2925.28
70.2618.11
836.3820.17
924.1412.01
1014.487.34
119.786.79


点评:
  (从平均水平看)CSDN用户的密码长度显然大于人人网用户。

★密码类型分布


类型CSDN (%)RenRen (%)
纯数字45.0152.97
纯小写字母11.6419.96


点评:
  纯数字的口令,比例太高,不是好现象。
  对于同样长度的口令,纯小写字母相比纯数字,其组合的可能性更多,更难暴力破解。

★使用手机作密码



CSDN (%)RenRen (%)
手机号2.18(约14万)2.91(约13万8)


点评:
  作为口令的手机号,多半就是本人的手机号。
  手机的稳定性远高于电子邮箱。因此,这个信息的价值还是挺大滴。如果有人想搜罗手机号的话,这下可有福了。

★使用生日作密码


日期格式CSDN (%)RenRen (%)
YYMMDD0.143.59
YYYYMMDD5.92(38万)2.67
MMDDYYYY0.060.11
YYYY-MM-DD小于0.01小于0.01
YYYY.MM.DD小于0.01小于0.01
YYYY/MM/DD小于0.010


点评:
  用生日做口令,表面上看,位数还挺多(少的有6位,多的有8位,加分隔符的话甚至有10位)。
  但其实这种口令很弱。因为可能的生日个数是很有限的——生日通常分布在1940年以来——大约是365×70=25550。即便算上不同的格式,也就十多万种。如果是程序来穷举,用不了一柱香的功夫。

★密码和用户名相关


类型CSDN (%)RenRen (%)
直接拿用户名做密码4.55(约29万2)0.04
密码包含用户名0.25小于0.01
密码是用户名的一部分2.04(约13万1)1.57


点评:
  很奇怪,CSDN居然有这么多人拿用户名作口令,比例远远高于人人网用户。这有点不合逻辑啊。
  本文发出后,不少CSDN的用户留言,解释此原因:因为网友经常需要上CSDN下载东西(比如电子书)。但是CSDN不提供匿名下载。所以就临时注册一个用户。为了省事,口令就设置成跟用户名一样了。

★用英文单词作密码


俺拿四级词汇作为字典,测试了一番。比例如下:
CSDN (%)RenRen (%)
0.110.19


点评:
  两个网站的比例都不算高,表扬一下。
  顺便说一下,在作密码的单词里,排名第一的是 password。这个习惯跟老外是一致的。

★用数字作密码


  前面给出的按类型统计中,纯数字的比例是很高的。纯数字密码,常见的组合有如下。

类型CSDN (%)RenRen (%)
1234567893.91(约25万1)0.72(约3万4)
123456783.31(约21万2)0.25(约1万2)
1234567小于0.010.11(约5千)
1234560.03(约2千)3.73(约17万7)
12345小于0.010.31(约1万5)
全是00.65(约4万2)0.61(约2万9)
全是11.41(约9万1)0.91(约4万3)
全是20.040.05
全是30.030.04
全是40.010.02
全是50.030.05
全是60.09(约6千)0.11(约5千)
全是70.030.05
全是80.25(约1万6)0.13(约6千)
全是90.060.05


点评:
  上述这些组合,都属于弱爆了的口令——极易被入侵者攻破。
  使用这些组合的用户比例还挺高。这下,口令攻击者可就爽了。
另外,全8的口令明显要高一些,而全4的比例明显低。貌似迷信的因素也体现到口令设置了。

★名人的口令


  CSDN上有不少知名博客(也叫专家博客)。本来,俺以为:既然号称专家,那安全意识应该不会太差吧。所以,俺今天抱着偷窥明星隐私的丑恶心态,查了几个名人的密码。
  结果,看下来很令人失望啊——很多知名人士的密码,貌似也很弱啊!为了避免让某些人难堪,俺就不举例说明了。
  说到专家博客,顺便插一句:俺也曾经也是CSDN的专家博客之一。今年8月份,CSDN要搞专家实名制。但是俺死活不肯公开真实身份。所以,俺的专家资格已经被取消啦 :-(

★俺的忠告


  经过这次脱库事件,希望诸位能意识到密码的重要性。强烈建议看一下俺去年写的帖子——《如何防止黑客入侵[2] - 如何构造安全的口令/密码》。
  还有,无论如何也不要在多个地方共用相同或相似的密码。
版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者编程随想和本文原始地址:
http://program-think.blogspot.com/2011/12/csdn-renren-password-analysis.html

40 评论:

路人甲 说...

博主能否分析一下密码明文保存的原因?

匿名 说...

再强的密码也敌不过傻逼的网站

flouse 说...

毕业好几年了,最近也刚好在进一步学密码学和信息安全,然后网络上就爆了这“TK”事件,于是也跟风了解了一些。

正如楼上所说,再强的密码也敌不过“傻逼的网站”啊,我也确实不明白,就算CSDN刚建站时意识不强,但都这么些年了,安全机制总该升级一下吧?人的惰性再次暴露……

话说回来,若是明文加密了,登陆时再加上随机码,客户端(浏览器)再组合密码生成签名后,提交给服务器。这样即使密码密文被截或登录过程的签名被截取,也无法再次使用其来登录了。

通过这样的设计,可以获得较高的安全性,避免了常见的黑客攻击方式。同时用户也无需担心网站管理员看到用户的密码。
参考:http://www.guokr.com/blog/81458/

以上,如理解得不对,还请博主赐教。

编程随想 说...

to 1楼的网友:

明文保存的根源,俺不妨猜测一下。
CSDN建站比较早(1999年),那时候整个IT业界的安全意识还挺淡薄的。很可能某程序员为了省事,就把口令保存成明文了。记得那会儿,疼讯的OICQ(可能很多人没听说过OICQ吧)也被安全圈的人爆光过,用很傻B的方式传输登录密码。

如果说,CSDN早期的程序员这么干,属于个人能力和意识的问题。那么,这个问题存在了10年之久,显然就不仅仅是程序员的个人问题,应该上升到团队管理层的问题了。

编程随想 说...

to 2楼的网友
“傻逼网站”确实是一个大问题。恰恰是因为很多网站的傻逼,才更要注意个人密码的安全。

俺的宗旨是:
即便俺在任何一个网站的密码明文暴露了,俺的其它所有密码依然是安全的。
要做到这一点,就要确保各个密码之间没有明显的相关性。
(俺在原文末尾着重强调了这点)

编程随想 说...

to flouse
你提到的加密措施(包括果壳网那篇文章提到的),主要是对付系统外部的入侵者。
不过,现在有很多入侵者属于系统内部入侵者。

所谓“系统内部入侵者”,主要有如下几种可能:
其一,可能是内鬼;其二,可能系统已经被深度渗透。
对于一个内部入侵者,他/她不光可以拿到你的用户数据库,还可以拿到你的系统代码(很多网站的服务端程序,都是脚本语言,等同于源代码)。

在这种情况下,上述防范措施有可能失效。
具体原因,你也算安全专业人士了,应该想得到吧? :-)

如果有更多人对此问题感兴趣,俺可以专门写一个帖子,介绍内部入侵者的话题。

匿名 说...

碰上这种傻逼网站真的没什么好说的。
看推还看到一种说法:“领导要某某某的密码”。。。
我看过django的密码存储,是随机“加盐”然后sha1散列,楼主认为这种方式足够安全吗?

匿名 说...

问博主一个哦:不同网站账号设置木有关联的不同密码,会造成有很多个不同的密码,咋记得呢?

编程随想 说...

to 楼上的楼上
光散列不“撒盐”的话,一旦入侵者拿到用户数据库,可以通过构造彩虹表,批量破解用户库中的密码。
一对一撒盐,可以防止上述的攻击手段;但无法防止暴力穷举。
假设入侵者就看重少数几个关键用户的口令,即使你撒盐了,入侵者在拿到用户库之后,依然可以尝试暴力破解。

编程随想 说...

to 楼上的楼上
看来你没有听从俺的建议,去看《如何防止黑客入侵[2] - 如何构造安全的口令/密码》。
仔细看完那篇文章,你自然就明白,如何构造多个貌似无关联的口令,而且还很好记。

匿名 说...

我是16点整发评论的那个。
《如何防止黑客入侵[2] - 如何构造安全的口令/密码》这篇文章主要讲的是用户如何构造和使用安全的密码,其实我很早就看过您这篇文章了。我主要关心的还是服务端怎么处理,以前我写点小程序,也就是简单的哈希,非常低级,所以后来我参考过django框架内置用户模块的密码处理,它就是每条记录随机加盐(不过盐的长度是固定的)。我知道穷举是无法防止的,但如果密码处理过后能让穷举的时间成本足够高,那效果应该还是能满足需求。

匿名 说...

呃。。发现博主后面那个回复不是回给我的。。还以为博主弄错了。。真不好意思哈。

ushuz 说...

又来了4000万的样本,博主接着分析一下吧?

编程随想 说...

to 楼上的楼上
BlogSpot的评论功能比较弱,让俺很不爽。
建议匿名留言的网友,随便写个昵称,以便俺回复的时候区分开。

编程随想 说...

to ushuz
最近测漏的网站一个接一个,把俺的眼睛都看花了 :)
俺打算观望几天,等该漏的都漏得差不多了,再搞个汇总的合集。

Priezt 说...

"很奇怪,CSDN居然有这么多人拿用户名作口令,比例远远高于人人网用户。这有点不合逻辑啊。"
CSDN经常会有一些Unique的资料供下载,但是不能匿名下载,会有人(譬如说本人)只是想下载东西,也不看文章、也不做什么贡献(汗),就随便注册一个帐号,为了下次可以重复利用,密码当然选一个好记的,所以CSDN上的垃圾帐号比例应该远多于RENREN的。
我是这么分析的,请前辈指教。

编程随想 说...

to Priezt
你的分析有道理。
有些CSDN的网友也在俺的CSDN博客上留言,提出了同样的理由。
没想到CSDN的用户群里,居然有20多万,很可能属于一次性用户。

Liuyix 说...

密码不加密保存有一个说法是便于有关部门的调查方便才这样保存的

wk 说...

博主你好,你这个是通过什么程序来分析的啊,我想要知道这个程序的名称,谢谢

匿名 说...

博主,你一整就整个“黑客”啥的文章,俺只是想俺不同账号的密码不相关好记点。哪老整这么高层次的东东哦~
嘿嘿,不过你再次建议了,俺个IT外行也会好好读读它吧:-)

编程随想 说...

to Liuyix
最近俺也看到这种说法——保存明文是为了方便党国索取密码。

另外,有更进一步的传言说:
党国要求各大网站提供用户资料给政府做备案。而党国备案的这些资料却又落入黑客手中。
随着曝库的网站逐渐增多,这种可能越来越大。

编程随想 说...

to wk
俺是自己写 Python 脚本,分析用户库的。
稍微懂点编程的话,应该不难写出来。

pongba 说...

原来我的没泄露啊!:D

真·樱之舞 说...

请教博主一个问题 账户名都是同一个,密码不同像碰上这次大范围"被脱"怎么确定哪个账户的密码是安全的哪个是不安全的.我不确定我下载到的数据库就是全部.

忠党爱国 说...

关于密码问题,我说两点;

1 到了共产主义社会,我们所有人生产资料公有,生活资料也公有,当然,思想意识也要公有。到那时,十三亿中国人民用一个脑袋想问题,用一个声音说话,思想上和党中央保持高度一致。

这样就没必要设置每个人的账户密码了,因为共产主义了,网络帐户也必须共产。

让我们努力工作,早日迎接这一天的到来!

2 有了泄密事件,更说明网络实名制和GFW的必要性。

如果完全采用上网实名制,黑客就不会这么猖獗,大家就可以在欢乐祥和的气氛中放心上网了。

如果建立双向GFW制度,那么境外黑客就不会破解我们的密码,境内黑客也不能学习破解技术,这么和谐的局面,是我们每个公民期盼已久的。

强烈呼吁完善上网实名制和双向GFW的制度。建立网络白名单制度。建立电脑购买实名制。

马上禁止无线宽带共享!停止WIFI热点建设!停止无线城市建设!

这是一个党员的心声!

胡锦涛 说...

博主什么时候能继续64系列啊

编程随想 说...

to pongba
看来咱俩的运气还不错 :)

编程随想 说...

to 真·樱之舞
如果你在近期被脱库的网站里,有自己的帐号,为了保险起见,把密码都改了吧。
比如说,CSDN曝光的用户数据,虽然没有俺的帐号,俺还是把密码改了,以防万一。

编程随想 说...

to 胡锦涛
看来你是六四系列的热心读者 :)
近期出了太多劲爆的事情(比如金二胖归西、众多网站被脱库、韩寒谈革命)。俺的注意力被严重分散,导致六四系列没有及时发下一篇。
非常抱歉!
俺争取在元旦前后发下一篇。

shaks 说...
此评论已被作者删除。
匿名 说...

这里评论能被博主删除吗?

编程随想 说...

to 楼上的网友
俺是可以删除评论的。
不过,俺一般不删,除非如下情况:
1、垃圾广告留言
2、留言人不小心多点了按钮,导致同样内容重复发多份

至于楼上的楼上,shaks 的那个留言,是其本人自己删除的,所以显示“作者已删除了此帖。”

匿名 说...

事件发生前,我把所有的密码都改了就是忘记改CSDN的密码,难道这是天意?

Fightclub@_@TTK 说...

楼主大侠 我转载到人人上了哈,按你的要求 源地址 连接 还有那个声明全部复制 但是最下面有个翻墙方法,我能不能改成翻和谐墙方法,要不然会被管理员删

Fightclub@_@TTK 说...

to 胡锦涛
HAHA ME TOO

编程随想 说...

to Fightclub@_@TTK
非常感谢对俺版权的尊重 :)

“翻墙”那一节,不属于“版权声明”的一部分,不附上也没关系。能附上当然更好。

编程随想 说...

to 胡锦涛 & Fightclub@_@TTK
六四系列,1月5日发了一篇。争取过年前后再发一篇。

匿名 说...

有段时间没上来了。 @ 2012-1-7 21:11:00 建议你修改一下东西保存实力。因为太多东西容易被分析定位出某人所在的信息来了。你懂的。同时请删除此信息和我上一信息。谢谢。

匿名 说...

仅此而已。并非因为其它删除引起来的联想。

匿名 说...

覆盖好过删除。你懂的。

发表评论

请说说对本文的看法,或者对本博客的建议吧。

你的参与就是我的动力 :-)

如果点了“发布”按钮后,评论没有出现,可能是被Google误判为垃圾广告。俺会定期把误判的评论恢复出来。