导语:本文介绍了使用半自动化工具执行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
测试子网上的所有主机和输出到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

控制台输出的截图

1.png

HTML输出的截图

2.png

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的影响:

3.png

如果输出看起来像下面的截图,服务器不容易受到SWEET32的影响:

4.png

此外,您可以枚举由服务器为每个协议提供的所有密码,方法如下:

./testssl.sh -E目标

5.png

使用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

使用Metasploit验证已存在的Heartbleed,使用详细设置将显示Heartbleed暴露的内存泄漏。
msf> use auxiliary/scanner/ssl/openssl_heartbleed
msf> set rhosts TARGET-ADDRESS
msf> set verbose true
msf> run

6.png

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
---

CVE-2014-0224

某些版本的OpenSSL存在弱点,允许客户端和服务器通过特制的握手包来强制使用弱密钥材料进行通信。允许中间人攻击者解密和修改客户端与服务器之间的流量。

受影响的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

CVE-2014-8730

由于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的攻击:

7.png

如果目标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
如果服务器易受CVE-2012-4929攻击:
Compression: zlib compression

TLS和SSL证书

对加密不需要的服务器证书应该被评估配置错误和弱加密签名,下面是证书检查的检查列表:

使用以下方式拉取目标服务器证书:

openssl s_client -connect TARGET:443 | openssl x509 -noout -text

8.png

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

9.png

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漏洞的测试过程。如果我们错过了任何内容,或者您有任何建议或技巧,我们很乐意在下面的评论部分收到您的回复。

源链接

Hacking more

...