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

6 KiB

Bypassar Autenticação Biométrica (Android)

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

Esses métodos foram copiados de https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/

Método 1 - Quando o objeto criptográfico não é usado

A implementação de autenticação depende da chamada de retorno onAuthenticationSucceded ser chamada. Os pesquisadores da WithSecure desenvolveram um script Frida que pode ser usado para bypassar o CryptoObject NULL em onAuthenticationSucceeded(…). O script irá automaticamente bypassar a impressão digital quando o método mencionado for chamado. Aqui está um exemplo curto que mostra o bypass para a Impressão Digital do Android. A aplicação completa pode ser baixada do meu 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étodo 2 - Tratamento de Exceções

Este script Frida desenvolvido pela WithSecure pode ser usado para contornar o uso inseguro do objeto de criptografia. Tudo o que o script precisa fazer é chamar manualmente o onAuthenticationSucceded com um CryptoObject não autorizado (não desbloqueado pela impressão digital) armazenado no Keystore. A questão é que se o aplicativo tentar usar outro objeto de cifra, então uma exceção será lançada. Este script tentará chamar onAuthenticationSucceded e capturar a exceção javax.crypto.IllegalBlockSizeException na classe Cipher. A partir de agora, todos os objetos que o aplicativo usa serão criptografados usando esta nova chave.

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

Agora, vá para a tela de impressão digital e aguarde a chamada do authenticate(). Assim que você ver isso na tela, digite bypass() no console do 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 🎥