保持交易與客戶資料隱密性
知識&消息
如何修補網站上SSL的相關漏洞!
在我們提供的ssl config test的工具中,您可以檢測您的網站一些ssl的設定是否正確,包含一些已知的漏洞,本篇文章將針對如何修正這些功能進行說明,讓您除了檢測之外也可以自行去修訂相關的設定,使您的網站更加的安全,除此之外,也讓使用您網站的人更加安心!讓我們一起往下看吧!
SSL設定測試工具中,分成三個部分,如下圖
一個是憑證植入情形,代表您使用的憑證在瀏覽器中植入的情形,
二個是通訊協定的測試(加密套件支援情形),
三個是已知漏洞的測試(已知需調整或補強功能現況),
當您測試之後,您可以看到相關的設定是否正常,如果不正常顯示相關訊息,那我們要如何調整到都正常呢,以下說明:
1.先針對憑證植入情形 :
這個部分比較無從調整起,因為這是CA廠商去申請植入各大瀏覽器的工作,如果發現有沒有植入的情況,也只能發信請CA廠商進行申請,不過此測試是可以提醒您了解您使用的憑證植入狀況!
2.通訊協定的測試(加密套件支援情形) :
這工具會去測試您ssl的通訊協定的設定情況,總共有5個,分別是
TLSV1.0,TLSV1.1,TLSV1.3,SSLV2,SSLV3,
如果您要修正通訊協定哪些要開啟哪些關閉,可以透過以下設定進行調整
先請您找到您web server的設定檔,然後在檔案中加入 SSLProtocol All -SSLv2 -SSLv3 -TLSv1.1 -TLSv1.2 -TLSv1.0來進行調整
如果要取消sslv2與sslv3 =>SSLProtocol All -SSLv2 -SSLv3
如果要取消TLSv1.1與TLSv1.2=>SSLProtocol All -TLSv1.1 -TLSv1.2
如果要取消TLSv1.1與TLSv1.0=>SSLProtocol All -TLSv1.1 -TLSv1.0
所以您可以看到,只要填入參數(-SSLv2 -SSLv3 -TLSv1.1 -TLSv1.2 -TLSv1.0)就可以調整開啟或關閉使用的通訊協定.-號代表不要此通訊協定
3.已知漏洞的測試(已知需調整或補強功能現況)
第一個:Deflate Compression attack(SSL Compression):
說明:
這個漏洞是針對SSL/ TLS通訊協定中的信息洩露做攻擊,是由 Juliano Rizzo and Thai Duon這兩位發現,主要是發生在資料進行壓縮的過程中進行攻擊,假設有人可以重複輸入或者任意混合一些內容,加到比較敏感且可預測的數據上,然後觀察加密系統加密後的資料,並找到一些規則,那就可以從加密訊息中還原加密的資料!造成資料洩漏! 所以,如果您的server有支援SSL Compression(TLS),那就有可能暴露在此種風險當中!
修正方式:
取消SSL Compression的功能,舉常用的apache為例 :
在Apache 2.2.24(using mod_ssl)以上的版本,請找到SSL的config檔案,修改或加入SSLCompression off,關閉此功能
如果是Apache 2.2.24以前的版本,並沒有這個項目可以修正,請重新編譯openssl,讓他不支援ZLIB的功能,這樣就可以禁止使用
SSLCompression!
第二個:Session Renegotiation attack(對話重新協商攻擊)
說明:
這個漏洞是針對SSL/TLS本身設計上的缺陷進行攻擊,在2011年的時候,德國的駭客組織提出了一個攻擊的工具,可以
癱瘓https的網站,駭客是利用SSL的server與client端的溝通時的規則的小缺失進行攻擊,這叫做SSL Renigociation Attack,我
們舉的例子,當您上一個https的購物網站進行商品選購時,原本的SSL互相認証的機制會建立,並且保留一些交握的資料,而當
您確定要購買時,網站通常會要求認證您的身分,這時候原本的SSL的連線(不是開新的連線)就必須配合認證身分而進行調
整,已達到認證的目的,而SSL的重新調整就是利用SSL Renigociation的機制完成,乍看之下,這個種重新溝通的機制很正常,
然而TLS與SSL3.0的協定並沒有好好處理這樣的流程,造成駭客可以利用重溝通的過程中塞入一些資料,來進行攻擊!
修正方式:
新版的瀏覽器有支援RFC5746,大都修補完成,舊版的則需要關閉Session Renegotiation的功能,禁止使用
SSLV2,SSLV3以及禁止使用弱密碼套件來修補此問題!
第三個:OpenSSL Heartbleed 漏洞(心臟淌血攻擊)
說明:
這個漏洞是OPENSSL本身發現提出(2014.04.18),主要是openssl軟體開發的時候沒注意到的程式漏洞(記憶體溢位),
所以是openssl套件本身的問題造成,駭客利用此漏洞可以竊取相關受SSL保護的機密資料,所以影響很嚴重!須修補的
OpenSSL版本:1.0.1,1.0.2-beta,1.0.1f,1.0.2-beta1與之前的舊版本!如果您的openssl版本是這些,務必注意此漏洞造成的影
響!
修正方式:
就是更新openssl到新的版本,如在linux上, 執行 yum update openssl進行更新!
第四個:OCSP Stapling (OCSP裝訂)
說明:
當您打開網頁連接到https網站的時候,您的瀏覽器透過發證商提供的CRL或者OCSP server會去驗證此SSL憑證的有效
性,CRL通常檔案很大且不是很即時,OCSP則是即時提供,然而,因為OCSP每次的回應都需要時間,一但量大的時候,會發生
來不即回應(或者回應很慢)的情況,這時候流覽器就會一直等待回應,讓駭客可以拒絕OCSP的回應而無法驗證!OCSP
Stapling就是要改善此情況!
修正方式:
解決的辦法是利用cache緩存,讓服務器在溝通的時候,發送其緩存的OCSP的記錄,節省server的時間,此cache可
以提供48小時的時間,之後再從新進行緩存!這部分是跟CA發證商比較相關!發證商的OCSP server必須要提供此服務,另外
您在您的網站主機上可以做以下的調整 舉apache為例,
在您的config檔案中加入或修改
SSLUseStapling on = >啟用tapling
SSLStaplingResponseMaxAge 900 =>設定回應時間最大為900秒
SSLStaplingCache "shmcb:logs/stapling-cache(150000)" =>設定cache的時間 還有其他的修改設定,可以調整好的效能,可
第五個:Session Resumption
說明:
這個也不算是漏洞,是加速SSL速度的一種方式,有的話SSL的速度會比較快!
當建立SSL的連線的時候,基本上需要四的步驟進行訊息交換,client hello->sever hello(cert server hello)->client key
exchange(change cipher spec finish)->sever change cipher spec finish->打開網頁,有了Resum,只要前三步驟就好,可以省
下交握的時間!
修正方式:
舉apache為例 ,您可以把SSLSessionCache啟用!
第六個:BEAST attacks
說明:
野獸攻擊是一種中間人攻擊,存在TLS1.0的通訊協定中,主要是破解加密訊息中的部分明文,然後比較session的內容,並
且送出script去找到沒加密的數據,來解密server發出的cookie!達到破解密文的目的!但是前提是必須能監聽網路的封包,監聽
的動作最常發生在公眾使用的網路上,如AP server!
修正方式:
把apache設定檔中的SSLCompression off關閉 , 同時如果您有上公用的網路,建議不要輸入敏感資料,以免被竊
取!
第七個:CRIME(Compression Ratio Info-Leak Mass Exploitation) attacks
說明:
罪犯攻擊,由兩位Juliano Rizzo and Thai Duong所發現,使用暴力破解方式解密(HTTPS)連接的會話cookie,然後強
迫使用者的網站連到駭客的網站,趁這網頁載入時注入攻擊碼,然後新的路徑就可以由駭客控制,藉由分析壓縮後資料的長度
來找出您的session cookie,最後破解資訊!
修正方式:
把server中apache設定檔的SSLCompression off關閉,client瀏覽器的話可以關閉TLS/SSL auto compression的功
能,更新到最新版的瀏覽器也是一個方式
第八個:POODLE attack
說明:
貴賓狗攻擊,這是由google的研究人員發現的,一般伺服器在進行https通訊協定的溝通時,會有提供自動調整通訊協定的
功能,通常會以最高版本的通訊協定為優先,如TLS1.2,一旦發現哪一方不是相同的通訊協定,則會一直交握(handshack)直到
找到雙方都有的協定為止,而這樣的調整,除了server與client之間的協定自動啟動外,也可以由存在網路中的駭客主動發起此
類的協定調整,達成入侵目的
修正方式:
關閉SSLV3的通訊協定即可!可參考上面第2.項的說明!或者啟用TLS-FALLBACK-SCSV的功能,升級openssl版本!
第九個:Downgrade attack prevention
說明:
當您連結https的網站的時候,client與server會找尋相同的通訊協定進行溝通,假設有一端的通訊協定是比較舊版的,那
麼另一端就會以此舊版的通訊協定進行連結,這樣就造成一個危機,如果有心人用舊版的去連線,因為舊版的通訊協定有一些
bug,那麼就可利用此bug去破壞達到駭客的目的!
修正方式:
舉apache openssl為例,您可以在server禁用sslv2 sslv3等通訊協定,另外使用較高等級的加密套件
(SSLCipherSuite ALL:!ADH:!NULL:!EXP:!SSLv2:!LOW:!MEDIUM:RC4+RSA:+HIGH),至於client瀏覽器的設定也有可以讓
您取消的勾選項目!讓您瀏覽器只用較新的通訊協定溝通!
第十個:Forward Secrecy(遠期保密)
說明:
當您連到https的網站的時候,您的相關數據都會利用一把key(每一次連結都不同)進行加密後傳輸,但是如果server私密
金鑰遺失的話,那有可能會被破解加密金鑰而找出加密資料,而Forward Secrecy就是解決此問題,使用只能用一次的金鑰加
密,用完即丟,即使server私密金鑰洩漏也不會被解密出來!
修正方式:
讓您的server只支援ephemeral Diffie-Hellman 的加密演算法,以apache為例,您可以在設定檔中找到
SSLCipherSuit參數,只支援ECDHE_RSA_RC4_SHA 和 DHE_RSA即可!
第十一個:Strict Transport Security(HSTS)(嚴謹傳輸安全)
說明:
通常我們要登入一個網站的時候,有可能輸入是http然後在導到https的網頁去,在重新導向的時候(http->https),就有可
能讓駭客導向到惡意的網站,而Strict Transport Security的功能就是讓你的網站告知使用者,只能強制使用https打開網站,避
免被導向到惡意網站!舉例:當您輸入http://www.sslbuyer.com的時候,網址會自動改成https://www.sslbuyer.com!就是這樣的
功能!新版本的瀏覽器都有支援此功能!
修正方式:
舉apache為例: 您需要在apache的設定檔案(httpd.conf)加入或修改以下參數
設定header
LoadModule headers_module modules/mod_headers.so
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
其中max-age是header存在的時間(秒為單位),建議180天以上
redirect網站
ServerName example.com Redirect permanent / https://example.com/ 或者
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
第十二個:Public Key Pinning (HPKP)
說明:
這是一種安全的機制,當您啟動之後,可用來讓客戶端瀏覽器知道目前的加密公鑰是來至於哪一個伺服器,以避免中間人
利用偽造的憑證進行攻擊!新版的瀏覽器也都支援此功能了!
修正方式:
啟用HPKP的功能即可,當有人連上你的網站的時候,回傳Public-Key-Pins HTTP header即可
舉apache為例
Header always set Public-Key-Pins "pin-sha256=\"base64+primary==\"; pin-sha256=\"base64+backup==\"; max-age=5184000; includeSubDomains"
以上為本工具測試結果的說明與修正方式,以上修正方式並非全部的修正都有提供,但是您可以參考使用並了解並修正這些
弱點,讓您的伺服器可以安全些!因為每一種網頁伺服器的修正方式都不盡相同,這邊提供一個參考, 您透過本網站的廠商介
紹,找相關CA廠商官方網站,大部分都有提供這些弱點的修補建議!未來本網站也會增加測試的項目與相關說明,期待可以幫
助大家!感謝!