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
6a0e480bb0
commit
e5db90b5b2
@ -1,10 +1,10 @@
|
||||
# Παράκαμψη Βιομετρικής Αυθεντικοποίησης (Android)
|
||||
# Bypass Biometric Authentication (Android)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## **Μέθοδος 1 – Παράκαμψη χωρίς Χρήση Crypto Object**
|
||||
## **Method 1 – Bypassing with No Crypto Object Usage**
|
||||
|
||||
Η εστίαση εδώ είναι στο _onAuthenticationSucceeded_ callback, το οποίο είναι κρίσιμο στη διαδικασία αυθεντικοποίησης. Ερευνητές από την WithSecure ανέπτυξαν ένα [Frida script](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js), που επιτρέπει την παράκαμψη του NULL _CryptoObject_ στο _onAuthenticationSucceeded(...)_. Το script αναγκάζει μια αυτόματη παράκαμψη της αυθεντικοποίησης δακτυλικού αποτυπώματος κατά την κλήση της μεθόδου. Παρακάτω είναι ένα απλοποιημένο απόσπασμα που δείχνει την παράκαμψη σε ένα περιβάλλον Δακτυλικού Αποτυπώματος Android, με την πλήρη εφαρμογή διαθέσιμη στο [GitHub](https://github.com/St3v3nsS/InsecureBanking).
|
||||
Η εστίαση εδώ είναι στο _onAuthenticationSucceeded_ callback, το οποίο είναι κρίσιμο στη διαδικασία αυθεντικοποίησης. Ερευνητές από την WithSecure ανέπτυξαν ένα [Frida script](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js), που επιτρέπει την παράκαμψη του NULL _CryptoObject_ στο _onAuthenticationSucceeded(...)_. Το script αναγκάζει μια αυτόματη παράκαμψη της αυθεντικοποίησης δακτυλικών αποτυπωμάτων κατά την κλήση της μεθόδου. Παρακάτω είναι ένα απλοποιημένο απόσπασμα που δείχνει την παράκαμψη σε ένα Android Fingerprint context, με την πλήρη εφαρμογή διαθέσιμη στο [GitHub](https://github.com/St3v3nsS/InsecureBanking).
|
||||
```javascript
|
||||
biometricPrompt = new BiometricPrompt(this, executor, new BiometricPrompt.AuthenticationCallback() {
|
||||
@Override
|
||||
@ -25,7 +25,7 @@ frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-byp
|
||||
```bash
|
||||
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass-via-exception-handling.js
|
||||
```
|
||||
Μόλις φτάσετε στην οθόνη δακτυλικών αποτυπωμάτων και ξεκινήσει η `authenticate()`, πληκτρολογήστε `bypass()` στην κονσόλα Frida για να ενεργοποιήσετε την παράκαμψη:
|
||||
Μόλις φτάσετε στην οθόνη δακτυλικού αποτυπώματος και την εκκίνηση του `authenticate()`, πληκτρολογήστε `bypass()` στην κονσόλα Frida για να ενεργοποιήσετε την παράκαμψη:
|
||||
```
|
||||
Spawning com.generic.insecurebankingfingerprint...
|
||||
[Android Emulator 5554::com.generic.insecurebankingfingerprint]-> Hooking BiometricPrompt.authenticate()...
|
||||
@ -35,7 +35,7 @@ Hooking FingerprintManager.authenticate()...
|
||||
```
|
||||
## **Μέθοδος 3 – Πλαίσια Εργαλείων**
|
||||
|
||||
Τα πλαίσια εργαλείων όπως το Xposed ή το Frida μπορούν να χρησιμοποιηθούν για να συνδεθούν με τις μεθόδους εφαρμογής κατά την εκτέλεση. Για την αυθεντικοποίηση δακτυλικών αποτυπωμάτων, αυτά τα πλαίσια μπορούν να:
|
||||
Τα πλαίσια εργαλείων όπως το Xposed ή το Frida μπορούν να χρησιμοποιηθούν για να συνδεθούν σε μεθόδους εφαρμογής κατά την εκτέλεση. Για την αυθεντικοποίηση δακτυλικών αποτυπωμάτων, αυτά τα πλαίσια μπορούν να:
|
||||
|
||||
1. **Μιμηθούν τις Κλήσεις Αυθεντικοποίησης**: Συνδέοντας τις μεθόδους `onAuthenticationSucceeded`, `onAuthenticationFailed` ή `onAuthenticationError` του `BiometricPrompt.AuthenticationCallback`, μπορείτε να ελέγξετε το αποτέλεσμα της διαδικασίας αυθεντικοποίησης δακτυλικών αποτυπωμάτων.
|
||||
2. **Παρακάμψουν το SSL Pinning**: Αυτό επιτρέπει σε έναν επιτιθέμενο να παρεμβαίνει και να τροποποιεί την κίνηση μεταξύ του πελάτη και του διακομιστή, ενδεχομένως αλλάζοντας τη διαδικασία αυθεντικοποίησης ή κλέβοντας ευαίσθητα δεδομένα.
|
||||
@ -49,19 +49,65 @@ frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in
|
||||
Τα εργαλεία αντίστροφης μηχανικής όπως το `APKTool`, `dex2jar` και `JD-GUI` μπορούν να χρησιμοποιηθούν για να αποσυμπιέσουν μια εφαρμογή Android, να διαβάσουν τον πηγαίο κώδικα και να κατανοήσουν τον μηχανισμό αυθεντικοποίησης. Τα βήματα περιλαμβάνουν γενικά:
|
||||
|
||||
1. **Αποσυμπίεση του APK**: Μετατροπή του αρχείου APK σε μια πιο αναγνώσιμη μορφή (όπως ο κώδικας Java).
|
||||
2. **Ανάλυση του Κώδικα**: Αναζήτηση της υλοποίησης της αυθεντικοποίησης με δακτυλικά αποτυπώματα και αναγνώριση πιθανών αδυναμιών (όπως μηχανισμοί εναλλακτικής αυθεντικοποίησης ή ακατάλληλοι έλεγχοι επικύρωσης).
|
||||
3. **Επανασυμπίεση του APK**: Μετά την τροποποίηση του κώδικα για να παρακαμφθεί η αυθεντικοποίηση με δακτυλικά αποτυπώματα, η εφαρμογή επανασυμπιέζεται, υπογράφεται και εγκαθίσταται στη συσκευή για δοκιμή.
|
||||
2. **Ανάλυση του Κώδικα**: Αναζήτηση της υλοποίησης της αυθεντικοποίησης δακτυλικών αποτυπωμάτων και αναγνώριση πιθανών αδυναμιών (όπως μηχανισμοί εναλλακτικής αυθεντικοποίησης ή ακατάλληλοι έλεγχοι επικύρωσης).
|
||||
3. **Επανασυμπίεση του APK**: Μετά την τροποποίηση του κώδικα για να παρακαμφθεί η αυθεντικοποίηση δακτυλικών αποτυπωμάτων, η εφαρμογή επανασυμπιέζεται, υπογράφεται και εγκαθίσταται στη συσκευή για δοκιμή.
|
||||
|
||||
## **Μέθοδος 5 – Χρήση Εργαλείων Αυθεντικοποίησης Προσαρμοσμένων**
|
||||
|
||||
Υπάρχουν εξειδικευμένα εργαλεία και σενάρια σχεδιασμένα για να δοκιμάσουν και να παρακάμψουν τους μηχανισμούς αυθεντικοποίησης. Για παράδειγμα:
|
||||
Υπάρχουν εξειδικευμένα εργαλεία και σενάρια σχεδιασμένα για να δοκιμάσουν και να παρακάμψουν μηχανισμούς αυθεντικοποίησης. Για παράδειγμα:
|
||||
|
||||
1. **MAGISK Modules**: Το MAGISK είναι ένα εργαλείο για Android που επιτρέπει στους χρήστες να ριζώνουν τις συσκευές τους και να προσθέτουν modules που μπορούν να τροποποιήσουν ή να παραποιήσουν πληροφορίες σε επίπεδο υλικού, συμπεριλαμβανομένων των δακτυλικών αποτυπωμάτων.
|
||||
2. **Προσαρμοσμένα Σενάρια**: Σενάρια μπορούν να γραφούν για να αλληλεπιδρούν με το Android Debug Bridge (ADB) ή απευθείας με το backend της εφαρμογής για να προσομοιώσουν ή να παρακάμψουν την αυθεντικοποίηση με δακτυλικά αποτυπώματα.
|
||||
1. **MAGISK Modules**: Το MAGISK είναι ένα εργαλείο για Android που επιτρέπει στους χρήστες να ριζώνουν τις συσκευές τους και να προσθέτουν modules που μπορούν να τροποποιήσουν ή να προσποιηθούν πληροφορίες σε επίπεδο υλικού, συμπεριλαμβανομένων των δακτυλικών αποτυπωμάτων.
|
||||
2. **Προσαρμοσμένα Σενάρια**: Μπορούν να γραφούν σενάρια για να αλληλεπιδρούν με το Android Debug Bridge (ADB) ή απευθείας με το backend της εφαρμογής για να προσομοιώσουν ή να παρακάμψουν την αυθεντικοποίηση δακτυλικών αποτυπωμάτων.
|
||||
|
||||
---
|
||||
|
||||
## **Μέθοδος 6 – Καθολικό Frida Hook για `BiometricPrompt` (API 28-34)**
|
||||
|
||||
Το 2023 εμφανίστηκε ένα σενάριο Frida της κοινότητας με την επωνυμία **Universal-Android-Biometric-Bypass** στο CodeShare. Το σενάριο συνδέει κάθε υπερφόρτωση του `BiometricPrompt.authenticate()` καθώς και τον παλαιού τύπου `FingerprintManager.authenticate()` και ενεργοποιεί άμεσα το `onAuthenticationSucceeded()` με ένα **κατασκευασμένο `AuthenticationResult` που περιέχει ένα null `CryptoObject`**. Δεδομένου ότι προσαρμόζεται δυναμικά σε επίπεδα API, εξακολουθεί να λειτουργεί σε Android 14 (API 34) εάν η στοχευμένη εφαρμογή δεν εκτελεί **κρυπτογραφικούς ελέγχους στο επιστρεφόμενο `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
|
||||
* Όλα συμβαίνουν στον χώρο του χρήστη – δεν απαιτείται εκμετάλλευση πυρήνα ή root.
|
||||
* Η επίθεση παραμένει πλήρως σιωπηλή για το UI: ο διάλογος βιομετρικής ταυτοποίησης του συστήματος δεν εμφανίζεται ποτέ.
|
||||
* Mitigation: **πάντα επαληθεύστε το `result.cryptoObject` και την κρυπτογραφία/υπογραφή του πριν ξεκλειδώσετε ευαίσθητες δυνατότητες**.
|
||||
|
||||
## **Method 7 – Downgrade / Fallback Manipulation**
|
||||
|
||||
Starting with Android 11, developers can specify which authenticators are acceptable via `setAllowedAuthenticators()` (or the older `setDeviceCredentialAllowed()`). A **runtime hooking** attack can force the `allowedAuthenticators` bit-field to the weaker
|
||||
`BIOMETRIC_WEAK | DEVICE_CREDENTIAL` value:
|
||||
```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
|
||||
};
|
||||
```
|
||||
Αν η εφαρμογή **δεν** επικυρώνει στη συνέχεια το επιστρεφόμενο `AuthenticationResult`, ένας επιτιθέμενος μπορεί απλά να πατήσει το κουμπί _PIN/Pattern_ fallback ή ακόμα και να καταχωρήσει μια νέα αδύναμη βιομετρική για να αποκτήσει πρόσβαση.
|
||||
|
||||
## **Μέθοδος 8 – CVEs Επιπέδου Προμηθευτή / Πυρήνα**
|
||||
|
||||
Παρακολουθήστε τα δελτία ασφαλείας του Android: αρκετά πρόσφατα σφάλματα πλευράς πυρήνα επιτρέπουν την τοπική κλιμάκωση προνομίων μέσω του fingerprint HAL και ουσιαστικά **απενεργοποιούν ή βραχυκυκλώνουν την αλυσίδα αισθητήρα**. Παραδείγματα περιλαμβάνουν:
|
||||
|
||||
* **CVE-2023-20995** – λογικό σφάλμα στο `captureImage` του `CustomizedSensor.cpp` (Pixel 8, Android 13) που επιτρέπει την παράκαμψη ξεκλειδώματος χωρίς αλληλεπίδραση χρήστη.
|
||||
* **CVE-2024-53835 / CVE-2024-53840** – “πιθανή βιομετρική παράκαμψη λόγω ασυνήθιστης ρίζας” που διορθώθηκε στο **δελτίο Pixel Δεκεμβρίου 2024**.
|
||||
|
||||
Αν και αυτές οι ευπάθειες στοχεύουν την οθόνη κλειδώματος, ένας ριζωμένος δοκιμαστής μπορεί να τις αλυσίσει με σφάλματα επιπέδου εφαρμογής για να παρακάμψει τις βιομετρικές εντός της εφαρμογής.
|
||||
|
||||
---
|
||||
|
||||
### Λίστα Ελέγχου Σκληροποίησης για Προγραμματιστές (Σημειώσεις Γρήγορης Δοκιμής)
|
||||
|
||||
* Επιβάλλετε `setUserAuthenticationRequired(true)` και `setInvalidatedByBiometricEnrollment(true)` κατά τη δημιουργία κλειδιών **Keystore**. Μια έγκυρη βιομετρική απαιτείται πριν μπορέσει να χρησιμοποιηθεί το κλειδί.
|
||||
* Απορρίψτε ένα `CryptoObject` με **null ή αναμενόμενη κρυπτογράφηση / υπογραφή**; θεωρήστε το αυτό ως μοιραίο σφάλμα αυθεντικοποίησης.
|
||||
* Όταν χρησιμοποιείτε `BiometricPrompt`, προτιμήστε το `BIOMETRIC_STRONG` και **ποτέ μην επιστρέφετε σε `BIOMETRIC_WEAK` ή `DEVICE_CREDENTIAL`** για ενέργειες υψηλού κινδύνου.
|
||||
* Κλειδώστε την τελευταία έκδοση `androidx.biometric` (≥1.2.0-beta02) – οι πρόσφατες εκδόσεις προσθέτουν αυτόματους ελέγχους null-cipher και σφίγγουν τους επιτρεπόμενους συνδυασμούς αυθεντικοποιητών.
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [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