晚餐时间看新闻说12306有超过13万条用户信息(包括用户名、密码、邮箱、真实姓名和身份证号)被泄露,第一反应是马上要看看自己的信息有无被泄露。
怀着忐忑的心情打开“12306@邮箱-密码-姓名-身份证-手机_(1).txt”,然后输入自己的姓名:没有!再输入邮箱:没有!再输入手机号:没有!这才舒了一口气,貌似没有中招。
接着随便帮几个大学同学查了一下信息,竟然有一人中招,傅老师迅速致电告知他修改密码,并简单了解了一下,所有信息果然一致。可见这次泄露出来的131653条12306用户密码信息是真实的。
事实上自从2011年CSDN用户明文密码泄漏之后,对国内的网络公司就再也不抱有任何信任了,技术不行,用户信息被盗那是迟早的事。所以傅老师买火车票大多是走代售点或者火车站的自动售票机,一共在12306上买过4次,怎么买的,呵呵,看下图:
当下正值春运售票高峰,12306乃被严重吐槽的对象,出了这个事情,12306的运营方“中国铁路客户服务中心”不但毫无“悔意”,甚至还顺便将问题嫁接到“第三方网站”。那么从技术角度来看一下这个事情,有哪些亮点呢?
亮点1:明文密码
这次12306被泄露的131653个用户信息全部是明文密码,傅老师绝对相信12306“数据库所有用户密码均为多次加密的非明文转换码”。现在还在使用明文密码的网站应当被工信部立即关闭,比如封80端口、拔网线、搬服务器什么的都可以!
亮点2:真实姓名+身份证号
用户在初次注册12306时,只有用户名和密码是必须填写的,注意这个用户名并非用户真实姓名。姓名、身份证号和手机号码是注册以后才会添加的信息。傅老师也注意到12306的注册页面是走的https加密页面。
那么问题来了,“撞库”怎么会把用户的真实姓名、身份证号和手机号码给撞出来呢?
首先解释下什么叫“撞库”。黑客手中有一个来自其他渠道的“用户名:明文密码”数据库,这个数据库不是12306的,但是这个数据库可能比较大,比如说有上亿条数据,然后黑客通过12306提供的接口(绝对不可能手动一个一个验证)去匹配他手上的“用户名:明文密码”数据库信息,凡是成功登录的,就记录下来,这样黑客就能获得一个类似“12306@邮箱-密码-姓名-身份证-手机_(1).txt”这样一个真实的12306用户数据库,这个过程就是“撞库”了。
显然“撞库”只能探测到一个已知的“用户米:密码”是否可以登录12306,那用户真实姓名、身份证号码和手机号码又是从哪流出来的呢?12306这个时候急于撇清干系,立即声明:“网上泄露的用户信息系经其他网站或渠道流出”。
其实现在思路已经很清晰了,3种可能:
1、信息的确是从其他网站或渠道流出,这个前提是黑客手中的数据库已经包含了所有信息:用户名、明文密码、真实姓名、手机号码、身份证号码。在这种情况下,黑客可以使用同样的方法去校验京东、微博甚至支付宝信息。
2、12306系统有开发者未知的后门或者漏洞,黑客凭用户名和密码登录系统后即可获取所有用户信息。
3、12306未经用户许可将数据共享给了第三方网站,结果第三方网站被黑客拿下,用户信息全部曝光。
对于可能性1,想了想常用的网站,没几个拥有这么全的数据的。
新浪微博是不知道用户真实姓名的;京东是没有用户身份证号码的;各种邮箱也不会收集用户真实姓名和身份证号码;腾讯QQ显然也不知道用户真实姓名和身份证号码;银行拥有所有信息除了密码不对,因为银行密码是6位数字;顺丰等快递根本不用密码;社保卡什么的也没有密码。
想来想去只有淘宝/支付宝拥有用户全部信息:用户名、明文密码、真实姓名、手机号码、身份证号码!
其实要想知道到底是哪种可能并不难,只需要找几十位被泄露信息的用户了解一下找到他们网站注册和使用的共同点,很快就能在大方向上判断出数据泄露于何处。
现在回过头来看12306,真的是“撞库”无辜吗?NO。
12306在这个事件中至少有一处错误:12306系统的用户名/密码校验系统不能识别是机器登录还是软件自动登录,以致于“黑客”可以轻而易举地自动批量校验其手上的用户登录信息。