如果 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 的哪些功能可以防止此类攻击?密码套件列表是否以某种方式加密,甚至在会话协商之前?