MASTG-KNOW-0090
デバイスバインディングの目的は、デバイス A からデバイス B へアプリとその状態をコピーし、デバイス B 上でアプリの実行を継続しようとする攻撃者を妨害することです。デバイス A が信頼されていると判断された後、デバイス B よりも多くの権限を持つ可能性があります。アプリをデバイス A からデバイス B へコピーする際にこの状況を変更すべきではありません。
iOS 7.0 以降、ハードウェア識別子 (MAC アドレスなど) は制限されていますが、iOS でデバイスバインディングを実装する他の方法があります。
identifierForVendor:[[UIDevice currentDevice] identifierForVendor](Objective-C の場合),UIDevice.current.identifierForVendor?.uuidString(Swift3 の場合),UIDevice.currentDevice().identifierForVendor?.UUIDString(Swift2 の場合) を使用できます。同じベンダーの他のアプリをインストールした後にアプリを再インストールするとidentifierForVendorの値は同じにならないことがあり、アプリバンドル名を更新すると変わることがあります。したがって、キーチェーン内の何かと組み合わせるのが最良です。キーチェーンの使用: アプリケーションのインスタンスを識別するためにキーチェーンに何かを保存できます。このデータがバックアップされないようにするには
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly(データを保護し、パスコードや Touch ID の要件を適切に実施したい場合),kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly,kSecAttrAccessibleWhenUnlockedThisDeviceOnlyを使用します。Google Instance ID の使用: iOS の実装はこちら を参照してください。
これらのメソッドに基づくスキームはパスコードや Touch ID が有効で、キーチェーンやファイルシステムに保存されているマテリアルが保護クラス (kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly や kSecAttrAccessibleWhenUnlockedThisDeviceOnly など) で保護されていて、 SecAccessControlCreateFlags が kSecAccessControlDevicePasscode (パスコード用), kSecAccessControlUserPresence (パスコード、Face ID または Touch ID), kSecAccessControlBiometryAny (Face ID または Touch ID), kSecAccessControlBiometryCurrentSet (Face ID / Touch ID: ただし、現在登録されている生体認証のみ) のいずれかに設定されているとより安全です。
Last updated
Was this helpful?