MASTG-KNOW-0102 バックアップ (Backups)

iOS は、デバイスに保存されているデータのコピーを作成する、自動バックアップ機能を搭載します。iTunes (macOS Catalina まで) または Finder (macOS Catalina 以降)、あるいは iCloud バックアップ機能を使用してホストコンピュータから iOS バックアップを作成できます。どちらの場合も、バックアップは、Apple Pay 情報や Touch ID 設定などの機密性の高いデータを除き、iOS デバイスに保存されているほぼすべてのデータを含みます。

iOS はインストールされたアプリとそのデータをバックアップするため、アプリによって保存された機密性の高いユーザーデータがバックアップを通じて意図せず漏洩してしまうのではないかという懸念が当然あります。また、あまり知られていませんが、データの保護やアプリの機能制限に使用される機密性の高い設定が改竄され、改変されたバックアップを復元した後にアプリの動作が変更される可能性があるという懸念もあります。どちらの懸念も妥当なものであり、これらの脆弱性は現在、膨大な数のアプリに存在することが証明されています。

Keychain のバックアップ方法

ユーザーが iOS デバイスをバックアップすると、Keychain データもバックアップされますが、Keychain 内のシークレットは暗号化されたままです。Keychain データを復号するために必要なクラスキーはバックアップに含まれません。Keychain データを復元するには、バックアップをデバイスに復元し、ユーザーパスコードでデバイスをアンロックする必要があります。

kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly 属性が設定されている Keychain アイテムは、バックアップをバックアップしたデバイスに復元した場合にのみ復号できます。バックアップからこの Keychain データを抽出しようとする人は、元のデバイス内の暗号ハードウェアにアクセスしなければ復号できません。

但し、Keychain を使用する際の注意として、少量のユーザーデータや短いメモの保存するためにのみ設計されているということです (Apple の Keychain Servicesarrow-up-right のドキュメントによる)。これは、大規模なローカルのセキュアストレージを必要とするアプリ (メッセージングアプリなど) は、アプリコンテナ内でデータを暗号化し、鍵マテリアルの保存に Keychain を使用する必要があることを意味します。機密性の高い構成設定 (データ損失防止ポリシー、パスワードポリシー、コンプライアンスポリシーなど) をアプリコンテナ内に暗号化せずに保持する必要がある場合は、完全性チェックのためにポリシーのハッシュをキーチェーンに保存することを検討できます。完全性チェックなしでは、これらの設定をバックアップ内で変更し、デバイスに復元して、アプリの動作 (構成済みのリモートエンドポイントの変更など) やセキュリティ設定 (脱獄検出、証明書ピン留め、最大 UI ログイン試行など) を変更できる可能性があります。

結論: 機密データがこの章の前半で推奨されているとおりに処理されている場合 (Keychain に保存されている、Keychain で完全性チェックされている、Keychain 内でロックされている鍵で暗号化されているなど)、バックアップはセキュリティ上の問題にはなりません。

Last updated