OS X 的钥匙串访问控制有多安全?

信息安全 苹果系统 钥匙链
2021-08-19 14:14:17

在 OS X 上,当应用程序请求访问 Keychain 项时,系统会提示用户授予还是拒绝该访问权限。

假设系统不仅保存了二进制路径,还保存了用户确认请求后创建的ACL条目中的hash;根据 Apple 的说法,这可以防止修改后的二进制文件访问用户密码和/或证书。

这真的足以防止具有用户(但不是超级用户)权限的攻击者检索所有存储的密码吗?

例如,在 Linux 上,有一个环境变量LD_PRELOAD可用于加载额外的动态库,这些动态库会用自定义代码覆盖一些标准库函数;使用它,似乎可以在不修改基本可执行文件本身的情况下更改在给定二进制文件中执行的代码。

OS X 上是否有类似的机制可以实现这种攻击(可能是这里提到的方法之一)?

4个回答

安全边界是root,即securityd 作为root 运行。如果 securityd 和它的 ACL 正确实现,其他应用程序就无法从钥匙串中访问密钥。但是,Mac OS X 有几个权限提升漏洞,这将允许本地用户攻击者访问受保护的项目,从而访问钥匙串中的项目。可以合理地假设一个中等/高技能的攻击者仍然可以在 0day 找到现有的权限提升。

据我了解,securityd 是解释和执行钥匙串 ACL 的过程。应用程序中的代码/库通过 xpc 消息与 securitd 通信。Securityd 是打开钥匙串文件的那个,因此调用应用程序中的代码注入或 dyld 库绕过将无法更改您可能拥有的访问量。正如 fel1x 所提到的,这使得闯入/颠覆安全。我知道launchd有特殊的代码来处理securityd,比如它不会重新启动securityd,如果它崩溃了,你必须重新启动才能恢复系统。可能还有其他保护措施。一个简单的根升级可能不足以颠覆 securityd。

众所周知,OSX 的开发人员非常努力地保护和加密钥匙串中的数据,并且与其他应用程序(firefox,甚至 windows auth's)一样,您可以使用密码访问它,这是唯一有效的真正攻击时刻,要么是在访问诸如钥匙串之类的东西时进行键盘记录,要么是通过暴力破解/字典攻击“密码”字段,因为这些应用程序在 1 分钟内尝试 5 次后没有“锁定”功能

据我了解,是的,安全性解释和执行钥匙串 ACL。但是,这些都是权利的形式。因此,在权限提升的情况下(不一定是零日;甚至越狱可能就足够了),攻击者应用程序可以赋予自己适当的权利来使用您的应用程序的密钥,无论它们在钥匙串中的“保护”程度如何(永远不要离开钥匙串等)。