Random Augustine 写了一篇精彩的书呆子但非常平易近人的概述,介绍了过去十年苹果 XNU 内核的演变:
2017 — 页面保护层
随着搭载 A11 处理器的 iPhone 8 和 iPhone X 的发布,Apple 引入了一项称为页面保护层 (PPL) 的安全功能。这种硬件+软件功能隔离了内核的一小部分,并赋予其修改内存页表(管理内存访问的关键结构)的权限。内核的其余部分失去了直接修改这些页表的能力。 PPL 有限的攻击面导致绕过的情况极其罕见。虽然 PPL 添加了一层保护,但它仅部分有效,因为内核的其余部分仍然拥有在不修改页表的情况下危害数据所需的大部分权限。
2021–2023 — 安全页表监视器
PPL 之后,包含 A15 处理器的 iPhone 13 的发布引入了 iOS 17 中使用的新功能:安全页表监视器 (SPTM)。它通过保护额外的内存功能并将其划分为子系统,进一步隔离小型内核组件,取代并改进了 PPL。代码签名验证(确认所有代码均已由 Apple 签名)也被隔离。
大约在这个时候,对飞地的间接引用开始出现在 XNU 源代码中。这些飞地被推测是 SPTM 管理的子系统。然后2024年发生了……
2024 年 — Exclaves:XNU 的主要补充
随着支持 M4 和 A18 系统(例如 iPhone 16)的 XNU 源代码的发布,飞地的帷幕被部分拉开。 (Exclave 在以前的处理器上不活动)。
现在很明显,飞地是 XNU 安全模型更大规模重新设计的一部分。
我想起了加尔定律):
一个有效的复杂系统总是由一个有效的简单系统演化而来。从头开始设计的复杂系统永远无法工作,也无法通过修补来使其工作。您必须从一个可以工作的简单系统重新开始。
(我还怀疑 Siri——至少今天的 Siri——可能是“从头开始设计的复杂系统”的典型例子。但那是另一个话题了。)
原文: https://randomaugustine.medium.com/on-apple-exclaves-d683a2c37194