近日,OpenSSL官方发布了版本更新,修复了多个OpenSSL漏洞,这次更新所修复的漏洞中,有两个危害等级较高的为CVE-2016-6304和CVE-2016-6305。绿盟科技对此漏洞进行了技术分析并提出了防护方案。
自2014年4月心脏滴血漏洞爆发以来,绿盟科技对OpenSSL的CVE漏洞进行密切的监控,据绿盟科技威胁情报中心(NTI)统计到的数据显示,2年来OpenSSL漏洞变化不大总体持平,总计高危漏洞13个,其中今年9月份3个高危漏洞。绿盟科技漏洞库迄今为止收录了82个重要漏洞。
OpenSSL漏洞影响范围
据据绿盟科技威胁情报中心(NTI)统计到的数据显示,全球OpenSSL主机分布如下:
全球受OpenSSL漏洞影响范围如下:
G20成员国受OpenSSL漏洞影响范围如下:
OpenSSL漏洞影响的版本
OpenSSL Project OpenSSL < 1.1.0a
OpenSSL Project OpenSSL < 1.0.2i
OpenSSL Project OpenSSL < 1.0.1u
OpenSSL漏洞不受影响的版本
OpenSSL Project OpenSSL 1.1.0a
OpenSSL Project OpenSSL 1.0.2i
OpenSSL Project OpenSSL 1.0.1u
OpenSSL漏洞分析
这次更新所修复的漏洞中,有两个危害等级较高的为CVE-2016-6304和CVE-2016-6305。
OpenSSL高危漏洞:CVE-2016-6304
该漏洞的成因是,客户端向服务器持续发送超大的OCSP状态请求扩展,在此过程中,利用TLS扩展 “TLSEXT_TYPE_status_request”填充OCSP ids内存,由于攻击者不断请求重商,从而耗尽服务器的内存导致拒绝服务。
分析官方公布的修复代码,发现所做的修改主要是添加了对上一次握手过程的PACKET_remaining(&responder_id_list)的判断:如果大于0,则将所有OCSP_RESPIDs置空,并保存SSL_AD_INTERNAL_ERROR的状态;否则直接将所有OCSP_RESPIDs置空。代码修复情况如下图所示:
这样就避免了OCSP ids内存不断增加造成的拒绝服务。
OpenSSL高危漏洞:CVE-2016-6305
该漏洞的成因是,攻击者可以通过发送一个空记录,从而在调用SSL_peek()函数时引起拒绝服务。含有漏洞的代码如下:
从上面的代码可以看到,如果peek为空,!peek则为真,然后进入代码段中,直接进行sub和add等运算,这样就会进入到一个死循环当中,程序不能继续执行。
漏洞修复之后的代码如下图所示:
代码会对读取的记录rr进行长度计算,如果为0,则重新读取下一个记录,从而保证程序顺利进行。
OpenSSL漏洞修复建议
官方已经发布版本更新,建议尽快升级到最新版,下载链接如下:
https://www.openssl.org/source/
如果无法升级到最新版本,为了在一定程度上缓解该威胁,则需要重新编译OpenSSL源代码,在重新编译的时候,启用“no-ocsp”编译时选项。
- 产品服务:使用绿盟科技的产品进行检测及防护,比如绿盟远程评估系统RSAS进行安全评估,使用绿盟Web应用防火墙WAF提供防护。
- 短期服务:绿盟科技工程师现场处理。确保第一时间消除网络内相关风险点,控制事件影响范围,提供事件分析报告。
- 中期服务:提供 3-6个月的风险监控与巡检服务。根除风险,确保事件不复发。
- 长期服务:基于行业业务风险解决方案(威胁情报+攻击溯源+专业安全服务)。
OpenSSL漏洞汇总描述
2016年9月22日,OpenSSL官方发布了版本更新,修复了多个漏洞:
OpenSSL漏洞01:CVE-2016-6304
提交时间:2016年8月29日
漏洞描述:OpenSSL服务器在默认配置下,一个恶意客户端可以向服务器持续发送超大的OCSP状态请求扩展,从而耗尽服务器的内存导致拒绝服务。
严重程度:高
OpenSSL漏洞02:CVE-2016-6305
提交时间:2016年9月10日
漏洞描述:攻击者可以通过发送一个空记录,从而在调用SSL_peek()函数时引起拒绝服务。
严重程度:中
OpenSSL漏洞03:CVE-2016-2183
提交时间:2016年8月16日
漏洞描述:该漏洞涉及SWEET32攻击,一种针对64位分组密码算法的生日攻击。
严重程度:低
OpenSSL漏洞04:CVE-2016-6303
提交时间:2016年8月11日
漏洞描述:该漏洞是存在于函数MDC2_Update()中的一个整数溢出,导致内存破坏,进而允许拒绝服务攻击。
严重程度:低
OpenSSL漏洞05:CVE-2016-6302
提交时间:2016年8月19日
漏洞描述:位于ssl/t1_lib.c中的函数tls_decrypt_ticket(),在确认ticket的长度时没有考虑HMAC的大小,导致内存越界读取,进而引起拒绝服务。
严重程度:低
OpenSSL漏洞06:CVE-2016-2182
提交时间:2016年8月2日
漏洞描述:位于crypto/bn/bn_print.c的函数BN_bn2dec()没有检验BN_div_word()函数的返回值,允许内存越界写入,从而引起拒绝服务。
严重程度:低
OpenSSL漏洞07:CVE-2016-2180
提交时间:2016年7月21日
漏洞描述:位于crypto/ts/ts_lib.c中的函数TS_OBJ_print_bio()存在越界写入问题,允许拒绝服务。
严重程度:低
OpenSSL漏洞08:CVE-2016-2177
提交时间:2016年5月4日
漏洞描述:在计算堆缓冲区的边界时出错,允许攻击者发起拒绝服务攻击。
严重程度:低
OpenSSL漏洞09:CVE-2016-2178
提交时间:2016年5月23日
漏洞描述:位于crypto/dsa/dsa_ossl.c中的函数dsa_sign_setup(),没有正确处理constant-time,允许攻击者通过边信道攻击获得DSA的私钥。
严重程度:低
OpenSSL漏洞10: CVE-2016-2179
提交时间:2016年6月22日
漏洞描述:在DTLS的实现中,没有正确处理未按序到达的握手消息缓存,允许攻击者同时维护多个精心构造的DTLS会话,导致拒绝服务。
严重程度:低
OpenSSL漏洞11: CVE-2016-2181
提交时间:2015年11月21日
漏洞描述:DTLS实现中的抗重放攻击部分存在缺陷,允许攻击者发起拒绝服务攻击。
严重程度:低
OpenSSL漏洞12:CVE-2016-6306
提交时间:2016年8月22日
漏洞描述:在OpenSSL的1.0.2及更早版本中,缺少对一些消息长度的校验,导致内存越界读取,在理论上允许拒绝服务攻击。
严重程度:低
OpenSSL漏洞13: CVE-2016-6307
提交时间:2016年9月18日
漏洞描述:tls_get_message_header()函数存在检查缺陷,导致攻击者可以通过精心构造的数据包,使内存过度分配,进而借此大量消耗服务器的内存导致拒绝服务。
严重程度:低
OpenSSL漏洞14:CVE-2016-6308
提交时间:2016年9月18日
漏洞描述:dtls1_preprocess_fragment()存在检查缺陷,导致服务器的内存可以过度分配,进而以前拒绝服务攻击。
严重程度:低
官方公告地址如下:https://www.openssl.org/news/secadv/20160922.txt
什么是OpenSSL?
SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输,能使用户/服务器之间的通讯数据不被攻击者窃听,并且始终对服务器进行认证和有条件的对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上,实现对应用层数据的加密传输与完整性保护。
OpenSSL是一个强大的安全套接字层密码开源库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
大多数通过SSL/TLS协议加密的网站都使用了OpenSSL的开源软件包。当OpenSSL被爆出安全漏洞,影响将会涉及到所有使用OpenSSL开源包的应用。
绿盟科技声明
本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。
绿盟科技发布OpenSSL高危漏洞技术分析与防护方案的相关文章请参看
OpenSSL安全公告高危漏洞 可以对默认配置的服务器发动DDoS攻击
原文发布时间:2017年3月24日
本文由:绿盟科技 发布,版权归属于原作者
原文链接:http://toutiao.secjia.com/nsfocus-released-openssl-high-risk-vulnerability-analysis-and-protect-solution
本文来自云栖社区合作伙伴安全加,了解相关信息可以关注安全加网站