Bypass Biometric Authentication (Android)
Reading time: 6 minutes
tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
Metoda 1 – Ominięcie bez użycia obiektu Crypto
Skupiamy się tutaj na wywołaniu onAuthenticationSucceeded, które jest kluczowe w procesie uwierzytelniania. Badacze z WithSecure opracowali skrypt Frida, umożliwiający ominięcie NULL CryptoObject w onAuthenticationSucceeded(...). Skrypt wymusza automatyczne ominięcie uwierzytelniania odciskiem palca po wywołaniu metody. Poniżej znajduje się uproszczony fragment demonstrujący ominięcie w kontekście odcisku palca w Androidzie, a pełna aplikacja jest dostępna na 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();
}
});
Polecenie do uruchomienia skryptu Frida:
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass.js
Metoda 2 – Podejście do obsługi wyjątków
Inny skrypt Frida 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:
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass-via-exception-handling.js
Po dotarciu do ekranu odcisku palca i rozpoczęciu authenticate(), wpisz bypass() w konsoli Frida, aby aktywować obejście:
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()
Metoda 3 – Ramy Instrumentacji
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ą:
- Zasymulować Wywołania Uwierzytelnienia: Poprzez podłączenie się do metod
onAuthenticationSucceeded,onAuthenticationFailedlubonAuthenticationErrorklasyBiometricPrompt.AuthenticationCallback, możesz kontrolować wynik procesu uwierzytelniania za pomocą odcisku palca. - 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:
frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in
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, odczytywania jej kodu źródłowego i zrozumienia mechanizmu uwierzytelniania. Kroki zazwyczaj obejmują:
- Dekompilacja APK: Konwersja pliku APK na bardziej czytelny format (np. kod Java).
- 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).
- 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
Istnieją specjalistyczne narzędzia i skrypty zaprojektowane do testowania i omijania mechanizmów uwierzytelniania. Na przykład:
- 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.
- 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.
# 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.cryptoObjectoraz 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:
// 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
captureImagewCustomizedSensor.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)isetInvalidatedByBiometricEnrollment(true)podczas generowania kluczy Keystore. Ważny biometryczny jest wtedy wymagany przed użyciem klucza. - Odrzuć
CryptoObjectz null lub nieoczekiwanym szyfrem / podpisem; traktuj to jako krytyczny błąd uwierzytelnienia. - Podczas korzystania z
BiometricPrompt, preferujBIOMETRIC_STRONGi nigdy nie przechodź doBIOMETRIC_WEAKlubDEVICE_CREDENTIALw 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
tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
HackTricks