ROBOT (Return Of Bleichenbacher's Oracle Threat)
定义
ROBOT 是 2017 年公布的研究,发现大量 TLS 实现仍存在 1998 年的 Bleichenbacher RSA 填充预言机,攻击者可借此解密 RSA 密钥交换。
ROBOT 由 Hanno Böck、Juraj Somorovsky 和 Craig Young 于 2017 年 12 月公布。1998 年 Daniel Bleichenbacher 就已证明:如果服务器会透露解密后的 RSA PKCS #1 v1.5 消息填充是否有效,攻击者就能通过大量自适应查询解密密文,或用服务器的密钥伪造签名。此后 TLS 规范一直包含应对措施,但 ROBOT 团队发现,多家主流厂商的产品,包括负载均衡和 TLS 加速设备,仍会通过不同的告警、超时或连接行为泄露这个预言机。它对应多个厂商各自的 CVE 编号,而不是单一编号。
为什么重要
使用 RSA 密钥交换的 TLS 会话,可能被事先录下流量、且仍能向有漏洞服务器发起查询的攻击者事后解密,服务器密钥还可能被滥用于签名。给受影响产品打补丁能堵住具体的预言机,但长久之计是停用 RSA 密钥交换:禁用名为 TLS_RSA_WITH_* 的套件(OpenSSL 名称如 AES128-GCM-SHA256),只保留 ECDHE 套件,它们同时提供前向保密。TLS 1.3 已完全去掉 RSA 密钥交换。在 ECDHE_RSA 套件中,RSA 证书用于签名仍然没有问题。排查时别忘了负载均衡、WAF 等前端设备,它们往往才是终止 TLS 的地方。
例子
nmap --script ssl-enum-ciphers -p 443 example.com | grep 'TLS_RSA_WITH'
没有输出说明未提供 RSA 密钥交换套件。只保留 ECDHE 的 Nginx 套件列表示例:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
常见误区
- ROBOT 说明 RSA 证书不能用了。 问题在于 RSA 密钥交换(加密),而非 RSA 签名;配合 ECDHE 使用的 RSA 证书不受影响。
- Bleichenbacher 攻击在 1998 年就解决了。 应对措施早已有之,但各家实现屡屡出错,ROBOT 证明的正是这一点。
- 只有冷门服务器受影响。 公布时,知名厂商的产品和一些高流量网站都在受影响之列。