天天看點

OpenSSL CVE-2016-0800和CVE-2016-0703漏洞修複細節拾趣

OpenSSL CVE-2016-0800和CVE-2016-0703漏洞修複細節拾趣

引子

本文講的是OpenSSL CVE-2016-0800和CVE-2016-0703漏洞修複細節拾趣,本來最近和360 Nirvan Team的DQ430愉快的參加某加密廠商的年度大會,結果openssl也出來碰熱鬧,也許真是為了DH兄弟送大禮,苦了我們這些安全運維的。

感謝Shawn的指點!

hf!

細節

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 )

send masterkey msg ( 指定一個 cipher,且包含 masterkey 的一部分明文 mkc 和一部分密文 mks,mkc長度可為0 )

send verify msg

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,雙方可以互相計算

client_key = MD5(mk||”1″||cr||sr)

(“||”見 RSA PKCS1#v1.5)

d、server 回應的 verify msg 中大有玄機,是最終利用的關鍵,與sslv2标準有關,且聽下回分解吧。

結尾

雖然能表明“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)

受影響的服務版本:

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 可以通過以下指令來更新

對應的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 版本可以通過以下指令來更新

禁用 Apache、Nginx、Postfix 中的SSLv2

在Apache 的 SSL 配置檔案中禁用SSLv2

SSLProtocol all -SSLv2

重新開機apache服務

在 Nginx 的 SSL 配置檔案中設定隻允許使用 TLS 協定:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

重新開機nginx服務

在Postfix配置中禁用SSLv2

by 360資訊安全部- au2o3t@360 CloudSec Team

原文釋出時間為:三月 2, 2016

本文作者:aqniu

本文來自雲栖社群合作夥伴安全牛,了解相關資訊可以關注安全牛。

繼續閱讀