Bypass Biometric Authentication (Android)

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

HackTricksをサポートする

方法1 – 暗号オブジェクトを使用せずにバイパスする

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

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スクリプトを実行するコマンド:

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

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

WithSecureによる別のFridaスクリプトは、安全でない暗号オブジェクトの使用をバイパスすることに対処しています。このスクリプトは、指紋によって承認されていないCryptoObjectを使用してonAuthenticationSucceededを呼び出します。アプリケーションが異なる暗号オブジェクトを使用しようとすると、例外が発生します。このスクリプトは、onAuthenticationSucceededを呼び出し、_Cipher_クラス内のjavax.crypto.IllegalBlockSizeExceptionを処理する準備をし、アプリケーションによって使用される後続のオブジェクトが新しいキーで暗号化されることを保証します。

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

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()

Method 3 – Instrumentation Frameworks

Instrumentation frameworks like Xposed or Frida can be used to hook into application methods at runtime. For fingerprint authentication, these frameworks can:

  1. モック認証コールバック: BiometricPrompt.AuthenticationCallbackonAuthenticationSucceededonAuthenticationFailed、またはonAuthenticationErrorメソッドにフックすることで、指紋認証プロセスの結果を制御できます。

  2. SSLピンニングをバイパス: これにより、攻撃者はクライアントとサーバー間のトラフィックを傍受し、変更することができ、認証プロセスを変更したり、機密データを盗んだりする可能性があります。

Example command for Frida:

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)と対話するか、アプリケーションのバックエンドと直接対話して指紋認証をシミュレートまたはバイパスするために書かれることがあります。

参考文献

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Last updated