hacktricks/src/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md

68 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Umgehung der biometrischen Authentifizierung (Android)
{{#include ../../banners/hacktricks-training.md}}
## **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](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js), 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](https://github.com/St3v3nsS/InsecureBanking).
```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();
}
});
```
Befehl zum Ausführen des Frida-Skripts:
```bash
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass.js
```
## **Methode 2 Ausnahmebehandlungsansatz**
Ein weiteres [Frida-Skript](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js) 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:
```bash
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:
1. **Die Authentifizierungs-Callbacks nachahmen**: Durch das Hooken in die Methoden `onAuthenticationSucceeded`, `onAuthenticationFailed` oder `onAuthenticationError` der `BiometricPrompt.AuthenticationCallback` können Sie den Ausgang des Fingerabdruck-Authentifizierungsprozesses steuern.
2. **SSL-Pinning umgehen**: Dies ermöglicht es einem Angreifer, den Datenverkehr zwischen dem Client und dem Server abzufangen und zu modifizieren, was potenziell den Authentifizierungsprozess verändern oder sensible Daten stehlen kann.
Beispielbefehl für Frida:
```bash
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:
1. **Dekompilieren der APK**: Konvertieren Sie die APK-Datei in ein menschenlesbareres Format (wie Java-Code).
2. **Analysieren des Codes**: Suchen Sie nach der Implementierung der Fingerabdruckauthentifizierung und identifizieren Sie potenzielle Schwächen (wie Fallback-Mechanismen oder unsachgemäße Validierungsprüfungen).
3. **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 Tools und Skripte, die entwickelt wurden, um Authentifizierungsmechanismen zu testen und zu umgehen. Zum Beispiel:
1. **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.
2. **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.
## Referenzen
- [https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/](https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/)
{{#include ../../banners/hacktricks-training.md}}