转载-OpenSSL安全公告(2016年3月2日)
发布日期:2016-03-02提示:在此次更新中,OpenSSL默认禁用了SSLv2协议,并且移除了SSLv2协议的EXPORT系列加密算法。考虑到我们在此公告中所罗列出来的问题,以及协议中存在的一些其他问题(具体信息请点击这里进行查看),我们强烈建议用户停止使用SSLv2协议。
利用SSLv2协议漏洞来对TLS进行跨协议攻击(DROWN)(CVE-2016-0800)
漏洞严重程度:高
研究人员发现了一种跨协议攻击,如果服务器使用了SSLv2协议和EXPORT加密套件,那么攻击者就可利用这项技术来对服务器的TLS会话信息进行破解。需要注意的是,客户端与不存在漏洞的服务器进行通信时,攻击者可以利用其他使用了SSLv2协议和EXPORT加密套件(即使服务器使用了不同的协议,例如SMTP,IMAP或者POP等协议)的服务器RSA密钥来对上述两者的通信数据进行破解。文中所指的这个漏洞就是DROWN(CVE-2016-0800)。
如果攻击者想要破解一个会话通信密钥,那么他不仅需要进行大约2的50次方次计算,而且还要对目标服务器中的上千条通信链接进行处理。但是,现在有一种效率更加高的攻击方式,这种攻击方式也是DROWN攻击的变种版本,它可以对存在漏洞的OpenSSL服务器(版本在1.0.2a,1.0.1m,1.0.0r 和0.9.8zf以下的OpenSSL)进行攻击。
用户可以通过禁用SSL/TLS服务器中的SSLv2协议来解决这个问题,我们强烈建议用户尽快处理这一问题。而且禁用所有的SSLv2加密同样可以解决这一问题。除此之外,我们也已经发布了一个针对漏洞CVE-2015-3197的修复补丁(修复了OpenSSL 1.0.1r和1.0.2f中的安全问题),请用户尽快进行安装和部署。如果服务器没有禁用SSLv2 协议,也没有安装能够修复漏洞CVE-2015-3197的补丁,那么服务器将有可能受到DROWN攻击。即使你可能会认为禁用所有的SSLv2加密也能达到同样的效果,但这只是表面上的,因为攻击者可以通过其他的手段强迫服务器使用SSLv2协议以及EXPORT加密工具。
针对DROWN攻击,OpenSSL 1.0.2g和1.0.1s部署了下列缓解措施:
现在,在OpenSSL安装部署完成之后,默认会禁用SSLv2协议。如果用户在配置过程中没有提供 "enable-ssl2"参数,那么服务器是不支持使用SSLv2协议的。即便是用户使用了"enable-ssl2"参数,用户也可以利用灵活性和扩展性更强的SSLv23_method()来进行通信的协商处理,该方法将会调用下列内容:
SSL_CTX_clear_options(ctx, SSL_OP_NO_SSLv2);
或者
SSL_clear_options(ssl, SSL_OP_NO_SSLv2);
由于攻击者可以通过穷举搜索等方法恢复通信密钥,所以我们也移除了OpenSSL中的SSLv2加密套件。更具体一点来说,SSLv2 40位的EXOPRT密码以及SSLv2 56位的DES加密算法都被移除了。
除此之外,新版的OpenSSL也默认禁用了SSLv3协议中的弱密码,默认配置中也不再提供"enable-weak-ssl-ciphers"参数,而且也不再提供"EXPORT"系列密码和低强度的密码。
l 使用了OpenSSL 1.0.2的用户应该立刻将OpenSSL更新至1.0.2g;
l 使用了OpenSSL 1.0.1的用户应该立刻将OpenSSL更新至1.0.1s;
Nimrod Aviram和Sebastian Schinzel于2015年12月29日将这一问题报告给了OpenSSL团队。随后,OpenSSL团队的Viktor Dukhovni和Matt Caswell共同开发出了针对此漏洞的修复补丁。
DSA算法代码中的多重释放漏洞(CVE-2016-0705)
漏洞严重程度:低
研究人员在OpenSSL解析DSA私钥的过程中发现了一个多重释放漏洞,如果服务器端程序从一个不受信任的来源接收到了DSA密钥,那么攻击者就可以利用这个漏洞来对目标主机进行拒绝服务攻击(DoS),或者引起服务器的内存崩溃。但是发生这种情况的可能性较小。
这个漏洞将会影响OpenSSL 1.0.2和1.0.1,所以我们建议用户:
l 使用了OpenSSL 1.0.2的用户应该立刻将OpenSSL更新至1.0.2g;
l 使用了OpenSSL 1.0.1的用户应该立刻将OpenSSL更新至1.0.1s;
Adam Langley于2016年2月7日将这一漏洞的详细信息报告给了OpenSSL团队。OpenSSL团队的Stephen Henson开发出了针对此漏洞的修复补丁。
BIO_*printf函数中的内存问题得到了修复(CVE-2016-0799)
漏洞严重程度:低
在此之前,安全研究人员在OpenSSL的BIO_*printf()函数中发现了几个问题。但现在这些问题都已经得到了解决。
系统在调用内部函数"fmtstr"来处理BIO_*printf函数中的"%s"格式字符串时,需要对字符串的长度进行计算,但是这将有可能导致数据溢出的发生,并且在该函数打印输出某一长度非常大的字符串时,也有可能引起系统的崩溃。
BIO_*pinrtf函数的主要功能是负责解释和转换格式字符串,该函数的输入参数为_dpor()。dpor()可以以一种渐进的方式对格式字符串中的字符逐个进行扫描,并利用doapr_outch()函数对数据进行输出。
除此之外,当内存空间分配失败时,内部函数"doapr_outch"仍然会尝试向内存空间写入带外数据(OOB)。在1.0.2及其以下版本中,这一问题将会导致系统在分配内存缓冲区的空间时,分配空间的大小会超过INT_MAX长度所规定的值,而这种情况一般会在系统处理某一较长的"%s"格式字符串时发生。与此同时,系统还有可能会发生内存泄漏。
考虑到编译器的工作机制,第一个问题很有可能会掩盖上述的第二个问题。因为在这种情况下,大量不受信任的数据就可以被传递至BIO_*pirntf函数之中,然后攻击者就可以利用这些漏洞来对目标进行攻击。如果应用程序使用了这些功能函数,那么他们的系统就变得不安全了。当OpenSSL需要打印输出人类可识别的ASN.1数据时,将会使用到这些函数。因此,如果需要输出的数据来自于一个不受信任的信息源,那么负责打印输出这些数据的应用程序也将有可能受到攻击。除此之外,如果OpenSSL的命令行工具所要打印输出ASN.1数据来源于不受信任的信息源,那么它同样也是可以被攻击的。
这个问题将会影响OpenSSL 1.0.2和1.0.1。所以我们建议用户:
l 使用了OpenSSL 1.0.2的用户应该立刻将OpenSSL更新至1.0.2g;
l 使用了OpenSSL 1.0.1的用户应该立刻将OpenSSL更新至1.0.1s;
Guido Vranken于2016年2月23日将此问题报告给了OpenSSL团队。OpenSSL团队的Matt Caswell已经开发出了针对此漏洞的修复补丁。
除了OpenSSL之外,Apache httpd也使用了BIO_printf函数,所以它也会受到这一漏洞的影响。但是,我们目前还没有对其进行分析检测,所以暂时还不知道该漏洞将会给这一产品带来多大的影响。除此之外,还有一些其他著名的应用程序也使用了BIO_printf(),具体信息请点击这里进行获取。
用户提醒
根据我们的产品发布策略以及之前所发布的安全公告(具体信息请点击这里查看),我们将会在2016年12月31日停止对OpenSSL 1.0.1提供技术支持。在此之后,OpenSSL团队将不会再为此版本发布任何的安全更新补丁。所以我们建议OpenSSL 1.0.1的广大用户尽快更新OpenSSL版本。
除此之外,OpenSSL团队已经于2015年12月31日时停止对OpenSSL 0.9.8和1.0.0提供技术支持,这些版本将不再接收到相应的安全更新。
参考信息
安全公告地址:https://www.openssl.org/News/secadv/20160301.txt
本文来源: 360安全播报