SSL/TLS协议解析

SSL/TLS协议解析

SSL/TLS协议是什么?

SSL/TLS概述

SSL/TLS协议(Security Socket Layer Protocol/Transport Layer Security Protocol,安全套接层协议/传输层安全协议)是网景公司在1994年提出的一种基于Web应用的安全协议。SSL/TLS协议是一个于应用层协议和传输层协议之间的一个可选协议。用于保证web通信以及其他流行应用层协议的通信安全,例如HTTP、POP、IMAP等,当使用TLS保护后,它们分别被称为HTTPS、POP3S、IMAPS。

image-20231021131017005

TLS的前身是SSL,目前运行在传输层之上的最流行的安全协议是TLS。TLS流行的一个重要的原因是它能够在应用程序内部或者底部实现,而这些应用程序是运行在底层之上的。相比于其他安全协议如EAP(Extensible Authentication Protocol)和IPSec(Internet Protocol Security),TLS不需要依赖操作系统的特定支持或嵌入式设备的协议来实现功能。这意味着应用程序可以独立地实现TLS,而无需依赖特定的操作系统功能或硬件支持。通过在应用程序内部实现TLS,可以实现应用程序级的安全性。这意味着应用程序可以选择性地对特定的数据进行加密和身份验证,而不需要依赖底层操作系统或网络协议的安全性。这对于保护应用程序中的敏感信息和确保通信的机密性至关重要。

简单概括一下TLS的工作原理,如果访问一个应用了TLS协议的网页,应用层将用户需求翻译成HTTP请求之后发送给TLS层,TLS协议利用和web服务器协商生成的密钥来加密HTTP请求,然后通过传输层将加密的HTTP请求封装成TCP报文并发送给网页服务器。 正是这种与应用层的紧密联系,使得SSL/TLS协议成为了现在网络商务应用中最普遍的协议,其安全性也受到了广泛的研究。

工作流程与原理

从官方介绍来看,SSL/TLS协议本身分为两层协议栈,为记录层协议与上层协议。上层协议即信息交换协议(也称为握手协议)包含了四个特殊协议——密码变更协议、警告协议、握手协议、应用数据协议,下层的记录协议规定了TLS传输的基本单位是记录(record)。记录可能包含长度,描述和内容,有点类似TCP协议的的数据段(Segment)的概念,通用是可以进行分块传输的。同样记录具备分片、压缩、编码、解压缩、重组等等和TCP分段的类似功能。

也就是说,上层的信息交换协议负责建立身份、认证、提示警报、以及为每一条连接的记录协议提供唯一的密钥材料。二下层的记录协议提供分片、压缩、完整性保护以及双方数据交换的加密服务。

image-20231020201832596

以一次HTTPS请求为例深入理解TLS的工作流程。通常,HTTP直接和TCP通信,当应用TLS协议时,则变成先和TLS通信,在由TLS与TCP通信了,简而言之HTTPS其实就是身披TLS这层外壳的HTTP。接下来我们深入整个通信流程,首先是握手协商阶段,客户端发送Client Hello报文开始TLS通信,报文中指定TLS的版本、加密组件列表(加密算法与密钥长度,例如ECDHE_RSA With P-256 and AES_128GCM表示密钥协商算法使用 ECDHE、签名算法使用 RSA、握手后的加密使用AES对称加密算法,密钥长度128位,分组模式是GCM、摘要算法使用P-256)。服务端则响应客户端并在报文中包含TLS版本以及从客户请求中的加密组件筛选出来的内容,之后服务端再发送证书Certificate报文,包含公钥证书server_pub_key,最后发送Server Hello Done报文通知客户端协商阶段结束。在密钥交换过程,客户端会使用刚刚server_pub_key加密生成的主密钥串serect,然后发送给服务端,并通知服务端之后使用这个key进行通信,最后客户端发送finished报文,发送历史报文的整体校验值,来进行握手协商过程的验证。服务端发送Change Cipher Spec报文表示收到客户端的用服务端公钥加密后的主密钥串serect,然后服务端用私钥解密得到serect,serect在RFC中规定是一位固定 48位的随机数,需要再次加上加密套件的摘要算法派生出会话密钥key。最后同样发送finish报文。经过这样四次握手之后,就可以开始使用对称会话密钥key进行HTTPS通信了。

img

SSL/TLS协议安全性分析

SSL/TLS协议早期设计基于CBC模式的一系列加密方式,带来了很多的问题, 形成了一系列的漏洞。还有RC4之类的弱加密算法,也给协议的安全性带来严重的影响。这里介绍一些CBC的填充漏洞(CBC Padding Oracle Attack)和基于前者的脆弱性的POODLE(Padding Oracle On Downgraded Legacy Encryption)漏洞。

CBC Padding Oracle Attack

CBC模式加密将明文划分为固定大小的块(通常为64位或128位)。选择一个初始向量(IV),长度与块大小相同,可以是随机生成的。对第一个明文块与初始向量进行异或运算。使用对称加密算法(如AES)和密钥对异或后的结果进行加密,生成第一个密文块。对后续的明文块进行以下步骤:将当前明文块与前一个密文块进行异或运算,使用加密算法和密钥对异或后的结果进行加密,生成当前密文块。直到加密完所有的明文块,得到最终的密文。

