バイパス生体認証 (Android)

Reading time: 6 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

方法 1 – 暗号オブジェクトを使用しないバイパス

ここでの焦点は、認証プロセスにおいて重要な onAuthenticationSucceeded コールバックです。WithSecureの研究者たちは、NULL CryptoObjectonAuthenticationSucceeded(...) でバイパスするための Fridaスクリプト を開発しました。このスクリプトは、メソッドの呼び出し時に指紋認証の自動バイパスを強制します。以下は、Androidの指紋コンテキストにおけるバイパスを示す簡略化されたスニペットで、完全なアプリケーションは GitHub で入手可能です。

javascript
biometricPrompt = new BiometricPrompt(this, executor, new BiometricPrompt.AuthenticationCallback() {
@Override
public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
Toast.makeText(MainActivity.this,"Success",Toast.LENGTH_LONG).show();
}
});

Fridaスクリプトを実行するコマンド:

bash
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass.js

方法2 – 例外処理アプローチ

Another Frida script by WithSecure addresses bypassing insecure crypto object usage. The script invokes onAuthenticationSucceeded with a CryptoObject that hasn't been authorized by a fingerprint. If the application tries to use a different cipher object, it will trigger an exception. The script prepares to invoke onAuthenticationSucceeded and handle the javax.crypto.IllegalBlockSizeException in the Cipher class, ensuring subsequent objects used by the application are encrypted with the new key.

Fridaスクリプトを実行するコマンド:

bash
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass-via-exception-handling.js

指紋画面に到達し、authenticate()が開始されると、Fridaコンソールでbypass()と入力してバイパスを有効にします:

Spawning com.generic.insecurebankingfingerprint...
[Android Emulator 5554::com.generic.insecurebankingfingerprint]-> Hooking BiometricPrompt.authenticate()...
Hooking BiometricPrompt.authenticate2()...
Hooking FingerprintManager.authenticate()...
[Android Emulator 5554::com.generic.insecurebankingfingerprint]-> bypass()

方法 3 – インスツルメンテーション フレームワーク

Xposed や Frida のようなインスツルメンテーション フレームワークは、アプリケーションのメソッドにランタイムでフックするために使用できます。指紋認証の場合、これらのフレームワークは次のことができます:

  1. 認証コールバックをモックする: BiometricPrompt.AuthenticationCallbackonAuthenticationSucceededonAuthenticationFailed、または onAuthenticationError メソッドにフックすることで、指紋認証プロセスの結果を制御できます。
  2. SSL ピンニングをバイパスする: これにより、攻撃者はクライアントとサーバー間のトラフィックを傍受および変更でき、認証プロセスを変更したり、機密データを盗んだりする可能性があります。

Frida の例コマンド:

bash
frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in

方法 4 – リバースエンジニアリングとコード修正

リバースエンジニアリングツールとして APKTooldex2jarJD-GUI を使用して、Androidアプリケーションを逆コンパイルし、そのソースコードを読み、認証メカニズムを理解することができます。一般的な手順は以下の通りです:

  1. APKの逆コンパイル: APKファイルをより人間が読みやすい形式(Javaコードなど)に変換します。
  2. コードの分析: 指紋認証の実装を探し、潜在的な弱点(フォールバックメカニズムや不適切な検証チェックなど)を特定します。
  3. APKの再コンパイル: 指紋認証をバイパスするためにコードを修正した後、アプリケーションは再コンパイルされ、署名され、テストのためにデバイスにインストールされます。

方法 5 – カスタム認証ツールの使用

認証メカニズムをテストし、バイパスするために設計された専門的なツールやスクリプトがあります。例えば:

  1. MAGISKモジュール: MAGISKはAndroid用のツールで、ユーザーがデバイスをルート化し、指紋を含むハードウェアレベルの情報を修正または偽装するモジュールを追加できます。
  2. カスタムビルドのスクリプト: スクリプトはAndroidデバッグブリッジ(ADB)と対話するか、アプリケーションのバックエンドと直接対話して指紋認証をシミュレートまたはバイパスするために書かれることがあります。

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする