Trigon 是一个基于 CVE-2023-32434 的确定性内核漏洞利用与 PPL 绕过工具。它支持运行 iOS 13 - 16.5.1 的 A9 - A16 设备。所谓确定性,意味着该漏洞利用在利用过程中或利用之后永远不会触发 panic,并且完全可靠。
Trigon 利用了 XNU 虚拟机层中的一个整数溢出漏洞。该漏洞使我们能够构建任意物理地址映射原语。这为我们提供了对几乎任意物理地址的读/写原语,但后续的利用策略因设备和版本而异。
如果你对 iOS 相关的技术文章感兴趣,我推荐你阅读 Trigon 系列文章!我尽力使其尽可能易于理解,以便非 iOS 研究人员也能跟上。
注意:arm64 设备目前在 iOS 16 上不受支持,仅支持 arm64e 设备(A12+)。
arm64e 支持需要若干硬编码值,这些值应放入 unique_offsets.h。其中大部分可以很容易地找到,一些结构体偏移可在 Dopamine 源代码中找到,其他则可通过运行 XPF 找到。然而,有三个偏移在利用之前无法找到,我现在将解释如何找到它们。
UniqueValues.addresses.base 是 Trigon 恶意内存映射的物理基地址。一个简单的查找方法是使用现有值作为估计基地址,然后读取一个可识别的物理地址,例如 0x41410000。接着,你可以从 panic 日志中的物理地址中减去该偏移,以确定映射的正确基地址。
pv_head_table 与 pp_attr_tableUniqueValues.offsets.pv_head_table 和 UniqueValues.offsets.pp_attr_table 是两个内核数据结构相对于内核物理基址的偏移。由于它们在内核初始化期间很早就被分配,因此它们在物理内存中相对于内核基址的偏移始终完全相同。要找到这些偏移,你可以使用现有的内核漏洞利用(如 kfd)来定位这些结构并将其转换为正确的物理地址,然后据此计算偏移。
对于可通过 Dopamine 越狱的设备,我提供了一个易于使用的命令行工具,可在 arm64e 上为 Trigon 找到所有必需的偏移,见此处。你可以使用它来配置该漏洞利用,使其在你的设备和版本组合上正常工作。