题记——不只是CSDN着火了,谁能保护你的隐私,否则你将是坏人下一个猎物
背景
  只要你有微博,且关注互联网就会知道:国内最大的开发者社区CSDN的明文用户密码数据库已经被黑客拿到,并在2011年12月21日,在网上出现了广泛传播的版本,642万用户名密码信息已经成为公开的信息。常见密码存储方式对于用户来讲,用户密码信息显然是非常重要的,我们当然有必要了解社区管理者是如果保存我们的机密信息的。目前网站中主流存放用户名和密码的方式有三种:
1.   明文存放。这种网站的用户数据特别危险,网站被黑客拿下,用户数据直接拿走。
2.  可逆加密存放。你的密码会被加密一次存放在网站的数据库中,可逆加密也是非常危险的。
3.  不可逆加密。例如密码通过MD5等不可逆加密算法加密后存放在网站数据库中,比上述2种密码加密方式安全。(如果md5加密后的密码泄漏,明文密码仍有通过查找表的方式反查出来的可能)。
  通过网上流传的明文帐号密码信息,显然可以看出CSDN是采用明文的方式存储密码的,那么对于一个账户信息未泄漏的网站,我们如何判断一个网站是采用什么样的密码存储方式呢?
  一个很简单的方法,你通过密码找回功能操作,如果让你重设密码的,基本上是不可逆加密的,直接给你密码的,都是明文或可逆加密的,这种都非常危险。
攻击手法
  下面我们了解一下,黑客针对后台数据库的入侵手法:
爆库

  爆库,在黑客的圈子叫做“拖库”,是指将网站的数据库被黑客下载到本地。按照安全圈子的说法,国内有点影响力的网站,2/3都被爆过库(未证实),不要认为大的网站安全万无一失,防爆库是安全架构里非常重要的一点。
  防爆库不仅仅是防止别人拿到你的库,还要做到让别人拿去也没用。

  密码明文存储的,一定是死路,可逆加密的,只要黑客用点心,基本也挂;不可逆的,类似md5 加密(Md5加密方式虽然被我国专家证明可逆,但是逆向的成本很高,基本无人使用)应该很多人认为比较安全,但是碰到碰撞库一样死悄悄。类似于cmd5.com这样的碰撞库,其规模已经非常巨大,常规的密码的破解几率大于95%,至少,我常用的密码,我断定都在碰撞库里,原因很简单,不在碰撞库里的密码,就我的记忆力是没戏了。从下图是从一个md5加密过的库中随机挑了一个加密后的密码,可以看出,md5单次加密是很容易破解的。


Md5加密的库


Md5.com上查询结果


  那么如何规避这样的行为呢?
  一般的做法是两次md5或多次md5等加密保存方法,这种方法很好的避免了加密后的密码在类似cmd5.com这样庞大的碰撞库中出现。但是如果黑客拿到的数据库够大时,比如1千万的用户数据。有心的黑客会发现加密逻辑,再用一天跑一个几千万乃至过亿常用密码的碰撞库,专门来对付你的数据库,对于黑客来说不是什么难事。只要字典够好,破解率可以在60%以上。
  Discuz就在使用一种低成本的安全密码保护策略,他们使用随机salt二次加密。这种方法会使黑客破解密码的成本大大提高。黑客如果像破解这样的密码,需要为每一个用户(对应的随机salt)建立一个碰撞库,时间成本很高。对于大量用户的破解,黑客一般是选择放弃,投入产出比太低;但是对与单个明确目标的话,他们还是会乐于尝试的。
  不过得明确一点,爆库不等于密码泄漏。因为被爆库后,密码未必会被黑客破解。爆库+不正确的加密方式才叫密码泄露。
社工库
  在现在爆库泛滥的年代,加之密码破解率很高,社工库扫描也红火起来。简单来说,你可能会在很多网站使用同样的邮箱和密码,社工库扫描就是利用这点,知道你一个账户后,就可以得到其他更有价值的帐号。哪怕密码不相同,这个密码作为暴力破解中的关键字,也能大大提高破解率。
  就CSND那600w泄漏的账户中,我朋友亲测,可以使用一个账户成功登陆了支付宝,并且提示:“支付密码和登录密码一致,请更改…….” 这就是社工库的威力所在!下图是在CSDN库上随机找了一个邮箱,登陆成功。


  有人认为黑客这样做收效太小,没有意义,这点就搞错了。黑客并不是像我朋友那样逐一手工尝试的,而是用非常海量的数据批量扫描的,这样成本是非常低的,规模化的操作,甚至很多中招的人只是黑客意外收获,完全是没有成本的战利品。
对于社工库扫描,网站通常的做法就是验证码(防暴力破解也是这种方法)。但是简单的验证码是很容易识别的,网上流传很多验证码的识别源码。类似下面这些验证码都是可以识别的,源码和dll网上可以找到的。


  然而BT的验证码却会伤害用户体验,目前黑客也有应对BT验证码的方法。他们会将验证码集中传回到一个集中的地方,在网上请廉价的网络打工者填写。虽然这种方法成本有所提高,但是对于收益还是很低廉的。
如何规避风险
  我们能做什么来保护自己不被社工库扫描?或将损失降到最低?
  推荐做法是:重要账户和普通账户分离。具体操作如下:
1.  将帐号分类,公司帐号、有钱的帐号(支付宝等)、关系链帐号(朋友、人人等)和普通帐号。前2个为重要账户,关系链帐号较为重要。
2.  每种账户至少对应一套密码,而且密码之间毫无关系。
3.  每种账户对应的邮箱最好也能不通,因为密码找回往往依赖与注册邮箱。
4.  养成定期修改密码的习惯。
  对于网站开发人员来说,如何做到网站不被拖库?或将拖库的成本尽可能的提高?
  推荐做法是:
1.   经常对网站进行漏洞安全扫描,包括后门和注入类的扫描。
2.   使用中间层,让数据与前台分离。封装数据查询语句,一定不要用msql语句明文传递。
3.   给数据库自身设置密码,并且加密备份的数据。
展望
  被拖库的网站越来越多,下一个也许就是你最常用的网站。赶紧去修改关键账户的密码吧,要不下一个受伤的就是你!

 

 

看完后,还对其他信息安全的内容有兴趣?来论坛找找!

http://djt.qq.com/bbs/forum.php