diff --git a/src/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md b/src/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md index 16bfd7ba9..aa364258b 100644 --- a/src/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md +++ b/src/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md @@ -13,13 +13,13 @@ Toast.makeText(MainActivity.this,"Success",Toast.LENGTH_LONG).show(); } }); ``` -Команда за покретање Frida скрипте: +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](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js) 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 šifarski objekat, to će izazvati izuzetak. Skript se priprema da pozove _onAuthenticationSucceeded_ i obradi _javax.crypto.IllegalBlockSizeException_ u klasi _Cipher_, osiguravajući da su sledeći objekti koje koristi aplikacija šifrovani novim ključem. +Još jedan [Frida skript](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js) 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 @@ -50,7 +50,7 @@ Alati za reverzno inženjerstvo kao što su `APKTool`, `dex2jar` i `JD-GUI` mogu 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 rekompajlira, potpisuje i instalira na uređaj radi testiranja. +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** @@ -59,9 +59,55 @@ Postoje specijalizovani alati i skripte dizajnirane za testiranje i zaobilaženj 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 -- [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}}