Bypass Biometric Authentication (Android)
Reading time: 7 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Method 1 – Bypassing with No Crypto Object Usage
Η εστίαση εδώ είναι στο onAuthenticationSucceeded callback, το οποίο είναι κρίσιμο στη διαδικασία αυθεντικοποίησης. Ερευνητές από την WithSecure ανέπτυξαν ένα Frida script, που επιτρέπει την παράκαμψη του NULL CryptoObject στο onAuthenticationSucceeded(...). Το script αναγκάζει μια αυτόματη παράκαμψη της αυθεντικοποίησης δακτυλικών αποτυπωμάτων κατά την κλήση της μεθόδου. Παρακάτω είναι ένα απλοποιημένο απόσπασμα που δείχνει την παράκαμψη σε ένα Android Fingerprint context, με την πλήρη εφαρμογή διαθέσιμη στο 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();
}
});
Εντολή για να εκτελέσετε το σενάριο Frida:
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass.js
Μέθοδος 2 – Προσέγγιση Διαχείρισης Εξαιρέσεων
Ένα άλλο Frida script από την WithSecure ασχολείται με την παράκαμψη της ανασφαλούς χρήσης αντικειμένων κρυπτογράφησης. Το script καλεί το onAuthenticationSucceeded με ένα CryptoObject που δεν έχει εξουσιοδοτηθεί από ένα δακτυλικό αποτύπωμα. Εάν η εφαρμογή προσπαθήσει να χρησιμοποιήσει ένα διαφορετικό αντικείμενο κρυπτογράφησης, θα προκαλέσει μια εξαίρεση. Το script προετοιμάζεται να καλέσει το onAuthenticationSucceeded και να διαχειριστεί την javax.crypto.IllegalBlockSizeException στην κλάση Cipher, διασφαλίζοντας ότι τα επόμενα αντικείμενα που χρησιμοποιούνται από την εφαρμογή είναι κρυπτογραφημένα με το νέο κλειδί.
Εντολή για να εκτελέσετε το Frida script:
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass-via-exception-handling.js
Μόλις φτάσετε στην οθόνη δακτυλικού αποτυπώματος και την εκκίνηση του authenticate()
, πληκτρολογήστε bypass()
στην κονσόλα Frida για να ενεργοποιήσετε την παράκαμψη:
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()
Μέθοδος 3 – Πλαίσια Εργαλείων
Τα πλαίσια εργαλείων όπως το Xposed ή το Frida μπορούν να χρησιμοποιηθούν για να συνδεθούν σε μεθόδους εφαρμογής κατά την εκτέλεση. Για την αυθεντικοποίηση δακτυλικών αποτυπωμάτων, αυτά τα πλαίσια μπορούν να:
- Μιμηθούν τις Κλήσεις Αυθεντικοποίησης: Συνδέοντας τις μεθόδους
onAuthenticationSucceeded
,onAuthenticationFailed
ήonAuthenticationError
τουBiometricPrompt.AuthenticationCallback
, μπορείτε να ελέγξετε το αποτέλεσμα της διαδικασίας αυθεντικοποίησης δακτυλικών αποτυπωμάτων. - Παρακάμψουν το SSL Pinning: Αυτό επιτρέπει σε έναν επιτιθέμενο να παρεμβαίνει και να τροποποιεί την κίνηση μεταξύ του πελάτη και του διακομιστή, ενδεχομένως αλλάζοντας τη διαδικασία αυθεντικοποίησης ή κλέβοντας ευαίσθητα δεδομένα.
Παράδειγμα εντολής για το Frida:
frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in
Μέθοδος 4 – Αντίστροφη Μηχανική & Τροποποίηση Κώδικα
Τα εργαλεία αντίστροφης μηχανικής όπως το APKTool
, dex2jar
και JD-GUI
μπορούν να χρησιμοποιηθούν για να αποσυμπιέσουν μια εφαρμογή Android, να διαβάσουν τον πηγαίο κώδικα και να κατανοήσουν τον μηχανισμό αυθεντικοποίησης. Τα βήματα περιλαμβάνουν γενικά:
- Αποσυμπίεση του APK: Μετατροπή του αρχείου APK σε μια πιο αναγνώσιμη μορφή (όπως ο κώδικας Java).
- Ανάλυση του Κώδικα: Αναζήτηση της υλοποίησης της αυθεντικοποίησης δακτυλικών αποτυπωμάτων και αναγνώριση πιθανών αδυναμιών (όπως μηχανισμοί εναλλακτικής αυθεντικοποίησης ή ακατάλληλοι έλεγχοι επικύρωσης).
- Επανασυμπίεση του APK: Μετά την τροποποίηση του κώδικα για να παρακαμφθεί η αυθεντικοποίηση δακτυλικών αποτυπωμάτων, η εφαρμογή επανασυμπιέζεται, υπογράφεται και εγκαθίσταται στη συσκευή για δοκιμή.
Μέθοδος 5 – Χρήση Εργαλείων Αυθεντικοποίησης Προσαρμοσμένων
Υπάρχουν εξειδικευμένα εργαλεία και σενάρια σχεδιασμένα για να δοκιμάσουν και να παρακάμψουν μηχανισμούς αυθεντικοποίησης. Για παράδειγμα:
- MAGISK Modules: Το MAGISK είναι ένα εργαλείο για Android που επιτρέπει στους χρήστες να ριζώνουν τις συσκευές τους και να προσθέτουν modules που μπορούν να τροποποιήσουν ή να προσποιηθούν πληροφορίες σε επίπεδο υλικού, συμπεριλαμβανομένων των δακτυλικών αποτυπωμάτων.
- Προσαρμοσμένα Σενάρια: Μπορούν να γραφούν σενάρια για να αλληλεπιδρούν με το 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
.
# 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:
// 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 και σφίγγουν τους επιτρεπόμενους συνδυασμούς αυθεντικοποιητών.
Αναφορές
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.