如何在OS X中保护系统钥匙串?


22

我正在寻找某种类似iOS的安全白皮书(除OS X之外),或者更好的东西,这是由独立专家提供的某种安全审核报告。在阅读了《钥匙串服务编程指南》等文档之后,我对于在OS X系统的未加密备份上容易受到对抗攻击的内容感到更加困惑。

上次我检查时,OS X下用户的登录钥匙串与密码一样安全。我记得有一个问题,将密码的实际保密性降低到了111位(模糊的内存,请随时纠正我),这是因为密码转换为密钥的方式存在一些问题,但这是很久以前的事情了,希望已经解决。

另一方面,有人告诉我系统钥匙串本质上不太安全,因为任何管理员都可以访问它,而且入侵者除了猜测单个用户的密码外,还有许多选择可以成为管理员。

特别是,我担心将自动脚本中使用的密码存储在系统钥匙串中,因为系统文件是备份并存储在异地而无需进一步加密。文档和其他用户数据在被带到异地之前被加密,但是我有点a异,我忽略了一条路径,一旦系统密钥链遭到破坏,它就可以恢复那些密钥(由于我们的程序,不一定有任何加密缺陷) 。因此,我想对如何同时保护系统钥匙串以及如何让任何管理员访问它有一个全面的了解。

  1. 如何设计密钥,以便任何管理用户都可以解锁系统密钥链?

  2. 是否存在限制管理用户以任何方式对系统钥匙串中的信息进行限制的加密限制?

  3. 给定不带 的未加密系统备份/Users,您将如何访问系统钥匙串中的钥匙?

我对OS X 10.5 Leopard和更高版本感兴趣。


我没有答案,但有一个轶事:作为没有管理员权限的标准用户,我曾经能够相对轻松地从系统钥匙串中提取密码。我不记得确切的步骤,但是肯定是可能的。附带说明一下,在security.stackexchange.com上这样做会更好吗?
alexwlchan 2012年

@Alex,我先尝试了Security.SE,但那里没有任何答案。
老职业

1
为什么不为您的工作完全使用单独的钥匙串?您的脚本有需要访问系统钥匙串的充分理由吗?
杰伊·汤普森

@eyemyth,是的,脚本需要由系统运行,以便它们可以访问磁盘上的所有文件,而不管用户权限如何。
老职业

Answers:


11

系统钥匙串存储在其中,/Library/Keychains/System.keychain并且用于对其进行解锁的钥匙存储在其中/var/db/SystemKey(其默认文件权限仅可由root读取)。这些文件的位置在security-checksystem脚本中引用(来自security_systemkeychain源)。甚至可以通过使用进行测试以自动锁定/解锁系统钥匙串

systemkeychain -vt

钥匙串安全框架允许非特权程序请求信息,前提是它们位于钥匙串条目中存储的ACL中。显然,如果用户具有root身份,则他们可以在系统上直接访问存储系统密钥链的文件和用于对其进行解锁的密钥,因此,他们不会通过安全框架发出请求,也不会依赖存储在密钥链中的ACL本身。

(我实际上没有回答原始问题,所以让我们再试一次)

如何设计密钥,以便任何管理用户都可以解锁系统密钥链?

libsecurity钥匙扣框架允许常规的进程与在使用苹果的XPC进程间通信框架(IPC)的认证方式钥匙圈与系统交互。

程序A发送一个使用IPC访问系统钥匙串信息的请求。检查请求用户已经在轮组中,并且还知道轮组中用户的密码。确认授权后,kcproxy可以使用特权守护程序访问中的资料/var/db/SystemKey,解锁系统钥匙串并返回所请求的信息。

是否存在限制管理用户以任何方式对系统钥匙串中的信息进行限制的加密限制?

否-允许管理用户访问/更改系统钥匙串中的任何内容。即使不能,他们也可以将基础文件复制到可以完全控制的另一台计算机上,然后在那里进行解锁/访问。

给定没有/ Users的未加密系统备份,您将如何获得对系统钥匙串中密钥的访问权限?

如果备份包含的副本/Library/Keychains/System.keychain/var/db/SystemKey然后我将它们复制到它们各自的位置新的OS X系统和使用上systemkeychain,使后解锁前和使用转储数据库钥匙扣security dump-keychain


1
GuidanceSoftware / EnCase提供了一个名为dumpkeychain的实用程序,该实用程序允许在Windows中直接转储系统钥匙串(带有SystemKey)(可能比设置新的OS X安装程序转储容易)。
drfrogsplat 2014年

1
@Anon,如何使用以上信息从另一台计算机的Time Machine备份访问/解锁/转储System.keychain?也就是说,我将System.keychain和SystemKey存储在外部磁盘上,因此我猜我必须分别指定两个文件的路径,以避免它在默认位置使用文件。
db 2015年

