今年的OffensiveCon大会议题质量不错

年前曾在微博上推荐过OffensiveCon 2019大会议题,议题列表与介绍可参见官网(https://www.offensivecon.org/agenda/),很多专注于漏洞挖掘与利用的干货分享,目前只有部分议题ppt公开,文末附打包下载链接(包含8个议题),包括ppt、paper和code。

会议结束后,Twitter上赞声一片,议题质量很赞。

本文主要聊聊已公开的一些议题,学习下思路。

议题列表

  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    1. Modern Source Fuzzing
    2. IPC You Outside the Sandbox: One bug to Rule the Chrome Broker
    3. 3D Accelerated Exploitation
    4. Bugs so Nice they Patched them Twice! A (Continuing)? Story About Failed Patches
    5. Attacking Hardware Root of Trust from UEFI Firmware
    6. OSX XPC Revisited - 3rd Party Application Flaws
    7. Growing Hypervisor 0day with Hyperseed
    8. Attacking Edge Through the JavaScript Just-In-Time compiler
    9. Coverage-Guided USB Fuzzing with Syzkaller
    10. Updated Analysis of PatchGuard on Windows RS4: Is the Mouse Finally Caught?
    11. iOS Dual Booting Demystified
    12. macOS: How to Gain Root with CVE-2018-4193 in < 10s
    13. Reverse Engineering of Error-Correcting Codes
    14. Glitch in the Matrix: Exploiting Bitcoin Hardware Wallets
    15. Attack Surface of a Connected Vehicle
    16. Bypass Windows Exploit Guard ASR
    17. FuzzIL: Guided Fuzzing for JavaScript Engines

Modern Source Fuzzing

这是作者Ned Willliamson在353c大会上的《Attack Chrome IPC》议题的扩展补充,我之前还写过《安全研究者的自我修养》一文,里面介绍的就是作者提及的二进制漏洞研究的学习思路。

目前作者没公开这次会议的ppt,大家还是看353C的演讲视频吧:https://media.ccc.de/v/35c3-9579-attacking_chrome_ipc

##IPC You Outside the Sandbox: One bug to Rule the Chrome Broker

作者已经在github上公布此漏洞的利用代码hack2win-chrome,点击”阅读原文“可下载到。

本议题讲的是Chrome沙盒逃逸漏洞,漏洞位于应用缓存(AppCache)子系统上,主要方便从本地读取数据进行离线浏览,访问速度更快,还能缓解服务器压力。

img

AppCache位于沙盒之外的高权限进程browser,沙盒内低权限的renderer进程通过发送IPC消息与browser进程交互的,当AppCache出漏洞时,就有可能逃逸出沙盒。

漏洞成因

这次的ppt写得比较模糊,没那么清楚,还是直接看patch diff:

image-20190223095905435

移动CancelUpdate()函数到newest_complete_cache_=nullptr;之后,直接看看CancelUpdate里面的逻辑:

img

在调用AppCacheGroup::RemoveCache清除缓存时,newest_complete_cache_指向的是被销毁的对象,所以后面才要把它置空,但在销毁之前调用了CancelUpdate =>

AppCacheUPdateJob::~AppCacheUpdateJob => AppCacheGroup::SetUpdateAppCacheStatus => AppCacheHost::OnupdateComplete =>

SetSwappableCache

最后的SetSwappableCache用于设置新的交换缓存(swap cache),会引用到newest_complete_cache_,而此时它还未被置NULL,导致出现Use After Free漏洞。

####漏洞利用:

  1. 【泄露地址】:使用与AppCache对象大小相同的net::CanonicalCookie对象来占用释放对象的内存,而CanonicalCookie对象开头是个cookie名称,即字符串指针,再从浏览器中读取cookie信息来达到信息泄露的目的,从而拿到可控数据的堆地址绕过ASLR。

  2. 【代码执行】:使用与AppCache对象大小相同的Blob对象对占用释放内存,再伪造AppCacheGroup对象,当它析构释放时,在~AppCacheGroup中会调用到已被填充控制的虚函数指针,再结合ROP绕过DEP,从而达到代码执行。

整个过程还是需要自己动手调试一遍才比较清楚,估计足够调上几天了,国内似乎也没有一遍完整的文章分析过该漏洞的利用细节,期待有人分享。

3D Accelerated Exploitation

image-20190223123509759

image-20190223123527727

该议题主要介绍VirsualBox 3D加速器的攻击面和漏洞利用,由于VBox是开源的,因此可以直接使用AFL 去Fuzzing,fuzz目标就是通过发送畸形chromium messages来触发漏洞。他们应该是自己写个构造发送消息的程序,输入文件即chromium messages内容,样本可能是收集550操作码的信息去构造,也可能通过hook去直接抓取真实数据作为样本,然后用 afl去跑。更具体的实现方式,作者也没细说。

MWR Labs这几年经常曝光一些Pwn2Own级别的漏洞,分享很多经典文章,还开源了不少Fuzzer工具,连ppt都做得非常工整,具有独特风格,哪怕没logo,你看一眼都能猜出是他们写的。具备牛X的技能能力,又乐分享,这点是比较难得的。

Attacking Edge Through the JavaScript Just-In-Time compiler

一直以来,chakra被曝的漏洞非常多,导致微软最终还是放弃了。

从今年开始,微软将打算把Edge的Chakra引擎改用Google Chromium引擎,估计最近这两个月就会发布,以后就可能没什么人再搞Chakra内核了。

这议题里面讲了很多chakra的js对象内存结构等基础知识,重点讲了JIT优化编译器的漏洞原理与利用技巧,整个ppt有120页,很多。

我没搞过chakra,未来可能也用不上了,有兴趣的同学可以看下,作者把exploit代码也公布了,我已附在本文的打包资料里面。

Coverage-Guided USB Fuzzing with Syzkaller

image-20190223130009940

搞过Linux/Android内核漏洞挖掘的人,应该都知道Syzkaller这款神器,发现超过2500个内核bug,它是基于代码覆盖率+API调用模板来Fuzzing内核的工具,对于发现崩溃的漏洞,还能自动生成C代码帮助复现,是由Google的Dmitry Vyukov开发的,已在Github上开源多年(https://github.com/google/syzkaller)。

这次作者用syzkaller fuzz USB驱动共发现了80+个bug,它先开启kcov去收集代码覆盖率信息,写了两个usb操作的描述模板(vusb.txt用来生成usb消息,vusb_ids.txt用于提取与USB设备驱动相匹配的USB ID列表),ppt里面有链接,所有的usb fuzzer代码都已经嵌入到syzkaller项目里面了

image-20190223130949191

整个syzkaller的使用过程就是先去寻找内核的攻击面,然后构造api调用模板,剩下交由syzkaller基于代码覆盖驱动的方式去Fuzzing,有点类似api fuzzing。只是这里作者又写了个USB内核模块,方便通过用户层发送USB消息去测试。

作者还专门搞了个树莓派来重现漏洞,演示通过USB去让Windows/Linux系统崩溃。

FuzzIL: Guided Fuzzing for JavaScript Engines

image-20190223135223721

这议题最大的亮点在于:自定义一套中间语言IL,通过IL可以翻译成JS代码,然后通过变异IL来生成JS代码,与以往基于JS语法模板生成代码的方式不同。

image-20190223135445955

直接通过一行行删除IL的方式来验证是否崩溃或产生新路径,以此用来精简样本。

整个Fuzzing过程如下:

image-20190223140416987

作者未来会在github上开源(https://github.com/googleprojectzero/fuzzilli),拭目以待。

结语

访问 https://github.com/riusksk/SecConArchive可获取议题的打包资料,除上述推荐的议题资料外,还有3个议题,包括”Bypass_Windows_Defender_ASR“、”macOS-How to Gain Root with CVE-2018-4193“,以及”OSX Privileged Helper Tool“,有兴趣的同学自行下载阅读。

image-20190223141538809