RC4弱密碼套件檢測

1、漏洞分析html

事件原由linux

2015年3月26日,國外數據安全公司Imperva的研究員Itsik Mantin在BLACK HAT ASIA 2015發表論文《Attacking SSL when using RC4》闡述了利用存在了13年之久的RC4漏洞——不變性弱密鑰(《Weakness in the Key Scheduling Algorithm of RC4》,FMS 發表於2001年)進行的攻擊,並命名爲「受戒禮」攻擊(Bar Mitzvah Attack)。nginx

直到2015年3月,還有約30%的網絡通訊是由RC4進行保護的。經過「受戒禮」攻擊,攻擊者能夠在特定環境下只經過嗅探監聽就能夠還原採用RC4保護的加密信息中的純文本,致使帳戶、密碼、信用卡信息等重要敏感信息暴露,而且能夠經過中間人(Man-in-the-middle)進行會話劫持。算法

攻擊方法和模式chrome

攻擊者嗅探監聽大量的SSL連接,能夠判斷第一個加密消息包含SSL的完成消息和HTTP請求,都是具備可預測的信息的。而後等待一個不變性弱密鑰的連接到來,當獲取到一個弱密鑰連接時候就能夠提取出LBS。當弱密鑰使用的時候,明文和密鑰會進行異或,攻擊者能夠看到生成的密文模式。macos

攻擊者一樣也進行DNS投毒,將全部的連接連接到一個惡意的主機,主機進行中間人攻擊,可以有效地進行大量用戶的嗅探監聽和會話劫持。apache

漏洞原理和細節windows

根據《Attacking SSL when using RC4》中的闡述,漏洞的成因主要在於不變性弱密鑰是RC4密鑰中的一個L型的圖形,它一旦存在於RC4的密鑰中,在整個初始化的過程之中保持狀態轉換的完整性。這個完整的部分包括置換過程當中的最低有效位,在由RPGA算法處理的時候,決定僞隨機輸出流的最低有效位。這些誤差的流字節和明文進行過異或,致使密文中會泄露重要明文信息。瀏覽器

 

狀態轉換(來自《Attacking SSL when using RC4》)tomcat

這種模式發生在LSBs,a single LSB, 2 LSBs 等的不一樣數字時候,致使不一樣種類的RC4弱密鑰。

若是一個q-class(q 指代LSB的數字)的密鑰被使用,那麼會發生如下的問題:

RC4的初始化語句不能正確地配合狀態和關鍵信息,而且保存K個最低有效位存儲內部狀態;
RC4初始狀態具備固定的非混合q LSB;
第一個明文字節流的30-50字節的q個最低有效位遵照顯著機率肯定模式;
第一個明文字節流的30-50字節的q個最低有效位有顯著機率暴露。

SSL在不少加密套件中使用RC4進行加密。在握手環節產生RC4密鑰用來加密上行數據流和下行數據流。上行數據流中用來加密客戶端– 服務器的數據流,下行數據流中用來加密服務器 – 客戶端的數據流。加密是有狀態的,使用第一個密鑰流加密第一個字節的信息,以後的密鑰流加密下一條消息(想CBC模式同樣)。因爲串加密毀滅了最低有效位的肯定性,因此不變性弱密鑰只能利用於被保護的第一個100字節。

SSL的握手結束消息是每一個方向(上行和下行)的第一條加密消息,且結束消息固定使用了36個字節,因此還有64個字節留給攻擊者使用。

2、安全檢測

在線檢測:服務器測試:https://www.ssllabs.com/ssltest/index.html

 

瀏覽器測試:https://www.ssllabs.com/ssltest/viewMyClient.html

本地檢測:(針對服務器,須要在linux服務器下安裝openssl)

$ openssl s_client -connectyinxiang.com:443 -cipher RC4

若是可以查看到證書信息,那麼就是存在風險漏洞
若是顯示sslv3 alerthandshake failure,表示改服務器沒有這個漏洞。

3、修補方式

 

服務器

對於NGINX的修補

修改nginx配置文件中的 ssl_ciphers項

 ssl_ciphers"ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_prefer_server_ciphers on;

從新加載:

$sudo /etc/init.d/nginx reload

對於apache的修復

打開配置文件

$ sudo vi /etc/httpd/conf.d/ssl.conf

修改配置

SSLCipherSuite
HIGH:MEDIUM:!aNULL:!MD5;!RC4
$ sudo /etc/init.d/httpd restart

對於TOMCAT的修復

server.xml 中SSL connector加入如下內容:

SSLEnabled="true"sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2"ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA"

 

tomcat例子:

<connector port="443"maxhttpheadersize="8192" address="127.0.0.1"enablelookups="false" disableuploadtimeout="true"acceptCount="100" scheme="https" secure="true"clientAuth="false" SSLEnabled="true"sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA"keystoreFile="mydomain.key" keystorePass="password" truststoreFile="mytruststore.truststore"truststorePass="password"/>;

 

對於IIS修補

將下面的內容保存爲fix.reg,並雙擊運行來修改註冊表:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\DES56/56]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\NULL]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC240/128]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC256/128]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC440/128]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC456/128]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC464/128]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\PCT1.0\Server]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL2.0\Server]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL3.0\Server]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL3.0\Client]"DisabledByDefault"=dword:00000001

客戶端瀏覽器

對於chrome瀏覽器的修補

@linux

關閉瀏覽器,在terminal中直接輸入命令運行

$ google-chrome–cipher-suite-blacklist=0x0004,0x0005,0xc011,0xc007

@windows

快捷圖標->右鍵->在目標後面加入引號內的內容 「–cipher-suite-blacklist=0×0004,0×0005,0xc011,0xc007」

重啓瀏覽器生效

@macos

在terminal種輸入:

/Applications/GoogleChrome.app/Contents/MacOS/GoogleChrome--cipher-suite-blacklist=0x0004,0x0005,0xc011,0xc007

對於firefox(全平臺)

在地址欄輸入 about:config 回車,搜索框輸入rc4,雙擊 value 的值就能夠改爲 false而且禁止rc4相關的ssl傳輸,以下圖:

 

 

對於IE(只在windows平臺)

參考解決辦法:https://www.sslshopper.com/article-how-to-disable-ssl-2.0-in-iis-7.html

運行->regedit->對下面鍵值進行設置:

·[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4128/128]
"Enabled"=dword:00000000
·[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC440/128]
·"Enabled"=dword:00000000
·[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC456/128]
·"Enabled"=dword:00000000

或者將將下面內容保存爲fix.reg,而後雙擊運行fix.reg進行註冊表修改:

WindowsRegistry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4128/128]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC440/128]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC456/128]"Enabled"=dword:00000000

本文版權屬於NSTRT團隊,由團隊成員zyx編寫。若是你以爲這篇文章有用,能夠分享給本身的朋友,一樣但願更多的人也關注咱們的微信公衆號trt917和微博 NSTRT團隊,咱們會按期分享一些信息安全相關知識,但願可以對你們有所幫助。

相關文章
相關標籤/搜索