ROBOT Attack是什么
这是一个在1998年就发现的漏洞,该漏洞允许使用服务端的私钥执行RSA
解密和签名操作。
在1998年,Daniel Bleichenbacher
发现了一个SSL
服务器在的PKCS#1 v1.5
中的填充允许自适应的密文选择攻击。但该错误与RSA
加密一起使用时,能彻底打破TLS
的安全性。
对于易受到攻击的主机,只支持RSA
加密密钥交换,攻击者就可以很容易的被动的记录流量并解密,而对于通常使用前向保密但仍然支持易受攻击的RSA
加密密钥交换的主机而言,风险取决于攻击者的攻击速度。
ROBOT攻击的原理
自适应选择密文攻击
在自适应选择密文攻击的情况下,攻击者的目标是解密密文而不是解密密钥。攻击者使用原始密文,迭代生成新的密文,该新的密文与原密文相关,他讲密文发送给接受者-oracle-观察响应,响应会泄露关于解密信息有效性的特定信息。攻击者在每次的回应时都会得到一些明文信息,只要重复这些步骤,直到完成解密。攻击流程图如下:
该攻击是基于RSA PKCS #1
的填充。
RSA PKCS #1 v1.5
RSA PKCS #1 v1.5
(下文中简称为PKCS #1
)填充用于需要RSA
加密的信息,为了加密K
,消息首先被0x00
、一些随机字节和0x00 0x02
填充,随机字节的选择方式是为了让填充的信息达到特定的块长度(1024、2048或4096位),可以参考下图,填充16字节长消息以实现256字节:
消息解密器,它解密消息,检查消息结构,在0x02
之后搜索第一个0x00
字节,并且打开加密信息。使用TLS
握手协议来建立TLS
会话时,会有一个会话密钥,该密钥是使用多个公共值和PermasterSecret
建立的。PremasterSecret
是由客户端生成的一个48
字节长的值,并通过PKCS #1
编码的ClientKeyExchange
发送的服务器:
PermasterSecrt
由两个字节的版本协议(上图中的0x03 0x01
)和46
个随机字节组成。如果攻击者拥有这46
个随机字节,攻击者就能解密TLS
会话。
预防ROBOT
如果你的服务器受该漏洞影响,可以进行如下操作:
- 禁用以
TLS_RSA
开头加密套件,DH
和ECDH
系列的加密套件不受该漏洞影响。 - 更新服务器软件,使用非
PKCS #1 v1.5
填充的服务器实现。 - 降低
SSL
客户端握手超时,使用这种方法能有效降低风险,但不能完美的解决、还存在一定副作用。
检测方式
https://myssl.com/robot_detect.html
我的证书私钥是否泄漏,需要吊销吗?
该漏洞不会影响服务器的私钥, 因此可以不用考虑证书更换问题。
一些官方修复方案:
设备 | 修复方案 |
---|---|
F5 | BIG-IP SSL vulnerability |
Citrix | TLS Padding Oracle Vulnerability in Citrix NetScaler Application Delivery Controller (ADC) and NetScaler Gateway |
Radware | Security Advisory: Adaptive chosen-ciphertext attack vulnerability |
Cisco ACE | Bleichenbacher Attack on TLS Affecting Cisco Products, End-of-Sale and End-of-Life |
Cisco ASA | Bleichenbacher Attack on TLS Affecting Cisco Products |
Bouncy Castle | Fix in 1.59 beta 9, Patch / Commit |
Erlang | OTP 18.3.4.7, OTP 19.3.6.4, OTP 20.1.7 |
WolfSSL | Github PR / patch |
MatrixSSL | Changes in 3.8.3 |
Java / JSSE | Oracle Critical Patch Update Advisory - October 2012 |