该文章描绘了主要的SSL/TLS (mis)配置及简单的测试你系统的脆弱性。如下为已考虑到的配置和攻击相关的内容。
SSLv2 Support
SSLv3 Support
Cipher Suites
SSL Certificates
Renegotiation
Compression
Implementation Issues
在二十年以前发布了SSLv2并且就在发布不久后,被发现其存在严重的缺陷,它允许攻击者解密并修改通信流量。在一年之后被替代为SSLv3(已发现这些问题),但是短寿命的SSLv2仍然非常普遍。
检查远程host是否开启了SSLv2,可以使用如下命令:
1 |
|
如果支持SSLv2,那么将完成握手包并且返回服务器的授权信息,如下为响应内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|
如果服务器不支持SSLv2,那么将出现握手失败错误,如下所示:
1 2 3 |
|
谷歌安全团队更深入的透露道:某一攻击者可强迫客户端和服务器对SSLv3进行降级处理。即使他们将像平时那样使用TLS,也意味着应该确保完全关闭SSLv3。
测试某一系统是否支持SSLv3,可使用OpenSSL命令,如下所示:
1 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
发生握手失败错误表明并不支持使用SSLv3,并且服务器并不存在漏洞(用于进行POODLE攻击。)
Cipher Suites
SSL/TLS协议的主要功能之一是允许客户端和服务器处理某一相互的可接受的"cipher suite",在连接中使用到它。cipher suite已选用了特定的算法集,在客户端和服务器,进行密钥交换,加密和授权信息时将会使用到它们。
用类型格式描述cipher suite:
TLS_RSA_WITH_AES_128_CBC_SHA
RSA是密钥的交换算法,AES_128_CBC是加密cipher(在Cipher-Block Chaining模式中,AES使用一128位密钥操作),且SHA是Message Authentication Code (MAC)算法。
通过配置(由它的安全需求来规定)来支持cipher suites。如下指导路线通常被推荐为基础路线:
对于那些提供"perfect forward secrecy"的来说,密钥交换算法应该被限制,如Ephemeral Diffie-Hellman (DHE) 或 Ephemeral Elliptic Curve Diffie-Hellman (ECDHE)。
Cipher不应该有众所周知的加密缺陷。这排除RC4,它在许多年里一直存在缺陷且在过去的一些年里展示了比想象中更严重的脆弱性。
Cipher应使用至少一个128位的密钥(排除使用DES和Triple-DES)。
Cipher-Block Chaining (CBC)模式易于实现填充oracle攻击且应该避免使用这种模式,但重要的是它不应该被使用于SSLv3 或 TLSv1.0,因为它可导致能实现BEAST攻击的漏洞。某一可替代的是Galois Counter Mode (GCM),它并不受这些问题和提供已授权加密的影响。
消息授权算法应该是SHA256.众所周知MD5存在缺陷且应该避免在加密时使用它,并且SHA1也有它脆弱的地方(容易实现的区域)。
三种算法,应该避免NULL/之后的设置,因为这些设置一点也不安全。"Export"算法也应该被停用,因为它们简短的长度容易让攻击者实现暴力破解攻击及其它的攻击,如:FREAK攻击。
Nmap的 "ssl-enum-ciphers" 脚本用如下方法来生产大量cipher suites:
1 |
|
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
当nmap将为每个支持的cipher suite给出一个加密强度时,快速的改变了SSL/TLS的安全,这意味着这些ratings应该手动审计。
SSL Certificates
可使用如下命令查看某一服务器授权的细节:
1 2 |
|
这将输出如下(这里展示了PayPal的授权情况):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
|
在某一会话期间,SSL/TLS协议允许客户端和服务器重新审查新的加密密钥。2009年发现了某一漏洞,它展示了在重新审查过程中利用该缺陷的方法并将内容注入到会话起始部分,这样就攻陷了会话部分的内容。
如果满足两个条件,那么将可能发生类似事件,命名的服务器不支持安全的重新审查,但是支持已初始化客户端的重新审查。这些条件可被检查到,如下所述:
Secure Renegotiation
如下示范如何识别某一系统是否支持Secure Renegotiation:
1 |
|
如果某一系统不支持secure renegotiation,那么在建立连接后将返回如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
如下命令用于识别是否支持client initiated renegotiation:
1 |
|
一旦建立好连接,服务器将等待我们来输入下一命令。为了初始化第二行通过R定义的某一renegotiation,我们可以写入如下两行,通过进入或返回继续进行:
1 |
|
1 2 3 |
|
某一系统不支持客户端(已初始化的renegotiation)将返回错误并中断连接,或连接将会超时:
1 2 |
|
某一支持客户端(已初始化的renegotiation)的系统将保持连接的活跃并响应更多的命令。
Compression
测试支持的TLS是否可压缩,并且测试其是否可实现CRIME攻击,用如下方法:
1 |
|
在支持压缩的服务器上,某一响应类似于如下接收到的内容,其包括压缩细节。行"Compression: zlib compression" 和"Compression: 1 (zlib compression)"指明远程服务器有可实现CRIME攻击的漏洞。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
因为服务器已关闭了TLS压缩的功能,所以响应将会类似如下。"Compression: NONE"表明该服务器会拒绝TLS-level压缩的用法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
BREACH
BREACH攻击类似于CRIME攻击,但是这次利用HTTP压缩的使用来推断出攻击者的请求内容。
测试服务器支持缩减还是压缩,如下步骤进行:
1 |
|
提交如下内容将可看出服务器是否支持HTTP的压缩内容:
1 2 3 |
|
如果响应含有编码过的数据,类似如下响应,它指明其支持HTTP压缩,因此远程host存在漏洞。
1 2 3 4 5 6 7 8 |
|
Implementation Issues
介绍看这里:Lucky-13 attack
“心脏滴血”
如下为用测试脚本测试漏洞的命令:
1 |
|
类似的输出如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Change Cipher Spec Injection
影响版本
• OpenSSL 1.0.1 through 1.0.1g
• OpenSSL 1.0.0 through 1.0.0l
• all versions before OpenSSL 0.9.8y
使用脚本测试是否存在该漏洞:
1 |
|
输出范例:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
ref: http://bobao.360.cn/learning/detail/479.html
https://www.contextis.com/en/blog/manually-testing-ssl-tls-weaknesses