BlackHat2020 议题分析之「When TLS Hacks You」

  • A+
所属分类:安全新闻

xxxkkk@海特实验室

简介

这次分析的议题是2020 Blackhat 的When TLS Hacks you,总体而言,这个议题是今年我最喜欢的一个议题之一了;无论是从技术的新颖性,抑或分析问题的全面性,都是值得学习和借鉴的。
简单来说,作者提出了一种新的
SSRF攻击思路:利用DNS缓存和TLS协议进行攻击。

分析

说到SSRF的利用手法,在Orange Tsai的议题A new era of SSRF中,介绍了很多SSRF利用技巧,大致可以分为两类:

  1. 利用一些特殊的协议,比如gopher://,zip://等,但这一类的协议在新版的库中默认并不启用。

  2. 利用SNI injection,在协议解析过程中,存在特定的问题,导致产生了换行等,这一类需要基于特定的漏洞。

作者的SSRF新的利用手法基于TLS,也就是https://。当我们访问https://www.baidu.com的时候,整个交互过程如下:
BlackHat2020 议题分析之「When TLS Hacks You」

  1. 客户端会首先发一个Client Hello数据包,里面会包含一个自己生成的random字段和目标的hostname:

    BlackHat2020 议题分析之「When TLS Hacks You」

  2. 在服务端会响应一个Server Hello数据包,里面同样会有一个random字段,另外还会根据客户端的random字段,生成一个session。

    BlackHat2020 议题分析之「When TLS Hacks You」

    作者提出,在https协议的实现(CURL)中,只判断了目标服务的域名、端口以及协议是否一致, PDF中的截图如下:

    BlackHat2020 议题分析之「When TLS Hacks You」

    为了看完整的逻辑,完整的代码在这里https://clickhouse.tech/codebrowser/html_report/ClickHouse/contrib/curl/lib/vtls/vtls.c.html#344
    经过比较,确实如作者所说,仅判断了check->namecheck->conn_to_hostcheck->conn_to_portcheck->scheme,所以可以使用DNS rebinding的技巧。

    完整的步骤如下:

    1. 第一次访问www.hacker.com:8888,这个域名指向我们可以控制的IP地址,在这个IP上我们搭建一个自定义的HTTPS服务,他返回的Session为我们打的payload,另外8888为我们需要攻击的服务端口,如SMTPRedis等;

    2. 修改DNS解析记录,把www.hack.com:8888的IP指向127.0.0.1

    3. 再次访问www.hacker.com:8888,发起的请求里面,就会附带第一步中我们构造的Session

    4. 这个Session就会被附带传到目标服务端口中,形成攻击。

  • 需要注意的是:经过测试,直接使用curl请求同一个HTTPS网站两次SESSION是不一样的,如图:BlackHat2020 议题分析之「When TLS Hacks You」

    作者在github(https://github.com/jmdx/TLS-poison)中指出


    If you want to reproduce my curl/memcached demo from the talk, you'll want to pass -L to curl to enable redirects, since command-line curl will use a fresh cache each time it's run.

    再次使用Firefox测试,如图:
    服务端响应Session:
    dc2e8...

    BlackHat2020 议题分析之「When TLS Hacks You」
    后续多次发起请求,客户端携带的Session都为dc2e8...

    BlackHat2020 议题分析之「When TLS Hacks You」

使用https://github.com/jmdx/TLS-poison搭建环境,发现一些细节上的问题,在代码get_spoofed_IP中,有一段挺奇怪的逻辑判断,

  1. def get_spoofed_IP(domain, ip):

    1. global spoof_count

    2. global start

    3. global last_ip

    4. start = time()

    5. last_ip = ip


    1. for d in HOSTS_LIST:

      1. if re.match(d[0], domain.lower())orTrue:

        1. spoof_count =(spoof_count +1)%3

        2. # The below line will result in the answer switching after 30 seconds,

        3. # instead of alternating

        4. # return d[1] if (time() - start > 30) else args.TARGET

        5. return d[1]if spoof_count ==0else args.TARGET

    2. returnNone

大概意思是三次中DNS只修改一次为127.0.0.1,其余两次还是原来的结果,即Forward默认的DNS解析设备上。不太清楚作者为啥要这么写。

总结

从技术上来说,作者用TLS在DNS rebind时候存在的问题,将HTTPS的数据包,转发到了具有容错特性的本地端口,如Redis、Memcache等。从分析的完整性来说,作者详细分析了如果修补这种缺陷,同时从对性能的影响方面进行测试,分析修补的可行性。这一点是十分值得学习的。


HatLab知识星球

BlackHat2020 议题分析之「When TLS Hacks You」

关于我们

BlackHat2020 议题分析之「When TLS Hacks You」


人才招聘

一、物联网安全研究员(硬件安全方向)

工作地点:

1.杭州;

岗位职责:
1.嵌入式方向的安全漏洞挖掘;
2.嵌入式系统硬件软件设计与研发。
任职要求:
1.熟练使用C语言,可规范使用指针,结构体,联合体;
2.熟练使用Linux操作系统,理解Makefile原理并可编写Makefile文件;
3.了解数字电路原理,具有较扎实的计算机系统结构知识,理解操作系统原理;
4.了解WEB或PWN方向的漏洞挖掘过程,会使用相关工具如Zap、IDA等,会自行编写漏洞利用工具。
加分项:
1.具有网络安全公司实习经验;
2.具有网络安全赛事经验;
3.有设计电路板原理图和四层PCB布局经验;
4.熟练焊接0402,0201,QFN,BGA等元器件封装;
5.有AVR,ARM,MIPS,Xtensa等内核的MCU/SoC开发经验;
6.向知名平台提交过物联网方向的漏洞报告。


二、物联网安全研究员(固件安全方向)

工作地点:

1.杭州;

岗位职责:
1. 物联网通用协议、组件、操作系统漏洞挖掘与漏洞复现;
2. 物联网设备漏洞挖掘与漏洞复现;
3. 参与创新物联网安全研究项目;
任职要求:
1.具有二进制漏洞挖掘经验,熟悉ARM、MIPS等其他架构的漏洞利用技巧;
2.熟练掌握gdb、IDA等工具的使用;
3.具有一定的硬件基础和动手能力,掌握常见的嵌入式设备固件提取及解包的方法;
4.至少掌握一门编程语言,如C/C++/Perl/Python/PHP/Go/Java等。
加分项:
1.具有知名物联网设备/网络设备漏洞挖掘成果证明;
2.参加CTF比赛并获奖;
3.参与GeekPWN、HackPWN等智能设备破解大赛并取得成绩。


三、物联网安全研究员(无线电安全方向)

工作地点:

1.杭州;

岗位职责:
1. 无线通信协议的通用漏洞挖掘;
2. 无线通信应用系统的漏洞挖掘,如智能设备等。
任职要求:
1. 掌握无线通信基本原理及数字信号处理理论,熟悉各种调制解调算法,信道编码算法等;
2. 熟悉C/C++、MatLab、Python等编程语言;
3. 熟悉至少一种常见无线通信协议及其安全问题,如Wi-Fi、Bluetooth、Zigbee、4/5G等;
4. 熟练掌握SDR外设和GNURadio等工具的使用。
加分项:
1. 具有信息安全公司实习经验;
2. 有嵌入式固件逆向分析经验;
3. 参加CTF比赛并获奖;
4. 有智能设备的破解经验;
5. 通信工程、信息安全专业。



感兴趣的小伙伴请联系姜女士,或将简历及应聘职位投送至下方邮箱。(请注明来源“研究院公众号”)

联系人:姜女士
邮箱:[email protected]
手机;15167179002,微信同号


发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: