一、概述
最近几年曝出的高风险SSL/TLS安全漏洞大多跟SSL实现库相关,比如2011年曝出的SSL/TLS默认重协商漏洞,可导致DOS攻击, 比如2014年4月曝出的“心脏滴血”漏洞, 存在OpenSSL 1.0.1`1.0.1f版本中.影响全球近17%的web服务器; 同样是2014年曝出的苹果公司IOS 7.0.6版本系统中存在“gotofail"漏洞, 因为程序员的疏忽导致SSL证书校验中的签名校验失效; 包括曝出的SSL Freak攻击也是由于SSL实现库的安全漏洞导致的攻击。
考虑到大量SSL/TLS实现库中存在安全问题, 同时这些主流的SSL/TLS实现库对开发者而言使用难度较高, 比如有些SSL/TLS实现库要求开发者自己进行随机数生成或密钥管理,让缺乏系统信息安全知识培训的开发者去使用这样高度复杂的密码学库容易产生很多安全问题. 推荐的一些高级密码学库:Google keycazer、NACI、Cryptlib、GPGME. 这些密码学库存在的安全问题较多, 同时也封装了一些底层密码学操作。
二、SSL/TLS默认重协商漏洞
2.1 重协商介绍
在SSL/TLS协议中, 协商是指通信双方客户端和服务器, 选取相同算法、传递数字证书、互验对方身份、交换共享密钥等一系列的动作. 重协商是指在已经协商好的SSL/TLS TCP连接上重新协商, 用以更换算法、更换数字证书、重新验证对方身份、更新共享密钥等. SSL/TLS协议本身支持重协商, 且RFC文档建议SSL/TLS实现(指OpenSSL等库)也应该默认支持重协商。
重协商包括两种方式, 分别如图A和B 。