Objection Tutorial

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Συμβουλή για bug bounty: εγγραφείτε στο Intigriti, μια προηγμένη πλατφόρμα bug bounty που δημιουργήθηκε από χάκερς, για χάκερς! Γίνετε μέλος μας στο https://go.intigriti.com/hacktricks σήμερα και αρχίστε να κερδίζετε αμοιβές έως και $100,000!

Εισαγωγή

objection - Εξερεύνηση κινητής τηλεφωνίας κατά τη διάρκεια της εκτέλεσης

Το Objection είναι ένα εργαλείο εξερεύνησης κινητής τηλεφωνίας κατά τη διάρκεια της εκτέλεσης, με την υποστήριξη του Frida. Κατασκευάστηκε με σκοπό να βοηθήσει στην αξιολόγηση των κινητών εφαρμογών και της ασφάλειάς τους χωρίς την ανάγκη για jailbroken ή rooted κινητή συσκευή.

Σημείωση: Δεν πρόκειται για κάποια μορφή παράκαμψης jailbreak / root. Χρησιμοποιώντας το objection, παραμένετε περιορισμένοι από όλους τους περιορισμούς που επιβάλλονται από το αντίστοιχο sandbox που αντιμετωπίζετε.

Σύνοψη

Ο στόχος του objection είναι να επιτρέψει στον χρήστη να καλεί τις κύριες ενέργειες που προσφέρει ο Frida. Διαφορετικά, ο χρήστης θα χρειαστεί να δημιουργήσει ένα μοναδικό σενάριο για κάθε εφαρμογή που θέλει να δοκιμάσει.

Οδηγός

Για αυτόν τον οδηγό θα χρησιμοποιήσω το APK που μπορείτε να κατεβάσετε εδώ:

2MB
app-release.zip
archive

Ή από το αρχικό αποθετήριο (κατεβάστε το app-release.apk)

Εγκατάσταση

pip3 install objection

Σύνδεση

Πραγματοποιήστε μια κανονική σύνδεση ADB και ξεκινήστε τον διακομιστή frida στη συσκευή (και ελέγξτε ότι το frida λειτουργεί και στον πελάτη και στον διακομιστή).

Εάν χρησιμοποιείτε μια ριζωμένη συσκευή, είναι απαραίτητο να επιλέξετε την εφαρμογή που θέλετε να δοκιμάσετε μέσα στην επιλογή --gadget. σε αυτήν την περίπτωση:

frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore

Βασικές Ενέργειες

Δεν θα αναφερθούν όλες οι δυνατές εντολές του objections σε αυτό το εγχειρίδιο, μόνο αυτές που θεωρώ πιο χρήσιμες.

Περιβάλλον

Ορισμένες ενδιαφέρουσες πληροφορίες (όπως κωδικοί πρόσβασης ή διαδρομές) μπορεί να βρίσκονται μέσα στο περιβάλλον.

env

Πληροφορίες για το Frida

frida

Μεταφόρτωση/Λήψη

file download <remote path> [<local path>]
file upload <local path> [<remote path>]

Εισαγωγή σεναρίου frida

import <local path frida-script>

Αποκλεισμός SSL

Ο αποκλεισμός SSL είναι μια τεχνική που χρησιμοποιείται για την προστασία των εφαρμογών από επιθέσεις MITM (Man-in-the-Middle). Κατά τον αποκλεισμό SSL, η εφαρμογή επιβεβαιώνει την ταυτότητα του διακομιστή που συνδέεται με τη χρήση πιστοποιητικών SSL. Αυτό εμποδίζει την πιθανότητα επίθεσης από κάποιον που προσποιείται ότι είναι ο διακομιστής.

Ο αποκλεισμός SSL μπορεί να δυσκολέψει την ανάλυση της κίνησης δεδομένων μεταξύ της εφαρμογής και του διακομιστή. Ωστόσο, με τη χρήση εργαλείων όπως το Objection, μπορούμε να παρακάμψουμε τον αποκλεισμό SSL και να αναλύσουμε την κίνηση δεδομένων για αναζήτηση ευπαθειών στην εφαρμογή.

Για να παρακάμψουμε τον αποκλεισμό SSL με το Objection, μπορούμε να χρησιμοποιήσουμε την εντολή android sslpinning disable. Αυτή η εντολή θα απενεργοποιήσει τον αποκλεισμό SSL για την εφαρμογή, επιτρέποντάς μας να αναλύσουμε την κίνηση δεδομένων.

android sslpinning disable #Attempts to disable SSL Pinning on Android devices.

Ανίχνευση Root

Root detection is a common security measure implemented in Android applications to prevent them from running on rooted devices. Rooting a device gives users administrative privileges, which can be a security risk as it allows them to bypass certain security measures and access sensitive information.

