本文介绍了使用半自动化工具执行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可以看到所有选项。
测试单个主机上的所有内容并输出到控制台
./testssl.sh -e -E -f -p -y -Y -S -P -c -H -U TARGET-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漏洞已经列在下面了,每个漏洞都有一个说明,如果可能的话可以手动或自动测试漏洞
SWEET32(CVE-2016-2183)
定义
64位块大小(如Triple-DES(3DES))的传统块密码在CBC模式下使用,易受到攻击。当使用CBC模式操作时,使用simple birthday attack来识别64位块密码冲突。当碰撞发生时,这意味着输入与输出相同,使得可以执行BEAST style attack来渗透加密的数据。
作者Karthik Bhargavan和Gaetan Leurent能够在浏览器(作为MiTM)中运行JavaScript,并发送大量的数据导致冲突,然后使用此信息来恢复会话cookie。
测试SWEET32
确定服务器是否支持Triple-DES密码,如果服务器支持Triple-DES,则易受SWEET32攻击。
SWEET32 testssl.sh
使用testssl.sh识别弱密码:
./testssl.sh --ciphers TARGET
如果输出显示Tripe DES密码,就像下面的截图一样,目标服务器容易受到SWEET32的影响:
如果输出看起来像下面的截图,服务器不容易受到SWEET32的影响:
此外,您可以枚举服务器提供给每个协议的密码,方法如下:
./testssl.sh -E TARGET
使用3DES的任何密码都易受SWEET32影响。
SWEET32 Nmap测试
Nmap也可用于枚举服务器的密码,NSE插件还将通知是否有任何64位块密码可用。
nmap --script = ssl-enum-ciphers -p443 TARGET
如果您在输出中看到以下内容,则会发现64位块密码
warnings: | 64-bit block cipher 3DES vulnerable to SWEET32 attack
手动测试SWEET32
根据上面方法测试用Nmap NSE脚本枚举密码
DROWN(CVE-2016-0800)
DROWN定义
DROWN(使用过时和弱化的eNcryption解密RSA),DROWN攻击的最一般变体利用了SSLv2协议的一个根本缺点,允许中间人(MiTM)攻击者利用导入符合20世纪90年代美国政府的限制(EXPORT等级加密在下面的FREAK漏洞描述中详细描述)的密码学。
测试DROWN
testssl.sh DROWN测试
./testssl.sh -D TARGET
Nmap DROWN测试
nmap -p 443 -sV --script = sslv2-drown
FREAK(CVE-2015-0204)
FREAK定义
FREAK(破解RSA导出密钥),利用了TLS / SSL中的加密弱点,这是美国政府几十年前最初引入的。使用RSA_EXPORT密钥的想法是允许导出包含不能被大多数计算机破解的加密密钥。如果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。
例: