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

6.1 KiB

Contourner l'authentification biométrique (Android)

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Ces méthodes ont été copiées depuis https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/

Méthode 1 - Lorsque l'objet crypto n'est pas utilisé

La mise en œuvre de l'authentification repose sur l'appel du rappel onAuthenticationSucceded. Les chercheurs de WithSecure ont développé un script Frida qui peut être utilisé pour contourner le CryptoObject NULL dans onAuthenticationSucceeded(…). Le script contournera automatiquement l'empreinte digitale lorsque la méthode mentionnée ci-dessus est appelée. Voici un court exemple qui montre le contournement pour l'empreinte digitale Android. L'application complète peut être téléchargée depuis mon 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 -U -f com.st3v3nss.insecurebankingfingerprint --no-pause -l fingerprint-bypass.js

Méthode 2 - Gestion des exceptions

Ce script Frida développé par WithSecure peut être utilisé pour contourner l'utilisation non sécurisée de l'objet crypto. Tout ce que le script doit faire, c'est appeler manuellement onAuthenticationSucceded avec un CryptoObject non autorisé (non déverrouillé par empreinte digitale) stocké dans le Keystore. Le problème est que si l'application tente d'utiliser un autre objet de chiffrement, une exception sera levée. Ce script tentera d'appeler onAuthenticationSucceded et de capturer l'exception javax.crypto.IllegalBlockSizeException dans la classe Cipher. Désormais, tous les objets utilisés par l'application seront chiffrés à l'aide de cette nouvelle clé.

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

Maintenant, allez à l'écran d'empreinte digitale et attendez que la fonction authenticate() soit appelée. Une fois que vous voyez cela à l'écran, tapez bypass() dans la console Frida :

Spawning `com.st3v3nss.insecurebankingfingerprint`...
[Android Emulator 5554::com.st3v3nss.insecurebankingfingerprint ]-> Hooking BiometricPrompt.authenticate()...
Hooking BiometricPrompt.authenticate2()...
Hooking FingerprintManager.authenticate()...
[Android Emulator 5554::com.st3v3nss.insecurebankingfingerprint ]-> bypass()
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