导语:本文介绍了使用半自动化工具执行SSL&TLS安全性评估的过程,以及如何使用手动测试方法验证工具发现。目的是优化TLS和SSL安全测试流程,进行渗透测试时在TLS / SSL上花费更少的时间。
本文介绍了使用半自动化工具执行SSL&TLS安全性评估的过程,以及如何使用手动测试方法验证工具发现。目的是优化TLS和SSL安全测试流程,进行渗透测试时在TLS / SSL上花费更少的时间。
什么是TLS和SSL?
安全套接层(SSL)和传输层安全(TLS)加密用于通过互联网提供通信安全(传输加密)和互联网上的隐私来保护互联网和网络流量,用于诸如网络,电子邮件,即时消息(IM)和一些虚拟专用网(VPN)。
因此,TLS安全配置很重要,应花时间学习和识别常见的漏洞和安全配置错误。
TLS / SSL安全测试工具
testssl.sh
testssl.sh是我们首选的测试工具,它涵盖了TLS和SSL评估所需的所有测试,并定期更新。
安装
您可以通过执行其存储库的git clone 来安装最新版本的tesetssl.sh:
git clone https://github.com/drwetter/testssl.sh.git
testssl.sh示例
有许多可以用于testssl.sh的参数,根据自己的需求来选择参数。以下是一些示例,有关testssl.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
./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位块大小(如Triple-DES(3DES))的传统块密码在CBC操作模式下使用时,易受到实际的冲突攻击。当使用CBC操作模式时,可以使用简单的生日攻击来识别64位块密码冲突。当碰撞发生时,这意味着 输入与输出相同,使得可以执行BEAST风格的攻击来渗透加密的数据。
作者Karthik Bhargavan和Gaetan Leurent能够在网络浏览器(作为MiTM)中运行JavaScript,并发送足够大量的数据导致冲突,然后使用此信息来恢复会话cookie。
测试CVE-2016-2183,使用testssl.sh识别弱密码:
./testssl.sh - 密码目标
如果输出显示Tripe DES密码,就像下面的截图一样,目标服务器容易受到SWEET32的影响:
如果输出看起来像下面的截图,服务器不容易受到SWEET32的影响:
此外,您可以枚举由服务器为每个协议提供的所有密码,方法如下:
./testssl.sh -E目标
使用3DES的任何密码都易受SWEET32影响。
SWEET32 Nmap测试
Nmap也可用于枚举服务器的密码,NSE插件还将通知是否有任何64位块密码可用。
nmap --script = ssl-enum-ciphers -p443 TARGET
如果您在输出中看到以下内容,则会发现64位块密码
警告:64位块密码3DES易受SWEET32攻击
手动测试SWEET32
使用上面记录的Nmap枚举密码NSE脚本枚举密码
DROWN(CVE-2015-3197,CVE-2016-0703和CVE-2016800)
DROWN(使用过时和弱化的eNcryption解密RSA),DROWN攻击的最一般变体利用SSLv2协议的一个根本缺点,允许中间人(MiTM)攻击者利用导入的密码学符合20世纪90年代美国政府的限制(EXPORT等级加密在下面的FREAK漏洞描述中详细描述)。
测试DROWN
testssl.sh DROWN测试
./testssl.sh -D目标
Nmap DROWN测试
nmap -p 443 -sV --script = sslv2-drown
FREAK(CVE-2015-0204)
FREAK(保理RSA导出密钥),利用了TLS / SSL中的加密弱点,这是美国政府几十年前最初引入的。RSA_EXPORT密钥背后的想法是允许导出包含不能被平均计算资源打破的加密,但NSA可能会被破坏。 RSA_EXPORT密钥加密了512位或更少,这使用现代计算资源很容易破解。
FREAK攻击执行降级攻击(强制服务器使用较弱的密码),当与中间人(MiTM)类型攻击相结合时,这允许攻击者捕获数据并中断弱密钥的解密。
FREAK攻击的自动测试
testssl.sh FREAK攻击测试
./testssl -F TARGET
手动测试FREAK攻击
手动枚举服务器密码使用./testssl.sh -E TARGET 或者 nmap -p 443 –script=ssl-enum-ciphers TARGET,确保服务器支持的以下任何密码都不包含:EXPORT。
Logjam(CVE-2015-4000)
Logjam问题利用TLS协议(1.2及更早版本)组合Diffie-Hellman交换的方式发现的缺陷。影响出口和非出口等级密码套件(上述导出密码)。该漏洞允许中间人(MiTM)攻击者执行降级攻击,并使用Diffie-Hellman导出密码(DHE_EXPORT)。
Logjam自动测试
logjam的testssl.sh测试
./testssl.sh -J目标
手动测试Logjam
禁用EXPORT密码,说明与FREAK攻击相同,如上所述。
手动枚举由服务器提供的密码套件,使用./testssl.sh -E TARGET或nmap -p 443 –script=ssl-enum-ciphers TARGET。
CVE-2014-0160
以OpenSSL处理TLS和DTLS心跳扩展数据包的方式发现了一个缺陷,允许攻击者从加密的TLS / DTLS数据中公开信息。恶意客户端可以发送特制的TLS或DTLS Heartbeat数据包,以便从连接的客户端或服务器的每个请求中公开有限的内存部分。
公开的存储器部分可以包括敏感信息,诸如私钥(由服务提供商用于加密数据),实际用户的姓名,用户名和密码。允许攻击者潜在地窃听通信,冒充用户和服务并窃取数据。
自动化测试
使用Nmap测试Heartbleed
# 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
手动测试Heartbleed
msf> use auxiliary/scanner/ssl/openssl_heartbleed msf> set rhosts TARGET-ADDRESS msf> set verbose true msf> run
POODLE SSLv3 (CVE-2014-3566)
Google的安全小组在2014年10月14日发现了POODLE攻击(Padding Oracle On Downgraded Legacy Encryption)。该漏洞利用了SSLv3处理填充字节的方式(密码块链接)CBC操作模式。
该缺陷允许中间人(MiTM)攻击者在少于256个SSLv3连接中解密密文的所选字节,如果他们能够强制受害者应用程序重复发送相同的数据通过新创建SSL 3.0连接。
自动测试POODLE
使用Nmap测试POODLE
# 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
使用testssl.sh测试POODLE
./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
手动测试POODLE
Kali附带的openssl版本不再支持SSLv3。使用二进制码testssl.sh/bin/openssl.Linux.x86_64进行手动SSLv3测试。
./openssl.Linux.x86_64 s_client -ssl3 -connect 10.0.1.159:443
如果握手完成,则服务器容易受到POODLE的影响。
对于容易受到POODLE影响的服务器的输出示例(从响应中删除的证书):
--- 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)
如果服务器不容易受到POODLE的影响,握手将失败,发生如下错误:
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 ---
受影响的OpenSSL版本包括:
OpenSSL 0.9.8za之前
OpenSSL 1.0.0之前1.0.0m
1.0.1之前的OpenSSL 1.0.1
自动化测试
testssl.sh 测试
./testssl.sh -I TARGET
Nmap 测试
nmap -p 443 --script = ssl-ccs-injection TARGET
由于TLS填充是SSLv3的一个子集,因此可以重新使用针对TLS的POODLE攻击。TLS对于它的填充格式是非常严格的,但是一些TLS实现在解密之后不执行填充结构的检查。即使使用TLS也不会容易受到POODLE攻击的影响。
测试POODLE TLS
testssl.sh POODLE TLS测试
跟CVE-2014-0224的testssl.sh命令相同
Nmap POODLE TLS测试
跟CVE-2014-0224的namp命令相同
CVE-2013-3587
BREACH代表通过自适应压缩超文本进行浏览器侦察和渗透。与CRIME违规相似利用HTTP压缩中的漏洞,允许攻击者识别页面中是否存在文本。
自动测试
使用testssl.sh测试BREACH
./testssl.sh -T TARGET
手动测试
openssl s_client -connect TARGET:443
输入以下内容来确定服务器是否使用压缩:
GET / HTTP/1.1 Host: TARGET Accept-Encoding: compress, gzip
如果服务器返回乱码,如下面的截图所示,服务器支持压缩,容易受到CVE-2013-3587的攻击:
如果目标Web服务器不返回压缩数据输出,则它不容易受到BREACH的影响,并且禁用压缩。
CVE-2013-2566
TLS协议和SSL协议中使用的RC4算法具有许多单字节偏移。远程攻击者可以通过使用相同明文的大量会话中的密文统计分析来进行明文恢复攻击。
自动测试
testssl.sh测试
./testssl.sh -4 TARGET
手动测试
手动枚举服务器密码使用或者,./testssl.sh -E TARGET 或者 nmap -p 443 –script=ssl-enum-ciphers TARGET确保服务器支持的以下任何密码都不使用RC4。
CVE-2012-4929
CVE-2012-4929是TLS 1.2漏洞,允许中间人(MiTM)攻击者识别加密数据,(潜在)执行会话劫持。攻击者可以通过检查密文的大小来识别加密数据,同时从浏览器引入多个有效载荷,当字符匹配在标题内时,其大小会有所不同,允许攻击者锻炼会话cookie。实际上没有使用CRIME攻击解密数据,TLS 1.2处理压缩的一个弱点使得攻击者可以通过比较返回的大小来识别头文件何时存在。
自动测试
使用testssl.sh测试
./testssl.sh -C TARGET
手动测试
Kali使用的openssl客户似乎不再允许TLS 1.2压缩。如果您使用此版本的openssl进行测试,即使目标服务器启用了TLS 1.2压缩,响应将始终为“Compression:NONE”。使用testssl.sh附带的openssl.Linux.x86_64二进制文件来克服此问题。
如果服务器不容易受到CVE-2012-4929的影响。"Compression: NONE"表示压缩在服务器上被禁用,并且不易受到CVE-2012-4929的攻击。
./bin/openssl.Linux.x86_64 s_client -connect 10.0.1.158:443 Compression: NONE
Compression: zlib compression
TLS和SSL证书
对加密不需要的服务器证书应该被评估配置错误和弱加密签名,下面是证书检查的检查列表:
使用以下方式拉取目标服务器证书:
openssl s_client -connect TARGET:443 | openssl x509 -noout -text
HTTP安全性头
什么是HTTP安全头?
如果配置正确,HTTP Security Headers可为您的域名提供额外的安全功能。以下是主要HTTP安全性头文件的概述:
可以使用Burp Suite,Curl或testssl.sh(任何许多其他工具)来检查HTTP安全性头。
使用curl来测试
curl -s -D - TARGET -o /dev/null Example Output: HTTP/1.1 301 Moved Permanently Date: Mon, 23 Jan 2017 16:15:51 GMT Server: Apache Content-Security-Policy: default-src 'self' *.target X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff Location: TARGET Cache-Control: max-age=3600 Expires: Mon, 23 Jan 2017 17:15:51 GMT Vary: Accept-Encoding Content-Length: 233 Content-Type: text/html; charset=iso-8859-1
使用testssl.sh检查HTTP安全性头
./testssl.sh -H
HTTP安全头对照表
Strict-Transport-Security(HSTS):
HSTS安全性头部强制Web浏览器或客户端仅通过HTTPS连接与服务器进行通信。HSTS确保连接仅使用HTTPS,并防止中间人(MiTM)攻击,降级攻击和cookie劫持。HSTS是信任第一次使用(TOFU),这意味着它必须通过HTTP发送至少一个不安全的连接到主机以传输安全的头。HSTS预加载列表是为浏览器提供支持HSTS的站点列表,以避免初始不安全的连接。
Content-Security-Policy (CSP):
Content-Security-Policy是一个HTTP安全性头,可帮助减轻某些类型的数据注入攻击(如XSS(跨站点脚本))的风险。CSP允许网站管理员通过定义一个策略来消除或减轻XSS,该策略规定了浏览器应该信任什么位置并允许脚本执行。
X-Frame-Options:
使用X-Frame选项来防止点击劫持。
X-XSS-Protection:
较旧的HTTP安全性头,可在Internet Explorer,Chrome和Firefox中启用XSS保护,虽然可以使用CSP阻止js,但是当遇到不支持CSP的旧浏览器时,X-XSS-Protection仍然可以提供保护。
X-Content-Type-Options:
过强制由Content-Type指定的MIME类型来防止MIME-sniff类型攻击。
结论
我们希望这篇文章说明了一些常见的TLS和SSL漏洞的测试过程。如果我们错过了任何内容,或者您有任何建议或技巧,我们很乐意在下面的评论部分收到您的回复。