为什么禁用FIPS能修复SSL漏洞?

4 人参与

乍一看,禁用一个名为“FIPS兼容算法”的功能,竟然能修复一个SSL/TLS协议层面的漏洞,这多少有点让人摸不着头脑。这二者之间,到底存在着怎样隐秘的联系?问题的核心,其实在于一个早已被现代密码学淘汰,却因合规要求而被“封印”在系统中的古老算法。

FIPS与“合规”的枷锁

FIPS(Federal Information Processing Standards)是美国联邦政府制定的一套信息技术处理标准。其中,FIPS 140系列是专门针对加密模块的安全要求。当你在Windows系统中启用“系统加密: 将FIPS兼容算法用于加密、哈希和签名”这一策略时,就等于给系统加了一道“合规锁”——它会强制要求所有加密操作,包括SSL/TLS握手,都必须使用经过FIPS 140认证的加密算法套件。

这听起来很安全,对吧?但问题就出在“历史包袱”上。为了满足早期的FIPS认证和广泛的兼容性,微软在构建其FIPS兼容算法列表时,不得不包含一些现在看来非常脆弱的算法,比如DES3DES(三重数据加密标准)。

CVE-2016-2183:瞄准了3DES的软肋

我们回到那个具体的漏洞:CVE-2016-2183,又名SWEET32。这个漏洞并非针对SSL/TLS协议本身的设计缺陷,而是精准打击了其中使用的3DES加密算法

3DES的块大小是64位。安全研究人员发现,当使用CBC(密码块链接)模式时,攻击者可以通过拦截大约785GB的加密数据(在当今网络环境下并非不可能),利用生日攻击原理,成功推导出部分加密密钥或明文信息,造成信息泄露。这就是“SSL/TLS协议信息泄露漏洞”的本质。

一个关键的悖论

那么,为什么系统明明有更安全的AES算法(块大小为128位,不受此漏洞影响),却还要用3DES呢?这就是FIPS策略的“副作用”。当FIPS模式开启时,系统的SSL/TLS密码套件列表会被强制修改和限制,优先使用那些包含FIPS认证算法的套件。在某些配置或协商场景下,为了满足“必须使用FIPS列表中的算法”这一强制要求,系统可能会“降级”选择包含3DES的弱密码套件,从而将自己暴露在SWEET32的攻击之下。

禁用FIPS:解开束缚,释放安全选项

因此,禁用FIPS兼容算法策略,并不是直接“修复”了漏洞代码,而是做了一件更重要的事:解除了系统加密算法的选择枷锁

  • 移除强制要求:系统不再被强制只使用那份包含老旧弱算法的FIPS列表。
  • 恢复现代密码套件:你可以自由配置或允许系统使用更优先、更安全的密码套件顺序,例如基于ECDHE的密钥交换和AES-GCM加密的套件,这些套件既高效又安全,且完全免疫于SWEET32攻击。
  • 绕过漏洞触发点:既然3DES这个“病根”从可选的算法列表中彻底靠后甚至被排除,SSL/TLS握手自然就不会再选用它,CVE-2016-2183所依赖的攻击路径也就被釜底抽薪了。

所以,这个操作的本质,是一次策略层面的安全策略调整,通过解除一个过时的合规性限制,来规避一个由过时算法引发的具体技术风险。它揭示了一个深刻的教训:安全合规不等于绝对安全,僵化地执行旧标准有时反而会引入新的风险。真正的安全,需要在合规性要求与动态演进的威胁态势之间,做出灵活而明智的平衡。

参与讨论

4 条评论
  • 月痕行者

    这招真的管用👍

    回复
  • 兔耳朵

    禁用FIPS后,系统默认的TLS套件顺序是怎样的?会不会影响老旧客户端?

    回复
  • Duskfiend

    我之前在公司里也遇到过类似的3DES问题,打开FIPS后SSL握手老是选那个弱套件,禁掉后才恢复正常,折腾了好几天。

    回复
  • 糯米糍宝贝

    这事儿挺那啥的

    回复