年前曾在微博上推荐过OffensiveCon 2019大会议题,议题列表与介绍可参见官网(https://www.offensivecon.org/agenda/),很多专注于漏洞挖掘与利用的干货分享,目前只有部分议题ppt公开,通过点击文末的“阅读原文”可打包下载(包含8个议题),包括ppt、paper和code。
会议结束后,Twitter上赞声一片,议题质量很赞。
本文主要聊聊已公开的一些议题,学习下思路。
议题列表
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)子系统上,主要方便从本地读取数据进行离线浏览,访问速度更快,还能缓解服务器压力。
AppCache位于沙盒之外的高权限进程browser,沙盒内低权限的renderer进程通过发送IPC消息与browser进程交互的,当AppCache出漏洞时,就有可能逃逸出沙盒。
漏洞成因
这次的ppt写得比较模糊,没那么清楚,还是直接看patch diff:
移动CancelUpdate()
函数到newest_complete_cache_=nullptr;
之后,直接看看CancelUpdate里面的逻辑:
在调用AppCacheGroup::RemoveCache
清除缓存时,newest_complete_cache_
指向的是被销毁的对象,所以后面才要把它置空,但在销毁之前调用了CancelUpdate
=>
AppCacheUPdateJob::~AppCacheUpdateJob
=> AppCacheGroup::SetUpdateAppCacheStatus
=> AppCacheHost::OnupdateComplete
=>
SetSwappableCache
最后的SetSwappableCache
用于设置新的交换缓存(swap cache),会引用到newest_complete_cache_
,而此时它还未被置NULL,导致出现Use After Free漏洞。
漏洞利用:
【泄露地址】:使用与
AppCache
对象大小相同的net::CanonicalCookie
对象来占用释放对象的内存,而CanonicalCookie
对象开头是个cookie名称,即字符串指针,再从浏览器中读取cookie信息来达到信息泄露的目的,从而拿到可控数据的堆地址绕过ASLR。
【代码执行】:使用与
AppCache
对象大小相同的Blob
对象对占用释放内存,再伪造AppCacheGroup
对象,当它析构释放时,在~AppCacheGroup
中会调用到已被填充控制的虚函数指针,再结合ROP绕过DEP,从而达到代码执行。
整个过程还是需要自己动手调试一遍才比较清楚,估计足够调上几天了,国内似乎也没有一遍完整的文章分析过该漏洞的利用细节,期待有人分享。
3D Accelerated Exploitation
该议题主要介绍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
搞过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项目里面了
整个syzkaller的使用过程就是先去寻找内核的攻击面,然后构造api调用模板,剩下交由syzkaller基于代码覆盖驱动的方式去Fuzzing,有点类似api fuzzing。只是这里作者又写了个USB内核模块,方便通过用户层发送USB消息去测试。
作者还专门搞了个树莓派来重现漏洞,演示通过USB去让Windows/Linux系统崩溃。
FuzzIL: Guided Fuzzing for JavaScript Engines
这议题最大的亮点在于:自定义一套中间语言IL,通过IL可以翻译成JS代码,然后通过变异IL来生成JS代码,与以往基于JS语法模板生成代码的方式不同。
直接通过一行行删除IL的方式来验证是否崩溃或产生新路径,以此用来精简样本。
整个Fuzzing过程如下:
作者未来会在github上开源(https://github.com/googleprojectzero/fuzzilli),拭目以待。
结语