Security.framework
暴露了像 SecCodeCheckValidityWithErrors()
参考, 源码 这样的函数,用于校验代码签名的正确性以及证书存储。
但是,谁来检查这个检查者呢?Security.framework
也被签名了。内核如何验证它的签名而不预先加载 Security.framework
来获取访问这些函数的权限?这是否意味着只需用自定义实现替换 Security.framework
并盲目接受任何签名就足以有效地关闭所有代码签名保护?
如果内核有编译的静态版本的 Security.framework
,那么将其作为单独的框架有什么意义呢?如果没有,它是否只是盲目信任这个特定的框架没有被篡改?
背景:我最近更换了 MacBook 上的内置键盘,并且它使用错误的 USB PID 进行自我声明,因此被识别为 JIS 而不是 ANSI。可以通过更改 AppleUSBTCKeyboard.kext
的 Info.plist
中的一行来修复它,但这会使签名无效。而且创建自己的 CA 并具有所有相关 OID 是不够的,因为 kext 签名检查是硬编码为仅接受 Apple 根证书。规避此问题的唯一合法方法是向苹果支付每年 100 美元的费用,基本上是为了使用我自己的计算机。这就是为什么我想要将 anchor apple
要求与由 Apple CA 颁发的证书以及任何受信任的 CA 匹配,包括用户提供的那些,以使公开可用的补丁尽可能非侵入性,并且现在我正在调查如何做到这一点。