这篇文章是相关的(如何使用SystemKey从旧系统解密System.keychain)。 apple.stackexchange.com/questions/307189/… 我很好奇,是否可以使用钥匙串访问或systemkeychain cli通过同一安装中的相应SystemKey来解锁恢复的System.keychain(即,从旧的崩溃的HDD中)。我的目标是在新安装时将登录信息解锁并迁移到新的系统钥匙串中。
mattpr

5

系统钥匙扣

系统钥匙串具有一些独特的功能。这些由systemkeychain手册页记录。提及主密码可能是您的重点。该系统钥匙扣具体源代码很小,可用。

系统钥匙串,/System/Library/Keychains/System.keychain是供Apple和守护程序使用的特殊钥匙串。您通常应该避免将其用于用户级脚本。

代码审查:钥匙串

苹果公司发布了Mac OS X 10.5 的钥匙串和安全框架的源代码。您可以查看此代码以了解其工作原理。

替代方法:单独的钥匙串

您可以创建一个单独的钥匙串来存储脚本的凭据。我们向客户推荐这种做法。您可以使用命令行工具安全性来访问,提取和管理钥匙串,而无需求助于图形界面。

考虑将自动化脚本的密码存储在单独的钥匙串中,并从您的异地备份中排除该钥匙串。

我很欣赏从您的备份中删除钥匙串不是很理想,但这可以解决您的问题。在恢复Mac时,您需要从其他来源获取钥匙串。可能是更受信任的来源或辅助渠道。

您总是可以将单独的钥匙串密码存储在系统钥匙串中。然后,您可以从脚本中解锁单独的钥匙串。如果备份遭到攻击,则只能将密码暴露给单独的钥匙串,而不暴露给钥匙串本身,因为此文件不具有异地备份。


谢谢,但是对我而言,从所有代码中找出系统钥匙扣的安全性和保持安全性的方法太困难了。我们需要使用系统钥匙串,因为我们需要的脚本以管理员权限无论谁登录的后台自动运行。
老临

1
我建议在Apple CDSA邮件列表(list.apple.com/mailman/listinfo/apple-cdsa)上询问或使用Apple技术支持事件询问。只有通过这些方式,您才能确保可以找到合适的Apple工程师。
Graham Miln 2012年

让脚本在后台作为root启动工作来运行。您到底想做什么?
杰·汤普森

1
“ /System/Library/Keychains/System.keychain”中的小错字(您忘记了“ Library”)。实际上,您可以通过选择“编辑>钥匙串列表”来获得钥匙串访问中的钥匙串位置列表
用户名

1
@OldPro考虑到您的安全性,为什么不使用全盘加密?
Graham Miln 2012年

2

苹果公司最近发布了一份概述其安全实践的文档,您可能会在此处找到一些答案。该文档特定于iOS,但是许多安全功能与OS X有很多共同点。


这是在正确的轨道上,对于我认为有帮助的此类文档的一个很好的例子,但iOS没有系统钥匙串的概念,因此无法回答我的问题。
老职业

如果您能向正确的方向前进,我很乐意接受您的赏金;-)
demianturner 2012年

0

我没有特定的Keychain *知识,但这是一种非常标准化的做法。

  1. 您要保护纯文本文件“ foo”。Foo可以是任意大小。
  2. 创建一个对称密钥来加密foo。
  3. 使用从密码短语中获得的密钥对对称密钥进行加密。

完成此操作后,您可以通过输入当前密码短语,解密对称密钥然后使用新的密码短语对其进行加密来更改“密码”。在“ foo”非常大的情况下,这避免了冗长的解密/加密过程。

那么,这对于需要访问foo纯文本的多个用户如何工作?确实很容易,您只需为每个用户创建一次对称密钥的加密副本即可。换句话说,为每个用户执行第三步。

实际上,所有这些都是从视图中抽象出来的,最终用户只需要使用自己的密码即可。

关于问题的第3部分,用户的密钥未存储在他们的家中。它们很可能存储在/private/var某个地方。因此,即使没有/Users以前可以访问的人也可以解锁系统。


*钥匙串可能会与众不同。


系统钥匙串的不同之处在于,无论谁登录,系统都可以访问钥匙串上的内容。例如,Time Machine可以访问系统钥匙串以挂载远程文件共享,即使登录的唯一用户不是管理用户,因此无法访问系统钥匙串。因此,正在发生其他事情,我想确切地知道那是什么。
老职业

同样,我只能推测,但是IMO实际上并没有什么不同。系统本身显然可以把握关键,这是理所当然的。我假设有一个类似于用户密钥的系统密钥。但是,现在我们成为您的问题的核心……什么提供了首次访问权限?
bahamat 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.