26

セッション 209 - 2010 WWDC からのアプリケーション データの保護を見ました。

基調講演では、ファイルにデータ保護属性を設定する方法 (NSFileProtectionComplete、NSFileProtectionNone) や、ケースに最適な保護を決定する方法など、さまざまなことが説明されています。

実装したばかりですが、セキュリティがオンになっているかどうかをテストする方法がわかりません。アイデアはありますか?

さらに、時々バックグラウンドでアクセスする必要がある sql lite データベースがありますが、このデータ保護方法では十分ではないようです。最適なデータベース保護を案内するリンクやチュートリアルはありますか? (SQL暗号が見つかりましたが、進化したプロジェクトに追加するにはちょっと重いです)

ありがとう!

4

7 に答える 7

23

更新: iOS 6では、iOSプロビジョニングプロファイルのアプリIDで構成する必要のある資格を使用して、アプリケーションのデータ保護を要求できると思われます。私はまだこれをテストしていません、そしてこれは私がそれで見つけることができる最高の情報ですhttps://devforums.apple.com/message/707939#707939


この問題を調査した結果、デバイスでデータ保護が有効になっているかどうかを判断するのは非常に難しいと思いました。

NSFileProtectionKeyファイル属性をに設定すると、ファイル保護が有効になりますNSFileProtectionComplete

たとえば、保護されたファイルを作成するには、次のようなコードを実行できます。

[[NSFileManager defaultManager] createFileAtPath:[self filePath]
                                        contents:[@"super secret file contents" dataUsingEncoding:NSUTF8StringEncoding]
                                      attributes:[NSDictionary dictionaryWithObject:NSFileProtectionComplete
                                                                             forKey:NSFileProtectionKey]];

残念ながら、このコードは、デバイスでデータ保護が有効になっていない場合でも(または、データ保護が利用できないシミュレーターでコードが実行されている場合でも)エラーなしで実行されます。

さらに悪いことに、NSFileProtectionCompleteファイルが保護されているかどうかに関係なく、属性が設定されます。以下:

self.fileProtectionValue = [[[NSFileManager defaultManager] attributesOfItemAtPath:[self filePath]
                                                                             error:NULL] valueForKey:NSFileProtectionKey];

NSLog(@"file protection value: %@", self.fileProtectionValue);

file protection value: NSFileProtectionCompleteデータ保護が有効になっているかどうかに関係なく、吐き出します。

ファイル保護が期待どおりに機能しているかどうかを確認するために使用できる方法は2つあります。残念ながら、これらの方法はどちらも、現場のデバイスでデータ保護が有効になっているかどうかを検出するのには適していません。

どちらの方法も、デバイスがロックされていると保護されたファイルを読み取ることができないという考えに基づいて機能します。

方法1では、タイマーを使用して、デバイスがロックされた後、アプリケーションの実行中にファイルの読み取りを試みます。

[self performSelector:@selector(doReload) withObject:nil afterDelay:20];

- (void)doReload {

    NSLog(@"protected data available: %@",[[UIApplication sharedApplication] isProtectedDataAvailable] ? @"yes" : @"no");

    NSError *error;

    self.fileContents = [NSString stringWithContentsOfFile:[self filePath]
                                              encoding:NSUTF8StringEncoding
                                                 error:&error];

    NSLog(@"file contents: %@\nerror: %@", self.fileContents, error);
}

上記のコードを実行してデータ保護されたデバイスをロックすると、次のように吐き出されます。

protected data available: no
file contents: (null)
error: Error Domain=NSCocoaErrorDomain Code=257 "The operation couldn’t be completed. (Cocoa error 257.)" UserInfo=0x16e110 {NSFilePath=/var/mobile/Applications/D71F1F1F-6C25-4848-BB1F-51539B47EC79/Documents/protected_file, NSUnderlyingError=0x16e010 "The operation couldn’t be completed. Operation not permitted"}

データ保護が有効なデバイスがロックされた後も保護されたデータが引き続き利用できる10秒程度の猶予期間があるため、20秒の遅延が必要です。

2番目の方法は、アプリケーションで保護されたファイルを作成し、アプリケーションを終了し、デバイスをロックし、10秒間待ってから、XCodeオーガナイザーを使用してアプリケーションのコンテンツをダウンロードすることです。これによりエラーメッセージが表示され、保護されたファイルは空になります。

上記のテストのいずれかが説明どおりに動作しない場合は、データ保護が有効になっていないか、ファイル保護コードが正しく実装されていません。

機密情報をディスクに書き込む前に、アプリケーション内でデータ保護が有効になっていることを確認する方法が見つからなかったため、データ保護を有効にする必要があるとしてアプリケーションをマークできるように、Appleに機能拡張リクエストを提出しました。 。(rdar://10167256)

Appleは、モバイルデバイス管理(MDM)APIを介してこれに対するソリューションを提供しています。これは、サードパーティのサーバーと組み合わせて、デバイスでデータ保護を有効にする必要があるポリシーを適用できます。

于 2011-09-22T13:56:02.000 に答える
10

iExplorerアプリを使用して、ファイルが暗号化されているかどうかを検出できます。iExplorer を使用すると、iPhone/iPad のファイルシステムをブラウズし、ファイルを開くことができます (もちろん、デバイスが Mac に接続されている必要があります)。

デバイスがロックされていると、ファイルを正しく読み取ることができません。

于 2012-04-30T14:33:36.100 に答える
3

コンピュータベースのツールとジェイルブレイクされていない iPhone を使用してデータ保護をテストすることはもうできないと思います。データ保護をテストするための更新された方法については、こちらの回答を参照してください: https://stackoverflow.com/a/40044841/1165843

于 2016-10-14T13:52:11.750 に答える