伴随着上海的秋风和身边的弹窗,我们仍力争撑起一台线下技术交流盛会,让每一个来这里的极客们依然憧憬着诗和远方。没有如期,MOSEC 2022还是来了!
接下来,我们将回顾一下白天会议期间的六个主议题和六个BaiJiuCon上研究人员酒后吐的真题:
1. Understanding the Apple IO80211Family Subsystem Vol. 2
议题的演讲者,薮猫科技CEO的王宇,已经是MOSEC的老朋友了。这次展示的内容可以说是他在MOSEC 2020上分享议题的续篇,即针对苹果重构后IO80211Family组件的研究方法及成果展示。
他随后介绍到寻找新的攻击面时既需要静态分析也要辅之以动态调试,因而除了参考MacOS/iOS公开的工具和SDK,他还搭建了内核的远程调试环境,方便快速定位通过fuzzing发现的漏洞成因。此外他也成功地将其一直维护的开源项目kemon移植到了Apple Silicon平台,并添加了能够反馈代码覆盖率的模块。接下来,他通过demo展示了如何在Ventura 13.0 beta 4 环境下的进行内核调试和fuzzing。
他这套fuzzing环境让他在重构后的IO80211Family组件中找到了多个安全漏洞。此外,王宇还分享了两个品相非常高的漏洞,这两个漏洞在2020年演讲时因尚未修复而不能细说。一个是任意地址写,另一个竟然是经典的栈溢出漏洞(据推测,栈溢出是苹果在整合上下游代码时被迫引入的)。而且有趣的是,栈溢出、任意内存写等简单粗暴的漏洞,竟然仍然存在于重构后的版本之中,且仍能成功利用。王宇随后分享了一些他发现的漏洞细节,其中不乏栈溢出,类型混淆,越界读写。
期间王宇多次分享了他在漏洞研究过程中的经验:比如要特别关注操作系统的新特性,进而发现新的攻击面;测试时尝试构造极限条件也很有可能发现新的问题;安全补丁也是值得关注和审计的范畴。
2. La La Land: Theory and Practice on Large-Scale Static Bug Hunting for Android Systems
第二个议题的演讲者是Flanker,他目前是獬豸安全实验室的负责人。他为大家带来的议题主要探讨了Java程序静态分析引擎打造过程,理论与实践。
首先他分析了当下静态分析这一技术其学术界和工业界的现状:主流的做法是将指针分析和调用图生成两者结合,其短板在于过拟合与调用路径的缺失。为此他利用IFDS算法针对Android平台下的类似问题提出了完整解决方案RIDE。在阐释这个方案时,他重点选取了了normal flow, call flow, return flow, calltoreturn flow四种场分析了他自己的实现策略。RIDE整体的设计思路可以分成三层:前端处理ROM解包;APK,JAR等包含Java代码的文件分析;反编译处理服务,即真正负责组件代码逻辑扫描的模块。
最后Flanker选取了四个来自三星和小米的序列化对象处理与访问控制的漏洞上进行了详细的分析:如错误的判断条件导致Parce错位的逻辑漏洞,TOCTOU导致的任意应用安装漏洞,并针对该漏洞分享了race写文件绕过scoped storage的利用思路。
3. MediAttack - break the boot chain of MediaTek SoC
上午最后一个议题是由盘古实验室的安全研究员张雪雯带来的,她讲解的内容围绕利用Bootrom漏洞击溃MTK安全启动链展开。值得一提的是,从2020年的《Attack Secure Boot of SEP》,2021年的《checkm30》,直到2022这次的议题,这已经是盘古实验室第三次在MOSEC舞台上展示Bootrom相关漏洞及其利用了。
张雪雯首先介绍了MTK安全启动链流程和Bootrom在这一链路中的决定性地位,紧接着她介绍了Preloader的相关漏洞和利用方法。该漏洞可以在MTK手机的USB Download模式下触发,问题出现在Write/Read指令地址范围白名单校验代码中。由于校验时的整数溢出,Write/Read指令可以从高地址开始一路修改到0地址,即Bootrom所在内存,进而实现Dump Bootrom内存或代码执行。
然后,她又分析了随之发现的另外两个出现在Bootrom中的漏洞,漏洞都位于Download模式中。第一个漏洞的根本原因在于USB协议控制传输的函数表索引值存在小范围的越界,通过Bootrom命令可以在cert中部署shellcode,当越界跳转到usb_recv_buffer中指向cert的指针就可以实现代码执行了。第二个Bootrom的漏洞则是全局变量溢出导致任意地址顺次设置为0和2,如果借此修改地址检查白名单的话即可实现Bootrom阶段的任意读写,进而修改函数指针实现代码执行。
最后展示的demo中,她通过Bootrom漏洞绕过MTK安全启动保护在Redmi上加载了自定义的操作系统。此外她还重点介绍了后利用过程中,设备固件提取和修改的技巧:如何使用SP Flash Tool中MTK的官方DA文件;如何patch da不同阶段的代码;如何patch LK和boot state绕过AVB等各类验证。
4. Understanding Mach IPC
下午第一个议题是赛博昆仑实验室的brightiup带来的超硬核议题,主要讨论的是苹果操作系统中Mach IPC,Port等关键架构以及他近期在其中找到的漏洞。
IPC是XNU中Mach子系统最核心的模块之一,MacOS/iOS进程间及进程与内核间绝大多数通信都经由Mach IPC完成。他最初是受到GP0分享的博客和MOSEC 2021王铁磊分享的Port类型混淆漏洞启发,开始不断加深对这个核心机制的理解。他首先详细阐述了Mach IPC的实现,并分享了在读代码的过程中发现的多个通过条件竞争触发的union类型混淆漏洞。当他在研究过程中发现beta版本的相关代码变化较大之后,就展开了新一轮的分析并发现了double fetch的漏洞。层层深入后,又发现更底层的研究对象turnstile,并在其中发现了多个UAF和OOB。
brightiup在分享过程中,特别提及到锁是XNU对象管理中极其关键但又特别容易被忽略的研究对象,一旦时机和位置不对都容易引入安全问题。
5. The Tour Of Coverage Guided Fuzz For An IOT Micro Kernel System
带来下午第二个议题的是来自华为奇点实验室的安全研究员刘深荣和刘鹏举。相对于Android和iOS这些耳熟能详的系统,本议题讨论的系统对于一般研究者还是比较陌生的,因而他们开场就详细介绍了该操作系统的方方面面,包括基于NameSpace实现的组件隔离机制,用户态文件系统,微内核中的虚拟内存管理实现以及应用沙箱的设计。
对于一个全新的操作系统,为了更方便地对其内核进行模糊测试,他们为其适配了syzkaller。通过在内核中增加覆盖率反馈相关的syscall,可以使其较好的支持syzkaller进行模糊测试。测试过程中他们发现了多个内核crash。议题最后他们挑选了一个race导致的UAF进行了漏洞利用过程的展示。
6. Feat(My First EV)!: Add Support for App Store
最后一个议题的演讲者是盘古实验室的安全研究员闻观行,他的议题主要是围绕如何利用漏洞远程获取电动车娱乐系统的控制权展开的,演讲中他试图还原研究中的思考过程,带领听众云实践一次车机的破解实操:即如何从黑盒一无所知状态,通过探索攻击面,找漏洞,写利用,Dump系统代码,并往复这一过程直到拿到Root权限。
他首先介绍了2021车入手后的第一直观感受:高度裁剪的Android系统和寥寥无几的内建应用让系统简洁流畅;但相对地,对于研究人员来说,进入系统的入口点也就非常有限。他研究的初衷也就和标题一样:仅仅是想在车内装个自己的APP。
在USB/Hotspot/应用入口的常见入口尝试无果后,闻观行只能选择硬刚webview和内核漏洞。在老版本系统上,他利用CVE-2020-16040 + CVE-2019-2215获取了娱乐系统的Root权限,并在娱乐系统内安装了第三方应用市场。第一轮尝试中,虽然编写利用的过程历时良久,但半年之后待他升级到最新版本后再次尝试利用CVE-2021-38001 + CVE-2021-0399进入系统时,此前走过的弯路和对系统内部积累的认知让新的探索过程事半功倍。
由于这几个漏洞都有公开的利用,他着重介绍的是自己在车内环境调试漏洞时踩过的坑,如指令集的确定,模拟环境的搭建等问题。另外,由于车载内核开启了kmalloc-64,CVE-2021-0399不能依原作的利用方法,闻观行介绍了一种新的利用方法:即通过unix_bind占位布局实现错位kfree,进而构造自包含的freelist实现内核任意写。
最后,他介绍了车载系统依托Nvidia Drive OS实现的虚拟机架构,以及如何同QNX子系统进行通信,并在demo中演示了最新版本系统下远程获取Root权限控制门锁车窗后备箱等车内外的硬件设备。
茶歇过后,大家再次返场,此前在BaiJiuCon的白板上写下议题的研究人员们开始陆续登台一边喝茅台一边用简短爆炸的议题把会场气氛烘至高潮。
第一个神秘人分享的是苹果A10处理器上SEP芯片的漏洞blackbird,延续了MOSEC 2020上徐昊公开的SEP漏洞研究。他详细解释了PongoOS开源但没有公开资料的新漏洞,并且演示了如何破解iPhone 7 iOS 15的锁屏密码。
第二位出场的是今天的演讲者,盘古实验室的闻观行,他演示了如何利用USB层面的漏洞获取某品牌手机的Root权限。
第三位出场的仍然是一个神秘人同学,他介绍了一下自己随手发现了一个Linux 内核的double fput,并分享了他是如何借助io_uring子系统编写利用提权的。他随后演示了这使用这一通用漏洞在最新的ubuntu上的获取Root。
第四位神秘人同学分享的是他发现的chrome浏览器v8引擎的漏洞。漏洞发生于编译器优化的instruction selection阶段,非常复杂,非常深奥。
第五位神秘人同学分享的是如何通过四行代码就能获取手机Root的漏洞,不得不说他运气不错,新机买回来当天就搞定并赚到了厂商当时的特别档Bounty 。
最后一个分享来自今天的演讲者王宇老师[老师好],揭秘了他对苹果蓝牙通信协议的深入探索。王宇老师滔滔不绝,而且酒量相当了得!
路有多远就走多远,
期待明年的再次相聚!
声明:本文来自MOSEC,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。