一些網站https證書出現問題的情況分析
2020.03.26下午,有消息說[1]github的TLS證書出現了錯誤告警。證書的結構很奇怪,在其簽發者信息中有一個奇怪的email地址:346608453@qq.com。明顯是一個偽造的證書。
為了弄清楚其中的情況,我們對這一事件進行了分析。
DNS劫持?
出現證書和域名不匹配的最常見的一種情況是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,看起來很有可能是在鏈路上存在劫持。
有意思的是 在https后續的連接中其TTL值并不穩定,比如在響應證書的數據包中,其TTL變成了47,介于44和53之間,更接近于http鏈路的情況。作為對比,http的后續數據包的TTL值則一直穩定在44。
[20200327 23:00 更新] 在數據包內容方面,另一個值得關注的點是:被劫持的會話數據包(https)全部回包的IPID都是0. 正常數據包(http)首次回包IPID是0,之后的回包就不是了。
這是兩個有意思的現象。
被劫持會話后續返回的TTL值
因此,結合https會話過程中TTL值和IPID的異常,我們猜測是在鏈路上發生了劫持。
證書是怎么回事?
事實上,從我們DNSMon系統的證書信息來看,這個證書(9e0d4d8b078d7df0da18efc23517911447b5ee8c)的入庫時間在20200323早上六點。考慮到數據分析的時延,其開始在大網上使用最晚可以追溯到20200322。
同時可以看到,這個證書在證書鏈上的父證書(03346f4c61e7b5120e5db4a7bbbf1a3558358562)是一個自簽名的證書,并且兩者使用相同的簽發者信息。
相關證書信息
受影響的域名及時間
從上圖中可以看到,該證書的影響不僅僅在github,實際上范圍非常大。通過DNSMon系統,我們提取出了受影響的域名共14655個。
通過DNSMon系統查看這些域名的流行度,在TOP1000的域名中,有40個域名受影響,列表如下:
- 1 www.jd.com
- 5 www.baidu.com
- 10 www.google.com
- 37 www.sina.com
- 44 www.163.com
- 51 www.douyu.com
- 62 www.suning.com
- 86 www.pconline.com.cn
- 91 sp1.baidu.com
- 126 twitter.com
- 137 www.eastmoney.com
- 143 mini.eastday.com
- 158 sp0.baidu.com
- 174 www.jianshu.com
- 177 www.mgtv.com
- 185 www.zhihu.com
- 232 www.toutiao.com
- 241 price.pcauto.com.cn
- 271 www.google.com.hk
- 272 video.sina.com.cn
- 299 www.youtube.com
- 302 www.acfun.cn
- 365 www.vip.com
- 421 news.ifeng.com
- 451 car.autohome.com.cn
- 472 www.facebook.com
- 538 www.gamersky.com
- 550 www.xiaohongshu.com
- 552 www.zaobao.com
- 580 www.xxsy.net
- 621 www.huya.com
- 640 mp.toutiao.com
- 643 www.ifeng.com
- 689 www.ip138.com
- 741 dl.pconline.com.cn
- 742 v.ifeng.com
- 784 www.yicai.com
- 957 passport2.chaoxing.com
- 963 3g.163.com
- 989 www.doyo.cn
對這些域名發生證書劫持時的DNS解析情況分析發現,這些域名的解析IP均在境外,屬于這些域名在境外的CDN服務。值得一提的是盡管這些域名都是排名靠前的大站,但是因為國內訪問的時候,CDN解析會將其映射為國內的IP地址,因此國內感知到這些大站被劫持的情況比較小。
受影響二級域排名
在二級域方面,github.io 是受影響最大的二級域,也是此次劫持事件的關注焦點。
- 1297 github.io
- 35 app2.xin
- 25 github.com
- 18 aliyuncs.com
- 17 app2.cn
- 14 nnqp.vip
- 10 jov.cn
- 8 pragmaticplay.net
- 7 tpdz10.monster
- 7 suning.com
從時間維度來看,這些域名的首次被劫持時間分布如下:
從圖中可以看出域名首次受影響的數量有日常作息規律,并且在3月26號數量有了較大幅度的增加。
結論
- 劫持涉及域名較多,共計14655個,其中TOP1000的網站有40個;
- 劫持主要發生在國內用戶訪問上述域名的海外CDN節點的鏈路上。國內用戶訪問國內節點的情況下未見影響;
- 所有這些劫持均使用了以 346608453@qq.com 名義簽名的證書,但我們沒有找到 編號 346608453 的QQ用戶與本次劫持事件相連的直接證據,也不認為該QQ用戶與本次事件有直接關聯;
- 所有這些劫持最早出現在 2020.03.21 23時附近,持續到現在。并且在過去的24小時(26日~27日)處于高峰。