开发者社区> 晚来风急> 正文

OpenSSL CVE-2016-0800和CVE-2016-0703漏洞修复细节拾趣

简介: 本文讲的是OpenSSL CVE-2016-0800和CVE-2016-0703漏洞修复细节拾趣,本来最近和360 Nirvan Team的DQ430愉快的参加某加密厂商的年度大会,结果openssl也出来碰热闹,也许真是为了DH兄弟送大礼,苦了我们这些安全运维的。
+关注继续查看

image

  1. 引子

本文讲的是OpenSSL CVE-2016-0800和CVE-2016-0703漏洞修复细节拾趣,本来最近和360 Nirvan Team的DQ430愉快的参加某加密厂商的年度大会,结果openssl也出来碰热闹,也许真是为了DH兄弟送大礼,苦了我们这些安全运维的。

感谢Shawn的指点!
hf!

  1. 细节

360在内部信息安全实践历程中,“360信息安全部”逐步秉承最佳安全实践,在https等ssl领域逐渐做出了明显的变化。比如重要系统中禁止不安全的加密套件使用,来减少ssl的攻击面。

我们在今天的内部运维修复中发现了个有趣的现象或者说尝试,我们想去确定禁止不安全的加密套件会对今天的两个高危漏洞有什么影响。
CVE-2016-0800
CVE-2016-0703

0800漏洞官方已经描述了如果是cipher none的话,能保证是不受影响的,或者说这是一个缓解措施。

但是0703就不一样了,我们花了几个小时尝试去证明如果cipher none的话确实也是不受影响的。

0703过程大略如下:
client:
send hello msg ( 包括 ciphers,和一个随机数 cr )

server:
send hello msg ( 包括 ciphers,和一个随机数 sr )

client:
send masterkey msg ( 指定一个 cipher,且包含 masterkey 的一部分明文 mkc 和一部分密文 mks,mkc长度可为0 )

server:
send verify msg

client:
send finish msg

server:
send finish msg

这个过程由于client可以指定不安全的算法(RC4-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export)
导致密文部分只有40bit

client 根据 cr, mk = mkc||mks, 和收到的 verify msg,可计算出 server key

server_key = MD5(mk||”0″||cr||sr)

所以我们认为攻击的条件依然需要类似RC4_128_WITH_MD5 的套件。
a、关键是 client 指定了 export cipher,导致 mks 只有5个字节

b、不止 RC4_128_WITH_MD5 一个 export,默认情况,openssl 编译出来共有两个 export cipher:

EXP-RC2-CBC-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export
EXP-RC4-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export

c、计算出的 server_key 是 session key,双方可以互相计算

