【问题标题】:Kernel extensions signed before Apr 7, 2019 are unable to load on macOS 10.14.52019 年 4 月 7 日之前签署的内核扩展无法在 macOS 10.14.5 上加载
【发布时间】:2019-06-07 08:51:15
【问题描述】:

我已安装 macOS 10.14.5 (18F132) 并拥有以下三种不同版本的产品:

案例 1. 2018 年 10 月在 macOS 10.9.5 上签名的内核扩展(带有 —timestamp=none)这些扩展在 macOS 10.14.5 上成功加载。

案例 2. 2019 年 2 月在 macOS 10.9.5 上签名的内核扩展(带有 —timestamp=none) 这些扩展无法在 macOS 10.14.5 上加载。

案例 3. 2019 年 6 月在 macOS 10.13.6 上签名的内核扩展(带有 —timestamp) 这些扩展使用 Apple 公证服务进行公证,并在 macOS 10.14.5 上成功加载

我的查询是: 根据 macOS 14.5 发行说明:2019 年 4 月 7 日之后签署的内核扩展必须经过公证才能在 macOS 10.14.5 上加载,但在提到的情况下,2019 年 2 月签署的#2 扩展无法加载。

如果我们认为这是由于缺少时间戳,那么如果#1内核扩展加载成功?

我们的观察与 macOS 10.14.5 的发行说明不符,但我们无法理解其背后的原因。

【问题讨论】:

    标签: macos-mojave kernel-extension osx-gatekeeper notarize


    【解决方案1】:

    如果我们认为这是由于缺少时间戳,那么如果#1内核扩展加载成功?

    macOS 包含大量内核扩展白名单,尽管未签名或未正确签名,它仍允许加载这些扩展。这可以在文件/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist 中找到,在OSKextSigExceptionHashListOSKextStrictExceptionHashList 键下。

    也许较旧的 kext 已被 Apple 明确列出?

    【讨论】:

    • 是的,我的内核扩展列在 AppleKextExcludeList.kext 中,但如果是这样,那么在案例#2 中,为什么扩展无法在相同的 macOS 10.14.5 上加载?在我的 kext 代码设计中,没有 Timestamp,那么 macOS 10.14.5 如何验证时间戳?
    • @Brinda 您确定案例 2 与白名单完全匹配吗?只有当哈希匹配时才会加载。如果它在白名单中,时间戳无关紧要。 kextutil 是怎么说的?
    • 我有一些疑问,如何计算 kext 的哈希?谁将修改 AppleKextExcludeList.kext 中的内核扩展列表:macOS 本身?如何从该列表中删除 kext 条目? AppleKextExcludeList.kext 中的扩展名列表多久会修改一次?
    • @Brinda 我现在只在手机上,所以无法检查,但我认为codesign 子命令之一应该能够生成和打印哈希。您无法编辑列表,Apple 会维护它并使用操作系统更新对其进行更新。如果您的 kext 已列出并且您希望将其删除,我建议您与 Apple 联系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 2022-07-20
    • 1970-01-01
    • 2023-03-15
    • 2013-10-12
    相关资源
    最近更新 更多