SSL/TLS的近年相关攻击研究综述(六)
证书相关研究
作者:韦俊琳 清华大学
简介
数字证书(简称证书)是基于公钥加密机制一种数据结构,可以绑定一个实体的身份和其拥有的公钥。证书可以为两个实体间的通信提供安全保障。SSL/TLS也是通过证书来确保客户端和服务器进行安全,保密的通信。服务器发送证书,客户端(如浏览器)会检验证书的有效性。然而证书的安全性验证却一直是一个难题。目前针对证书安全性的研究非常广泛,近几年有几项重点的相关研究,值得学习。本文将选择性地总结相关研究。
证书相关研究
SSL使用的证书是由CA签发的,基于可信的第三方来保证通讯的安全。在以前只有少数几个证书颁发机构的时候,可以通过保证自己的根证书的安全来保证颁发的证书的安全。但是,随着目前市场上的证书颁发机构增多,颁发的要求也参差不齐,导致有不少伪造的证书在被使用,严重威胁到了通讯的安全。而且之前也出现过根证书被攻破的情况,颁发了不少看似合法的证书。在2001年就出现Comodo的其中一个注册机构被“完全入侵”的情况,给7个网站签发了9张证书,连google.com也受到了影响。随着MD5,sha-1碰撞实验的成功,也标志着伪造合法证书在理论上成为了可能。在推进MD5,SHA-1退出市场的间隙期,也存在着不少安全隐患。对于不合法的证书的吊销并清除市场一直是比较困难的事情,实施起来有难度。并且在吊销证书到证书被CRL或者OCSP更新,也存在着空档期,在缓存期间,这些伪造的证书仍能被正常的使用。
近年来,有不少对检测伪造证书的研究。在[1]中,作者利用Flash Player 的插件设计和应用了一套针对全球知名网站Facebook的SSL 中间人攻击检测,分析了超过3百万以上条实时的SSL连接,发现存在0.2%左右的SSL连接是使用的伪造证书。其中有大量的防毒软件,内容过滤器,也有一些是恶意软件使用的不合法证书。之前存在大量的商业证书机构都或多或少被欺骗发布过不合法的证书,这种情况下很多标准的浏览器也无法简单得区分出这些证书。但是更多的情况是用户忽略浏览器给出的警告信息,继续访问危险网站。有一些研究人员认为应该忽略掉证书过期的问题,他们表示证书过期是一件很常见的事情,如果经常给用户提示,会降低用户对警告的重视性。但是这样会导致一些伪造的过期证书被允许通过,也会带来严重的安全隐患。作者对收集到的伪造证书进行了特征分析,其中大部分的伪造证书非常小,通常没有超过1KB,只有很少部分超过5KB。而且伪造证书链比较短,链长大部分为一,通常是一些self-singed证书,极少含有中间证书。通过分析伪造证书的Subjects,发现大部分采用的是合法的域名,只有少部分使用的一些不相关的域名。其中大部分伪造证书都是选择好目标后,预先生成,而不是复制Facebook的合法证书。检查Issuers时,发现大量的伪造证书来源于防毒软件,防火墙,广告软件和恶意软件。实际上,在[2]中,作者分析了存在于TLS代理中的这些用于过滤TLS流量的防毒软件和父进程控制应用程序,并设计了一个集成框架来分析这样的客户端TLS代理。通过系统分析发现,其中一些工具严重影响其主机上的TLS安全性,还发现多个产品容易受到在中间人攻击的情况下完全服务器代理,并且如果启用TLS过滤,则还会更可能被攻击。其中的一些工具还误导浏览器,使其相信这样的TLS连接比实际更安全。通过检测发现,在实际的网络中,不安全的证书是确实存在的,而且存在的数量还不少。
网络中存在大量的伪造证书,导致受SSL保护的HTTPS看起来似乎也没那么安全了。证书安全是SSL协议安全的一个重要部分,而客户端正确验证服务器端发送的证书的有效性起着至关重要的作用。Chad Brubaker在[3]中提出了一种大规模测试证书在SSL实际应用中的有效性的方法。对真实证书片段增添一些限制和延展,利用“Frankencerts”合成不同的组合证书,并进行“差分测试”。也即在实际SSL应用中,发现一个证书被部分机构接收而被部分机构拒绝,就可以作为差异筛选条件,提取出来进行查询,用来发现其中存在的漏洞和不足。差分测试使用Frankencerts,涵盖了208个区别点,涉及到的SSL应用包括OpenSSL,NSS,CyaSSL,GnuTLS, PolarSSL, MatrixSSL等。发现了在实际应用中存在着很多的问题,如MatrixSSL会接收X.509 v1版本的证书,使得所有使用MatrixSSL的应用都能被中间人攻击。攻击者只需要一个有效的X.509 v1证书就可以伪装成中间证书发布者,发布一些假的证书,并逃过MatrixSSL的检查。在GnuTLS中,也存在X.509 v1证书的相关漏洞,由于两个标志的错误匹配,导致可以接收本地可信的X.509 v1证书,即使是来自恶意服务器的证书。更严重的漏洞是来自于错检和漏检根证书对下层证书的限制。当然攻击能够实现的很重要的部分是用户忽略掉浏览器的提示,坚持访问不安全的网站,使得攻击者可以利用大量用户忽略证书过期的问题,伪造相应证书来完成中间人攻击。
X.509证书在实际应用中也存在不少的问题,验证证书的有效性涉及到解析ASN.1的数据结构并解释内容信息,过程比较复杂,也很容易出错。但是X.509证书被大量使用,从而具有不可替代性。为了应对X.509证书的一些结构和应用不足,Antoine提出了Cinderella[4]来改善X.509证书的使用。通过应用程序接收并验证证书完整性,有效性和一致性,取代之前的接收验证证书链的方式。这样省略证书产生更小的信息,隐藏证书内容具有更强的隐私性,嵌入一些额外的检测将具有更好的完整性。通过编写X.509 模版来编写应用程序的新格式,使用Geppetto加密编译器为该策略生成零知识可验证计算方案。并为RSA-PKCS#1签名和ASN.1解析开发新的C库,提高加密可验证性能。在实际的应用中,对TLS支持细粒度验证策略,通过撤销检查和选择性披露证书内容,有效地将X.509证书转换为匿名证书。Cinderella利用可验证计算弥补了现有X.509基础设施和现代密码学之间的差距,并且能够使用户在较高级的应用程序中重用现有的证书链和签名机制,与现有的基础设施完美集成,不需要直接访问X.509签名密钥,使其与现有的基于硬件的解决方案兼容。Cinderella提高X.509身份验证和授权决策的灵活性,表达能力和隐私权,增加了“加密能力”。其中一个给定的验证策略可以将收集和验证最近的非撤销证据的责任移动到证书持有者,使验证者的撤销检查更简单和更高效,比较好的解决了CRLs和OCSP在线检查撤销状态的难题。
实际上,对于证书的有效性问题,研究人员提出了很多加强SSL安全的方法,如采用HTTP Strict Transport Security(HSTS)来遏制SSL剥离;使用The Public Key Pinning Extension for HTTP(HPKP)允许网站使用HTTP标头指定自己的公钥,并指示浏览器拒绝具有未知公钥的任何证书; 使用TLS Origin-Bound Certificates(TLS-OBC)来封锁存在的很多中间人攻击插件;采用DNS-based Authentication of Named Entities(DANE),依赖与DNSSEC阻止伪造修改DNS记录来使使浏览器只接受一些特定的证书;Google提出并发布的证书透明性,可以实时检测伪造证书。有很多的想法和建议提出来解决证书问题,但是真正用于实践却比较难。Adam Bates在[5]中提出了一些能及时解决目前存在的部分代码漏洞的方案,引入了对SSL实现的轻量级改进的CERTSHIM,以程序透明的方式来防止SSL漏洞,充当动态链接验证过程中的透明库。CERTSHIM具有良好的可扩展性,能融合Convergence,DANE和基于客户端的密钥固定等方法,并且只带来极少的延迟。利用CERTSHIM解决了部分遗留在数据库中的危险代码问题,也为后面的研究指明了方向,更是促进了证书验证的发展。
总结:
鉴于证书的重要性,很多研究机构投入了很多的精力来改善证书的现状。对证书的有效性验证一直是研究的重点,近几年提出了一些比较有效的方案来缓解,但是还不能完全解决证书的安全性问题。谷歌提出了白名单机制的证书透明化来改善证书的验证问题,出于谷歌的影响力,这个方案的普及对于保障证书的安全性将有显著的改善。要彻底解决证书安全性问题,保障SSL通讯还需要进一步的努力,研究工作大部分是从失败中学习,总结经验并加以改善,然后逐步完善成可靠的系统。
参考文献:
[ 1 ] H. Lin-Shung, A. Rice, E. Ellingsen. Analyzing forged SSL certificates in the wild. In IEEE Symposium on Security and Privacy, 2014
[ 2 ] X. Carne Carnavalet and M. Mannan. Killed by proxy: analyzing Client-end TLS interception software. In NDSS, 2016
[ 3 ] C. Brubaker, S. Jana, B. Ray. Using Frankencerts for Automated Adversarial Testing of Certificate Validation in SSL/TLS Implementations. IEEE Symposium on Security and Privacy, 2014
[ 4 ] A. Delignat-Lavaud, C. Fournet, M. Kohlweiss. Cinderella: Turning Shabby X.509 Certificates into Elegant Anonymous Credentials with the Magic of Verifiable Computation. In IEEE Symposium on Security and Privacy, 2016
[ 5 ] Bates, Adam M. et al. Securing SSL Certificate Verification through Dynamic Linking. In ACM Conference on Computer and Communications Security (2014).