背景
最近回顾了一下SSL/TLS协议,重点看了看TLS1.3的优点。其中有一条是可以有效地防止降级攻击,但是具体怎么防止的网上没有比较详细的中文资料,所以我对一些英文资料做了一下总结。
降级攻击
降级攻击的具体流程看下图就可以了: 以TLS1.2为例,TLS1.2的详细流程可以看https://www.51cto.com/article/698090.html。
攻击者以中间人的身份,监听客户端和服务器的通信。 在客户端发送请求的时候,攻击者将客户端请求的加密算法更改为安全性较弱的加密算法,如果服务端支持该加密算法,他会告诉客户端以后咱俩就用这个加密了。 然后攻击者对生成的弱加密算法的密钥进行破解(如图中所示的暴力破解),伪造Finished message,然后对正常通信的内容进行解密与加密,这样就可以获取到所有的正常通信内容了。
TLS1.3防止降级攻击的手段
https://blog.gypsyengineer.com/en/security/how-does-tls-1-3-protect-against-downgrade-attacks.html
TLS1.3有两种方法来防止降级攻击: 1、客户端和服务器发送的Finished message包含了之前所有握手消息的MAC,用于防止有攻击者更改握手消息。 2、在SeverHello中的ServerHello.random中嵌入保护机制 当服务器收到降级请求时,服务器会将ServerHello.random的最后8字节修改为
44 4F 57 4E 47 52 44 01 表示TLS1.2
44 4F 57 4E 47 52 44 00 表示TLS1.1
前7字节为DOWNGRD
由于ServerHello等信息在TLS1.3中是被加密的(TLS1.2中未加密),因此攻击者在TLS1.3中无法获取到ServerHello也无法对其进行修改。
客户端收到握手的信息并解密后,发现ServerHello.random中倒数后8字节中的前七字节为DOWNGRD,自己一琢磨,我发送的明明是TLS1.3请求,为啥降级了?应该是有人在中间发送了降级的请求,不行,有人在监听我们,赶紧停止TLS的握手。
总结
TLS1.3中ServerHello等信息的加密、MAC、ServerHello.random可以有效地防止降级攻击。
|