mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/bypass-biometr
This commit is contained in:
parent
996e8158cf
commit
001edcbf8e
@ -19,13 +19,13 @@ frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-byp
|
||||
```
|
||||
## **Metodo 2 – Approccio alla Gestione delle Eccezioni**
|
||||
|
||||
Un altro [Frida script](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js) di WithSecure affronta il bypass dell'uso di oggetti crittografici insicuri. Lo script invoca _onAuthenticationSucceeded_ con un _CryptoObject_ che non è stato autorizzato da un'impronta digitale. Se l'applicazione tenta di utilizzare un oggetto cifrato diverso, verrà generata un'eccezione. Lo script si prepara a invocare _onAuthenticationSucceeded_ e gestire il _javax.crypto.IllegalBlockSizeException_ nella classe _Cipher_, assicurando che gli oggetti successivi utilizzati dall'applicazione siano crittografati con la nuova chiave.
|
||||
Un altro [Frida script](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js) di WithSecure affronta il bypass dell'uso insicuro degli oggetti crittografici. Lo script invoca _onAuthenticationSucceeded_ con un _CryptoObject_ che non è stato autorizzato da un'impronta digitale. Se l'applicazione tenta di utilizzare un oggetto cifrato diverso, verrà generata un'eccezione. Lo script si prepara a invocare _onAuthenticationSucceeded_ e gestire il _javax.crypto.IllegalBlockSizeException_ nella classe _Cipher_, assicurando che gli oggetti successivi utilizzati dall'applicazione siano crittografati con la nuova chiave.
|
||||
|
||||
Comando per eseguire lo script Frida:
|
||||
```bash
|
||||
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass-via-exception-handling.js
|
||||
```
|
||||
Al raggiungimento dello schermo delle impronte digitali e all'inizio di `authenticate()`, digita `bypass()` nella console di Frida per attivare il bypass:
|
||||
Una volta raggiunta la schermata delle impronte digitali e l'inizio di `authenticate()`, digita `bypass()` nella console di Frida per attivare il bypass:
|
||||
```
|
||||
Spawning com.generic.insecurebankingfingerprint...
|
||||
[Android Emulator 5554::com.generic.insecurebankingfingerprint]-> Hooking BiometricPrompt.authenticate()...
|
||||
@ -48,9 +48,9 @@ frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in
|
||||
|
||||
Strumenti di ingegneria inversa come `APKTool`, `dex2jar` e `JD-GUI` possono essere utilizzati per decompilare un'applicazione Android, leggere il suo codice sorgente e comprendere il suo meccanismo di autenticazione. I passaggi generalmente includono:
|
||||
|
||||
1. **Decompilazione dell'APK**: Convertire il file APK in un formato più leggibile per gli esseri umani (come il codice Java).
|
||||
1. **Decompilazione dell'APK**: Convertire il file APK in un formato più leggibile (come codice Java).
|
||||
2. **Analisi del codice**: Cercare l'implementazione dell'autenticazione tramite impronta digitale e identificare potenziali vulnerabilità (come meccanismi di fallback o controlli di validazione inadeguati).
|
||||
3. **Ricompilazione dell'APK**: Dopo aver modificato il codice per bypassare l'autenticazione tramite impronta digitale, l'applicazione viene ricompilata, firmata e installata sul dispositivo per i test.
|
||||
3. **Ricompilazione dell'APK**: Dopo aver modificato il codice per bypassare l'autenticazione tramite impronta digitale, l'applicazione viene ricompilata, firmata e installata sul dispositivo per il test.
|
||||
|
||||
## **Metodo 5 – Utilizzo di strumenti di autenticazione personalizzati**
|
||||
|
||||
@ -59,9 +59,54 @@ Esistono strumenti e script specializzati progettati per testare e bypassare i m
|
||||
1. **Moduli MAGISK**: MAGISK è uno strumento per Android che consente agli utenti di rootare i propri dispositivi e aggiungere moduli che possono modificare o falsificare informazioni a livello hardware, comprese le impronte digitali.
|
||||
2. **Script personalizzati**: Possono essere scritti script per interagire con l'Android Debug Bridge (ADB) o direttamente con il backend dell'applicazione per simulare o bypassare l'autenticazione tramite impronta digitale.
|
||||
|
||||
---
|
||||
|
||||
## **Metodo 6 – Hook Frida Universale per `BiometricPrompt` (API 28-34)**
|
||||
|
||||
Nel 2023 è apparso uno script Frida della comunità denominato **Universal-Android-Biometric-Bypass** su CodeShare. Lo script aggancia ogni sovraccarico di `BiometricPrompt.authenticate()` così come il legacy `FingerprintManager.authenticate()` e attiva direttamente `onAuthenticationSucceeded()` con un **`AuthenticationResult` fabbricato contenente un `CryptoObject` nullo**. Poiché si adatta dinamicamente ai livelli API, funziona ancora su Android 14 (API 34) se l'app target non esegue **controlli crittografici sul `CryptoObject` restituito**.
|
||||
```bash
|
||||
# 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
|
||||
* Tutto avviene nello spazio utente – non è necessario alcun exploit del kernel o root.
|
||||
* L'attacco rimane completamente silenzioso per l'interfaccia utente: il dialogo biometrico di sistema non appare mai.
|
||||
* Mitigazione: **verifica sempre `result.cryptoObject` e il suo cifrario/firma prima di sbloccare funzionalità sensibili**.
|
||||
|
||||
## **Method 7 – Downgrade / Fallback Manipulation**
|
||||
|
||||
A partire da Android 11, gli sviluppatori possono specificare quali autenticatori sono accettabili tramite `setAllowedAuthenticators()` (o il più vecchio `setDeviceCredentialAllowed()`). Un attacco di **runtime hooking** può forzare il campo bit `allowedAuthenticators` al valore più debole `BIOMETRIC_WEAK | DEVICE_CREDENTIAL`:
|
||||
```javascript
|
||||
// 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
|
||||
};
|
||||
```
|
||||
Se l'app **non** valida successivamente il `AuthenticationResult` restituito, un attaccante può semplicemente premere il pulsante di fallback _PIN/Pattern_ o persino registrare un nuovo biometrico debole per ottenere accesso.
|
||||
|
||||
## **Metodo 8 – CVE a livello di fornitore / kernel**
|
||||
|
||||
Tieni d'occhio i bollettini di sicurezza di Android: diversi bug recenti a livello di kernel consentono l'escalation dei privilegi locali attraverso l'HAL delle impronte digitali e **disabilitano o cortocircuitano effettivamente il pipeline del sensore**. Esempi includono:
|
||||
|
||||
* **CVE-2023-20995** – errore logico in `captureImage` di `CustomizedSensor.cpp` (Pixel 8, Android 13) che consente di bypassare lo sblocco senza interazione dell'utente.
|
||||
* **CVE-2024-53835 / CVE-2024-53840** – “possibile bypass biometrico a causa di una causa radice insolita” corretto nel **bollettino Pixel di dicembre 2024**.
|
||||
|
||||
Sebbene queste vulnerabilità mirino allo schermo di blocco, un tester con accesso root può combinarle con difetti a livello di app per bypassare anche i biometrici in-app.
|
||||
|
||||
---
|
||||
|
||||
### Checklist di indurimento per sviluppatori (Note rapide per pentester)
|
||||
|
||||
* Applica `setUserAuthenticationRequired(true)` e `setInvalidatedByBiometricEnrollment(true)` quando generi chiavi **Keystore**. Un biometrico valido è quindi richiesto prima che la chiave possa essere utilizzata.
|
||||
* Rifiuta un `CryptoObject` con **cifratura / firma null o inaspettata**; considera questo come un errore di autenticazione fatale.
|
||||
* Quando utilizzi `BiometricPrompt`, preferisci `BIOMETRIC_STRONG` e **non tornare mai a `BIOMETRIC_WEAK` o `DEVICE_CREDENTIAL`** per azioni ad alto rischio.
|
||||
* Fissa l'ultima versione di `androidx.biometric` (≥1.2.0-beta02) – le versioni recenti aggiungono controlli automatici per cifrature null e stringono le combinazioni di autenticazione consentite.
|
||||
|
||||
## Riferimenti
|
||||
|
||||
- [https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/](https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/)
|
||||
- [Universal Android Biometric Bypass – Frida CodeShare](https://codeshare.frida.re/@ax/universal-android-biometric-bypass/)
|
||||
- [Android Pixel Security Bulletin 2024-12-01](https://source.android.com/security/bulletin/pixel/2024-12-01)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user