Bypass Biometric Authentication (Android)

Reading time: 6 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Method 1 – Bypassing with No Crypto Object Usage

Fokus ovde je na onAuthenticationSucceeded povratnom pozivu, koji je ključan u procesu autentifikacije. Istraživači iz WithSecure-a razvili su Frida script, koji omogućava zaobilaženje NULL CryptoObject u onAuthenticationSucceeded(...). Skripta prisiljava automatsko zaobilaženje autentifikacije otiska prsta prilikom poziva metode. Ispod je pojednostavljeni isječak koji prikazuje zaobilaženje u kontekstu Android otiska prsta, sa punom aplikacijom dostupnom na GitHub.

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();
}
});

Komanda za pokretanje Frida skripte:

bash
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass.js

Metod 2 – Pristup Rukovanju Izuzecima

Još jedan Frida skript od WithSecure se bavi zaobilaženjem nesigurne upotrebe kripto objekata. Skript poziva onAuthenticationSucceeded sa CryptoObject koji nije autorizovan otiskom prsta. Ako aplikacija pokuša da koristi drugi objekat šifriranja, izazvaće izuzetak. Skript se priprema da pozove onAuthenticationSucceeded i obradi javax.crypto.IllegalBlockSizeException u klasi Cipher, osiguravajući da su naredni objekti koje koristi aplikacija šifrovani novim ključem.

Komanda za pokretanje Frida skripta:

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

Kada dođete do ekrana otiska prsta i pokrenete authenticate(), otkucajte bypass() u Frida konzoli da aktivirate zaobilaženje:

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()

Metod 3 – Instrumentacijski Okviri

Instrumentacijski okviri kao što su Xposed ili Frida mogu se koristiti za povezivanje sa metodama aplikacije u vreme izvođenja. Za autentifikaciju otiskom prsta, ovi okviri mogu:

  1. Lažirati Povratne Informacije o Autentifikaciji: Povezivanjem sa metodama onAuthenticationSucceeded, onAuthenticationFailed ili onAuthenticationError iz BiometricPrompt.AuthenticationCallback, možete kontrolisati ishod procesa autentifikacije otiskom prsta.
  2. Obići SSL Pinovanje: Ovo omogućava napadaču da presretne i izmeni saobraćaj između klijenta i servera, potencijalno menjajući proces autentifikacije ili kradući osetljive podatke.

Primer komande za Frida:

bash
frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in

Metod 4 – Reverzno Inženjerstvo i Modifikacija Koda

Alati za reverzno inženjerstvo kao što su APKTool, dex2jar i JD-GUI mogu se koristiti za dekompilaciju Android aplikacije, čitanje njenog izvornog koda i razumevanje njenog mehanizma autentifikacije. Koraci obično uključuju:

  1. Dekompilacija APK-a: Pretvorite APK datoteku u čitljiviji format (kao što je Java kod).
  2. Analiza Koda: Potražite implementaciju autentifikacije otiskom prsta i identifikujte potencijalne slabosti (kao što su mehanizmi povratka ili nepravilne provere validacije).
  3. Rekompilacija APK-a: Nakon modifikacije koda za zaobilaženje autentifikacije otiskom prsta, aplikacija se recompile, potpisuje i instalira na uređaj za testiranje.

Metod 5 – Korišćenje Prilagođenih Alata za Autentifikaciju

Postoje specijalizovani alati i skripte dizajnirane za testiranje i zaobilaženje mehanizama autentifikacije. Na primer:

  1. MAGISK Moduli: MAGISK je alat za Android koji omogućava korisnicima da root-uju svoje uređaje i dodaju module koji mogu modifikovati ili lažirati informacije na hardverskom nivou, uključujući otiske prstiju.
  2. Prilagođene Skripte: Skripte se mogu napisati za interakciju sa Android Debug Bridge (ADB) ili direktno sa backend-om aplikacije kako bi simulirale ili zaobišle autentifikaciju otiskom prsta.

Metod 6 – Univerzalni Frida Hook za BiometricPrompt (API 28-34)

U 2023. godini, zajednički Frida skript pod nazivom Universal-Android-Biometric-Bypass pojavio se na CodeShare-u. Skript hvata svaku preopterećenje BiometricPrompt.authenticate() kao i legacy FingerprintManager.authenticate() i direktno pokreće onAuthenticationSucceeded() sa fabrikovanim AuthenticationResult koji sadrži null CryptoObject. Pošto se dinamički prilagođava API nivoima, i dalje funkcioniše na Android 14 (API 34) ako ciljana aplikacija ne vrši nikakve kriptografske provere na vraćenom CryptoObject.

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

Ključne ideje

  • Sve se dešava u korisničkom prostoru – nije potreban kernel exploit ili root.
  • Napad ostaje potpuno neprimetan za UI: sistemski biometrijski dijalog se nikada ne pojavljuje.
  • Ublažavanje: uvek proveravajte result.cryptoObject i njegov cipher/potpis pre otključavanja osetljivih funkcija.

Metod 7 – Manipulacija snižavanjem / povratkom

Počevši od Android 11, programeri mogu odrediti koji su autentifikatori prihvatljivi putem setAllowedAuthenticators() (ili starijeg setDeviceCredentialAllowed()). Napad runtime hooking može primorati allowedAuthenticators bit-polje na slabiju BIOMETRIC_WEAK | DEVICE_CREDENTIAL vrednost:

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
};

Ako aplikacija ne validira vraćeni AuthenticationResult, napadač može jednostavno pritisnuti dugme za PIN/Pattern rezervu ili čak registrovati novu slabu biometriju kako bi dobio pristup.

Metod 8 – CVE-ovi na nivou dobavljača / jezgra

Pratite bezbednosne biltene za Android: nekoliko nedavnih grešaka na strani jezgra omogućava lokalno eskaliranje privilegija kroz fingerprint HAL i efikasno onemogućava ili skraćuje senzor pipeline. Primeri uključuju:

  • CVE-2023-20995 – logička greška u captureImage iz CustomizedSensor.cpp (Pixel 8, Android 13) koja omogućava zaobilaženje otključavanja bez interakcije korisnika.
  • CVE-2024-53835 / CVE-2024-53840 – “moguće biometrijsko zaobilaženje zbog neobičnog uzroka” zakrpljeno u decembarskom 2024. Pixel biltenu.

Iako ove ranjivosti ciljaju ekran za zaključavanje, tester sa root pristupom može ih povezati sa greškama na nivou aplikacije kako bi zaobišao biometriju unutar aplikacije.


Lista za jačanje bezbednosti za programere (Brze beleške za pentestere)

  • Primorajte setUserAuthenticationRequired(true) i setInvalidatedByBiometricEnrollment(true) prilikom generisanja Keystore ključeva. Validna biometrija je tada potrebna pre nego što se ključ može koristiti.
  • Odbacite CryptoObject sa null ili neočekivanim šifrom / potpisom; tretirajte ovo kao fatalnu grešku autentifikacije.
  • Kada koristite BiometricPrompt, preferirajte BIOMETRIC_STRONG i nikada ne prelazite na BIOMETRIC_WEAK ili DEVICE_CREDENTIAL za visoko rizične radnje.
  • Zaključajte najnoviju verziju androidx.biometric (≥1.2.0-beta02) – nedavna izdanja dodaju automatske provere null-šifre i pooštravaju dozvoljene kombinacije autentifikatora.

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks