脆弱的SSL加密算法

一:漏洞名稱:

弱加密算法、脆弱的加密算法、脆弱的SSL加密算法、openssl的FREAK Attack漏洞

描述:

       脆弱的SSL加密算法,是一種常見的漏洞,且至今仍有大量軟件支持低強度的加密協議,包括部分版本的openssl。其實,該低強度加密算法在當年是非常安全的,但時過境遷,飛速發展的技術正在讓其變得脆弱。黑客可利用SSL弱加密算法漏洞進行SSL中間人攻擊,即強迫服務器和用戶之間使用低強度的加密方式,然後再通過暴力破解,竊取傳輸內容。強度較弱的加密算法將不能較好的保證通信的安全性,有被攻擊者破解的風險。對於linux中openssl的FREAK Attack漏洞,該漏洞是由於OpenSSL庫裏的s3_clnt.c文件中,ssl3_get_key_exchange函數,允許客戶端使用一個弱RSA祕鑰,向SSL服務端發起RSA-to-EXPORT_RSA的降級攻擊,以此進行暴力破解,得到服務端祕鑰。此問題存在於OpenSSL版本0.9.8zd之前, 或1.0.0p之前的1.0.0,或1.0.1k之前的1.0.1。

檢測條件:

1.已知Web網站開放443端口(https)。

2.開啓了SSL協議。

檢測方法:

1.對於windows中的檢測方法:通過加密算法檢測工具,與網站系統進行加密算法枚舉通信,探測系統存在的加密算法及位數情況。利用SSLciphercheck軟件,通過CMD下運行,進行協議探測進行檢測命令:“sslciphercheck.exe -h  ip地址或者域名  -p  443”,或者是利用web掃描工具,如WVS,APPscan等進行掃描檢測,相關檢測截圖:

2.對於linux下的openssl的FREAK Attack漏洞,檢測如下:https遠程檢查方法(看一個網站是脆弱的RSA弱密鑰攻擊,你可以使用OpenSSL命令):openssl s_client -connect www.fbi.gov:443 -cipher EXPORT,如果你看到”alert handshake failure”這句話就說明該網站是安全的:

3.RedHat系列檢查命令:rpm -qa|grep openssl

4.Debian\Ubuntu系列檢查命令: dpkg -l|grep openssl

5、使用Nmap查看端口的服務版本,包括SSL服務版本 nmap -sV --reason -PN -n --top-ports 100 www.example.com

6、使用Nmap檢測證書信息、弱加密、SSLv2 nmap --script ssl-cert,ssl-enum-ciphers -p

漏洞修復:

以下爲針對脆弱的SSL加密算法漏洞的修復建議,其中包括IIS、apache、和windows本身的一些安全建議方法:

1.對於linux中openssl的FREAK Attack漏洞,如果因爲生產環境無法直連外網或是變更配置管理等原因而不便更新補丁,可以採取以下臨時修復方法:

  1. 禁用出口級弱加密算法在命令行使用:openssl ciphers MEDIUM。
  2. 禁止apache服務器使用出口級加密算法:vi /etc/httpd/conf.d/ssl.conf;增加如下配置:SSLCipherSuite HIGH:!aNULL:!MD5:!EXP;需要重啓apache服務:/etc/init.d/httpd restart。
  3. 關於nginx加密算法:1.0.5及以後版本,默認SSL密碼算法是HIGH:!aNULL:!MD5;0.7.65、0.8.20及以後版本,默認SSL密碼算法是HIGH:!ADH:!MD5;0.8.19版本,默認SSL密碼算法是:ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM;0.7.64、0.8.18及以前版本,默認SSL密碼算法是ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;低版本的nginx或沒註釋的可以直接修改域名下ssl相關配置爲ssl_ciphers         HIGH:!aNULL:!MD5;需要nginx重新加載服務:/etc/init.d/nginx reload

2.對於IIS中SSL,修復方案爲:

  1. 在 IIS 管理器中,雙擊本地計算機,然後右鍵單擊所需的某個網站、目錄或文件,然後單擊“屬性”。
  2. 在“目錄安全性”或“文件安全性”選項卡的“安全通信”下面,單擊“編輯”。
  3. 在“安全通信”框中,選中“需要安全通道 (SSL)”複選框。
  4. 如果需要使用 128 位加密,請選擇“要求 128 位加密”複選框。
  5. 單擊“確定”。

3.對於Apache的修復方案爲:

1.禁用它只需幾分鐘的時間。例如,在Apache v2中,你只需要改變默認設置:

SSLProtocol all

To

SSLProtocol all -SSLv2

2.如何建立一個僅使用SSLv2的服務器:

可以這樣建立一個僅使用SSLv2協議及其密碼算法的服務器:

httpd.conf

SSLProtocol -all +SSLv2

SSLCipherSuite SSLv2:+HIGH:+MEDIUM:+LOW:+EXP

3.如何建立一個僅接受強加密請求的SSL服務器:

如下設置爲僅使用最強的七種密碼算法:

httpd.conf

SSLProtocol all

SSLCipherSuite HIGH:MEDIUM

4.如何建立一個僅接受強加密請求的SSL服務器,而又允許對外瀏覽器使用更強的加密:這個功能被稱爲以服務器爲網關的加密(Server Gated Cryptography [SGC]), 在README.GlobalID文檔中有詳細說明。 簡單地說就是:服務器擁有一個由來自Verisign的一個特殊的CA證書籤發的服務器身份證, 從而在對外瀏覽器上實現強加密。 其過程如下:瀏覽器使用對外密碼進行連接,服務器返回其全局ID身份證, 瀏覽器校驗後在後繼HTTP通訊產生之前提升其密碼組。 現在的問題是:如何允許這樣的提升,而又強制性地使用強加密。 換句話說就是:瀏覽器必須在開始連接時就使用強加密,或者提升到強加密, 但是維持對外密碼是不允許的。以下巧妙地解決了這個問題:

httpd.conf

# 允許在初始握手階段使用所有的密碼,

# 以允許對外服務器通過SGC功能提升密碼組

SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

<Directory /usr/local/apache2/htdocs>

# 但是最終會拒絕所有沒有提升密碼組的瀏覽器

SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128

</Directory>

5.如何建立接受所有類型密碼的SSL服務器,但對特定的URL實施強加密:顯然,不能使用服務器全局設置SSLCipherSuite,它會限制密碼爲強類型。 但是,mod_ssl允許重配置針對目錄的密碼組,並自動進行一個帶有服從新配置的SSL參數的重協商。 因此,其解決方案成了:

httpd.conf

# 在一般情況下的處理是寬鬆的

SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

<Location /strong/area>

# 但對於https://hostname/strong/area/ 及其以下的內容

# 要求強密碼

SSLCipherSuite HIGH:MEDIUM

</Location>

具體詳細方案,可參考:http://www.winet.cn/apache/sitemap.php

4.對於windos系統中,禁用SSL弱加密算法修復方案:

1.windows server 2003註冊表可能與以下的不同。解決方案:Windows Server 2008 支持下列協議:•SSL 2.0 •SSL 3.0•TLS 1.0。Windows Server 2008 R2 和 Windows 7 支持下列協議:•SSL 2.0 •SSL 3.0•TLS 1.0•TLS 1.1•TLS 1.2,對於服務器或客戶端體系結構,可以禁用這些協議。這意味着可以省略該協議,或將其禁用。如果要禁用SSL-V2.0,採用如下方案:

SSL 2.0 的服務器計算機上的註冊表位置如下所示:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server

(1)若要啓用 SSL 2.0,請執行以下步驟:

1.在客戶端計算機上,將 DisabledByDefault DWORD 值設置爲 00000000。

2.在服務器計算機上,將啓用的 DWORD 值設置爲 0xffffffff。

3.重新啓動計算機。

(2)若要禁用 SSL 2.0,請執行以下步驟:

1.在客戶端計算機上,將 DisabledByDefault DWORD 值設置爲 00000001。

2.在服務器計算機上,將啓用 DWORD 值設置爲 00000000。

3.重新啓動計算機。

2.SCHANNEL 鍵部分、 方法或任務包含一些介紹如何修改註冊表的步驟。但是,如果不正確地修改了註冊表,可能會出現嚴重的問題。因此,請確保仔細按照下列步驟操作。爲增加保護,對其進行修改之前備份註冊表。然後,您可以在出現問題時還原註冊表。:

