POC 2022 的 Apple 神经引擎 ( @_simo36 )
https://github.com/0x36/weightBufs/blob/main/attacking_ane_poc2022.pdf
Apple Neural Engine 是 Apple Silicon 上用于机器学习推理的节能高吞吐量引擎的名称。Wish Wu之前对此进行了安全研究,描述了软件和硬件堆栈中的架构和不同组件。_simo36 的研究设置了用于与引擎交互的框架和工具以及所使用的 IPC 通信机制的背景。然后描述了用于构建机器学习模型的编译器和所使用的管道。然后记录内核接口及其所有攻击面,并显示从用户区到内核,然后到固件的直接路径。
_simo36 在 ANE 架构的不同组件中发现了大量漏洞。他首先描述了他发现的问题的多个不同类别的漏洞(OOB 写入、整数溢出、不正确的索引验证、签名检查绕过等)。
然后,讨论将讨论通过将 4 个不同的漏洞链接在一起来利用和构建任意读/写原语。
他还在这里发布了它的漏洞利用:https://github.com/0x36/weightBufs
Zer0con 2022 的 iOS/macOS 内核战壕故事 ( @jaakerblom )
https://github.com/potmdehex/slides/blob/main/Zer0Con_2022_Tales_from_the_iOS_macOS_Kernel_Trenches.pdf
本演讲涵盖了 macOS/iOS 中最近修补的一些漏洞。具体来说,IOMobileFramebuffer 中存在多个问题,XNU 内核本身也存在一个问题。
讨论的漏洞是(在 IOMobileFramebuffer 中):
-
CVE-2021-30883 - 整数溢出导致 set_block 选择器发生堆溢出
-
CVE-2021-309XX - set_block 选择器也存在多个漏洞,并且可在 Safari 中使用,直至 15.2 beta 3。
该演讲讨论了 IOMobileFramebuffer 主要是如何将数据传递到 DCP 硬件的包装器。错误实际上存在于 DCP 固件中,而不是内核代码本身。然后,他讨论了 DCP 缺乏缓解措施的弱点,以及 DCP 的利用如何导致传统的内核读写原语。
有关这方面的更多信息,请参阅 Ian Beer 的演讲(如下所述)。
-
讨论的下一个漏洞是 CVE-2021-30937,一个核心 XNU 错误。setsockopt 中的一组赛车错误,锁定不当会导致 UAF。
零号项目描述了此问题跟踪器条目中的错误:https://bugs.chromium.org/p/project-zero/issues/detail?id=2224&q=CVE-2021-30937&can=1。
然后,演讲重点讨论从该错误中获得的原语(字节复制原语)以及如何将它们用于利用。纵观不同版本的iOS,可以使用不同的技术来进行喷射。因此,本节讨论讨论最新的通用内核 R/W 原语:
-
ipc_端口
-
pipe buffers
-
UIO
-
IOSurfaceClient(Simo 也使用的方法)。
然后,演讲将讨论漏洞开发人员进行漏洞利用所需的不同“能力”,例如:
-
如何 kfree 和 iOS 15。
-
如何知道受控内核内存在哪里。
下一节详细介绍了以下 CVE 的利用:
-
CVE-2021-30883 - 使用 IOSurfaceClient 技术(漏洞)
-
CVE-2021-30937 -multicast_bytecopy
最后一部分重点介绍 iOS 15.2-15.5 上最新的内核缓解措施以及这些措施如何阻碍攻击者。
了解 MOSEC 2022 的 Mach IPC ( @realBrightiup )
https://github.com/brightiup/Trekking/tree/main/Slides
本次演讲从零号项目问题 2107 的案例研究开始。十字转门内的类型混淆导致内核将 ahost_notify_entry
视为ipc_port
.
第二个案例研究来自Tielei,其中存在另一种类型混淆,其中可能会误导内核相信特殊回复端口中绑定的目标端口是 类型ipc_importance_task_t
。
从这些问题中可以得出一些关键结论。
然后,演讲涵盖了 mach 端口和 IPC 的背景知识(以及权限如何工作)。然后,演讲深入探讨了 XNU 内核如何管理 IPC、锁的重要性以及不同发送/接收权限的详细信息。
我不会详细介绍这一点,因为 Mach IPC 很复杂,而且幻灯片比我能更好地解释它。
来自 Hexacon 2022 的 AppleAVD ( @isciurus @NikitaTarakanov )
https://github.com/isciurus/hexacon2022_AppleAVD/blob/main/hexacon2022_AppleAVD.pdf
本次演讲是关于称为 AppleAVD 的视频解码子系统。演讲首先概述了架构以及组件如何组合在一起。演讲的主要焦点是内核组件 AppleAVD kext。演讲将分析这个 kext,即为解析内核空间中的媒体而实现的解码器。分析了 kext 的攻击面及其入口点和用于解码/处理媒体的方法。
然后,演讲将讨论之前在 AppleAVD 中发现的漏洞以及其他研究人员发现的问题。然后,演讲讨论了他们在 kext 中进行分析和错误搜寻的过程(通过动态和静态方法)。
然后他们讨论了模糊解码器的过程。
在撰写本文时,他们似乎没有通过模糊测试在解码器实现本身中发现任何漏洞。然而,他们发现CVE-2022-46694是外部 kext 逻辑中的一个漏洞,现已由 Apple 修补。
Fugu15 - OBTS 深入探讨 iOS 15 漏洞利用 ( @LinusHenze )
本演讲涵盖了 iOS 15(包括 15.2 及更高版本)的越狱创建。创建越狱变得更加困难,以前一个内核漏洞就足够了,现在还需要绕过 PAC 和 PPL。该演讲描述了 Fugu15 中使用的漏洞、内核漏洞利用的工作原理以及 PAC 和 PPL 绕过方式。它还涵盖了 15.2 中引入的新缓解措施、这些措施对越狱有何影响以及 Fugu15 中如何绕过这些措施。
Youtube 视频:https://www.youtube.com/watch?v=rPTifU1lG7Q
代码:https://github.com/pinauten/Fugu15
对所使用的四个漏洞的说明如下:
fastPath(代码签名绕过)
-
由证书签名的 CMS
-
CoreTrust 确保 CMS blob 有效且哈希值与代码签名匹配
-
向 AMFI 返回标志以指示证书类型。
-
只要 CMS blob 看起来有效,即使签名不受信任(不是漏洞),CT 也会返回成功。
-
如果 CT 验证失败,AMFI 会拒绝,否则会检查 CT 标志
-
如果其应用程序商店已签名,则这将被设置为有效。
-
然后,用户空间 amfid 有机会验证签名者是否可信。
漏洞在于标志是直接从证书中获取的(证书中包含 AppStore OID)。不对签名者进行进一步检查。
这是一个回归(iOS 13 及更低版本不受影响)。
** installHax -当时尚未完全修补。
此漏洞利用的代码在这里
这会在设备上执行任意代码。
oobPCI(任意内核读/写)
-
DriverKit 中的漏洞(用户空间中的驱动程序)。
-
代码签名绕过以授予 DriverKit 权利。
-
对 PCI 的低级访问(用于读取和写入 PCI 设备)。
-
攻击者控制内存读/写的偏移量(不检查以确定其是否在映射内)。
-
用于映射的 PCI 内存地址是确定性的。
开发:
-
猜测 physmap 的偏移量 > 查找 boot args 区域 > 扫描初始页表 > 确定起始地址 physmap 和当前读取地址的偏移量。
-
由于physmap位于L3边界,可以通过对Physmap的偏移来计算PCI区域的低25位。
-
然后我们可以扫描RAM找到PCI内存对应的IOMemoryMap(使用前面计算的低25位)来确定PCI内存起始地址,并根据它和vtable确定内核滑动。
然而,在 15.2+ 上,仍然存在阻碍充分利用 arb 内核读写的缓解措施。Linus 然后继续谈论他如何通过以下两个漏洞绕过这些漏洞。
此漏洞利用的代码在这里
badRecovery(CFI/PAC 绕过)
通过线程故障处理程序绕过 CFI/PAC (CVE-2022-26765)。
提醒一下,指针验证码是指针的加密签名,用于防止指针/数据被修改。它们还用于实现控制流完整性(以防止控制流劫持)。线程错误处理程序是一种在数据访问期间处理预期错误的方法。当发生数据中止故障时,内核跳转到处理程序。
这些通常用于将数据复制到内核空间(copyin)之类的情况,如果没有设置线程错误处理程序来处理该地址,则地址通常会导致恐慌。
Linus 确定了一个函数,它执行正常返回而不是经过身份验证的返回(并且您不能假设链接寄存器具有预期值并且尚未被修改)。
我不会在这里详细介绍利用的细节,因为利用的过程在视频记录中得到了很好的解释。
tlbFail(PPL 绕过)
通过不正确的 TLB 刷新绕过 PPL
该链中的最后一个漏洞以及绕过最后一个缓解措施的漏洞是绕过 PPL。回顾一下 PPL 是页面保护层,它保护签名的用户空间代码和一些内核数据不被修改。它的权限级别比内核更高。
PPL 还管理页表以防止内核映射受 PPL 保护的数据,并提供一些映射和取消映射内存的方法(但会进行检查以确保您不会尝试映射受 PPL 保护的内存)。
嵌套页表
-
映射到每个进程的大型 DYLD 共享缓存
-
页表在多个进程之间重用(共享)以节省内存。
翻译后备缓冲区
-
缓存虚拟地址到物理地址的转换
-
更改页表条目时需要刷新 TLB,以防止 CPU 使用缓存的条目。
-
TLB 条目具有地址空间 ID (ASID),以限制仅针对已修改的页表刷新条目
然后他介绍了刷新 TLB 的逻辑代码。
问题是 PPL TLB 刷新时会发生什么?然后,他设法修改映射,使一个进程可以通过 TLB 访问页面 X(但引用计数为零),并告诉 PPL 它现在拥有该页面并强制重用它(作为 L3 页面)桌子)。使用这个过时的 TLB 条目,可以通过创建新的转换表条目来映射页面 X,从而允许映射 PPL 保护的内存。
演讲以演示该漏洞结束。
POC 2022 的混合 Apple 驱动程序模糊测试之旅 ( @Peterpan0927 )
https://github.com/star-sg/Presentations/blob/main/POC%202022/Zhenpeng%20Pan.pdf
演讲首先从 XNU 内核的高层介绍 Apple 安全增强功能,以及这些缓解措施使得在某些情况下利用 UAF 和类型混淆变得更加困难或无法利用的事实。因此提出,司机将是一个比以前更有价值的目标。
他审查了许多驱动程序的 POC,并提出了使用代码审计和模糊测试来构建模糊器的想法。模糊器的第一层对所有可访问的服务进行轻量级收集,并生成第二层以基于代码审计进行增强的模糊测试。
他通过这种方式发现了多个错误,例如 CVE-2021-30923/CVE-2022-22661/CVE-2022-32814 以及超过 15 个以上的 DOS 错误以及其他正在开发中的错误。
最后,他介绍了模糊器发现的非公开错误的一些细节和未来计划,以及一个漏洞,该漏洞在 macOS 13 上提供了 100% 稳定的内核幻灯片信息泄漏以及新颖的信息泄漏攻击面。
这次演讲对我来说很有趣,因为早在 2017 年的幻灯片中,我就使用类似的混合方法开发了一个模糊器,该方法也可以有效地发现内核中的多个问题。然而,本次演讲重点介绍了最近发现的漏洞以及可以在模糊器中实现或进行审查以查找的代码模式。
在 OBTS 中滥用 iPhone 协处理器进行权限升级 ( @i41nbeer )
Youtube 视频:https://www.youtube.com/watch?v=H5oz1U03U1Q
最近,我们开始看到人们对移动设备上的独立协处理器、外设或固件越来越感兴趣。这包括野外攻击。Ian 的演讲从技术上深入探讨了这种野外漏洞如何通过定制 Apple 协处理器中的新颖 0day 逃逸 iPhone 沙箱。
-
演讲首先展示了用户如何被诱骗安装使用企业证书签名的虚假移动运营商应用程序。
-
奇怪的攻击,因为看起来移动网络数据实际上是通过运营商断开的。
-
逆向该应用程序表明它包含多个漏洞利用程序(包括来自 GitHub 等的公共漏洞利用程序)。sock_puppet、time_waste、lio_listio、AVE 解码器
-
然而,包含另外两个 0day 漏洞(当样本被发现时)。
-
CVE-2021-30883
-
讨论的内容是 DCP 0day.. (CVE-2021-30883)
-
Exploit 中有一堆 printf 语句,暗示了它的工作原理,特别是 DCP(显示协处理器),它在一块单独的 Apple 芯片上处理低级显示内容。
-
固件的 ARM64 Mach-o 二进制文件
-
IOMobileFramebuffer 功能已从内核移至 DCP。
-
许多代码确实被转移到了 RTKit 世界中。
-
在演讲时(不知道现在是否改变了!)它没有 PAC、ASLR、可预测堆地址,
-
Ian 然后继续描述您如何与 DCP 沟通。
-
用户态 > 内核 > DCP(在此过程中反序列化和重新序列化)。
-
DCP 和 DDR 控制器
-
IOMMU / SMMU / DART(他描述了 IOMMU 如何工作)以及如何将其用作安全边界。
-
EL1 内核代码到 DCP 的转换。
-
该漏洞利用在 DCP 上构建虚假对象,以使内核辅助 RPC 映射任意内存,以便从用户空间读取和写入内核内存。
可以通过点击原文跳转到原文地址
感谢您抽出
.
.
来阅读本文
点它,分享点赞在看都在这里
原文始发于微信公众号(Ots安全):漏洞研究文摘 - 第 1 期(2022 年 macOS/iOS)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论