码迷,mamicode.com
首页 > 其他好文 > 详细

SSLv3 POODLE 攻击分析

时间:2014-10-16 19:25:53      阅读:406      评论:0      收藏:0      [点我收藏+]

标签:sslv3 poodle 0day

SSLv3 POODLE 攻击分析


攻击场景:

(攻击场景有点苛刻!)

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

 bubuko.com,布布扣

 

攻击原理:

 

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

 bubuko.com,布布扣

bubuko.com,布布扣 

 

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块的最后一个字节

 bubuko.com,布布扣

 

然后劫持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 攻击分析

标签:sslv3 poodle 0day

原文地址:http://blog.csdn.net/hxsstar/article/details/40150241

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!