SCHANNEL 鍵位置:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL

以下爲常見的SCHANNEL鍵子項,包含弱加密算法的一些禁用方法:

(1)56/128 SCHANNEL\Ciphers\RC4 子項:RC4 64/128,若要允許此密碼算法,更改到已啓用值的 DWORD 值數據 0xffffffff.否則,更改到的 DWORD 值數據 0x0.如果您不配置啓用值,默認情況下啓用。

(2)56/128 SCHANNEL\Ciphers\RC2 子項:RC4 56/128,56 位 RC4 引用此註冊表項。若要允許此密碼算法,更改到已啓用值的 DWORD 值數據 0xffffffff.否則,更改到的 DWORD 值數據 0x0.如果您不配置啓用值,默認情況下啓用。

(3)SCHANNEL\Ciphers\RC2 56/56 子項:RC2 56/128,56 位 RC2 引用此註冊表項。若要允許此密碼算法,更改到已啓用值的 DWORD 值數據 0xffffffff.否則,更改到的 DWORD 值數據 0x0.如果您不配置啓用值,默認情況下啓用。

(4)SCHANNEL\Ciphers\RC4 40/128 子項:DES 56,56 位 DES 作爲指定 FIPS 46-2 中引用此註冊表項。FIPS 140-1 加密模塊驗證計劃下,它的 Rsabase.dll 和 Rsaenh.dll 文件中的實現進行驗證。若要允許此密碼算法,更改到已啓用值的 DWORD 值數據 0xffffffff.否則,更改到的 DWORD 值數據 0x0.如果您不配置啓用值,默認情況下啓用。

(5)SCHANNEL\Ciphers\RC2 40/128 子項:RC4 40/128,這指的是 40 位 RC4。若要允許此密碼算法,更改到已啓用值的 DWORD 值數據 0xffffffff.否則,更改到的 DWORD 值數據 0x0.如果您不配置啓用值,默認情況下啓用。

(6)SCHANNEL\Ciphers\NULL 子項:RC2 40/128,40 位 RC2 引用此註冊表項。若要允許此密碼算法,更改到已啓用值的 DWORD 值數據 0xffffffff.否則,更改到的 DWORD 值數據 0x0.如果您不配置啓用值,默認情況下啓用。

(7)SCHANNEL\Hashes\SHA 子項:MD5,若要允許此哈希算法,將啓用值的 DWORD 值數據更改爲默認值 0xffffffff.否則,更改到的 DWORD 值數據 0x0.有效地禁用此算法時,不允許以下:•SSL_RSA_EXPORT_WITH_RC4_40_MD5,•SSL_RSA_WITH_RC4_128_MD5,•SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5,•TLS_RSA_EXPORT_WITH_RC4_40_MD5,•TLS_RSA_WITH_RC4_128_MD5,•TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5。

(8)SCHANNEL/KeyExchangeAlgorithms 子項:SHA,此註冊表項是指安全哈希算法 (sha-1),指定 FIPS 180-1 中。FIPS 140-1 加密模塊驗證計劃下,它的 Rsabase.dll 和 Rsaenh.dll 文件中的實現進行驗證。若要允許此哈希算法,將啓用值的 DWORD 值數據更改爲默認值 0xffffffff.否則,更改到的 DWORD 值數據 0x0.有效地禁用此算法時,不允許以下: •SSL_RSA_WITH_RC4_128_SHA,•SSL_RSA_WITH_DES_CBC_SHA,•SSL_RSA_WITH_3DES_EDE_CBC_SHA,•SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA,•SSL_RSA_EXPORT1024_WITH_RC4_56_SHA,•TLS_RSA_WITH_RC4_128_SHA,•TLS_RSA_WITH_DES_CBC_SHA,•TLS_RSA_WITH_3DES_EDE_CBC_SHA,•TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA,•TLS_RSA_EXPORT1024_WITH_RC4_56_SHA。

其他補充:

可以結合這篇文章一起來學習:淺談“POODLE信息泄露漏洞”

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章