2020.03.26下午,有消息称[1]github的TLS证书出现错误报警。证书的结构很奇怪,其颁发者信息中有一个奇怪的邮箱:346608453@qq.com。明显是假证件。为了了解发生了什么,我们分析了事件。域名劫持?最常见的证书和域名不匹配的情况是DNS劫持,即访问的域名的IP地址与建立连接的真实IP地址不一样。以被劫持的域名go-acme.github.io为例。该域名在我们passiveDNS数据库中的IP地址主要使用fastly上托管的以下四个IP地址。可以看到它的数据非常干净。直接对域名进行连接测试,可以看到TCP连接的目的地址正好是185.199.111.153,但是返回的证书是错误的证书。所以github证书错误的问题不是DNS层面的问题。劫持是如何发生的?为了弄清楚这个问题,可以通过抓取链路上的数据包来分析。为了更好的对比,我们先后抓取了443端口和80端口的数据。如下图,TCP三次握手中服务器响应对比。左边的数据包是https连接,右边的数据包是http连接。可以看出,https的服务器响应TTL为53,http为44。一般来说,时间接近的时候,连接的是同一个目的IP,数据包在链路上的路径是近似的。https的TTL明显大于http的TTL,看来链接可能存在劫持。有意思的是,它的TTL值在https后续的连接中并不稳定,比如在响应证书的数据包中,它的TTL变成了47,介于44和53之间,更接近于http链接。相比之下,http后续数据包的TTL值一直稳定在44。[2020032723:00更新]在数据包内容方面,还有一点值得关注:被劫持的所有返回包的IPID会话数据包(https)为0。正常数据包(http)第一个返回包IPID为0,后续返回包不会。这是两个有趣的现象。被劫持会话后续返回的TTL值因此,结合https会话期间TTL值和IPID的异常,我们猜测该链接发生了劫持。证书怎么了?其实根据我们DNSMon系统的证书信息,这个证书(9e0d4d8b078d7df0da18efc23517911447b5ee8c)的存储时间是20200323早上六点。考虑到数据分析的时间延迟,其在网上的使用最晚可以追溯到20200322。同时可以看出证书链中该证书的父证书(03346f4c61e7b5120e5db4a7bbbf1a3558358562)为自签名证书,两者使用相同的颁发者信息。从上图可以看出相关证书信息受影响的域名和时间,这个证书的影响不仅仅是在github上,其实范围非常广泛。通过DNSMon系统,我们共提取了14655个受影响的域名。通过DNSMon系统查看这些域名的流行度。TOP1000域名中,有40个域名受到影响。榜单如下:1www.jd.com5www.baidu.com10www.google.com37www.sina.com44www.163.com51www.douyu.com62www.suning.com86www.pconline.com.cn91sp1.baidu.com126twitter.com137www.eastmoney.com143mini.eastday.com158sp0.baidu.com174www.jianshu.com177www.mgtv.com185www.zhihu.com232www.toutiao.com241price.pcauto.com.cn271www.google.com.hk272video.sina.com.cn299www.youtube.com302www.acfun.cn365www.vip.com421news.ifeng.com451car.autohome.com.cn472www.facebook.com538www.gamersky.com550www.xiaohongshu.com552www.zaobao.com580www.xxsy.net621www.huya.com640mp.toutiao.com643www.ifeng.com689www.ip138.com741dl.pconline.com.cn742v.ifeng.com784www.yicai.com957passport2.chaoxing.com9633g.163.com989www.doyo.cn在发生证书劫持时分析这些域名的DNS解析,发现这些域名的解析我P都是境外的,属于境外这些域名的CDN服务。值得一提的是,虽然这些域名都是排名靠前的网站,但是在国内访问时,CDN解析会将其映射到国内IP地址,所以在国内,这些大网站被劫持的情况比较少。受影响二级域名排名在二级域名方面,github.io是受影响最大的二级域名,也是本次劫持事件的重点。1297github.io35app2.xin25github.com18aliyuncs.com17app2.cn14nnqp.vip10jov.cn8pragmaticplay.net7tpdz10.monster7suning.com从时间上看,第一个劫持时间分布如下:从图中可以看出,首次受影响的域名数量有一个日常规律,3月26日数量明显增加。结论劫持涉及的域名较多,共计14655个,包括40个TOP1000网站;劫持主要发生在国内用户访问上述域名的海外CDN节点的链接上。国内用户访问国内节点无影响;所有这些劫持都使用了以346608453@qq.com名义签名的证书,但我们没有发现任何直接证据表明QQ用户号346608453与本次劫持事件有关,也不认为该QQ用户与本次事件有直接关系;所有这些劫持最早出现在2020年3月21日23:00左右,一直持续到现在。并且在过去24小时(26日至27日)处于高峰期。
