Twitter用户密码明文保存漏洞的安全警示

前段时间,美国大型社交网络平台Twitter和Facebook均爆出信息泄露事件。这些安全事件的背后究竟发生了什么,作为普通用户应该如何防范,作为开发人员又应该从这次事件中吸取什么经验教训呢?

5月3日,美国大型社交网络平台Twitter向所有用户发布提醒,称此前存在重大漏洞,导致用户密码以明文形式保存在内部日志中,并建议所有用户更换密码。该事件是在美国另一个大型社交网站Facebook大规模信息数据泄露事件发生之后的另一起安全事件,有一位网友评论道:“Twitter这是用实力替正处于风口浪尖的Facebook挡了一刀,然而他们牺牲的都是用户的隐私,威胁的都是用户的安全”。

确实,根据统计,目前Twitter有3.3亿的月活跃用户,而这些用户可能都受到了此次安全事件的影响。那么,这安全提示的背后究竟发生了什么,作为普通用户应该如何防范,作为开发人员又应该从这次事件中吸取什么经验教训呢?

漏洞成因分析

根据Twitter官方的声明,在他们的哈希转换流程中,会使用一个名为bcrypt的函数对密码进行掩码处理,也就是用随机的一系列数字和字母替代实际密码,并将这段随机字符存储在Twitter系统内。这样一来,该平台就可以在不显示用户密码的前提下,核实帐号身份。这样也是绝大多数其他网站所使用的做法,已经成为了行业标准。

但根据上述信息,在用户密码被bcrypt函数处理之前,都是以明文形式储存的。这也就意味着,针对一些不法分子来说,存在着能直接获取到用户密码的“窗口期”。不仅如此,根据Twitter官方声明,“由于某种原因,密码在完成哈希转换前被写入一个内部日志。”这样一来,就直接导致了部分用户密码被明文存储在了日志之中,任何阅读该日志的内部员工(或不法人员)都可以不费吹灰之力查看到用户密码。

普通用户的防范措施

声明中没有告诉我们究竟有多少用户的密码被明文记录,也没有说明这一漏洞存在了多久,同样我们也不清楚这些存有明文密码的日志是否发生了外泄。由此看来,并不是100%系统的安全性都是绝对可靠的,考虑到恶意入侵、0day漏洞爆出和人为失误等因素,我们必须从用户的角度防范密码泄露所带来的风险。针对用户,能做的大概有以下几点。

  1. 使用“大写字母+小写字母+数字+特殊符号”形式的高强度密码;
  2. 针对敏感和重要的账户(例如支付宝、网银、常用邮箱、常用社交平台、常用聊天软件),单独设置密码,避免“一个密码走天下”,同时可以开启这些账户的登录双因素认证(例如静态密码+验证码认证、静态密码+令牌认证等);
  3. 针对其他系统,根据账户的类别或账户的重要程度,分级设定密码;
  4. 针对所有账户,定期更换密码,避免“一个密码伴一生”;
  5. 避免以姓名全拼或缩写、手机号码、出生日期、企业名称或缩写等与身份隐私相关的信息作为密码。

我有一个朋友小李,饱受推销电话的困扰,于是他想要找出来究竟是谁泄露了自己的隐私。之后,他在注册每一个平台的时候,留下的姓名都与平台相关,例如:李美团、李腾讯、李携程、李新浪等等。直到有一天,他又接到了一个推销电话,立刻就知道是谁出卖了他的信息。

如果大家觉得自己的记忆力实在堪忧,我们可以借鉴小李的经验,设置一个复杂密码作为基础,再在该密码后面附加上注册的平台信息。例如,我的基础复杂密码是Ch0c0!ate,注册滴滴的时候可以改成Ch0c0!atedidi,注册微博的时候可以改成Ch0c0!ateweibo,这样一来,每个平台的密码都是不同的,还方便易记,在一定程度上能够防范“撞库”的风险。

开发人员应借鉴的经验

根据声明中提供的信息,可以推断出前端在提交之前没有将密码进行哈希处理,而是在后端完成的这一过程。并且,该漏洞很有可能是某次测试中记录了明文日志,提交生产环境时忘记去掉该日志所导致的。因此,开发人员首先需要注意的一点是,在完成测试工作后,务必关闭调试模式,删除测试所需且正式环境不需要的功能或代码,并进行反复检查。

此外,Twitter在后端使用的是bcrypt实现加密,由于该算法的运算速度较慢,因此安全性较高,非常适合用于对密码进行哈希运算,有类似需要的开发人员可以参考选用。

最后,我们要探讨一个问题,如果我在前端就做了哈希运算,是不是就足够安全,以至于后端没有必要再进行加密运算呢?答案是否定的。如果将哈希运算过程改至前端,并且后端不再进行任何处理,假如某天系统的数据库遭到泄露,攻击者就可以直接修改客户端向服务端发出的请求,将密码的相关字段替换为数据库中加密后的密文,即可直接登录。因此,无论前端是否加密,都不能降低后端的安全性需求。

在密码处理这一点,我们可以参考借鉴国外云存储平台DropBox,该平台首先采用SHA将密码长度变为固定值,随后使用bcrypt方式加密,最后使用一个全局密钥进行AES加密,以防范密文出现泄露。

结语

美国著名公益人士、《号角日报》记者彼得·帕克曾经说过:“能力越大,责任越大”。在提醒用户通过密码分级防范风险的同时,我们也要呼吁各系统,特别是大型系统的开发人员,务必要注重用户隐私的保护,防范信息泄露,不给任何黑产以可趁之机。

发表评论