术语表

FREAK (Factoring RSA Export Keys)

最后核实

定义

FREAK 是 2015 年公布的攻击,中间人诱使有漏洞的 TLS 客户端接受可被分解的 512 位出口级 RSA 密钥,从而解密和篡改流量。

FREAK 于 2015 年 3 月公布。上世纪 90 年代,美国的出口管制限制了对外提供的密码强度,SSL/TLS 因此有了使用 512 位 RSA 密钥的“出口级”密码套件。包括 OpenSSL(CVE-2015-0204)以及 Apple、微软的 TLS 实现在内,有漏洞的客户端存在状态机错误:即使自己没有请求出口级套件,也会接受服务器发来的 512 位临时 RSA_EXPORT 密钥。中间人把客户端的请求改成出口级套件,服务器若仍支持,就会返回 512 位密钥;攻击者将其分解后完成握手,即可读取或篡改流量。不少服务器长时间复用同一个出口级密钥,提前分解它就很划算。

为什么重要

FREAK 表明,为了“以防万一”而保留的遗留套件,几十年后依然危险;客户端的实现错误还能把服务器残留的弱点变成可实际利用的攻击。修复需要两端配合:客户端库打补丁,服务器删除所有 EXPORT 套件。TLS 1.3 则彻底去掉了出口级密码和 RSA 密钥交换。几个月后公布的 Logjam 把同样的思路用在了 Diffie-Hellman 上。如今检查老旧设备和遗留系统时,出口级套件依然是值得顺手确认的一项。

例子

nmap --script ssl-enum-ciphers -p 443 example.com | grep -i export

没有输出说明服务器不提供出口级套件。当前版本的 OpenSSL 已完全不包含出口级套件。

常见误区

  • 只是服务器的问题。 根源在于客户端库接受了自己没有请求的密钥,服务器只是恰好还开着出口级套件。
  • 512 位 RSA 依然很难分解。 512 位 RSA 模数早在 1999 年就被公开分解,今天成本更低。
  • FREAK 和证书的密钥长度有关。 证书本身可以是 2048 位 RSA,FREAK 利用的是另一把临时的出口级密钥。

延伸阅读