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 947eff2a2..44ad6982c 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 @@ -19,7 +19,7 @@ frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-byp ``` ## **Metoda 2 – Podejście do obsługi wyjątków** -Inny [skrypt Frida](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js) od WithSecure dotyczy omijania niebezpiecznego użycia obiektu Crypto. Skrypt wywołuje _onAuthenticationSucceeded_ z _CryptoObject_, który nie został autoryzowany przez odcisk palca. Jeśli aplikacja spróbuje użyć innego obiektu szyfrującego, spowoduje to wystąpienie wyjątku. Skrypt przygotowuje się do wywołania _onAuthenticationSucceeded_ i obsługi _javax.crypto.IllegalBlockSizeException_ w klasie _Cipher_, zapewniając, że kolejne obiekty używane przez aplikację są szyfrowane nowym kluczem. +Inny [skrypt Frida](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js) od WithSecure dotyczy omijania niebezpiecznego użycia obiektu kryptograficznego. Skrypt wywołuje _onAuthenticationSucceeded_ z _CryptoObject_, który nie został autoryzowany przez odcisk palca. Jeśli aplikacja spróbuje użyć innego obiektu szyfrującego, spowoduje to wywołanie wyjątku. Skrypt przygotowuje się do wywołania _onAuthenticationSucceeded_ i obsługi _javax.crypto.IllegalBlockSizeException_ w klasie _Cipher_, zapewniając, że kolejne obiekty używane przez aplikację są szyfrowane nowym kluczem. Polecenie do uruchomienia skryptu Frida: ```bash @@ -37,31 +37,76 @@ Hooking FingerprintManager.authenticate()... Ramy instrumentacji, takie jak Xposed lub Frida, mogą być używane do podłączania się do metod aplikacji w czasie rzeczywistym. W przypadku uwierzytelniania za pomocą odcisku palca, te ramy mogą: -1. **Zamockować Wywołania Uwierzytelniania**: Poprzez podłączenie się do metod `onAuthenticationSucceeded`, `onAuthenticationFailed` lub `onAuthenticationError` klasy `BiometricPrompt.AuthenticationCallback`, możesz kontrolować wynik procesu uwierzytelniania za pomocą odcisku palca. +1. **Zasymulować Wywołania Uwierzytelnienia**: Poprzez podłączenie się do metod `onAuthenticationSucceeded`, `onAuthenticationFailed` lub `onAuthenticationError` klasy `BiometricPrompt.AuthenticationCallback`, możesz kontrolować wynik procesu uwierzytelniania za pomocą odcisku palca. 2. **Obejść SSL Pinning**: To pozwala atakującemu na przechwycenie i modyfikację ruchu między klientem a serwerem, potencjalnie zmieniając proces uwierzytelniania lub kradnąc wrażliwe dane. Przykładowe polecenie dla Frida: ```bash frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in ``` -## **Metoda 4 – Inżynieria Wsteczna i Modyfikacja Kodu** +## **Metoda 4 – Inżynieria wsteczna i modyfikacja kodu** -Narzędzia do inżynierii wstecznej, takie jak `APKTool`, `dex2jar` i `JD-GUI`, mogą być używane do dekompilacji aplikacji na Androida, odczytania jej kodu źródłowego i zrozumienia mechanizmu uwierzytelniania. Kroki zazwyczaj obejmują: +Narzędzia do inżynierii wstecznej, takie jak `APKTool`, `dex2jar` i `JD-GUI`, mogą być używane do dekompilacji aplikacji na Androida, odczytywania jej kodu źródłowego i zrozumienia mechanizmu uwierzytelniania. Kroki zazwyczaj obejmują: 1. **Dekompilacja APK**: Konwersja pliku APK na bardziej czytelny format (np. kod Java). -2. **Analiza Kodu**: Szukanie implementacji uwierzytelniania za pomocą odcisku palca i identyfikacja potencjalnych słabości (np. mechanizmy zapasowe lub niewłaściwe kontrole walidacji). -3. **Rekompilacja APK**: Po modyfikacji kodu w celu ominięcia uwierzytelniania za pomocą odcisku palca, aplikacja jest rekompilowana, podpisywana i instalowana na urządzeniu do testowania. +2. **Analiza kodu**: Szukanie implementacji uwierzytelniania za pomocą odcisków palców i identyfikacja potencjalnych słabości (np. mechanizmy zapasowe lub niewłaściwe kontrole walidacji). +3. **Rekompilacja APK**: Po modyfikacji kodu w celu ominięcia uwierzytelniania za pomocą odcisków palców, aplikacja jest rekompilowana, podpisywana i instalowana na urządzeniu do testów. -## **Metoda 5 – Użycie Niestandardowych Narzędzi Uwierzytelniających** +## **Metoda 5 – Użycie niestandardowych narzędzi uwierzytelniających** Istnieją specjalistyczne narzędzia i skrypty zaprojektowane do testowania i omijania mechanizmów uwierzytelniania. Na przykład: -1. **Moduły MAGISK**: MAGISK to narzędzie dla Androida, które pozwala użytkownikom na uzyskanie dostępu do roota ich urządzeń i dodawanie modułów, które mogą modyfikować lub fałszować informacje na poziomie sprzętowym, w tym odciski palców. -2. **Niestandardowe skrypty**: Skrypty mogą być pisane w celu interakcji z Android Debug Bridge (ADB) lub bezpośrednio z backendem aplikacji, aby symulować lub omijać uwierzytelnianie za pomocą odcisku palca. +1. **Moduły MAGISK**: MAGISK to narzędzie dla Androida, które pozwala użytkownikom na uzyskanie dostępu root do swoich urządzeń i dodawanie modułów, które mogą modyfikować lub fałszować informacje na poziomie sprzętowym, w tym odciski palców. +2. **Niestandardowe skrypty**: Skrypty mogą być pisane w celu interakcji z Android Debug Bridge (ADB) lub bezpośrednio z backendem aplikacji, aby symulować lub omijać uwierzytelnianie za pomocą odcisków palców. + +--- + +## **Metoda 6 – Uniwersalny hook Frida dla `BiometricPrompt` (API 28-34)** + +W 2023 roku na CodeShare pojawił się skrypt Frida społeczności oznaczony jako **Universal-Android-Biometric-Bypass**. Skrypt ten przechwytuje każdą przeciążoną wersję `BiometricPrompt.authenticate()` oraz starszą wersję `FingerprintManager.authenticate()` i bezpośrednio wywołuje `onAuthenticationSucceeded()` z **sfabrykowanym `AuthenticationResult` zawierającym null `CryptoObject`**. Ponieważ dostosowuje się dynamicznie do poziomów API, nadal działa na Androidzie 14 (API 34), jeśli docelowa aplikacja **nie wykonuje żadnych kontroli kryptograficznych na zwróconym `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 +``` +Key ideas +* Wszystko dzieje się w przestrzeni użytkownika – nie jest wymagany exploit jądra ani root. +* Atak pozostaje całkowicie cichy dla interfejsu użytkownika: dialog biometryczny systemu nigdy się nie pojawia. +* Łagodzenie: **zawsze weryfikuj `result.cryptoObject` oraz jego szyfr/podpis przed odblokowaniem wrażliwych funkcji**. + +## **Method 7 – Manipulacja obniżeniem / powrotem** + +Zaczynając od Androida 11, deweloperzy mogą określić, które autoryzatory są akceptowalne za pomocą `setAllowedAuthenticators()` (lub starszego `setDeviceCredentialAllowed()`). Atak **runtime hooking** może wymusić pole bitowe `allowedAuthenticators` na słabszą wartość `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 +}; +``` +Jeśli aplikacja **nie** waliduje zwróconego `AuthenticationResult`, atakujący może po prostu nacisnąć przycisk _PIN/Pattern_ lub nawet zarejestrować nowy słaby biometryczny, aby uzyskać dostęp. + +## **Metoda 8 – CVE na poziomie dostawcy / jądra** + +Zwracaj uwagę na biuletyny bezpieczeństwa Androida: kilka ostatnich błędów po stronie jądra pozwala na lokalne podniesienie uprawnień przez HAL odcisku palca i skutecznie **wyłącza lub skraca pipeline czujnika**. Przykłady obejmują: + +* **CVE-2023-20995** – błąd logiczny w `captureImage` w `CustomizedSensor.cpp` (Pixel 8, Android 13) umożliwiający obejście odblokowania bez interakcji użytkownika. +* **CVE-2024-53835 / CVE-2024-53840** – „możliwe obejście biometryczne z powodu nietypowej przyczyny” załatane w **biuletynie Pixel z grudnia 2024**. + +Chociaż te luki celują w ekran blokady, tester z rootem może je połączyć z błędami na poziomie aplikacji, aby obejść biometrykę w aplikacji. + +--- + +### Lista kontrolna wzmacniania dla deweloperów (Szybkie notatki pentestera) + +* Wymuszaj `setUserAuthenticationRequired(true)` i `setInvalidatedByBiometricEnrollment(true)` podczas generowania kluczy **Keystore**. Ważny biometryczny jest wtedy wymagany przed użyciem klucza. +* Odrzuć `CryptoObject` z **null lub nieoczekiwanym szyfrem / podpisem**; traktuj to jako krytyczny błąd uwierzytelnienia. +* Podczas korzystania z `BiometricPrompt`, preferuj `BIOMETRIC_STRONG` i **nigdy nie przechodź do `BIOMETRIC_WEAK` lub `DEVICE_CREDENTIAL`** w przypadku działań wysokiego ryzyka. +* Zablokuj najnowszą wersję `androidx.biometric` (≥1.2.0-beta02) – ostatnie wydania dodają automatyczne kontrole null-cipher i zaostrzają dozwolone kombinacje uwierzytelniające. ## Odniesienia -- [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}}