BlackHat USA 2021 洞察(三):议题技术解读
1、CHIERI ISA 安全分析
议题名:Security Analysis of CHERI ISA
CHERI(Capability Hardware Enhanced RISC Instructions,功能硬件增强的RISC指令)利用新的体系结构功能扩展了常规的硬件指令集体系结构(ISA),从而实现了细粒度的内存保护和高度可扩展的软件分区。CHERI内存保护功能允许将历史上内存不安全的编程语言(例如C和C ++)进行修改,以针对许多当前被广泛利用的漏洞提供强大,兼容和有效的保护。它是在2020年11月由剑桥大学联合ARM公司发布的,基于Morello开源硬件平台设计的。
在CHERI中最重要的一个特性叫Capability,属于硬件级功能,软件无法修改,如上图所示,包含1-bit tag(用于标记区分capability中的非结构化数据)和128-bit capability(标记指针可访问的内存范围,权限以及对象类型等信息)。通过capability替换指针,以此提高内存安全性。比如下面的栈越界问题,执行的话就会直接抛异常退出。
针对这种内存越界问题看起来是有效的,但像UAF、类型混淆、堆栈未初始化等问题仍可以被利用。作者针对cheribsd(基于CHERI构建的FreeBSD原型)进行研究,发现两个漏洞可用于绕过限制实现漏洞利用:
默认capatility length由堆、栈、全局内存分配器设置,但JSCell 堆分配除外,所以可以利用漏洞去获取JSCell堆内存,而JSCell头引用到StructureID,在苹果系统obej-c利用上可通过StructureID伪造对象实现利用。
JSC漏洞利用场景下,能够复制栈上的capability到其它ArrayBuffer,进而篡改其中的capability table(类似GOT,包含libc.system指针)指针,令其指向攻击者控制的ArrayBuffer,从而达到RCE。
在C/C++这种主流语言中,内存破坏漏洞是其面临的主要安全问题,通过硬件来提升安全性防御性能,特别是在业务无法快速修改代码修复的情况下,可以有效地提高漏洞攻击成本。像苹果之前也基于芯片提供PAC能力,通过硬件来通用地防御内存破坏漏洞或许是未来一种趋势。
2、Alcatraz:Hypervisor沙盒设计与实现
议题名:Alcatraz: A Practical Hypervisor Sandbox to Prevent Escapes from the KVM/QEMU and KVM-Based MicroVMs
介绍了Kata、Firecracker和gVisor安全容器方案,Kata 容器使用 KVM/QEMU 来隔离容器,亚马逊 Firecracker 创建的 microVM 使用基于 KVM 的轻量级管理程序进行隔离,Google gVisor 也使用带有用户级内核的轻量级管理程序实现隔离。不过作者重点还是讲虚拟机逃逸,因为他觉得逃出容器后,想扩大攻击面还是得逃出虚拟机。他收集了历年来QEMU与KVM的CVE漏洞,总结出3条虚拟机逃逸路径,从而得到3种攻击行为用于指导虚拟机逃逸防御方案的设计:
从VM到Host创建进程
Host内核代码被篡改
Host User到root提权
最后设计并实现一款叫 Alcatraz 的Hypervisor 沙盒,用于阻止KVM/QEMU虚拟机逃逸,并且已开源 https://github.com/kkamagui/alcatraz 。Alcatraz由Hyper-box和定制化的Linux内核组成,Hyper-box是可加载的内核模块,防御虚拟机逃逸的核心,利用Intel VT技术实现对内存和寄存器的保护,阻止未授权行为(就是上面3种攻击行为)的系统调用,为KVM实现VMX指令模拟,就为了将KVM ring-1降为ring-0,因为ring-0 KVM无法执行VMX指令,同时利用VT特性提升性能;而定制化的Linux内核只有一个x86_64的系统调用接口以减少攻击面。
3、Pwning iOS 14
议题名:Hack Different: Pwning iOS 14 with Generation Z Bugz
2020年天府杯上,蚂蚁光年实验室pwn ios 14所利用的漏洞:
1、iTunes Store App 客户端XSS
利用itmss:// url scheme结合data url编码去利用,从而达到任意JS代码执行:
itms://<redacted>&url=data:text/html;,%3Cscript%3E%20type%3D%22application%2Fjavascript%22%3Epayload%20js%20%3C%2Fscript%3E
再利用JS API去获取敏感信息,比如设备指纹、本地文件、Apple ID,甚至枚举APP和执行App,弹个计算器等。
2、利用Objective-C类型混淆漏洞泄露地址绕过ASLR
iTunes.windows可通过iTunes.scriptWindowContext和iTunes.setScriptWindowContext_进行set和get操作其成员变量,可先分配任意object对象给它再读取,当iTunes.window在处理obj-C对象时,若对象无法识别selector,则会抛异常泄露对象地址,借助JS就可以读取出来:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SUScriptWindowContext tag]: unrecognized selector sent to instance0x10b15a470'
通过读取false对象,即可得到__kCFBooleanFalse对象地址,它位于CoreFoundation库中,借助它就可以泄露dyld_shared_cache基址,从而绕过ASLR。
3、UAF漏洞
js可以动态调用dealloc去释放内存,所以先分配对象给变量保存,再调用deallo释放,变量就成了对悬挂指针的引用,一个UAF漏洞就出来了。看作者介绍的,第2个漏洞跟这个UAF被苹果算作同一个漏洞。
最后介绍如果利用上述漏洞绕过iOS 14下的PAC和APRR实现任意代码执行。先借助iTunes.makeXMLHTTPStoreRequest去分配SUScriptXMLHTTPStoreRequest对象,再利用SUScriptFAcebookRequest类的addMultiPartData:withName:type:方法去(js上对应iTunes.createFacebookRequest(xx).addMultiPartData)设置可控长度和内容的NSURL数据,用于填充被释放的内存空间,实现fakeobj构造。
iOS 14开始已经对isa指针引入PAC保护,但从iOS 14.5开始才检查,之前都没做检查,所以可以利用这个空窗期采用Project Zero在iMessage中所用的方法:SeLector-Oriented Programming绕过PAC,即通过伪造包含一连串NSInvocation对象的NSArrary,通过@selector(invoke)参数调用makeObjectsPerformSelector:实现任意的Objective-C方法的调用。接下来通过前面绕过ASLR的漏洞实现内存任意读,用来绕过苹果对NSInvocation随机数检查(用于针对内存伪造对象的检查)。最后结合堆喷实现利用,作者也给出不用堆喷的方法,有兴趣的同学自己去看吧,这越写越多了。
iOS通过APRR启用每个线程的页面权限,通过专用CPU寄存器将页表条目权限映射到它们的真实权限来实现的,使得任何页面都无法同时具有可写和可执行权限。作者是利用Webkit在JIT编译生成机器码时会用到内联函数performJITMemcpy,它可以将任意代码复制到JIT区域,通过它就可以绕过APRR写入任意机器码:
// set writable
pthread_jit_write_protect_np(0) ;
// write shellcode
memcpy( jit_function , code , size );
// set executable
pthread_jit_write_protect_np(1) ;
原作者在公众号上也写过详细的利用介绍,比blackhat ppt写得更加详细:
Mistune 漏洞利用:滥用 Objective-C Runtime 过 PAC
4、Chrome漏洞挖掘与利用
议题名:Put in One Bug and Pop Out More: An Effective Way of Bug Hunting in Chrome
像Chrome这种难度比较大的目标,如果不能找到一个新的攻击面,靠Fuzz可能收获比较小,且有可能撞洞,有不少人都通过代码审计去挖。尤其是CodeQL的出现,更加简化这种工作,非常适合定制化规则去辅助漏洞挖掘,哪怕是一些逻辑漏洞,也可以支持,撞洞也会少一些。最近2年来,特别是一些难度大一些的主流产品,似乎不少安全研究人员开始尝试分析历史漏洞,梳理出漏洞模式,借助CodeQL制定规则去扫描,本议题也是如此思路。通过分析3种类型的历史漏洞:RenderFrameHost issue、Error return issue、WeakPtr Optimization issue,总结出漏洞模式,借助CodeQL制作规则去扫描,有一次从363条扫描结果中挖3个漏洞,其中一个被用在天府杯上。最终,在Chrome上挖到24个漏洞,已获得11个CVE,说实话,这效果也太好了。但像Chrome这种目标,即使扫出来,如果不花时间去阅读理解源码,也比较难发现,这就考验你去代码的理解程度了。但不得不说,分析历史漏洞总结出漏洞模型,借助CodeQL制定规则去挖掘漏洞,确实是当前的一种方向,因为同一个人写出个漏洞,那么他就有可能在其他地方搞出类似漏洞出来,这就有了大家常说的变形分析(Variant Analysis),即根据历史漏洞挖掘其它相似漏洞。
5、飓风山竹:远程通杀Root利用链
议题名:Typhoon Mangkhut: One-click Remote Universal Root Formed with Two Vulnerabilities
来自360 alpha lab的议题,介绍如何利用CVE-2020-6537 V8漏洞实现RCE,再结合CVE-2020-0423 Android Binder漏洞进行root提权,进而实现Chrome 沙盒逃逸。
第一个v8漏洞CVE-2020-6537是Promise.allSettled()上的一处类型混淆漏洞,它会返回一个所有给定promise已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的promise结果。每解决完一个输入的promise,remainingElementsCount就会减1,当它为0时,就会返回一个JSArray数组。
但如果能够同时调用resolveElementFun和rejectElementFun,就会令remainingElementsCount-2,可以更快返回JSArray,然后通过赋值整数将JSArray更改为NumberDictionary,造成类型混淆,再将其转换成越界读写进行漏洞利用。不过ppt里面没有给出完整poc,尝试上chrome issue去找找poc/exp,发现没权限(https://bugs.chromium.org/p/chromium/issues/detail?id=1105318),2020年的漏洞到现在都还没公开,只能就此作罢。
第二个漏洞CVE-2020-0423 Android Binder UAF漏洞,网上也有人分析过:https://www.longterm.io/cve-2020-0423.html,并附有poc。漏洞本质上是多线程操作进行条件竞争导致的UAF:
1、先发送BINDER_TYPE_BINDER命令的transaction给binder,binder会创建包含binder_work的binder_node附加到thread->todo表中,并发送给receiver接收者;
2、然后发送BINDER_THREAD_EXIT命令消息去中断通讯,然后调用binder_relsease_work将binder_node从thread->todo表中删除,释放节点;
3、receiver为响应第一步的transaction,发送BC_FREE_BUFFER(ppt里面写错了)命令去释放binder_node,但它已经被释放了,最终导致UAF。
利用上,先利用漏洞binder_release_work转换成double free,然后采用sendmsg和signalfd来做稳定的堆喷;再通过binder_thread_read读取seq_file结构(linux文件系统操作接口)的op指针,从而获得泄露的内核地址绕过kaslr;再劫持freelist指针,然后利用KSMA攻击方法实现root权限(https://i.blackhat.com/briefings/asia/2018/asia-18-WANG-KSMA-Breaking-Android-kernel-isolation-and-Rooting-with-ARM-MMU-features.pdf),即向内核页表中写入一项描述符,供用户态可以随意读写内核。
BlackHat USA 2021 洞察(三):议题技术解读相关推荐
- BlackHat USA 2021 洞察(一):议题技术解读
周末抽空学习下BlackHat USA 2021的议题,对自己感兴趣的议题学习下.经常记录下,保持对行业动态的关注,有时突然想起来某个思路在外部会议上见过,可以回头查阅下,好多次遇到这种情况.打算先分 ...
- BlackHat USA 2022议题解读:蓝牙Mesh中的安全攻击面
作者:百度安全-AIoT安全团队 Han Yan,Lewei Qu,Dongxiang Ke 蓝牙Mesh是智能家居.工业控制等场景的理想解决方案,相关标准也已得到各大芯片厂商的支持,但其软件实现的安 ...
- Black Hat USA 2021主议题介绍
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士 2021年美国黑帽大会于当地时间7月31日至8月5日举行,议题包括19个领域,包括:人工智能.机器学习和数据科学,AppSec,应用安全, ...
- Gartner ABI报告技术解读:2021 BI 与数据分析魔力象限
Gartner ABI报告技术解读:2021 BI 与数据分析魔力象限 导读 Gartner 是全球权威的 IT 研究与顾问咨询公司,20 年以来,Gartner 的研究与咨询服务一直被认为是客观技术 ...
- 学习下 BlackHat Asia 2021 大会议题
BlackHat Asia 2021会议已经结束,相关议题资料也放出,刚好这两天周末抽空学习下,共39个议题,覆盖范围还是比较广的,虽然议题质量不如USA主会场,但多少还是有一些值得学习的内容,我只挑 ...
- 独家下载!2021前端热门技术解读
简介:<2021前端热门技术解读>来啦,你关注的前端技术热点都在这里,快来下载吧! 2021 前端工程师应该关注哪些技术?阿里巴巴前端委员会重磅推荐! 复制该链接到浏览器完成下载或分享:h ...
- 华为云大数据存储的冗余方式是三副本_华为TaurusDB技术解读(转载)
近日,华为云自研关系型数据库 Taurus 公开亮相.作为华为云自研的最新一代云原生分布式数据库,Taurus 完全兼容 MySQL 8.0,采用计算与存储分离.日志即数据的架构设计,支持 1 写 1 ...
- 蚂蚁集团三项技术方案入选“2021年信息技术应用创新典型解决方案”
近日,由工业和信息化部网络安全产业发展中心(信息中心).信息中心技术创新应用协作组主办的"2021年信息技术应用创新典型解决方案"在北京经开区信创园成功举办首场技术交流与实践分享活 ...
- 2021金三银四,啃完这35个Java技术栈,冲刺年薪百万!
前言 2021金三银四,年假准备跳槽的小伙伴注意了,小编在这里为你们准备了Java后端必备的35个专题面试技术栈!都是小编在各个大厂总结出来的面试真题,小编这次分享涵盖了Java后端面试必问的35个技 ...
最新文章
- 实验6 触发器的使用
- 百度飞桨全新升级:重磅推出PaddleHelix平台、开源框架V2.0RC,硬件生态路线图全公开...
- Matlab scatter 如何显示不同颜色点状
- centos普通用户修改文件权限_centos修改文件及文件夹权限
- 安装最新Spree出现error:spree_core requires will_paginate (= 3.0.pre2, runtime)
- 周记随笔-php5.6与apache2.4的windows32安装
- 简易航空订票系统_四川航空APP全新升级改版,三大亮点提升订票体验
- 通过怒气系统的hongjin2
- linux 中断分上下部分的原因
- android MD5 SHA1
- 分组(recyclerview嵌套)
- php.net对称压缩解压缩探讨
- 【Linux】解决用vi修改文件,保存文件时,提示“readonly option is set”
- Redis的lua脚本
- 酷狗.kgtemp文件加密算法逆向
- 洛谷P4939 Agent2(树状数组差分)
- win11关闭开机密码的方法
- 东子破解修改oracle10g的最大连接数
- android中文字体加粗,android TextView设置中文字体加粗实现方法
- 对绝对地址赋值的问题