华盛顿邮报曾根据斯诺登泄露出来的PPT(图1)报道过美国国家安全局(NSA)在云端监听Google(包括Gmail)和Yahoo用户的加密通信[1]。然而我们知道Gmail是使用TLS保护的,NSA是如何破解Google的TLS加密通信的呢?
图2.有些CDN的后端通信使用不加密的HTTP进行传输
其次是浏览器和CDN节点之间的授权认证问题。我们发现很多CDN厂商要求源网站提交自己的公钥证书和私钥,这严重破坏了PKI安全信任的基本原则,即私钥必须是严格保密、不能与第三方共享的。尽管也有替代的方案不要求用户共享私钥,比如使用客户证书(Custom Certificate)或者共享证书(Shared Certificate)方案,但是秘钥管理复杂,客户网站无法自主的撤销自己对CDN厂商的授权,作为可信第三方的CA也没有撤销体现授权关系的共享证书。
具体细节可以参考我们的论文原文和Oakland会上所作报告的Slides[2]。
2. 实际攻击的案例
在现实互联网中,中国教育和科研网应急响应组CCERT在2014年初曾经收到过类似的攻击报告,苹果公司(Apple)使用的CDN厂商Akamai的某些节点已经受到了类似的攻击,导致苹果公司源网站上的JavaScript页面被替换成了翻墙软件自由门的使用手册。我们与Akamai的技术人员确认过,的确是他们的CDN节点和后台的服务器之间使用HTTP协议传输,导致通信被劫持,某些CDN节点的缓存数据被污染了。
本文一开始的问题,也是由于HTTPS在CDN实现中的问题所致。根据斯诺登泄露出来的PPT(图1),我们知道美国国家安全局(NSA)和英国的情报机构GCHQ在他们联合计划MUSCULAR中,他们也使用了类似的技术监听Yahoo和Google的通信:由于类似CDN的GFE(Google Front Engine)与提供内容的后台服务器使用了不加密或安全性较弱的通信协议,NSA和GCHQ可以绕过浏览器端和CDN之间的TLS,在后台直接监听明文的通信。正如图灵奖得主、著名密码专家A. Shamir所言:“Cryptography is typically bypassed, not penetrated.”
3.解决方案
在论文的撰写过程中,我们向涉及到的CDN厂商都通报了这一问题,并和CloudFlare、Akamai等公司的技术人员有过多次交流,我们所报告的问题得到了所有联系到的产商的认可。其中,CloudFlare 公司在得到我们论文后,很快推出了更加安全的服务 Strict SSL[4],并宣称这一服务可以挫败NSA对后台通信的监听。
然而浏览器和CDN前端的授权问题却不只是实现上的问题。为解决这一HTTPS在CDN服务中的授权问题,我们在论文中提出并实现了一个基于DANE[3]的轻量级的解决方案,DANE(DNS-based Authentication of Named Entities)是IETF 制定的标准以完善Web 网站的PKI信任模型。我们的实现表明,在CDN环境下实现安全、高效的HTTPS通信是可行的,但是由于DNSSec和DANE的部署并不普及,这一方案离工业界的普遍部署还有一定的距离。我们希望推进CDN和安全领域中进一步的研究,希望有更加有效的解决方案。
本文的第一作者梁锦津博士还参与了CloudFlare公司后来的一种解决方案——Keyless SSL[5]的开发和测试工作。这一方案不要求客户网站与CDN共享私钥,而是在CDN在与前端浏览器进行TLS的认证和秘钥协商过程中,通过安全的信道把协商过程中的信息转发给源网站,由源网站提取会话秘钥或完成签名以后再提交给CDN节点。由于TLS的通信过程中只有握手过程中才用到Private Key,以后的通信过程与源网站无关。清华大学计算机系张道维的本科毕业设计完成了Keyless SSL的的部分实现,实现中修改了OpenSSL和Ngnix的部分源代码,比较复杂,还有很大改进的空间。
受本论文的影响,互联网标准组织IETF的CDN互联工作组(CDNI)开始讨论CDN及CDNI互联的网络环境中加密流量的授权问题[6],还没有形成最终的解决方案。因为最初的互联网设计原则之一是端到端,而今天许多中间盒子(Middle Box)使得互联网到处都是中间人,类似HTTPS在CDN中的问题将普遍存在,许多问题值得我们进一步研究,也欢迎有兴趣的研究者、CDN厂商的技术人员和我们合作研究。