本文介紹了使用半自動化工具執行SSL&TLS安全性評估的過程,以及如何使用手動測試方法驗證工具發現。目的是優化TLS和SSL安全測試流程,進行滲透測試時在TLS / SSL上花費更少的時間。
什么是TLS和SSL?
安全套接層(SSL)和傳輸層安全(TLS)加密用于通過互聯網提供通信安全(傳輸加密)和互聯網上的隱私來保護互聯網和網絡流量,用于諸如網絡,電子郵件,即時消息(IM)和一些虛擬專用網(VPN)。
因此,TLS安全配置很重要,應花時間學習和識別常見的漏洞和安全配置錯誤。
TLS / SSL安全測試工具
.sh
.sh是我們首選的測試工具,它涵蓋了TLS和SSL評估所需的所有測試,并定期更新。
安裝
您可以通過執行其存儲庫的git clone 來安裝最新版本的.sh:
git?clone?https://github.com/drwetter/testssl.sh.git
.sh示例
有許多可以用于.sh的參數,根據自己的需求來選擇參數。以下是一些示例,有關.sh命令行選項的概述。
測試單個主機上的所有內容并輸出到控制臺
./testssl.sh?-e?-E?-f?-p?-y?-Y?-SP?-c-H-T目標HOST
測試單個主機上的所有內容并輸出到HTML
./testssl.sh?-e?-E?-f?-p?-y?-Y?-S?-P?-c?-H?-U?TARGET-HOST?|?aha>?OUTPUT-FILE.html
測試子網上的所有主機和輸出到HTML
./testssl.sh?-e?-E?-f?-p?-y?-Y?-S?-P?-c?-H?-U?192.168.1.0/24?|?aha>?OUTPUT-FILE.html
與上述相同,但只列舉每個服務器支持的密碼:
./testssl.sh?-E?192.168.1.0/24?|?aha>?OUTPUT-FILE.html
控制臺輸出的截圖
HTML輸出的截圖
TLS和SSL漏洞測試
常見的TLS和SSL漏洞列在下面的已發現的CVE日期順序中,每個漏洞都有一個定義。
CVE-2016-2183
使用64位塊大?。ㄈ?DES(3DES))的傳統塊密碼在CBC操作模式下使用時,易受到實際的沖突攻擊。當使用CBC操作模式時,可以使用簡單的生日攻擊來識別64位塊密碼沖突。當碰撞發生時,這意味著 輸入與輸出相同,使得可以執行BEAST風格的攻擊來滲透加密的數據。
作者 和 能夠在網絡瀏覽器(作為MiTM)中運行,并發送足夠大量的數據導致沖突,然后使用此信息來恢復會話。
測試CVE-2016-2183,使用.sh識別弱密碼:
./testssl.sh??-?密碼目標
如果輸出顯示Tripe DES密碼,就像下面的截圖一樣,目標服務器容易受到的影響:
如果輸出看起來像下面的截圖,服務器不容易受到的影響:
此外,您可以枚舉由服務器為每個協議提供的所有密碼,方法如下:
./testssl.sh?-E目標
使用3DES的任何密碼都易受影響。
Nmap測試
Nmap也可用于枚舉服務器的密碼,NSE插件還將通知是否有任何64位塊密碼可用。
nmap?--script?=?ssl-enum-ciphers?-p443?TARGET
如果您在輸出中看到以下內容,則會發現64位塊密碼
警告:64位塊密碼3DES易受攻擊
手動測試
使用上面記錄的Nmap枚舉密碼NSE腳本枚舉密碼
DROWN(CVE-2015-3197,CVE-2016-0703和CVE-)
DROWN(使用過時和弱化的解密RSA),DROWN攻擊的最一般變體利用SSLv2協議的一個根本缺點,允許中間人(MiTM)攻擊者利用導入的密碼學符合20世紀90年代美國政府的限制(等級加密在下面的FREAK漏洞描述中詳細描述)。
測試DROWN
.sh DROWN測試
./testssl.sh?-D目標
Nmap DROWN測試
nmap?-p?443?-sV?--script?=?sslv2-drown
FREAK(CVE-2015-0204)
FREAK(保理RSA導出密鑰),利用了TLS / SSL中的加密弱點,這是美國政府幾十年前最初引入的。密鑰背后的想法是允許導出包含不能被平均計算資源打破的加密,但NSA可能會被破壞。 密鑰加密了512位或更少,這使用現代計算資源很容易破解。
FREAK攻擊執行降級攻擊(強制服務器使用較弱的密碼),當與中間人(MiTM)類型攻擊相結合時,這允許攻擊者捕獲數據并中斷弱密鑰的解密。
FREAK攻擊的自動測試
.sh FREAK攻擊測試
./testssl?-F?TARGET
手動測試FREAK攻擊
手動枚舉服務器密碼使用./.sh -E 或者 nmap -p 443 --=ssl-enum- ,確保服務器支持的以下任何密碼都不包含:。
(CVE-2015-4000)
問題利用TLS協議(1.2及更早版本)組合-交換的方式發現的缺陷。影響出口和非出口等級密碼套件(上述導出密碼)。該漏洞允許中間人(MiTM)攻擊者執行降級攻擊,并使用-導出密碼()。
自動測試
的.sh測試
./testssl.sh?-J目標
手動測試
禁用密碼,說明與FREAK攻擊相同,如上所述。
手動枚舉由服務器提供的密碼套件,使用./.sh -E 或nmap -p 443 --=ssl-enum- 。
CVE-2014-0160
以處理TLS和DTLS心跳擴展數據包的方式發現了一個缺陷,允許攻擊者從加密的TLS / DTLS數據中公開信息。惡意客戶端可以發送特制的TLS或DTLS 數據包,以便從連接的客戶端或服務器的每個請求中公開有限的內存部分。
公開的存儲器部分可以包括敏感信息,諸如私鑰(由服務提供商用于加密數據),實際用戶的姓名,用戶名和密碼。允許攻擊者潛在地竊聽通信,冒充用戶和服務并竊取數據。
自動化測試
使用Nmap測試
#?nmap?-p?443?--script?ssl-heartbleed?--script-args?vulns.showall?10.0.1.159 Starting?Nmap?7.25BETA2?(?https://nmap.org?)?at?2017-01-20?22:45?EST Nmap?scan?report?for?10.0.1.159 Host?is?up?(0.00028s?latency). PORT????STATE?SERVICE 443/tcp?open??https|?ssl-heartbleed:? |???VULNERABLE: |???The?Heartbleed?Bug?is?a?serious?vulnerability?in?the?popular?OpenSSL?cryptographic?software?library.?It?allows?for?stealing?information?intended?to?be?protected?by?SSL/TLS?encryption. |?????State:?VULNERABLE |?????Risk?factor:?High |???????OpenSSL?versions?1.0.1?and?1.0.2-beta?releases?(including?1.0.1f?and?1.0.2-beta1)?of?OpenSSL?are?affected?by?the?Heartbleed?bug.?The?bug?allows?for?reading?memory?of?systems?protected?by?the?vulnerable?OpenSSL?versions?and?could?allow?for?disclosure?of?otherwise?encrypted?confidential?information?as?well?as?the?encryption?keys?themselves. |??????????? |?????References: |???????http://www.openssl.org/news/secadv_20140407.txt? |???????http://cvedetails.com/cve/2014-0160/ |_??????https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160 MAC?Address:?00:0C:29:35:3D:E8?(VMware) Nmap?done:?1?IP?address?(1?host?up)?scanned?in?0.36?seconds
手動測試
使用驗證已存在的,使用詳細設置將顯示暴露的內存泄漏。
msf>?use?auxiliary/scanner/ssl/openssl_heartbleed msf>?set?rhosts?TARGET-ADDRESS msf>?set?verbose?true msf>?run
SSLv3 (CVE-2014-3566)
的安全小組在2014年10月14日發現了攻擊( On )。該漏洞利用了SSLv3處理填充字節的方式(密碼塊鏈接)CBC操作模式。
該缺陷允許中間人(MiTM)攻擊者在少于256個SSLv3連接中解密密文的所選字節,如果他們能夠強制受害者應用程序重復發送相同的數據通過新創建SSL 3.0連接。
自動測試
使用Nmap測試
#?nmap?-p?443?--script?ssl-poodle?--script-args?vulns.showall?10.0.1.159 Starting?Nmap?7.25BETA2?(?https://nmap.org?)?at?2017-01-20?22:50?EST Nmap?scan?report?for?10.0.1.159 Host?is?up?(0.00037s?latency). PORT????STATE?SERVICE 443/tcp?open??https |?ssl-poodle:? |???VULNERABLE: |???SSL?POODLE?information?leak |?????State:?VULNERABLE |?????IDs:??CVE:CVE-2014-3566??OSVDB:113251 |???????????The?SSL?protocol?3.0,?as?used?in?OpenSSL?through?1.0.1i?and?other |???????????products,?uses?nondeterministic?CBC?padding,?which?makes?it?easier |???????????for?man-in-the-middle?attackers?to?obtain?cleartext?data?via?a |???????????padding-oracle?attack,?aka?the?"POODLE"?issue.|?????Disclosure?date:?2014-10-14 |?????Check?results: |???????TLS_RSA_WITH_AES_128_CBC_SHA |?????References: |???????http://osvdb.org/113251 |???????https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3566 |???????https://www.imperialviolet.org/2014/10/14/poodle.html |_??????https://www.openssl.org/~bodo/ssl-poodle.pdf MAC?Address:?00:0C:29:35:3D:E8?(VMware) Nmap?done:?1?IP?address?(1?host?up)?scanned?in?0.35?seconds
使用.sh測試
./testssl.sh?-O?10.0.1.159 ########################################################### ????testssl.sh???????2.8rc1?from?https://testssl.sh/dev/ ????(424cf23?2016-08-09?10:35:58?--?1.531) ??????This?program?is?free?software.?Distribution?and ?????????????modification?under?GPLv2?permitted. ??????USAGE?w/o?ANY?WARRANTY.?USE?IT?AT?YOUR?OWN?RISK! ???????Please?file?bugs?@?https://testssl.sh/bugs/ ########################################################### ?Using?"OpenSSL?1.0.2-chacha?(1.0.2i-dev)"?[~183?ciphers] ?on?kali:./bin/openssl.Linux.x86_64 ?(built:?"Jun?22?19:32:29?2016",?platform:?"linux-x86_64") ?Start?2017-01-20?22:52:59????-->>?10.0.1.159:443?(10.0.1.159)?<<-- ?rDNS?(10.0.1.159):??????-- ?Service?detected:???????HTTP Testing?for?SSLv3?POODLE?(Padding?Oracle?On?Downgraded?Legacy?Encryption)? POODLE,?SSL?(CVE-2014-3566)???????????????VULNERABLE?(NOT?ok),?uses?SSLv3+CBC?(check?TLS_FALLBACK_SCSV?mitigation?below) Testing?for?TLS_FALLBACK_SCSV?Protection? TLS_FALLBACK_SCSV?(RFC?7507),?experim.????Downgrade?attack?prevention?NOT?supported
手動測試
Kali附帶的版本不再支持SSLv3。使用二進制碼.sh/bin/.Linux.進行手動SSLv3測試。
./openssl.Linux.x86_64?s_client?-ssl3?-connect?10.0.1.159:443
如果握手完成,則服務器容易受到的影響。
對于容易受到影響的服務器的輸出示例(從響應中刪除的證書):
--- No?client?certificate?CA?names?sent Server?Temp?Key:?DH,?1024?bits--- SSL?handshake?has?read?1398?bytes?and?written?373?bytes --- New,?TLSv1/SSLv3,?Cipher?is?DHE-RSA-AES256-SHA Server?public?key?is?1024?bit Secure?Renegotiation?IS?supported Compression:?NONE Expansion:?NONE No?ALPN?negotiated SSL-Session: ????Protocol??:?SSLv3 ????Cipher????:?DHE-RSA-AES256-SHA ????Session-ID:?0450660185C7B2623CB2145A1C6655BDD8CC281F882C3B9E0ED35E88360639BA ????Session-ID-ctx:? ????Master-Key:?6A56AC01754D9441ACFD6C0B9E534E33450CD2F0E0D619F235E2ACC1780CFD86E769B9AE82D0D5AAA4C62B295B5BB598 ????Key-Arg???:?None ????PSK?identity:?None ????PSK?identity?hint:?None ????SRP?username:?None ????Start?Time:?1484971085 ????Timeout???:?7200?(sec) ????Verify?return?code:?9?(certificate?is?not?yet?valid)
如果服務器不容易受到的影響,握手將失敗,發生如下錯誤:
CONNECTED(00000003) 28395584:error:14094410:SSL?routines:ssl3_read_bytes:sslv3?alert?handshake?failure:s3_pkt.c:1475:SSL?alert?number?40 28395584:error:1409E0E5:SSL?routines:ssl3_write_bytes:ssl?handshake?failure:s3_pkt.c:656: --- no?peer?certificate?available ---
CVE-2014-0224
某些版本的存在弱點,允許客戶端和服務器通過特制的握手包來強制使用弱密鑰材料進行通信。允許中間人攻擊者解密和修改客戶端與服務器之間的流量。
受影響的版本包括:
自動化測試
.sh 測試
./testssl.sh?-I?TARGET
Nmap 測試
nmap?-p?443?--script?=?ssl-ccs-injection?TARGET
CVE-2014-8730
由于TLS填充是SSLv3的一個子集,因此可以重新使用針對TLS的攻擊。TLS對于它的填充格式是非常嚴格的,但是一些TLS實現在解密之后不執行填充結構的檢查。即使使用TLS也不會容易受到攻擊的影響。
測試 TLS
.sh TLS測試
跟CVE-2014-0224的.sh命令相同
Nmap TLS測試
跟CVE-2014-0224的namp命令相同
CVE-2013-3587
代表通過自適應壓縮超文本進行瀏覽器偵察和滲透。與CRIME違規相似利用HTTP壓縮中的漏洞,允許攻擊者識別頁面中是否存在文本。
自動測試
使用.sh測試
./testssl.sh?-T?TARGET
手動測試
openssl?s_client?-connect?TARGET:443
輸入以下內容來確定服務器是否使用壓縮:
GET?/?HTTP/1.1??Host:?TARGET??Accept-Encoding:?compress,?gzip
如果服務器返回亂碼,如下面的截圖所示,服務器支持壓縮,容易受到CVE-2013-3587的攻擊:
如果目標Web服務器不返回壓縮數據輸出ssl 中間人攻擊 原理,則它不容易受到的影響ssl 中間人攻擊 原理,并且禁用壓縮。
CVE-2013-2566
TLS協議和SSL協議中使用的RC4算法具有許多單字節偏移。遠程攻擊者可以通過使用相同明文的大量會話中的密文統計分析來進行明文恢復攻擊。
自動測試
.sh測試
./testssl.sh?-4?TARGET
手動測試
手動枚舉服務器密碼使用或者,./.sh -E 或者 nmap -p 443 --=ssl-enum- 確保服務器支持的以下任何密碼都不使用RC4。
CVE-2012-4929
CVE-2012-4929是TLS 1.2漏洞,允許中間人(MiTM)攻擊者識別加密數據,(潛在)執行會話劫持。攻擊者可以通過檢查密文的大小來識別加密數據,同時從瀏覽器引入多個有效載荷,當字符匹配在標題內時,其大小會有所不同,允許攻擊者鍛煉會話。實際上沒有使用CRIME攻擊解密數據,TLS 1.2處理壓縮的一個弱點使得攻擊者可以通過比較返回的大小來識別頭文件何時存在。
自動測試
使用.sh測試
./testssl.sh?-C?TARGET
手動測試
Kali使用的客戶似乎不再允許TLS 1.2壓縮。如果您使用此版本的進行測試,即使目標服務器啟用了TLS 1.2壓縮,響應將始終為“:NONE”。使用.sh附帶的.Linux.二進制文件來克服此問題。
如果服務器不容易受到CVE-2012-4929的影響。": NONE"表示壓縮在服務器上被禁用,并且不易受到CVE-2012-4929的攻擊。
./bin/openssl.Linux.x86_64?s_client?-connect?10.0.1.158:443 Compression:?NONE
如果服務器易受CVE-2012-4929攻擊:
Compression:?zlib?compression
TLS和SSL證書
對加密不需要的服務器證書應該被評估配置錯誤和弱加密簽名,下面是證書檢查的檢查列表:
使用以下方式拉取目標服務器證書:
openssl?s_client?-connect?TARGET:443?|?openssl?x509?-noout?-text