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
,onAuthenticationFailed
lubonAuthenticationError
klasyBiometricPrompt.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.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
:
// 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
wCustomizedSensor.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ć
CryptoObject
z null lub nieoczekiwanym szyfrem / podpisem; traktuj to jako krytyczny błąd uwierzytelnienia. - Podczas korzystania z
BiometricPrompt
, preferujBIOMETRIC_STRONG
i nigdy nie przechodź doBIOMETRIC_WEAK
lubDEVICE_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
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.