了解 TLS 1.3 0-RTT 重放攻击

信息安全 tls 密码学
2021-09-09 00:34:04

TLS 1.3 0-RTT的规范提到了攻击者可能意识到的以下威胁:

网络攻击者利用客户端重试行为安排服务器接收应用程序消息的多个副本。这种威胁在某种程度上已经存在,因为重视稳健性的客户端通过尝试重试请求来响应网络错误。但是,0-RTT 为任何不保持全局一致服务器状态的服务器系统增加了一个额外的维度。 具体来说,如果服务器系统有多个区域,区域 B 中不接受来自区域 A 的票证,则攻击者可以将用于 A 的 ClientHello 和早期数据复制到 A 和 B. 在 A 处,数据将在 0-RTT 中被接受,但在 B 处,服务器将拒绝 0-RTT 数据并强制进行完全握手。如果攻击者阻止了来自 A 的 ServerHello,那么客户端将完成与 B 的握手并可能重试请求,从而导致整个服务器系统上的重复。

我的问题是:攻击在哪里?归根结底,攻击者也可以将他的 ClientHello 副本传递到区域 B 并获得相同的结果(完全握手)。我错过了什么?

2个回答

你并没有错过那么多。我认为这篇接近结尾的cloudflare文章很好地概述了可能的攻击媒介和场景。根据网络和 Web 应用程序的安全性,0-RTT 可能无法响应待处理的参数或某些类型的标头。如果攻击者已经想出了如何插入自己并了解他想要在易受攻击的主机上重放的内容,那么首先要注意其他地方的风险更大。诸如具有参数和经过身份验证的会话 cookie 以及 HTTP 降级的 0-RTT 重播之类的东西可能是合理的。但在渗透测试者的世界里,这是很多工作。

好的答案是,这本身就是一种经典的重放攻击。假设 A 和 B 是不接受对方票证的服务器,则攻击如下所示:

  1. 客户端发送 0-RTT 消息被攻击者拦截
  2. 攻击者将消息转发给 A 和 B
  3. A 将接受消息并处理它
  4. B 将拒绝该票证并强制与客户端完全握手
  5. 作为回退完全握手的一部分,客户端随后会将消息重新发送给 B,从而导致在服务器集群上重复处理原始消息两次 - 重放攻击