SSL/TLS的近年相关攻击研究综述(三)

SSL/TLS的近年相关攻击研究综述(三)

协议设计不足的漏洞 (针对RC4 的攻击)

作者:韦俊琳  清华大学

简介

我们在前面一文,介绍了SSL/TLS在协议加密方式方面,存在的一些可以被利用漏洞。本文综合介绍SSL/TLS使用RC4算法加密时,可能产生的攻击方式。我们首先简单介绍RC4加密的工作原理,然后介绍针对RC4的攻击的发展过程以及应对策略。

RC4加密原理

RC4是Ron Rivest在1987年设计的加密算法,作为一种较早出现仍被大量使用的高效加密算法。由于对CBC模式的攻击大量出现,加密方式的重心开始转移到RC4,使得RC4开始广泛的受到关注,也开始被大量研究人员重视。虽然早在2001年,RC4就被Fluhrer, Mantin和Shamir等研究人员证明其密钥调度算法存在缺陷[1]。在分析大量的弱密钥后,发现密钥中的少量关键位置对影响大量初始状态输出位值具有不可忽略的概率作用。也就是说,如果利用某些位置的已知明文(如HTTP报头固定值)破解密钥流的一部分内容,可以被放大利用到破解其他流上的对应位置。理论突破到实际应用往往会存在着一段距离,而近几年对RC4的研究更加深入。研究人员们构造了一些能够实际测量的攻击,加速了RC4在TLS应用上的退役。

RC4从设计之初到现在应用一直非常广泛,原因就在于其加密方式简单,效率非常高,在线上实时通讯加解密等方面起着至关重要的作用。如图3-1所示,RC4的加密原理并不复杂,加密算法主要分成两部分。第一部分是密钥调度算法(KSA) ,通过密钥key 来初始化S 状态。然后第二部分是伪随机数生成算法(PRGA),通过使用KSA初始化后的S,生成伪随机序列,更新S,如图3-2 所示(来源于Google)。

图3-1 RC4 加密算法

图3-2 RC4加密

AlFardan等在[2]中分析了RC4的安全性和近几年来RC4出现的种种状况,当RC4被用于TLS加密时,作者设计了实验对TLS进行了纯密文文本恢复攻击。提供了两种明文恢复攻击方法,而且这些攻击也可以实际应用于RC4加密的TLS会话中。其中主要根据Mantin和Shamir 等人在RC4流中发现的两个偏差进行的设计。

单字节偏差攻击

RC4在密码学中存在最重要的问题就是加密偏差问题。Mantin等人通过统计分析,贝叶斯分析等方法[3]发现密钥流中的第二字节倾向于为0的概率比一般情况要高,为1/128而不是正常的1/256。

图 3-3 RC4加密中开始两轮S0[2]=0 而S0[1] 0

在S初始化结束生成密钥流的过程中,最初,i和j为0。用X表示S0 [1],则在第一轮中将i更新为1,并将j更新为0 + S0 [1] = X,并且位置的内容X和Y也即1和X被交换。第一个输出是S1 [X + Y],它可以是具有基本上均匀概率分布的任何值。现在使用S0 [2] = 0的假设。在第二轮中,i被递增到2,并且j增加到X + 0 = X,因此我们交换位置2和X的值0和X,并且输出S2 [X + 0] = S2 [X] = 0。以下证明,对于大约1 / N的密钥,第二个输出为0,概率为1,而对于其他的1 – 1 / N个密钥,第二个输出为0,概率为1 / N 均匀分布)。结果,第二位置输出为0的总概率为:

这种类型的偏差在密码学中是极其危险的,只要知道了RC4密钥流中的第二字节倾向于0,那么就能够知道经过加密的密文的第二字节。其他存在偏差的字节也是同样的。如果要在TLS中进行攻击,需要建立多个连接,获取相同明文被多种不同密钥加密的密文数据。观察第二字节的值,如果出现频率较高,那么这个值很可能就是明文内容中的相同值。

在AlFardan 等人发表的论文[2]中,其中一个攻击通过分析244个RC4密钥的密钥流,发现在最开始的256个字节中都存在着多种偏差。他们通过改进算法,分别处理不同位置的多种偏差。最后的效果能够达到在232个数据样本下,破解全部256字节的内容能够达到100。而且在被攻击字符存在已知部分的情况下,数据样本的数量能减少到228,远低于应该存在的2128的安全性。

在现实生活中,这种攻击暂时还是很难实施的。因为最少需要收集228个数据样本,被动攻击很难在合理的时间内符合要求。就算每秒进行一次连接,也需要8年左右的时间才能收集齐。所以只有进行主动攻击,通过注入JavaScript恶意脚本进行中间人攻击。而且能破解的内容是前256字节,如果浏览器把有效内容放到256字节后,这个攻击就很难得到有效的内容。

双字节偏差

除了单字节偏差,在RC4流中还发现了存在多字节偏差。与单字节偏移相反,大多数所识别的多字节偏移不是单一位置,而是以规则间隔周期性连续出现在加密流中。

在AlFardan等人发布的第二个攻击中,展示了如何使用双字节偏差来破解明文。利用双字节进行攻击时不需要大量不同的RC4密钥加密的样本,在同一个连接上能够获取多个样本,从而有效的减少了需要建立的连接数。而双字节攻击能够在13*230个数据样本下,破解16字节的明文数据内容。为了使目标cookie处于TLS消息中的固定位置,作者在HTTP头中添加了填充,这使得加密的POST请求达到512字节,这也产生了一些额外的开销。按照每小时生成600万个密文的速度进行实验,需要大约2000小时来收集数据。这个攻击构造产生了大量的网络流量,在实际网络中,这个攻击暂时也不能构成威胁,但是证实了双字节偏差确实可以被利用。

