为什么 TLS_FALLBACK_SCSV 可以抵御 MITM 攻击?

信息安全 tls 中间人
2021-09-01 21:04:28

如果 SSLv3 无法完全禁用,建议使用 TLS_FALLBACK_SCSV 来缓解 POODLE,这是一个指示已发生回退的信令密码套件值。它的标准草案说:

如果 TLS_FALLBACK_SCSV 出现在 ClientHello.cipher_suites 中,并且服务器支持的最高协议版本高于 ClientHello.client_version 中指示的版本,则服务器必须以不适当的_fallback警报响应。

据我了解,这个想法是,如果客户端尝试与 TLS 1.2 协商连接但失败(可能是因为 MITM 在协议降级攻击中强制出现这种情况),服务器将能够检测到这种情况是因为此信令值将出现在密码套件列表中。

我对 TLS 协商不是很熟悉,我不明白为什么攻击者不能简单地操纵密码套件列表来删除这个信令值?

例如,客户端尝试使用 TLS 1.1 连接到服务器,但中间人 Mallory 拦截并假装失败。当客户端尝试连接 TLS 1.0 时再次这样做。当客户端尝试使用 SSL 3.0 连接时,Mallory 从密码套件中剥离 TLS_FALLBACK_SCSV,并将请求传递给服务器,然后将服务器的响应传回,从而允许在服务器没有看到 FALLBACK 指示符的情况下协商连接?

TLS 的哪些功能可以防止此类攻击?密码套件列表是否以某种方式加密,甚至在会话协商之前?

2个回答

在握手结束时,Finished在新协商的算法和密钥的保护下交换消息;特别是,这些消息的内容受MAC保护。消息的内容是Finished所有前面的握手消息的散列。当消息从客户端传输到服务器时,任何外部操作都ClientHello将被检测到:客户端和服务器不会在完全相同的ClientHello内容上工作,因此不会为Finished消息获得相同的哈希值。

只要攻击者执行的任何更改都不允许他立即破坏整个加密层,这可以保护握手免受更改。在贵宾犬的情况下,即使攻击者成功强制使用 SSL 3.0,他也无法立即销毁加密货币,因此无法“修复”Finished消息。

虽然不是 SSL/TLS 如何工作的严格副本,答案就在那里:

Finished 消息是对所有先前的握手消息(来自客户端和服务器)计算的加密校验和。由于它是在 ChangeCipherSpec 之后发出的,因此它也被完整性检查和加密所覆盖。

如果您在中间更改握手的任何部分,您将使整个握手无效,并且连接将被中止。