Bypass Biometric Authentication (Android)
Reading time: 7 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Methode 1 – Umgehung ohne Verwendung von CryptoObject
Der Fokus liegt hier auf dem onAuthenticationSucceeded Callback, der im Authentifizierungsprozess entscheidend ist. Forscher von WithSecure entwickelten ein Frida-Skript, das die Umgehung des NULL CryptoObject in onAuthenticationSucceeded(...) ermöglicht. Das Skript erzwingt eine automatische Umgehung der Fingerabdruckauthentifizierung bei der Aufruf des Verfahrens. Unten ist ein vereinfachter Ausschnitt, der die Umgehung im Kontext von Android Fingerabdruck zeigt, mit der vollständigen Anwendung verfügbar auf 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();
}
});
Befehl zum Ausführen des Frida-Skripts:
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass.js
Methode 2 – Ausnahmebehandlungsansatz
Ein weiteres Frida-Skript von WithSecure behandelt das Umgehen der unsicheren Verwendung von Kryptoobjekten. Das Skript ruft onAuthenticationSucceeded mit einem CryptoObject auf, das nicht durch einen Fingerabdruck autorisiert wurde. Wenn die Anwendung versucht, ein anderes Cipher-Objekt zu verwenden, wird eine Ausnahme ausgelöst. Das Skript bereitet sich darauf vor, onAuthenticationSucceeded aufzurufen und die javax.crypto.IllegalBlockSizeException in der Cipher-Klasse zu behandeln, um sicherzustellen, dass nachfolgende Objekte, die von der Anwendung verwendet werden, mit dem neuen Schlüssel verschlüsselt sind.
Befehl zum Ausführen des Frida-Skripts:
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass-via-exception-handling.js
Beim Erreichen des Fingerabdruckbildschirms und der Initiierung von authenticate()
, geben Sie bypass()
in die Frida-Konsole ein, um den Bypass zu aktivieren:
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()
Methode 3 – Instrumentierungs-Frameworks
Instrumentierungs-Frameworks wie Xposed oder Frida können verwendet werden, um zur Laufzeit in Anwendungs-Methoden einzugreifen. Für die Fingerabdruck-Authentifizierung können diese Frameworks:
- Die Authentifizierungs-Callbacks fälschen: Durch das Hooken in die Methoden
onAuthenticationSucceeded
,onAuthenticationFailed
oderonAuthenticationError
desBiometricPrompt.AuthenticationCallback
können Sie den Ausgang des Fingerabdruck-Authentifizierungsprozesses steuern. - SSL-Pinning umgehen: Dies ermöglicht es einem Angreifer, den Datenverkehr zwischen dem Client und dem Server abzufangen und zu modifizieren, wodurch der Authentifizierungsprozess potenziell verändert oder sensible Daten gestohlen werden können.
Beispielbefehl für Frida:
frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in
Methode 4 – Reverse Engineering & Code-Modifikation
Reverse Engineering-Tools wie APKTool
, dex2jar
und JD-GUI
können verwendet werden, um eine Android-Anwendung zu dekompilieren, ihren Quellcode zu lesen und ihren Authentifizierungsmechanismus zu verstehen. Die Schritte umfassen in der Regel:
- Dekompilieren der APK: Konvertieren Sie die APK-Datei in ein menschenlesbareres Format (wie Java-Code).
- Analysieren des Codes: Suchen Sie nach der Implementierung der Fingerabdruckauthentifizierung und identifizieren Sie potenzielle Schwächen (wie Fallback-Mechanismen oder unsachgemäße Validierungsprüfungen).
- Rekompilieren der APK: Nach der Modifikation des Codes, um die Fingerabdruckauthentifizierung zu umgehen, wird die Anwendung recompiled, signiert und auf dem Gerät zur Prüfung installiert.
Methode 5 – Verwendung von benutzerdefinierten Authentifizierungswerkzeugen
Es gibt spezialisierte Werkzeuge und Skripte, die entwickelt wurden, um Authentifizierungsmechanismen zu testen und zu umgehen. Zum Beispiel:
- MAGISK-Module: MAGISK ist ein Tool für Android, das es Benutzern ermöglicht, ihre Geräte zu rooten und Module hinzuzufügen, die hardwarebezogene Informationen, einschließlich Fingerabdrücke, modifizieren oder fälschen können.
- Benutzerdefinierte Skripte: Skripte können geschrieben werden, um mit dem Android Debug Bridge (ADB) oder direkt mit dem Backend der Anwendung zu interagieren, um die Fingerabdruckauthentifizierung zu simulieren oder zu umgehen.
Methode 6 – Universeller Frida-Hook für BiometricPrompt
(API 28-34)
Im Jahr 2023 erschien ein Community-Frida-Skript mit dem Namen Universal-Android-Biometric-Bypass auf CodeShare. Das Skript hookt jede Überladung von BiometricPrompt.authenticate()
sowie das veraltete FingerprintManager.authenticate()
und löst direkt onAuthenticationSucceeded()
mit einem gefälschten AuthenticationResult
, das ein null CryptoObject
enthält, aus. Da es sich dynamisch an API-Ebenen anpasst, funktioniert es weiterhin auf Android 14 (API 34), wenn die Zielanwendung keine kryptografischen Überprüfungen des zurückgegebenen CryptoObject
durchführt.
# Install the script from CodeShare and run it against the target package
frida -U -f com.target.app --no-pause -l universal-android-biometric-bypass.js
Key ideas
- Alles geschieht im Benutzerspeicher – kein Kernel-Exploit oder Root ist erforderlich.
- Der Angriff bleibt für die Benutzeroberfläche vollständig still: Der biometrische Dialog des Systems erscheint niemals.
- Minderung: überprüfen Sie immer
result.cryptoObject
und dessen Verschlüsselung/Signatur, bevor Sie sensible Funktionen entsperren.
Methode 7 – Downgrade / Fallback-Manipulation
Beginnend mit Android 11 können Entwickler angeben, welche Authentifizierer über setAllowedAuthenticators()
(oder das ältere setDeviceCredentialAllowed()
) akzeptabel sind. Ein Runtime-Hooking-Angriff kann das allowedAuthenticators
-Bitfeld auf den schwächeren
BIOMETRIC_WEAK | DEVICE_CREDENTIAL
-Wert zwingen:
// Frida one-liner – replace strong-only policy with weak/device-credential
var PromptInfoBuilder = Java.use('androidx.biometric.BiometricPrompt$PromptInfo$Builder');
PromptInfoBuilder.setAllowedAuthenticators.implementation = function(flags){
return this.setAllowedAuthenticators(0x0002 | 0x8000); // BIOMETRIC_WEAK | DEVICE_CREDENTIAL
};
Wenn die App das zurückgegebene AuthenticationResult
nicht anschließend validiert, kann ein Angreifer einfach die PIN/Pattern Fallback-Taste drücken oder sogar einen neuen schwachen biometrischen Zugang registrieren, um Zugriff zu erhalten.
Methode 8 – Vendor / Kernel-Level CVEs
Behalten Sie die Android-Sicherheitsbulletins im Auge: Mehrere aktuelle Kernel-seitige Fehler ermöglichen eine lokale Privilegieneskalation über das Fingerabdruck-HAL und deaktivieren oder überbrücken effektiv die Sensorpipeline. Beispiele sind:
- CVE-2023-20995 – Logikfehler in
captureImage
vonCustomizedSensor.cpp
(Pixel 8, Android 13), der das Umgehen der Entsperrung ohne Benutzerinteraktion ermöglicht. - CVE-2024-53835 / CVE-2024-53840 – „möglicher biometrischer Umgehung aufgrund einer ungewöhnlichen Grundursache“, die im Dezember 2024 Pixel Bulletin gepatcht wurde.
Obwohl diese Schwachstellen den Sperrbildschirm anvisieren, kann ein gerooteter Tester sie mit App-Level-Fehlern verketten, um biometrische Authentifizierung in der App zu umgehen.
Härtungs-Checkliste für Entwickler (Schnelle Pentester-Notizen)
- Erzwingen Sie
setUserAuthenticationRequired(true)
undsetInvalidatedByBiometricEnrollment(true)
, wenn Sie Keystore-Schlüssel generieren. Ein gültiger biometrischer Nachweis ist dann erforderlich, bevor der Schlüssel verwendet werden kann. - Lehnen Sie ein
CryptoObject
mit null oder unerwartetem Cipher / Signatur ab; behandeln Sie dies als einen fatalen Authentifizierungsfehler. - Bevorzugen Sie bei der Verwendung von
BiometricPrompt
BIOMETRIC_STRONG
und fallen Sie niemals aufBIOMETRIC_WEAK
oderDEVICE_CREDENTIAL
für hochriskante Aktionen zurück. - Fixieren Sie die neueste
androidx.biometric
Version (≥1.2.0-beta02) – aktuelle Versionen fügen automatische Null-Cipher-Prüfungen hinzu und verschärfen die zulässigen Authentifizierer-Kombinationen.
Referenzen
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.