IT技术博客大学习 共学习 共进步

谈谈近期的安全事件

caoz的和谐blog 2012-01-03 23:33:58 浏览 2,242 次

    微博发了一道安全常识题,从反馈看,搞不太清楚的人还是蛮多的。

    有意思的是,搞不清楚的人多数认为是我搞错了。微博就144个字,也说不开,挪这里详细说说。

    很多网站都有用户系统,有用户系统就有密码存放,通常,密码都是加密传输的,为了安全,通常是单向散列加密,或者说,不可逆加密,一个简单的判断是,你通过密码找回功能操作,如果让你重设密码的,基本上是不可逆加密的,直接给你密码的,都是明文或可逆加密的,这种都非常危险。

    用户系统面临的风险大体包括

    1:弱口令扫描

    2:注入

    3:侦听

    4:爆库

    5:社工库扫描 

    此外XSS蠕虫或其他溢出神马的,限于篇幅,在这就不多提了。

     目前玩弱口令扫描的少了, 因为投入产出不经济,注入是另一个话题,本文不提,侦听要特别强调一下,不但存储要注意安全,在传输和用户录入过程中的安全也非常关键,这也是类似支付宝,银行网关等产品经常要安全控件的原因,而作为常规的网站往往不肯如此影响用户体验,在用户体验至上的环境里,https也往往不被主流网站采纳,一个简单的方法是,在登陆后生成一个临时密码作为当前用户的权限识别标记,这个临时密码会在会话结束后过期,这样的优点是临时密码基本上不太担心被侦听(除非是实时捕获实时操作)而登陆过程只有一次,认证过程很多次,所以被侦听到的几率就会小很多。另外,前端js加密也是有用的,有些人从“技术”上会反驳,我知道你js加密手段,我很容易破解你,你加密有什么用?但是我希望大家有一个概念,很多情况下,正在玩侦听的家伙并不是针对你的网站的,也往往并不是很专业的,可能就是网吧里看了一个黑客教程,下载了一个sniffer就开始玩的小p孩,设置的这些门槛,并不是针对那些盯着你非搞你不可的家伙,而能过滤掉这些无聊的过路黑客,对你的用户来说,也是很有意义的事情。在成本较低,而你的网站知名度也不是很高的情况下,这些技术上看上去并不特别靠谱的事情还是可以大幅度提高你的安全性。记住一点,很多黑客并没有明确的针对性,喜欢网上撒网,然后看到有意思的东西再去搞,你不能让他看到一眼就觉得你的东西很好搞。

     爆库的事情是本文的重点,按照 tombkeeper 教主所说,国内有点影响力的网站,2/3都被爆过库,不要认为自己的网站安全万无一失,防爆库是安全架构里非常重要的一点。防爆库不仅仅是防止别人拿到你的库,还要做最坏的打算,别人拿到会怎样;密码明文存储的,100%是死路,可逆加密的,只要黑客用点心,也是死路。不可逆的,很多工程师会以为可以高枕无忧了,但是这就是碰撞库的范畴;类似于cmd5.com这样的碰撞库,其规模远远超出了早期的字典档,所以常规诸如md5或者mysql password加密的密码,在碰撞库里被破解的几率,大于95%。至少,我常用的密码,我断定都在碰撞库里,原因很简单,不在碰撞库里的密码,我是断然记不住的。 那么如何规避这样的行为呢?加大加密强度?比如2次 md5? 3次md5? 固定salt 2次md5 ? 貌似不在碰撞库里了,是不是安全了呢?不是!只要你的加密算法是固定的,而且是黑客所能掌握的(比如固定salt被黑客知道),那么黑客跑一个常规密码档是非常快的,在这种情况下,你的用户库账号越多,黑客投入产出比越有价值,虽然没有cmd5这么庞大的碰撞库,但是用一天跑一个几千万乃至过亿常用密码的碰撞库,专门来对付你的数据库,也是很值得的事情,这种破解率,会很容易达到60%,有些朋友在微博反馈里说70%,大概也是这种类型。低成本的安全策略,就是随机salt二次加密,为什么discuz会用这种方法,是有原因的,因为这种开源软件你无法封闭你的加密途径,你必须让系统在开源的情况下,密码不会被破解(或者说门槛太高,投入产出不合理),有人说随机salt黑客会看到,并不安全;这个观点的问题误区在于,仍然只是将黑客当做针对特定账号的行为,而没考虑到黑客的真实生存环境,随机salt(每个密码独立的salt)的意义,对于只破解单独账号,与固定salt并无区别,但是对于破解一个庞大的用户数据库而言,固定salt黑客只需要跑一个碰撞库,而随机salt需要对每个密码跑一个碰撞库,这个计算成本。。。遇到这样的情况,你较真说,黑客一个个salt跑,一样可以跑出60%的密码,但是,绝大部分黑客,遇到这样的情况,会放弃,因为,不值得这样的投入。

     很遗憾的是,国内太多,太多,太多知名网站,都没有对用户密码做到足够防护,以至于太多网站一旦爆库就会泄露绝大部分用户密码,比如最近传闻的人人网和开心网,虽然不能完全证实,但是从传闻来看,显然也是被破的七七八八了。记住一点,爆库不等于密码泄露,爆库+不正确的加密方式才是密码泄露!

     另外,虽然中国山东大学出了一个王小云教授震惊了世界,但是逆向md5目前仍然是不现实的事情,别说这玩意很简单,没有黑客会如此滥用计算力,除非是政府机构,针对特定目标,你的账号,通常情况下,不值得这样做,除非你是屏蔽词。

     在爆库泛滥和密码破解率很高的情况下,社工库扫描就很流行了,简单说,你在若干网站用了同样的账号和密码,其中一个 被爆库,密码被泄露,你的账号和密码就进入了社工库,这个库现在很庞大,有数亿条记录,是的,caoz的记录也在里面,要不是圈里的朋友提醒,我都不知道自己也中招了。因为一个著名站长社区被爆库,导致我在百度passport的密码外泄。这就是社工库的威力所在!有经验的黑客会利用社工库扫描著名网站,输入社工库的账号和密码,看能不能匹配成功,这个成功率就比弱密码扫描高出不止一个数量级,这也是弱密码扫描不再流行的原因! 微博最近频繁出现盗号事件,据查也是社工库扫描导致的。我们网站和很多朋友网站也遇到了社工库扫描。有朋友如徐宥箴认为黑客这样做收效太小,没有意义,他搞错了一点,黑客并不是逐一手工尝试的,而是用非常海量的数据批量扫描的,这样成本是非常低的,规模化的操作,甚至很多中招的人只是黑客“搂草打兔子”的附带品,完全是没有成本的战利品。黑客只要抓住一个大号就赚了,很多无辜的被过路盗掉了而已。防止社工库扫描,目前除了验证码,并无太好手段,但是验证码又是一个“伤害用户体验"的行为,所以最近新浪BT验证码频繁被骂,也着实无奈。(不BT的验证码是很容易破解的,网上有开源程序,caoz试过,很好使的!)

     以上这些,是针对当前微博盗号事件的一个简要总结,如果您看不懂,可以转给您所在公司的技术负责人,如果您所在公司的技术负责人也不懂,而恰好您的公司维护一个非常重要的发布在互联网上的用户库,请你们大boss迅速换掉这个技术负责人,就这样。

     更多技术话题不展开,caoz也是业余的,这玩意也就是科普。想探讨更多的,建议在新浪微博上请教 @benjurry, @tombkeeper。

建议继续学习

  1. HashMap解决hash冲突的方法 (阅读 12,463)
  2. 关于memcache分布式一致性hash (阅读 11,660)
  3. MinHash原理与应用 (阅读 6,920)
  4. 无锁HashMap的原理与实现 (阅读 6,582)
  5. LVS hash size解决4096个并发的问题 (阅读 6,280)
  6. 如果用户在5分钟内重复上线,就给他发警告,问如何设计? (阅读 5,882)
  7. Ubuntu 下Hash校验和不符问题的解决 (阅读 5,463)
  8. 分布式系统hash策略 (阅读 5,124)
  9. redis源代码分析 - hash table (阅读 4,442)
  10. Cuckoo Filter:设计与实现 (阅读 4,223)