攻击改进

在[6]中,作者提出不变性弱点(Invariance Weakness),这是RC4加密中的存在的L形键模式。它一旦存在于RC4键中,在整个初始化过程中会保持部分置换状态。当由PRGA算法处理时,该完整部分包括置换的最低有效位,通过流的长前缀确定所称伪随机输出流的最低有效位,如图3-4所示。这些存在偏差的流字节与明文字节进行异或运算,导致从密文到明文的转换存在着泄漏。这些模式通常发生在不同数量的LSB(Least significant bits),单个LSB,2个LSB,3个LSB至7个LSB,分别导致不同类别的弱RC4密钥。

图3-4 Invariance Weakness

SSL协议在许多密码套件中使用RC4进行加密。在握手协议中,为上游和下游通信生成RC4加密密钥。在记录协议中,上游密钥用于客户端到服务器通信的加密,而下游密钥用于服务器到客户端通信的加密。重要的是要注意,加密是有状态的,使用第一个密钥流字节来加密第一个消息,后续的密钥流字节用于加密下一个消息等。考虑到不变性弱点仅在密钥流的前100个字节中表示,它只能用于受保护的上游流量的前100个字节和受保护下游流量的前100个字节。假设每个方向上的第一个加密消息是SSL握手完成消息(SSL的典型使用中为36字节),则大约64字节的秘密明文数据将被保留。上游密钥流的前36个字节用于加密Finished消息,下一个字节用于加密实际应用数据。

虽然对在TLS中RC4加密方式进行了很多高调的攻击,但是根据Garman等人在2015年的统计中,发现RC4加密还是占了约30的TLS流量比例[4]。Garman等研究人员也在2015年3月发布他们在TLS中对RC4的攻击细节[4],其中重点是恢复用户密码。通过应用贝叶斯分析方法将密码的先验信息和收集的密文结合,转化为密码的后验概率。根据论文中的结果显示,针对RC4的攻击效果只会越做越好,目前能够做到226次加密用来恢复用户密码具有很好的成功率,比之前234次的效果好很多。作者分析了不同参数条件对攻击效果的影响,如使用先验概率构造的成功率会显著较高;随着密码长度的增加,攻击的成功率显著下降;允许大的密码测试数量值能提高攻击的成功率;而使用Base64编码方式,会增加密码的长度,但是由于编码会引入冗余,又会有利于攻击,整体效果上是有利于攻击。

Vanhoef 和 Piessens[5] 也在2015年7月提出了进一步的改进,打破Wi-Fi保护访问时间密钥完整性协议(WPA-TKIP),并针对TLS协议设计实用的明文恢复攻击。使用统计假设检验的方法,发现RC4密钥流中新的偏差,并揭示了初始密钥流字节中的许多新偏差,以及几个新的长期偏差。利用这些偏差,尽可能的减少返回的候选列表。作者还引入了一种生成大量相同数据包的方法来打破WPA-TKIP,这些分组通过生成其明文候选列表来解密,并且使用冗余分组结构来修剪不良候选。从解密的数据包中可以得到TKIP MIC密钥,能够用于注入和解密数据包。作者通过在受害者的浏览器中运行恶意的Javascript ,通过收集9*227个左右的HTTPS加密后的请求,能够将攻击时间缩短到约52小时。其中每个请求都是具有相同密钥加密后的密文,为了在75小时内完成攻击,则需要在每秒内发出约4450个请求。虽然对比AlFardan设计的攻击需要2000小时要小很多,但是在距离实际可用于现实攻击还差一点。因为在短时间内发送如此大量的请求会很容易被服务器检测出来,但是这个实验结果确实将针对RC4的攻击又向实际可行的边缘推进了一大步。

总结

虽然目前对于在TLS中使用RC4加密的攻击还没达到实际可被利用的程度,但是它的安全期限已经变得很短了,在理想的情况下还是能够被破解的。从对RC4的攻击发展来看,只要是存在漏洞的算法,在被长久的研究中,总是会被找到攻击的方案的。并能够被不停的改进,直至达到现实可用的程度。所以一般的加密方案都是有一定的存活年限的,需要不停的更新加密方式。因此推进RC4在TLS上的停用是非常有必要的。例如在[6]中,作者强烈地建议Web应用程序管理员应考虑在其应用程序的TLS配置中禁用RC4;鼓励Web浏览器在TLS配置中禁用RC4。 当然,最好的方案是按照RFC7525 [7]的建议,使用AES-GCM。但AES-GCM只在TLS1.2版本才支持。因此,推进TLS1.2以及新版本协议TLS1.3的广泛部署,才是长久之计。

参考文献:

[ 1 ] S. R. Fluhrer, I. Mantin and A. Shamir. Weaknesses in the key scheduling algorithm of RC4. In Cryptography, 2001

[ 2 ] N. AlFardan, R. Holloway and D. J. Bernstein. On the security of RC4 in TLS. In USENIX, Aug, 2013

[ 3 ] I. Mantin and A. Shamir. A practical attack on broadcast RC4. In in Computer Science, 2001

[ 4 ] C. Garman and K. G. Paterson. Attacks only get better: password recovery attacks against RC4 in TLS

[ 5 ] M. Vanhoef and F. Piessens. All your biases belong to us: breaking RC4 in WPA-TKIP and TLS. In USENIX, Aug, 2015

[ 6 ] I. Mantin. Bar-Minzva attack: breaking SSL with 13-year old RC4 weakness. In Blackhat, 2015

[7] Y. Sheffer, R. Holz and P. Saint-Andre. Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS). IETF RFC 7525. May 2015.

Bookmark the permalink.

Comments are closed.