image-20231020225201368

解密过程:选择相同的初始向量(IV),与加密过程使用的密钥。对第一个密文块使用解密算法和密钥进行解密,得到第一个解密后的块。对第一个解密后的块与初始向量进行异或运算,得到第一个明文块。对后续的密文块进行以下步骤:使用解密算法和密钥对当前密文块进行解密,得到当前解密后的块。然后将当前解密后的块与前一个密文块进行异或运算,得到当前明文块。直到解密完所有的密文块,得到最终的明文。CBC模式中的每个块都依赖于前一个块的密文或明文,这种依赖关系使得每个块的加密与解密都受到前一个块的影响,从而提供了更好的安全性。

image-20231020225303425

在CBC模式中,明文被分成固定大小的块,并且每个块都使用分组密码算法进行加密。为了保证明文的长度与块大小一致,最后一个明文块通常需要进行填充。如果明文的最后一块不足一个完整块的大小,根据PKCS#5格式,在最后一块中会进行填充以构成一个完整的块。如果明文刚好是块的大小,则会填充一个新的块。

CBC填充攻击的基本原理是利用填充过程中的错误反馈信息来逐步破解加密数据。攻击者修改密文的最后一个块的填充字节,观察服务器返回的填充错误信息。填充错误信息可能包括填充无效、填充字节的数量错误等。攻击者可以根据填充错误信息的反馈,多次尝试逐渐推断出最后一个块中的最后一个字节的值。基于此,攻击者能够通过多次查询,逐渐推断出其他块中的字节值。最终,攻击者可以恢复出所有块中的明文数据。

CBC Padding攻击的成功依赖于以下条件:

  • 加密数据使用了填充,例如PKCS#5/PKCS#7填充。

  • 服务器返回了填充错误的详细信息,例如填充无效、填充字节数量错误等。

  • 攻击者可以通过发送构造的密文来观察服务器的填充错误信息。

POODLE Attack

2014年10月,Google安全团队公布了POODLE(Padding Oracle On Downgraded Legacy Encryption),这是SSL v3协议的漏洞,攻击者可以利用这个漏洞破解小段的加密数据。POODLE是一种针对使用带有CBC密码套件的SSL 3.0协议的攻击方法。它通过对加密的填充字节进行逐字节的猜测,可以逐步恢复出加密数据的明文内容。

在SSL/TLS握手过程中,如果协议版本匹配失败,服务器可能会尝试使用旧版本的协议进行重试,这可能导致降级到较低的安全级别,例如降级到SSL 3.0。由于SSL 3.0存在填充Oracle漏洞,这种降级行为可能被攻击者利用来发起POODLE攻击。一些浏览器的降级表如下所示。

浏览器 第一次握手 第二次握手 第三次握手 第四次握手
IE6 SSL3 SSL2    
IE7 TLS1 SSL3    
IE8~10 TLS1 SSL3    
IE11 TLS1.2 TLS1 SSL3  
Safari 7 TLS1.2 TLS1 SSL3  
Firefox 27 TLS1.2 TLS1.1 TLS1 SSL3
Chrome 33 TLS1.2 TLS1.1 TLS1 SSL3

CBC模式的验证设计存在缺陷。在CBC模式中,对填充的数据即没有规定具体数据内容,也没有进行MAC验证来验证填充内容是否被篡改,而是仅对明文进行验证。因此攻击者作为中间人发起的POODLE攻击利用了这个设计缺陷。

当攻击者作为中间人发起的POODLE攻击时,能够截获密文。在每次尝试时,攻击者通过将要解密的密文块移至最后一块,并修改倒数第二块的最后一个字节进行查询。攻击者重复这个过程,多次修改倒数第二块的最后一个字节,直到服务器成功接收到修改后的内容。通过观察服务器返回的填充错误信息,攻击者可以逐步推断出填充字节的值,从而揭示出加密数据块的明文内容。

总结

要防范SSL/TLS可能出现的安全问题,首先就是要对SSL/TLS本身的安全性进行加固:

  1. 禁用旧版本的SSL/TLS协议:POODLE攻击主要利用了SSL 3.0协议的漏洞,因此禁用SSL 3.0及以下版本的协议是一种有效的防护措施。推荐使用更安全的TLS协议版本,如TLS 1.2或更高版本。

  2. 支持强密码套件:配置服务器以仅支持使用强密码套件的加密算法和协议,例如使用AES加密算法的套件。而避免使用容易受到攻击的加密算法,如RC4。

  3. 正确部署与配置:一些标准在实际应用中没有被很好地实现,可能导致协议实现上出现了漏洞。因此需要正确配置和部署SSL/TLS协议。这包括配置适当的加密算法、密钥长度、证书验证和其他安全参数。

------本页内容已结束,喜欢请分享------

文章作者
能不能吃完饭再说
隐私政策
PrivacyPolicy
用户协议
UseGenerator
许可协议
NC-SA 4.0


© 版权声明
THE END
喜欢就支持一下吧
点赞20赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片