Root detection techniques vary, but they generally involve checking for the presence of certain files or binaries that are commonly associated with rooted devices. Some applications may also use system calls or check for the presence of specific system properties that indicate a device has been rooted.

By detecting root access, applications can take appropriate actions, such as denying access to certain features or terminating the application altogether. This helps protect the integrity of the application and the data it handles.

As a penetration tester, it is important to understand root detection techniques and how to bypass them. This allows you to assess the security of an application running on a rooted device and identify potential vulnerabilities that could be exploited by malicious actors.

android root disable  #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.

Εκτέλεση Εντολής

The exec command in objection allows you to execute shell commands on the target Android device. This can be useful for various purposes, such as exploring the device's file system, running scripts, or interacting with the device's shell.

To use the exec command, you need to specify the command you want to execute as an argument. For example, to list the files in the current directory, you can use the following command:

objection> exec ls

You can also execute commands with arguments by enclosing them in quotes. For example, to install an APK file located on the device, you can use the pm install command:

objection> exec "pm install /path/to/apk/file.apk"

Keep in mind that the exec command runs the specified command on the target device, so be cautious when executing potentially harmful commands.

android shell_exec whoami

Στιγμιότυπα οθόνης

android ui screenshot /tmp/screenshot
android ui FLAG_SECURE false  #This may enable you to take screenshots using the hardware keys

Κίνηση ανάλυσης γίνεται Δυναμική

Σε μια πραγματική εφαρμογή θα πρέπει να γνωρίζουμε όλες τις πληροφορίες που ανακαλύφθηκαν σε αυτό το μέρος πριν χρησιμοποιήσουμε το objection χάρη στην στατική ανάλυση. Παρόλα αυτά, με αυτόν τον τρόπο μπορείτε να δείτε κάτι νέο καθώς εδώ θα έχετε μόνο μια πλήρη λίστα κλάσεων, μεθόδων και εξαγόμενων αντικειμένων.

Αυτό είναι επίσης χρήσιμο αν για κάποιο λόγο είστε ανίκανοι να αποκτήσετε κάποιο αναγνώσιμο πηγαίο κώδικα της εφαρμογής.

Λίστα δραστηριοτήτων, δέκτες και υπηρεσίες

android hooking list activities
android hooking list services
android hooking list receivers

Ο Frida θα εμφανίσει ένα σφάλμα αν δεν βρεθεί καμία.

Λήψη της τρέχουσας δραστηριότητας

android hooking get current_activity

Αναζήτηση Κλάσεων

Ας ξεκινήσουμε την αναζήτηση κλάσεων μέσα στην εφαρμογή μας

android hooking search classes asvid.github.io.fridaapp

Μέθοδοι αναζήτησης μιας κλάσης

Τώρα ας εξάγουμε τις μεθόδους μέσα στην κλάση MainActivity:

android hooking search methods asvid.github.io.fridaapp MainActivity

Λίστα με τις δηλωμένες μεθόδους ενός κλάσης με τις παραμέτρους τους

Ας δούμε ποιες παράμετρους χρειάζονται οι μέθοδοι της κλάσης:

android hooking list class_methods asvid.github.io.fridaapp.MainActivity

Λίστα κλάσεων

Μπορείτε επίσης να καταγράψετε όλες τις κλάσεις που φορτώθηκαν μέσα στην τρέχουσα εφαρμογή:

android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.

Αυτό είναι πολύ χρήσιμο αν θέλετε να συνδέσετε τη μέθοδο μιας κλάσης και γνωρίζετε μόνο το όνομα της κλάσης. Μπορείτε να χρησιμοποιήσετε αυτήν τη συνάρτηση για να αναζητήσετε ποιο module ανήκει η κλάση και στη συνέχεια να συνδέσετε τη μέθοδό της.

Η σύνδεση είναι εύκολη

Σύνδεση (παρακολούθηση) μιας μεθόδου

Από τον πηγαίο κώδικα της εφαρμογής γνωρίζουμε ότι η συνάρτηση sum() από την MainActivity εκτελείται κάθε δευτερόλεπτο. Ας προσπαθήσουμε να αποθηκεύσουμε όλες τις δυνατές πληροφορίες κάθε φορά που καλείται η συνάρτηση (ορίσματα, τιμή επιστροφής και ανίχνευση ανάκλησης):

android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return

Σύνδεση (παρακολούθηση) ολόκληρης μιας κλάσης

Πραγματικά βρίσκω όλες τις μεθόδους της κλάσης MainActivity πολύ ενδιαφέρουσες, ας συνδέσουμε όλες αυτές τις μεθόδους. Να είστε προσεκτικοί, αυτό μπορεί να προκαλέσει ανατροπή μιας εφαρμογής.

android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return

