mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/bypass-biometr
This commit is contained in:
parent
dd88cb6757
commit
e2f6c63a8b
@ -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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user