server_key = MD5(mk||”0″||cr||sr)
client_key = MD5(mk||”1″||cr||sr)
(“||”见 RSA PKCS1#v1.5)

d、server 回应的 verify msg 中大有玄机,是最终利用的关键,与sslv2标准有关,且听下回分解吧。

  1. 结尾

虽然能表明“360信息安全部”的安全实践能有效抵挡 CVE-2016-0703 的攻击,但在此依然希望大家按照官方的建议去升级对应的补丁。
gl!
以下是我们的基本修复建议:

漏洞编号: CVE-2016-0703
漏洞说明:
使用OpenSSL并支持SSLv2协议的服务器可接受指向长度非零非导出密钥组件的SSLv2连接握手,攻击者可利用这个缺陷解密已经建立的加密会话。
漏洞等级: 高

漏洞编号: CVE-2016-0800
漏洞说明:
SSLv2协议中存在一个填充内容缺陷,攻击者可以利用这个缺陷解密使用新版SSL/TLS协议会话中由RSA算法加密的内容。通过这种利用方式,可造成DROWN攻击(Decrypting RSA using Obsolete and Weakened eNcryption)
漏洞等级: 高

漏洞详情: https://www.openssl.org/news/secadv/20160301.txt

受影响的服务版本:
Apache: 非2.4.x版本
Nginx: 0.7.64、0.8.18及更早版本
Postfix: 早于2.9.14、2.10.8、2.11.6、3.0.2的版本 (在2015.07.20之前发布)
Openssl: 1.0.2a、1.0.1m、1.0.0r、0.9.8zf及更早版本

检测方式:

OpenSSL版本检测:
openssl version
若版本低于修复版本请更新openssl

针对web server:
openssl s_client -connect 待测域名或IP:443 -ssl2

针对SMTP server:
openssl s_client -connect 待测域名或IP:25 -starttls smtp -ssl2

如果出现如下错误信息,则SSLv2已禁用:
419:error:1407F0E5:SSL routines:SSL2_WRITE:ssl handshake failure:s2_pkt.c:428:

修复步骤:
(1). 升级OpenSSL软件包

CentOS、Redhat 可以通过以下命令来升级

#yum clean
#yum update openssl

对应的RPM包:
CentOS 5: openssl-0.9.8e-39.el5_11、 openssl-devel-0.9.8e-39.el5_11、 openssl-perl-0.9.8e-39.el5_11
CentOS 6: openssl-1.0.1e-42.el6_7.4、 openssl-devel-1.0.1e-42.el6_7.4、 openssl-perl-1.0.1e-42.el6_7.4、 openssl-static-1.0.1e-42.el6_7.4
CentOS 7: openssl-1.0.1e-51.el7_2.4、 openssl-devel-1.0.1e-51.el7_2.4、 openssl-libs-1.0.1e-51.el7_2.4、 openssl-perl-1.0.1e-51.el7_2.4、 openssl-static-1.0.1e-51.el7_2.4

(2). ubuntu 版本可以通过以下命令来升级

#apt-get upgrade openssl

禁用 Apache、Nginx、Postfix 中的SSLv2
在Apache 的 SSL 配置文件中禁用SSLv2
SSLProtocol all -SSLv2
重启apache服务
在 Nginx 的 SSL 配置文件中设置只允许使用 TLS 协议:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
重启nginx服务

在Postfix配置中禁用SSLv2

# Minimal recommended settings.  Whenever the built-in defaults are
# sufficient, let the built-in defaults stand by deleting any explicit

# overrides.  The default mandatory TLS protocols have never included

# SSLv2, check to make sure you have not inadvertently enabled it.

smtpd_tls_protocols = !SSLv2, !SSLv3

smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3

tlsproxy_tls_protocols = $smtpd_tls_protocols

tlsproxy_tls_mandatory_protocols = $smtpd_tls_mandatory_protocols

smtp_tls_protocols = !SSLv2, !SSLv3

smtp_tls_mandatory_protocols = !SSLv2, !SSLv3

lmtp_tls_protocols = !SSLv2, !SSLv3

lmtp_tls_mandatory_protocols = !SSLv2, !SSLv3

smtpd_tls_ciphers = medium

smtp_tls_ciphers = medium

# Other best practices

# Strongly recommended:

# http://www.postfix.org/FORWARD_SECRECY_README.html#server_fs

smtpd_tls_dh1024_param_file=${config_directory}/dh2048.pem

smtpd_tls_eecdh_grade = strong

# Suggested, not strictly needed:

smtpd_tls_exclude_ciphers =

EXPORT, LOW, MD5, SEED, IDEA, RC2

smtp_tls_exclude_ciphers =

EXPORT, LOW, MD5, aDSS, kECDHe, kECDHr, kDHd, kDHr, SEED, IDEA, RC2

by 360信息安全部- au2o3t@360 CloudSec Team

原文发布时间为:三月 2, 2016
本文作者:aqniu
本文来自云栖社区合作伙伴安全牛,了解相关信息可以关注安全牛。
原文链接:http://www.aqniu.com/learn/14036.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
CVE-2014-0224:OpenSSL在Heartbleed之后再爆“CCS”新漏洞
重要的互联网基础工具OpenSSL在Heartbleed“心脏出血”漏洞发生不久后,于2014年6月5日再次修正了一个可以导致中间人攻击的新漏洞“CCS”(CVE-2014-0224)。
507 0
关于runc漏洞CVE-2019-5736的修复公告
漏洞详情: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5736 Docker、containerd或者其他基于runc的容器运行时存在安全漏洞,攻击者可以通过特定的容器镜像或者exec操作可以获取到宿主机的runc执行时的文件句柄并修改掉runc的二进制文件,从而获取到宿主机的root执行权限。
5615 0
关于Kubernetes CVE-2018-1002105 提权漏洞的修复公告
近日Kubernetes社区发现安全漏洞 CVE-2018-1002105。通过伪造请求,Kubernetes用户可以在已建立的API Server连接上提权访问后端服务,阿里云容器服务已第一时间修复,请登录阿里云控制台升级您的Kubernetes版本。
5145 0
Drupal CVE-2018-7600 漏洞利用和攻击
背景介绍 2018年3月28日,Drupal Security Team官方发布了一个重要的安全公告,宣称Drupal 6,7,8等多个子版本存在远程代码执行漏洞,攻击者可以利用该漏洞攻击Drupal系统的网站,执行恶意代码,最后完全控制被攻击的网站,该漏洞就是:CVE-2018-7600。
8505 0
CVE-2017-8464漏洞复现
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396484 感谢学长分享复现的技术文档,十分感谢。
1180 0
cve-2017-11882漏洞利用
概述 这是一个潜伏了17年之久的远程代码执行漏洞,这个漏洞影响了目前所有的流行office软件,原理是利用了office的一个EQNEDT32.EXE组件,就是公式编辑器组件,详细的你可以看freebuf的这篇文章打开文档变肉鸡:潜伏17年的“噩梦公式”Offic...
1112 0
+关注
晚来风急
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
从加固讲APK瘦身
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多