首页 > 代码库 > SSLv3 POODLE 攻击分析

SSLv3 POODLE 攻击分析

SSLv3 POODLE 攻击分析


攻击场景:

(攻击场景有点苛刻!)

AC通信,攻击者需作为中间人BB还得可以通过JS脚本操作A发送SSL3的请求(B可以是一个基于JS的代理请求),并可以窃取A发送到CSSL密文。然后通过CBC模式的Padding Oracle攻击还原加密中的cookie

 

 

攻击原理:

 

CBC解密过程为:(图片转自wiki)

 

 

 

SSLv3是采用末尾填充机制,块大小一般8字节或者16字节,最后一个块为填充块。且SSLv3没有规定padding填充块字节的内容,只校验填充块最后一个字节。

 

我们以8字节为例:

 

假设密文块为:

C0C1C2 ... Cn

解密为:

P1P2P3 .. Pn

最后一个填充块填充数据为:*******7

则服务器解密后会检测Pn末尾字节是否为7

攻击者利用这个原理,把密文块中任意一块Ci 覆盖最后一个填充块 Cn ,发送到服务器检测最后一个字节是否为7,只要服务器检测成功,就可以通过如下公式,反推出Ci 块最后一个字节的明文。

 

=======================

证明如下:(Ci 覆盖 Cn

 

Pn [7] = Dk (Ci[7] ) xor Cn-1[7] = 7 

推出: 

Dk(Ci[7]) = Pi[7] xor Cn-1[7] = 7 xor Cn-1[7]

则:

Pi[7] = Dk(Ci[7]) xor Ci-1[7] = 7 xor Cn-1[7] xor Ci-1[7]

 

因为作为中间人,C1,C2...Cn所有密文攻击者是知道的,则可得Pi[7]这个字节的明文。

========================

 

为了解密cookie,攻击者B需要能控制A发送构造HTTP请求,满足:

1Padding是填充后面一整个块

2)要解密的cookie字节刚好在Ci块的最后一个字节

 

 

然后劫持A发送到BSSL密文,把Ci 块覆盖到 Cn 块,发送到服务器,一般来说有1/256概率服务器会验证通过。

 

接下来,因为解密窗口只有一个,攻击者要做的就是构造HTTP请求路径长度,如 GET / ,GET/a,GET/aa ... 把需要解密的字节顶到解密窗口,每次解密一个字节需要发送256个请求。

 

参考:

(1)https://www.imperialviolet.org/2014/10/14/poodle.html

(2)http://googleonlinesecurity.blogspot.nl/2014/10/this-poodle-bites-exploiting-ssl-30.html

(3)https://www.openssl.org/~bodo/ssl-poodle.pdf

SSLv3 POODLE 攻击分析