如果设备越狱,则删除钥匙串数据

时间:2014-03-03 05:44:55

标签: ios security

目前我有一个应用程序,它有一个“记住我”选项用于存储用户ID。所以当前我正在使用Keychain API存储它。

但我怀疑是否偶然设备被盗并且有人越狱了设备。他能从钥匙串中获取所有这些数据吗?

如何防止这种情况?

4 个答案:

答案 0 :(得分:8)

使用KeyChain时最重要的一点是不要使用kSecAttrAccessibleAlwayskSecAttrAccessibleAlwaysThisDeviceOnly,因为这样数据不会安全加密(请参阅Apple's documentation)。不使用它们会为KeyChain数据增加一层安全性,但用户仍需要强大的密码来保护他的数据。如果用户在设备上没有密码,则数据不受保护。如果用户有一个4位数的密码(标准),则数据受到非常微弱的保护,可以在几分钟内强制进行。

如果您需要防止越狱(以及其他攻击),您最好的选择是不使用KeyChain,而是创建自己的加密敏感数据存储,并要求用户拥有安全密码。使用从该密码生成的密钥存储加密的数据。

这可能会给您的用户带来不便,因此如果您希望在要求密码之间提供宽限期,请考虑一种向应用提供会话Cookie的方法,该方式会在一段时间后失效。

答案 1 :(得分:1)

为了更安全,我会在所有内容上添加另一层安全性,并简单检查设备是否已越狱。如果是这种情况,我会删除当前的KeyChain \敏感数据。

类似的东西:

NSString *filePath = @"/Applications/Cydia.app";
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
   //Device is jailbroken --> delete KeyChain
}

甚至更好:

FILE *f = fopen("/bin/bash", "r");
BOOL isbash = NO;
if (f != NULL)
{
    //Device is jailbroken --> delete KeyChain
    isbash = YES;
}
fclose(f);

答案 2 :(得分:0)

这是检查设备越狱的最佳方法

检查

的代码
bool forked = fork();
if (forked) {
    // Device is jailbroken
}

答案 3 :(得分:0)

点击此链接Keychain Items,您可以在其中枚举所有钥匙串项目。

您还可以使用Protection Attributes来保护信息。

Apple Docs

Good Read