hacktricks/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md

91 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Bypass Biometric Authentication (Android)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## **Metoda 1 Ominięcie bez użycia obiektu Crypto**
Skupiamy się tutaj na *onAuthenticationSucceeded* callback, który jest kluczowy w procesie uwierzytelniania. Badacze z WithSecure opracowali [skrypt Frida](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js), 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 Android Fingerprint, z pełną aplikacją dostępną na [GitHub](https://github.com/St3v3nsS/InsecureBanking).
```javascript
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:
```bash
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](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 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.
Polecenie do uruchomienia skryptu Frida:
```bash
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ą:
1. **Zasymulować Wywołania Uwierzytelniania**: Poprzez podłączenie się do metod `onAuthenticationSucceeded`, `onAuthenticationFailed` lub `onAuthenticationError` klasy `BiometricPrompt.AuthenticationCallback`, możesz kontrolować wynik procesu uwierzytelniania 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**
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ą:
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.
## **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 rootowanie 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ą odcisku palca.
## 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/)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Wsparcie HackTricks</summary>
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się trikami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
</details>
{% endhint %}