Εάν παίξετε με την εφαρμογή ενώ η κλάση είναι συνδεδεμένη, θα δείτε πότε καλείται κάθε συνάρτηση, τα ορίσματά της και την επιστρεφόμενη τιμή.

Αλλαγή της λογικής τιμής επιστροφής μιας συνάρτησης

Από τον πηγαίο κώδικα μπορείτε να δείτε ότι η συνάρτηση checkPin δέχεται ένα String ως όρισμα και επιστρέφει ένα boolean. Ας κάνουμε τη συνάρτηση να επιστρέφει πάντα true:

Τώρα, εάν γράψετε οτιδήποτε στο πλαίσιο κειμένου για τον κωδικό PIN, θα δείτε ότι οτιδήποτε είναι έγκυρο:

Παραδείγματα κλάσεων

Αναζητήστε και εκτυπώστε ενεργά παραδείγματα μιας συγκεκριμένης κλάσης Java, που καθορίζεται από ένα πλήρες όνομα κλάσης. Το αποτέλεσμα είναι μια προσπάθεια να ληφθεί μια συμβολοσειρά για ένα ανακαλυφθέν αντικείμενο που συνήθως περιέχει τιμές ιδιοτήτων για το αντικείμενο.

android heap print_instances <class>

Αποθήκευση κλειδιού/Προθέσεις

Μπορείτε να πειραματιστείτε με την αποθήκευση κλειδιού και τις προθέσεις χρησιμοποιώντας:

android keystore list
android intents launch_activity
android intent launch_service

Η εντολή dump χρησιμοποιείται για την ανάκτηση του περιεχομένου της μνήμης μιας εφαρμογής Android. Αυτό μπορεί να είναι χρήσιμο για την εξαγωγή ευαίσθητων δεδομένων όπως κωδικοί πρόσβασης ή κλειδιά κρυπτογράφησης. Η εντολή dump μπορεί να εκτελεστεί με τη χρήση του εργαλείου Objection και του Frida.

Για να χρησιμοποιήσετε την εντολή dump, ακολουθήστε τα παρακάτω βήματα:

  1. Ξεκινήστε το Objection και συνδεθείτε στη συσκευή Android σας.

  2. Εκτελέστε την εντολή android hooking list για να εμφανιστεί η λίστα των εφαρμογών που εκτελούνται στη συσκευή.

  3. Επιλέξτε την εφαρμογή για την οποία θέλετε να ανακτήσετε τη μνήμη.

  4. Εκτελέστε την εντολή android hooking watch class_name για να παρακολουθήσετε τις κλήσεις μιας συγκεκριμένης κλάσης.

  5. Εκτελέστε την εντολή dump class_name για να ανακτήσετε το περιεχόμενο της μνήμης της εφαρμογής.

Με αυτόν τον τρόπο, μπορείτε να ανακτήσετε το περιεχόμενο της μνήμης μιας εφαρμογής Android και να εξάγετε ευαίσθητα δεδομένα για ανάλυση ή επίθεση.

memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part

Λίστα

memory list modules

Στο τέλος της λίστας μπορείτε να δείτε το frida:

Ας ελέγξουμε τι εξάγει το frida:

Αναζήτηση/Εγγραφή

Μπορείτε επίσης να αναζητήσετε και να εγγράψετε μέσα στη μνήμη με το objection:

memory search "<pattern eg: 41 41 41 ?? 41>" (--string) (--offsets-only)
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)

SQLite

Μπορείτε να χρησιμοποιήσετε την εντολή sqlite για να αλληλεπιδράσετε με βάσεις δεδομένων sqlite.

Έξοδος

exit

Τι λείπει στο Objection

  • Οι μέθοδοι hooking μερικές φορές καταρρίπτουν την εφαρμογή (αυτό συμβαίνει επίσης λόγω του Frida).

  • Δεν μπορείτε να χρησιμοποιήσετε τις περιπτώσεις των κλάσεων για να καλέσετε συναρτήσεις της περίπτωσης. Και δεν μπορείτε να δημιουργήσετε νέες περιπτώσεις κλάσεων και να τις χρησιμοποιήσετε για να καλέσετε συναρτήσεις.

  • Δεν υπάρχει συντόμευση (όπως αυτή για το sslpinnin) για να κάνετε hook όλες τις κοινές μεθόδους κρυπτογράφησης που χρησιμοποιούνται από την εφαρμογή για να δείτε κρυπτογραφημένο κείμενο, απλό κείμενο, κλειδιά, IVs και αλγόριθμους που χρησιμοποιούνται.

Συμβουλή για bug bounty: Εγγραφείτε στο Intigriti, μια προηγμένη πλατφόρμα bug bounty που δημιουργήθηκε από χάκερς, για χάκερς! Γίνετε μέλος στο https://go.intigriti.com/hacktricks σήμερα και αρχίστε να κερδίζετε αμοιβές έως και $100,000!

Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated