FreeBuf|HTTP/3协议的安全优势与挑战( 二 )


当在用户代理和服务器之间交换临时私钥时 , 可以实现协议中的完全前向保密性(PFS) 。 用户代理启动的每个会话都使用新的唯一会话密钥 , 并且它与先前的会话密钥没有任何关系 。 通过为每次传输使用单独的会话密钥 , 即使任何会话密钥被泄露 , 来自较早或将来会话的任何信息也不会受到破坏 。 从加密角度来看 , 没有密钥交换可以提供完美前向保密性 。 但是 , 完全正向保密性 , 一个新术语对PFS的实现提供了可能 。
QUIC使用TLS1.3 , 该协议支持椭圆曲线(EC)DHE密钥交换或有限字段上的预共享密钥(PSK)和Diffie-Hellman(DH) 。 0-RTT密钥交换提供了完全的正向保密性 , 因为加密规范仅接受通过0-RTT握手的前向安全连接 。 尽管TLS1.2还支持前向保密性 , 但从技术上讲 , 当用户代理发送由只有服务器已知的对称密钥保护的机密资料副本时 , 正向保密性在会话恢复期间会丢失 。 该协议甚至为用户代理和服务器之间的初始消息提供了完全的正向保密 。 此外 , 由于QUIC协议不支持长期密钥 , 因此QUIC借助TLS1.3可以使用其协议层为应用程序提供完全正向保密功能 。
4.重放攻击防护
除了随机数 , QUIC实现还用于存储密钥派生的客户端值 。 服务器会识别并拒绝具有相同密钥派生值和随机数的任何重复请求 。 考虑到用户代理和服务器之间的协议通信开销 , 这种设计被称为性能噩梦 。 从理论上讲 , 该解决方案看似适用 , 但是在实践中 , 该协议可能会变得很占内存并导致性能问题 。 当前的设计不是最好的 , 但是从协议层面来说 , 这会防止任何服务器多次接受同一密钥 。 同样 , QUIC在初始步骤中不提供重放保护 , 而是在服务器初始回复后立即开始保护 。 QUIC是让初始交易能得到应用程序保护并减少协议所占内存 。 考虑到Web组件可能会使用从会话密钥派生的密钥 , 因此在此阶段可能会发生重放攻击 。 但是 , 可以在应用程序层面使用预防措施来减轻这种情况 。
5.IP欺骗保护
QUIC在握手期间支持地址验证 , 并且需要签名的地址证明 , 从而消除了任何IP欺骗攻击 。 IP地址欺骗问题主要在QUIC中通过广泛利用“源地址令牌”来解决 , “源地址令牌”是服务器的经过身份验证的加密块 , 其中包含用户代理的IP地址和服务器的时间戳 。 用户代理可以重复使用服务器生成的源地址令牌 , 除非连接更改、IP地址不在变化 。 由于源地址令牌用作承载令牌 , 因此它们可以反复使用 , 并且可以绕过服务器设置的任何IP地址限制 。 由于服务器仅响应令牌中的IP地址 , 因此即使是被盗的cookie或令牌也不会成功进行IP欺骗 。
6.防止SSL降级
TLS1.3可以防止TLS降级攻击 , 因为该协议规定了所有握手通信的密钥哈希 , 并且要求握手接收方验证发送的密钥哈希 。 在握手过程中 , 任何检测到的对客户端功能的篡改尝试都将导致握手终止并出现错误 。 此外 , 检测还涉及用户代理与服务器之间的证书验证消息 , 包括有关特定连接的所有先前消息的PKCSRSA哈希签名 。 QUIC中的校验和实现将成功防止TLS降级攻击 。
安全挑战1.0-RTT恢复漏洞
HTTP/3的最大优势之一是0-RTT恢复 , 它可以极大地提高连接速度并减少延迟 。 但是 , 仅当成功建立了先前的连接 , 并且当前交易使用在上一次连接期间建立了预共享机密时 , 这一优势才发挥作用 。
0-RTT恢复功能存在一些安全方面的缺点 。 最常见的攻击媒介之一是重放攻击 , 当对手重新发送初始数据包时可能会造成这种攻击 。 在特定的情况下 , 这可能会迫使服务器认为该请求来自先前已知的客户端 。 恢复0-RTT的另一个安全缺点是完全前向保密的部分失效 。 如果对手破坏了令牌 , 那么他们就可以解密用户代理发送的0-RTT通信内容 。
2.连接ID操纵攻击
连接ID操纵攻击要求将攻击者处在用户代理与服务器之间 。 他们可以在交换客户端和服务器问候消息的初始握手期间操纵连接ID 。 握手将照常进行 , 服务器假定已建立连接 , 但是用户代理将无法解密 , 因为连接ID需要加密密钥派生过程的输入步骤 , 并且用户代理和服务器将计算不同的加密键 。 用户代理最终将超时 , 并向服务器发送错误消息 , 告知连接已终止 。 由于客户端使用原始的加密密钥将错误消息加密到服务器 , 因此服务器将无法解密 , 并且将保持连接状态 , 直到空闲连接超时(通常在10分钟内)到期为止 。


推荐阅读