Skip to content

完整性与启动策略 ​

UniXNU 保留原始 Apple 安全组件,并提供它们检查的输入。源码内核加入这些组件所需的平台代码,启动负载提供描述设备的 trust cache 和设备树属性。

输入 ​

输入提供方
trust cache 包--trust-cache FILE
trust cache 哈希[payload] trust_cache_sha256
平台种子--unique-chip-id HEX
设备树身份[payload.adt] ipad_identity 和板级脚本
PMGR 集成需要时使用 XNU_SHENG_PMGR
根策略XNU_VERIFIED_ROOT_PROBE、XNU_OWNER_ROOT_AUDIT、XNU_OWNER_ROOT_TRUST

trust cache ​

DarwinBoot 校验 trust cache 包结构,并把它复制到内核窗口。ADT 的 /chosen/memory-map/TrustCache 占位符接收地址和大小。

补丁 native-trust-cache-runtime 在 BCM2837 上初始化运行时 trust cache 路径。原始 AppleImage4 和 AMFI 组件按缓存校验代码。

负载步骤只接受 SHA-256 位于 [payload] trust_cache_sha256 的 trust cache 包。

4 KiB 下的代码签名 ​

原始 CodeDirectory 使用 16 KiB 哈希页。4 KiB 内核校验 4 KiB 页。补丁 native-4k-signature-hash-cache:

  1. 通过 vn_rdwr 读取每个原始 16 KiB 块。
  2. 用原始 CodeDirectory 哈希校验该块。
  3. 从已验证块派生每个 4 KiB 页的哈希。
  4. 把派生哈希存入只读内核内存。
  5. 让 cs_validate_page 使用派生表。

只有原始 16 KiB 哈希匹配后,块才会发布。校验失败的块不产生派生表,页校验返回 CS_VALIDATE_TAINTED。

AMFI 策略 ​

ADT 属性 /chosen/amfi-only-platform-code 让 AMFI 保持在平台代码策略。[kernel.prelink] early_security_init 在指定地址运行原始 AppleMobileFileIntegrity 初始化器。

offline-owner-root-* 补丁为首次启动加入 owner root 检查:

补丁功能
offline-owner-root-binding-audit用启动 manifest 检查根绑定
offline-owner-root-crypto-probe检查 owner crypto provider
offline-owner-boot-manifest记录启动 manifest 哈希
offline-owner-cache-carrier选择代码签名缓存载体
offline-owner-systemos-mount挂载 SystemOS cryptex
offline-owner-z-air-init初始化 owner root 的 Z air 路径

verified root ​

kits/VerifiedRoot 提供签名的策略包。verified block 驱动按策略校验每次读取。策略可以按容量用 --verified-root-bundle 选择。

工具功能
verified_root.c策略解析和读取校验
xnu_crypto.cXNU crypto 适配
manifest.py策略包构建
verify_image.py镜像校验

存储完整性 ​

NativeVirtioBlock 和 NativeRamBlock 共用 verified block 策略。构建脚本检查两个传输层导入相同的原始存储绑定,并检查编译对象与记录哈希一致。

报告 ​

负载报告记录:

字段含义
kernel_sha256输入内核
payload_kernel_sha256负载中的内核,经过可选 panic 屏幕补丁
adt_sha256ADT sidecar
trust_cache_sha256trust cache 包
data_ramdisk_sha256Data 种子
payload_sha256负载镜像

启动管理器日志记录暂存的 kext、安装的 ACPI 表和注入的驱动。

下一步 ​

Released under the BSD-2-Clause-Patent License.