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 が有効で、キーチェーンやファイルシステムに保存されているマテリアルが保護クラス (kSecAttrAccessibleAfterFirstUnlockThisDeviceOnlykSecAttrAccessibleWhenUnlockedThisDeviceOnly など) で保護されていて、 SecAccessControlCreateFlagskSecAccessControlDevicePasscode (パスコード用), kSecAccessControlUserPresence (パスコード、Face ID または Touch ID), kSecAccessControlBiometryAny (Face ID または Touch ID), kSecAccessControlBiometryCurrentSet (Face ID / Touch ID: ただし、現在登録されている生体認証のみ) のいずれかに設定されているとより安全です。

Last updated

Was this helpful?