iOS钥匙串安全
我们希望使用iPhone上的证书来validationMS Exchange Sync。 我们不确定如何实施安全概念来保护这个证书。
如果没有启用ScreenLock,是否有可能在iPhone上获得“完整”钥匙串访问? (或与越狱iPhone)。
有没有人有这个链接?
Fraunhofer关于iOS钥匙串安全性的研究:
- http://sit.sit.fraunhofer.de/studies/en/sc-iphone-passwords.pdf
- http://sit.sit.fraunhofer.de/studies/en/sc-iphone-passwords-faq.pdf
据我所知,iOS钥匙串使用两级encryption。 第一级使用锁屏密码作为encryption密钥。 第二级使用由设备生成和存储的密钥。
弗劳恩霍夫研究人员已经想出了如何绕过第二层。 因为encryption密钥存储在设备上,所以这是“容易”的级别。 所以在iOS4上,他们的方法只能使用不使用kSecAttrAccessibleWhenUnlocked或kSecAttrAccessibleWhenUnlockedThisDeviceOnly的密钥链入口,因为这些入口位于第一级解密的内存中 – 即使手机被locking。
- 从iOS 4开始,使用kSecAttrAccessibleWhenUnlocked和kSecAttrAccessibleWhenUnlockedThisDeviceOnly的密钥受到额外级别的encryption
- 在iOS 3.x及更早版本中,无论使用何种辅助function属性,所有密钥都可以使用Fraunhofer的方法进行解密
- 没有密码的设备仍然是脆弱的
- 弱密码(less于六位)的设备仍然有些脆弱
≈50ms每个密码尝试; →≈20次/秒; →对于基数为36的6位字母数字代码猜测正确密码的50%变化,≈1.7年。标准的简单4位数字代码将在不到9分钟的时间内暴力破解。 基于iOS的错误尝试计数器可以被忽略的假设,因为它不是基于硬件的
苹果公司WWDC 2010核心操作系统Session 209“保护应用程序数据”,幻灯片24
底线:如果您必须存储敏感数据,最好使用自己的encryption。 并且不要将钥匙存储在设备上。
编辑:有大量的新闻文章引用了弗劳恩霍夫研究,并保证他们的读者不要担心,除非他们的设备被盗,因为这种攻击只能通过物理访问设备。
我有点怀疑。 研究人员通过电话进行testing的事实似乎只是简化问题的一种方法,而不是一个限制。 这是他们对解密钥匙串条目所做的描述:
使用越狱工具后,为了访问命令shell,我们运行一个小脚本来访问和解密在钥匙串中find的密码。 解密是在操作系统本身提供的function的帮助下完成的。
任何使用越狱的人都知道,越狱不需要物理访问设备。 从理论上讲,修改jailbreak.me代码应该是微不足道的,并让它自动执行以下操作:
- 正常执行越狱(所有这些都需要用户打开恶意制作的PDF)
- 越狱完成后运行Fraunhofer的脚本
- 通过networking将密码发送到攻击者可以从中读取的位置
所以再次谨慎对待你在钥匙链中的位置。
通常,钥匙链将是推荐的方式来存储这样的证书。 但是,已经发现,越狱可以用来绕过钥匙链( 物品 )的安全性。
Franhofer对iPhone Keychain的安全性进行了研究:
http://www.sit.fraunhofer.de/Images/sc_iPhone%20Passwords_tcm501-80443.pdf
我可以回答你的问题的一部分,但由于另一部分仍然是未知的,所以我投了这个问题,因为我也渴望知道答案。
我可以回答的部分是:“如果没有启用屏幕locking,应用程序是否可以获得完整的钥匙串访问权限”。 不,每个应用程序都在iPhone上有自己的钥匙链区域,这意味着应用程序只能访问自己的秘密。 这些秘密没有被locking为应用程序本身,所以没有办法隐藏应用程序本身的钥匙串条目。 所以总结一下:一个应用程序可以读取自己的条目,没有其他条目。
我有兴趣知道,但是在越狱设备上会发生什么。 所有应用程序的钥匙链都是在设备越狱后暴露的吗?