hacktricks/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md
2023-06-06 18:56:34 +00:00

6 KiB

Bypass da 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 do callback onAuthenticationSucceded ser chamado. Os pesquisadores da F-Secure desenvolveram um script Frida que pode ser usado para burlar o CryptoObject NULL em onAuthenticationSucceeded(…). O script irá automaticamente burlar a impressão digital quando o método mencionado for chamado. Aqui está um exemplo curto que mostra a burla para a impressão digital do Android. O aplicativo completo pode ser baixado 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ção

Este script Frida desenvolvido pela F-Secure pode ser usado para contornar o uso inseguro do objeto criptográfico. 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. O problema é 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ê vir 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 🎥