
签名系统宗卷安全性
Apple 在 macOS 10.15 中引入了只读系统宗卷,这是一个专用于系统内容的独立宗卷。macOS 11 或更高版本通过签名系统宗卷 (SSV) 为系统内容新增了强大的加密保护措施。SSV 具有的内核机制会在运行时验证系统内容的完整性,并拒绝不含来自 Apple 的有效加密签名的任何代码和非代码数据。自 iOS 15 和 iPadOS 15 起,iPhone 或 iPad 上的系统宗卷也获得了签名系统宗卷的加密保护。
SSV 不仅有助于防止对作为操作系统一部分的任何 Apple 软件的纂改,还使 macOS 软件更新更可靠、更安全。由于 SSV 使用 APFS(Apple 文件系统)快照,如果某项更新无法执行,无需重新安装即可恢复到旧系统版本。
引入 SSV 以来,APFS 已在内部储存设备上使用非加密校验和来提供文件系统元数据完整性。SSV 新增加密哈希值以增强完整性机制,从而将其扩展到覆盖文件数据的每个字节。来自内部储存设备的数据(包括文件系统元数据)在读取路径中通过加密方式生成哈希值,然后该哈希值会与文件系统元数据中的预期值比较。如果不匹配,系统将假定数据已遭到篡改,不会将其返回给发起请求的软件。
每个 SSV SHA256 哈希值储存在主文件系统元数据树中,该树自身也经过哈希化。与二进制哈希(默克尔)树类似,该树的每个节点会以递归方式验证其子节点哈希值的完整性,因此根节点的哈希值(称为封章)覆盖了 SSV 中数据的每个字节,也意味着加密签名覆盖了整个系统宗卷。
macOS 安装和更新期间,会在设备端从文件系统重新计算该封章,并将该测量值与 Apple 签名的测量值进行对比验证。在搭载 Apple 芯片的 Mac 上,引导载入程序会先验证封章,然后将控制转交给内核。在基于 Intel 且搭载 Apple T2 安全芯片的 Mac 上,引导载入程序会将测量值和签名转发到内核,内核接着会直接验证封章,然后装载根文件系统。无论哪种情况,如果验证失败,启动过程将暂停,用户将收到重新安装 macOS 的提示。此流程会在每次启动时重复运行,除非用户已选择进入更低的安全性模式并且已单独选择停用签名系统宗卷。
iOS 和 iPadOS 软件更新期间,会以类似的方式对系统宗卷进行准备和重新计算。iOS 和 iPadOS 引导载入程序会验证封章完整且与 Apple 签名的值匹配,然后才允许设备启动内核。如果启动时发生不匹配,会提示用户更新设备上的系统软件。用户无法停用 iOS 和 iPadOS 上签名系统宗卷的保护。
SSV 和代码签名
代码签名仍存在并由内核执行。签名系统宗卷在从内部储存设备上读取任何字节时提供保护。相反,代码签名在 Mach 对象在内存中映射为可执行时提供保护。所有读取和执行路径上的可执行代码均会受到 SSV 和代码签名的保护。
SSV 和文件保险箱
在 macOS 11 或更高版本中,SSV 为系统内容提供对等的静息状态保护,因此系统宗卷不再需要加密。读取到对静息状态文件系统进行的任何修改时,文件系统会检测到这些修改。如果用户已启用文件保险箱,数据宗卷上的用户内容仍通过用户提供的密钥加密。
如果用户选择停用 SSV,处于静息状态的系统会变得易于篡改,此篡改可使攻击者能够在系统下次启动时提取加密的用户数据。因此,如果文件保险箱已启用,系统不会允许用户停用 SSV。静息状态保护必须同时为两个宗卷启用或停用。
在 macOS 10.15 或更低版本中,文件保险箱在静息状态时通过加密用户和系统内容来保护操作系统软件,加密所使用的密钥受用户提供的密钥保护。此功能防范了可实际接触设备的攻击者访问或有效修改包含系统软件的文件系统。
SSV 和搭载 Apple T2 安全芯片的 Mac
在搭载 Apple T2 安全芯片的 Mac 上,只有 macOS 本身受 SSV 保护。在 T2 芯片上运行并验证 macOS 的软件受安全启动保护。