社会的基础设施我们可以说是电力、水、交通,甚至现在包括空气,是一个社会赖以生存的基础,离开了它可能整个社会就无法进行了,现在互联网已经成为了这个社会的基础设施。但是互联网自身的基础设施又是什么呢?什么东西在互联网里面,如果离开了它互联网就不转了呢?我觉得有这么几个方面。
首先就是路由系统BGP,除了物理光纤以外,其他的就不应该再依赖了。其次是DNS,我们没有办法记住所有的IP地址,如果DNS瘫了,所有的应用也就没有办法正常访问了。然后是PKI,比如现在的CA这套系统,我们现在所有的电子商务,网上购物这些应用几乎都是建立在这个PKI的基础上,如果没有了PKI,或者PKI如果出了问题,我们的互联网就只能退回到也许是二三十年以前,大家只能在网上去聊聊天,玩玩游戏,聊天的时候你还不知道对方是个人还是一只狗,这是以前的一个漫画。再往上,我们的应用基本上就依赖于DNS、PKI以及最底层的BGP,来完成可靠的安全传输和通信。
我们逐一看一下,比如BGP路由系统。IISP之间的网间的路由系统是用的BGP的协议。目前的BGP第四个版本的协议对于邻居,对于跟它互联的IISP发来的路由的公告是没有一个密码机制的验证手段。告诉我去往某一个路由是从我这儿最近,一般我就只能去接受。而且也就是说,这种现任是建立在相互的信任基础之上的,我们并没有密码的保障,我相信你是个好人,你说的话我就相信。但是他的话有可能是从别的朋友那里听来的,你可以相信你的朋友,你的朋友的朋友你可不可以相信呢?比如在这个图(PPT)里面,比如AS4收到了一条来自于AS2的公告,AS2又是从AS1过来的?AS4相信AS2,但是它能相信AS1吗?在这个当中没有任何的信任权威,我们可以看到这方面的一些问题。
DNS看上去是一个树型层次的授权模型,父节点把子空间授权给了子节点,对子节点所有的域名,实际上它的权限,子节点的优先机要比父节点高,实际上在我们的研究当中也发现了这一设计的问题,导致了有些域名是没有办法被删除。一旦授权给了你,就是你来负责所有子域名的解析。看似是一个集中的权威,但是因为没有任何的密码机制的保护,而且DNS是基于UDP的协议,所以DNS解析的信息是非常容易伪造的。
尽管PKI最初的设计是希望有一个集中的信任权威。但是在目前,特别是Web在90年代异军突起以后,现在我们用的Web PKI不是一个树型的结构,而是一个森林状的信任结构。在我们的浏览器当中已经预置了一两百个可信的Root CA,它们之间是相互独立的,比如VeriSign、CNNIC,Google和Apple他们也有了可信的CA。每个CA都可以签发自己的二级CA证书,形成了这么一个树,合起来我们看作是一个森林状的结构。而且很大的问题,是每个CA都可以为其他任何的网站签发一个证书。比如VeriSign可以签发一个证书,Google还可以给Apple签发一个Google的证书。
现在的这种信任模型给互联网的基础设施带来了很大的隐患,我们先看一下BGP。最大的问题就是路由前缀的劫持,事件发生了不止一起,从1997年到现在2014年。最为著名的几起,一个是YouTube被巴基斯坦电信所劫持了,YouTube本来在这儿,巴基斯坦电信发了一条公告,说通过YouTube的地址到我这儿最近,结果世界上所有的运营商都把路由指向了香港,最后到达了巴基斯坦。这个事件在中国也发生过,在2012年一个互联网的监测公司Renesys监测到有15%的地址空间被UISP劫持了,长达18分钟,这个事件被写入了中美经济安全调查委员会的报告。当然这个报告里面提到,这是一次随即性的错误,而不是有意的攻击。但是有一些攻击看似就非常像是故意的,是中间人的攻击。还有这个公司,本来墨西哥到美国的访问应该走绿色的这条线,但是在去年2013年的时候,这个路由被劫持到了伦敦,然后到莫斯科,到白俄罗斯、法兰克福,然后再回到美国。这种事件的根源在于所发布的路由公告没有办法证明它是真的,而且每一个运营商并不知道这一段IP地址究竟是属于哪一个ISP的。
为了解决这个问题,互联网标准阻止经过了多年的努力,现在这个标准已经成熟了,就是RPKI,是所谓的资源PKI。R是负责IP地址分配的,现在是IANA的一个部门,他把地址要分给每一个地区信息中心的时候,同时又给他一个签名,你如果有了IANA的根证书,你就可以通过这个签名验证这段地址的确是分配给了APNIC,APNIC又用同样的方式签名授权,把这个地址比如给了中国的某一个ISP。然后在网上ISP之间的路由器之间进行路由、信息交换的时候,他们就可以通过一个签名的路由原发认证这么一个签名的信息,可以知道这段地址的确是属于你这个ISP,你发布的这个路由公告是真的。
现在BGP的信任模型就从原来的Peer-Peer的信任,变成了一个依赖于中央权威的认证。很多人可能对此表示担忧,这个现在有了绝对的权威,如果他把这个签名去掉,那么路由就从网上彻底去掉了,这是一个担忧。
我们看看DNS,我们刚才看到,DNS是一个树型的结构,因为没有密码机制,实际上这个根的信息是很容易被劫持的,要伪造一个Root实际上是非常容易的。我们看看关于DNS劫持的事件也发生了很多起,从1990年就有人提出这种攻击方法,一直到今年,中国的差不多有2/3的网络瘫痪,这中间有好多非常典型的事件,比如暴风影音引起的大规模断网,以及百度DNS被劫持。
我们看看国外的一个例子,这是在巴西,2011年的时候电信的用户发现访问Google的时候弹出了一个窗口,说你要访问Google,必须安装一个Google的病毒防护软件。并不是Google造成的攻击,而是电信的DNS解析服务器缓存被污染了。这种污染在2008年的时候,这是美国的一个人,叫Kaminsky,他发现了一种新的攻击方法,以前大家认为是需要猜很长时间,因为这里面有一个类似序列号的东西,16BT。但是他这个攻击方法可以很快的,比如在几个小时就可以把这个解析服务器,比如电信服务器里面的DNS污染了,就可以构成刚才说的对于Google那种攻击。也就是说你访问的所有网站,把它的地址都指到我这儿来。
Kaminsky发明的攻击不需要控制链路,但是如果是我们可以控制这个链路的话,比如运营商或者是攻击者监听监控运营商的数据链路的话,我们看一下DNS解析的过程。每一个链路,在任何其中一个链路上安装了一个监听和注入的工具,那么这个DNS都可能会被劫持。比如在解析tsinghua.edu.cn时候,如果你能把根劫持了,这个域名我可以给它一个假的地址,指到我这儿来。或者cn.edu,任何一条都可以。我们现在可以看到,依赖于根、edu和Tsinhua这三个域名。比如CERNET,假如说这个DNS解析服务器的缓存是空的,那么完整的解析这一个域名,可能依赖的域名大概有20多个。更复杂的情况,对于全球100万最热门的域名进行了一个分析。我们发现,最多的可能依赖于117个,也就是说,我完成一个域名的解析,要查询其他的117个。在去往这117个域名的查询过程当中,这个路径上如果有一个攻击者做了一个监听和注入,那么你这个域名都可能会被劫持。
这是AnyCast,最典型的就是这个根,一共有13个独立的IP地址,并不是说有13台根域名服务其,13个独立DIP机制实际上对应了300多台根域名服务器,光在中国就有12台,这是去年的结果,这还只是官方公布的,还不包括山寨的根,山寨的根我们DNS的测量其实发现了不止一个,光在中国就有好多个。因为现在没有任何的密码机制,你要做一个三代根,其实是非常容易的。我的学生一个作业,如果对DNS比较熟悉的话,半个小时或者一个小时,就可以做成。
DNS服务器相当于一个客户端,去解析这个域名过程当中,他给你的信息你并没有办法验证的确就是原始的,而不是被中间人伪造的,或者是劫持的。解决的办法就是增加了一个数字签名,这个就是DNSSEC,在DNS里面,加上密码机制。它的工作原理就是,从根对顶级域名.net做一个签名,然后告诉你他的IP地址是什么,同时又加上了一个签名。这样的话,解析服务器就可以根据这个签名,假设它有这个根的公钥的话,一个公钥就可以验证顶级域名。顶级域名再把子域名签名以后,授权给底下。这样的话,解析服务器就可以验证这个签名,来知道我受到的这个响应是正确的还是别人伪造的。
现在这个实现的情况应该说是走过了非常漫长的过程。从15年前大家已经意识到DNS劫持的威胁,一直在讨论这个解决方案。中间经过了几次的反复,包括制定了标准,最后又推倒重来。在2010年的时候,在VeriSign的推动下,他是最重要的维护者,现在DNSSEC在全球的部署还是比较乐观的。中国在这一点上因为政策的限制,中国在这方面走得并不是很快,但是在去年的时候,已经对.cn进行签名了,Server这一端比较乐观,但是Client那一端并不是那么乐观。加州大学做的研究,部署率低于5%,在中国的DNSSEC的验证我不知道,现在还没有做过测量,但是我没有听说哪里真正的去做。
现在的问题就是,以前我们没有任何的权威,我们没有任何的安全机制。现在有了安全保证了,我们就需要依赖于那个根的签名。那个根的签名如果拿不到,或者是根不给你签名,那么你这个消息就没有办法验证。怎么样防止这样一个有绝对权利的根去干坏事呢?如果它拿到了一个Root的私钥以后,那么它可以签任何东西。有可能是这个根它故意做坏事,或者是有可能这个根无意,比如私钥丢失了,它被攻击了。这种情况怎么办呢?我们说绝对的权利导致绝对的腐败,怎么样把这种绝对的权利分散开?这就是对于根的一个恢复密钥,并不是掌握在一个人手里。它是分布在7个人手里,这是在2010年的一个结果。不是分布在这些国家的政要手里,比如美国,我们想到奥巴马掌握的Key,就像它掌握了核弹的钥匙一样,这几个人到达以后,同时启动一个钥匙。但是这7个人当中,有中国的Yaojiankang,我们刚才说的Kaminsky,他是美国的发现KaminskyDNS攻击的那个人,就是一个黑客,他自己有一个公司,包括英国、捷克的,这些人掌握着互联网最基础的信任钥匙。这种模式其实也是被互联网共同体所接受的,有一个词是互联网治理,里面有一个很关键的词就是“多利益相关方”共同参与,而不是说有一家说了算。而且“多利益相关方”并不是政府,而是民间团体。真正的DNS的从业者来掌管DNS,而不是政府。
PKI的问题其实比那两个问题还要严重,刚才说PKI现在的CA是一个森林状的信任结构,没有一个集中的信任权威,我们在浏览器里面预置了上百个CA的根证书,每一个CA都可以为所有的网站签发证书,而且都可能被认为是合法的。这样的话,一个CA被攻破,几乎所有的全球的电子商务都可能被颠覆。比如在这个例子当中,比如Google的G-Mail是由Google签发的,但是如果VeriSing也签发了一个证书,如果你通过DNS访问指到这个服务器的时候,用户在访问这个假的G-Mail的时候,没有任何的告诫,他认为也是合法的。怎么样攻击VeriSign这个系统给自己签发这样的证书呢?你攻击VeriSing可能非常困难,这是一个老牌的安全公司,赛门铁克也是它的,这是真正的攻击场景。如果你获得了这样的证书,比如一个中间人拿到了一个合法的证书,客户浏览器就认为这个网站是合法的。
攻击VeriSign可能是非常困难的,但是任何一个CA被攻破,都有可能有这种效果。Comodo在2011年的时候被入侵了,有9个证书是伪造的。另外一个公司是荷兰跟政府有关的,叫DigiNotar,这个公司的COO在2011年的时候说,我相信我们是非常安全的,但是不到一个月,他们就被攻破了。特别是伊朗,他们发现假冒的Google的证书被用在伊朗的很多ISP上。他们没有汇报这件事情,他们选择了隐瞒这个事件,结果厂商把他从根浏览器里面删掉了,于是这个公司是靠卖信任为生的公司,失去了信任,它也就彻底破产了。
怎么解决这个问题?也就是说一个弱的CA被攻破以后,它可以签发任何合法的证书,怎么解决呢?这些年来DNS的技术标准组织提出来DANE,是基于域名的服务,另外一个名字叫TLSA,TLS是安全协议,A是Association,通过DNA把CA和域名捆在一起,比如Google在DNS里面告诉用户,Google的G-Mail就是应该由Google签发的,不应该是VeriSign。你访问的时候首先会查询DNS,DNS给你一条记录,相当于这里面有一个证明,只有这个证书是合法的。当然这个DNS再被攻破怎么办?DNS的标准就是基于DNSSEC,你要相信DNS,你就相信我这个关联关系,证书和域名的关联是合法的。现在就可以把那种森林状的信任体系又增加了一层约束,变成了我们现在看到的DNS。有两级的信任权威,一个是PKI,一个是DNSSEC。但是有人说了,DNSSEC又是一个集中式的,它有太大的权利。
现在看这三个信任的模型发展,三个基础设施,BGP到目前的BGPSEC这个标准化过程已经完成了,厂商的支持也已经完成了,Cisco、Juniper都支持这个开源软件,在美国的少数ISP也开始部署这方面的实验。DNS我们刚才说,经过了长期漫长、曲折的发展,现在已经开始大规模部署了,但是客户端的验证部署率还是非常低。CA现在这个标准刚刚形成,现在刚刚提出,我们要做这方面的研究,只能在浏览器里面开发一个插件。
另外一个趋势就是,几乎所有的应用现在能加密的都加密了,这件事情主要是因为从斯诺登这件事情引发的,IETF去年上半年开会的时候,那个时候看到了中国APT1的报告,也就是中国部队如何攻击美国的那个报告。当时IETF里面的技术人员对这件事情一点都不感兴趣,因为国家与国家的情报战据的司空见惯,没有什么好奇怪的。但是斯诺登这件事情爆发以后,IETF的工程师坐不住了,大家非常关注这个问题,大规模的对于民众的监控是不可接受的,于是IETF在今年通过了一个RFC说大规模的监控是一种攻击。为了对付这种攻击,以后能加密的就加密,以前有很多的IETF里面搞网络的专家都认为,网络尽可能的简单,能不加密的就不加密,现在的措施是能加密的就加密。一旦使用密码机制,就不可避免的要依赖于一个PKI,一旦依赖于PKI,那么少数集中的信任权威也就不可避免。我们说现在的这种权威,比如以美国为首的,我们不可信任。但是我们能不能自己再建立一个新的信任权威呢?美国现在确实是臭名昭著,但是我们要建立一个信任权威,是不是比美国有更好的权威和声誉呢?
怎么解决这个问题?对于一个集中权威的信任和依赖似乎是不可避免的。比如像PKI,我们一会儿还会说,我们不相信国际的PKI,我们自成一套,其实给我们的用户带来了很大的困难和潜在的风险。互联网的安全机制,比如DNSSEC经过了一点一滴的演进发展到今天,你再想重新设计一套,你说他不可接受,那我要重新设计一套,你还要走过同样的路程。DNSSEC就失败过,被推倒重来,你有没有信心接受同样的东西?你首先要建立一个IETF这样的国际化组织,让别人接受你,才有可能你的标准被别人去实验。我们不能因为对绝对权威的这么一个疑惑而把自己隔离在互联网之外,我觉得我们比较理智的做法是接受这样的权威,并且时刻保持怀疑。通过大规模的监测和监督的手段,及时发现这种权威被滥用的情况,进而主动的防止这种权威被坏人所利用。
我们在这方面对于互联网的基础设施做了长期的监测。有一个前提的假设,就是你可以在一段时间,在某些地方欺骗一部分用户,但是你不可能在所有的时间、所有的地点欺骗所有的用户。这是我们对于DNS的监测,就发现父节点对子结点的信任,导致了有一些子域名不可以被删除。比如说在这个里面,.Com把这个删除了,但是可以通过域名解析,持续的存活。我们这项研究成果被美国的国家漏洞库收录,而且被美国的联邦通信局2012年的一个机构收录。
我们对全球的DNS的解析行为做了一些测量。我们发现我们DNS的解析性能没有达到理想的情况,有40%的没有到达离中国最近的那个根。这是2014年1月21日DNS的劫持,有多少在座的同仁们那天经受了这个攻击?去往国外的任何一个网站,包括国内的网站地址都被劫持到了某一个IP上,这个数据我们是有的,具体结果不解释了,我想大家应该懂得。全世界的域名服务器看似分布在世界上这些地方,但是受害者只有中国,为什么?另外我们对于PKI,对于公钥证书有一个全球的监测,比如在HeartBleed爆发的时候,我们可以看到,包括现在还有一些有漏洞的。另外还有一些我们对全球的Web Server使用的公钥证书进行了解析,来自美国的合法证书、有效证书比例是比较高的,是50%,但是中国只有9%。
我们对银行方面,我们觉得银行应该是使用这种有效证书,否则的话没有办法抵御中间人攻击。我们对中国的300多个银行和美国的100家银行做了一个对比测量,发现使用可信证书的美国是100%,但是中国有78%,也就是说,中国还有32%的银行网站用户访问的时候会弹出一个不合法证书。这种现象会导致,用户在访问一个中间人攻击的假冒网站的时候没有办法知道的。
我们发现HTTPS在CDN部署当中有一些问题,比如用户是通过HTTP访问这个网站,比如苹果,但是实际上他访问的是苹果的一个节点。前段用户是使用的HTTPS,但是后端使用的是HTTP明文传输的。实际上我们也发现了这样的攻击,就是苹果的用户在中国的一些学校里面的用户访问苹果页面的时候,发现给出的页面是一个自由门软件的使用手册。我们把这个事件报告给他们,他们承认在中国的节点被污染了,就是因为后端使用的HTTP。
在中国一个非常典型的问题,就是CDN要求网站共享他的私有证书,包括中国一个很大规模的网站,卖火车票的那个网站,也是把自己的一个私钥签名的证书以及私钥和CDN是共享的。这是帮助CloudFlare,一些国际知名的CDN厂商,解决了他们的问题,提高了安全性。CloudFlare在自己的网站上,有了这个策略,他们可以防止大规模的监听。
我们还有其他的一些研究,如果大家在会后感兴趣的话可以跟我联系,谢谢大家!