漏洞详情

披露状态:

2014-11-10: 细节已通知厂商并且等待厂商处理中
2014-11-15: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

不知道能不能通过审核,因为毕竟12306的根证书问题是众所周知的了,而且攻击的条件比较苛刻。但是我认为12306不应被特殊对待,不安全就是不安全。这个报告不是陈词滥调,详细描述里有具体攻击方法及策略。

详细说明:

简单来说就是12306让用户通过HTTP下载根证书,这就给中间人一个替换官方证书为自己证书的机会。如果能被成功安装中间人根证书,任何HTTPS网站的安全都没了。
以下所有描述的前提条件是我们能监听和修改用户与任何网站之间的通信。
请注意我不是想钓鱼,因为用户确实去的是12306网站,也确实是从官网上下载的证书,只是我们偷偷地换了。
所以关键在于让用户从12306下载证书:
准备工作:做个高仿真SRCA的自签名根证书。像这样:

faked_cert.png


然后用这个根证书给kyfw.12306.cn签名:

faked_kyfw.png


然后给你想攻击的任何网站签名,比如Google:

srca_google.com.png


最简单的情况是,用户之前没下载过12306根证书。现在想买票,用户会主动从 [1] 下载根证书,换成自己的即可。
但问题是12306已上线多年,大部分用户都已经装好了根证书。再加上中间人控制的网络范围有限。危害不大。(但其实也有!)
如何解决这一难点?一个办法是,即使用户装了根证书,我们也可以轻易地让浏览器显示证书安全警告。这只需要阻断用户与服务器之间的通信,用之前做好的根证书代替服务器和用户进行TLS握手。因为用户暂时没有我们的证书,所以浏览器肯定会警告用户“此网站的安全证书存在问题。此网站出具的安全证书不是由受信任的证书颁发机构颁发的”。从TLS的设计上来讲,出现这个警告就是意味着用户正在受中间人攻击。但是12306网站是如此的中间人友好!首页红字写着:“网上购票由于安全警告无法登录问题说明”,点开链接之后,用户会知道没有有效证书不是因为被攻击,而是因为“没有导入12306.cn网站客运首页所载的根证书” [2]。所以用户本着“出错就重装”的心理,我猜他们即使知道自己之前装过根证书,面对安全警告他们很可能会重新下载根证书,也可能忽略警告。要不然他们还能怎么办?我想在这种情况下几乎没有用户能想到自己正在被中间人攻击。
为了验证我的这个猜想,我在知乎和百度贴吧里查了下有没有这种装了根证书还有警告的情况。发现有:
1、http://www.zhihu.com/question/24715677: 问题:“为什么在12306网购火车票老是提示安全证书不被信任,就算重新安装了安全证书?”(匿名用户2014-08-03发表于知乎)注意“重新安装”4个字。
2、http://www.zhihu.com/question/23391000: 问题:“上网买票时根证书安装完成导入成功,可是还是买不了票,系统提示如下,这是怎么回事呢?”(Lyshell Viya 2014-04-13发表于知乎),这位用户倒是没提是否重装。
3、http://tieba.baidu.com/p/2784747639 “【求助】12306证书错误问题 重新安装了根证书怎么还...”(2013-12-28,tianjun31,百度chrome吧),“重新安装”。
4、http://tieba.baidu.com/p/3375565083 “根证书总是提示无效,我硬是点进去了”(2014-10-27,斷掉的铅子笔,百度12306吧),“硬是点进去了”
5、http://tieba.baidu.com/p/2355041684: 楼主最后一句话:“删了 重按还是不行”(2013-05-28,alankirk,百度12306吧),“重按”
等。可见按照上述方法攻击,绝对有人会上当。
还剩一个问题,就是客户端的中间人攻击影响范围窄,又是对特定网站攻击,条件显然苛刻。万一中间人控制的网络下没人买火车票,就没用了。所以为尽量扩大成功率,应当在抢票高峰期进行,地点要选在人口尽量稠密的公共Wi-Fi区。我想公共图书馆可能是一个好的选择。
说这么多,我不是真想去攻击,而是说明一下风险真的存在。
[1] http://www.12306.cn/mormhweb/ggxxfw/wbyyzj/201106/srca12306.zip
[2] http://www.12306.cn/mormhweb/kyfw/question/201204/t20120427_701.html: 铁道部信息技术中心 中国铁道科学研究院

漏洞证明:

用户装完中间人的根证书之后,我们就可以窃取任意网站cookie了。比如在任意网页页面插入那些网站地址的图片:

cookie.png

修复方案:

从受主流浏览器信任的CA买证书。或者说你们继续运营SRCA,但是找个上级CA给你们签个名,构成完整证书链。

标签: none

评论已关闭