Android Applications Pentesting

Reading time: 39 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

Android Applications Basics

Συνιστάται ανεπιφύλακτα να ξεκινήσετε να διαβάζετε αυτή τη σελίδα για να γνωρίσετε τα πιο σημαντικά μέρη που σχετίζονται με την ασφάλεια του Android και τα πιο επικίνδυνα στοιχεία σε μια εφαρμογή Android:

Android Applications Basics

ADB (Android Debug Bridge)

Αυτό είναι το κύριο εργαλείο που χρειάζεστε για να συνδεθείτε σε μια συσκευή android (εξομοιωμένη ή φυσική).
ADB επιτρέπει τον έλεγχο συσκευών είτε μέσω USB είτε μέσω Δικτύου από έναν υπολογιστή. Αυτή η χρησιμότητα επιτρέπει την αντιγραφή αρχείων και στις δύο κατευθύνσεις, την εγκατάσταση και απεγκατάσταση εφαρμογών, την εκτέλεση εντολών shell, την αντίγραφο ασφαλείας δεδομένων, την ανάγνωση καταγραφών, μεταξύ άλλων λειτουργιών.

Ρίξτε μια ματιά στη παρακάτω λίστα με τις ADB Commands για να μάθετε πώς να χρησιμοποιείτε το adb.

Smali

Μερικές φορές είναι ενδιαφέρον να τροποποιήσετε τον κώδικα της εφαρμογής για να αποκτήσετε πρόσβαση σε κρυφές πληροφορίες (ίσως καλά κρυμμένους κωδικούς ή σημαίες). Στη συνέχεια, θα μπορούσε να είναι ενδιαφέρον να αποσυμπιέσετε το apk, να τροποποιήσετε τον κώδικα και να το ξανασυμπιέσετε.
Σε αυτό το tutorial μπορείτε να μάθετε πώς να αποσυμπιέσετε ένα APK, να τροποποιήσετε τον κώδικα Smali και να ξανασυμπιέσετε το APK με τη νέα λειτουργικότητα. Αυτό θα μπορούσε να είναι πολύ χρήσιμο ως εναλλακτική για πολλές δοκιμές κατά τη διάρκεια της δυναμικής ανάλυσης που θα παρουσιαστούν. Στη συνέχεια, κρατήστε πάντα στο μυαλό σας αυτή την πιθανότητα.

Other interesting tricks

bash
adb shell pm list packages
com.android.insecurebankv2

adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk

adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
  • Συγχωνεύστε όλα τα splits και τα base apks με APKEditor:
bash
mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
java -jar ../APKEditor.jar m -i splits/ -o merged.apk

# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed

Στατική Ανάλυση

Πρώτα απ' όλα, για να αναλύσετε ένα APK θα πρέπει να ρίξετε μια ματιά στον κώδικα Java χρησιμοποιώντας έναν decompiler.
Παρακαλώ, διαβάστε εδώ για να βρείτε πληροφορίες σχετικά με διάφορους διαθέσιμους decompilers.

Αναζητώντας ενδιαφέροντα στοιχεία

Απλά ρίχνοντας μια ματιά στις αλφαβητικές ακολουθίες του APK μπορείτε να αναζητήσετε κωδικούς πρόσβασης, URLs (https://github.com/ndelphit/apkurlgrep), api κλειδιά, κρυπτογράφηση, bluetooth uuids, tokens και οτιδήποτε άλλο ενδιαφέρον... αναζητήστε ακόμη και για εκτέλεση κώδικα backdoors ή backdoors αυθεντικοποίησης (σκληρά κωδικοποιημένα διαπιστευτήρια διαχειριστή στην εφαρμογή).

Firebase

Δώστε ιδιαίτερη προσοχή σε firebase URLs και ελέγξτε αν είναι κακώς ρυθμισμένα. Περισσότερες πληροφορίες σχετικά με το τι είναι το Firebase και πώς να το εκμεταλλευτείτε εδώ.

Βασική κατανόηση της εφαρμογής - Manifest.xml, strings.xml

Η εξέταση των αρχείων Manifest.xml και strings.xml μιας εφαρμογής μπορεί να αποκαλύψει πιθανές ευπάθειες ασφαλείας. Αυτά τα αρχεία μπορούν να προσπελαστούν χρησιμοποιώντας decompilers ή με την αλλαγή της επέκτασης του αρχείου APK σε .zip και στη συνέχεια αποσυμπιέζοντάς το.

Ευπάθειες που εντοπίζονται από το Manifest.xml περιλαμβάνουν:

  • Debuggable Εφαρμογές: Οι εφαρμογές που έχουν οριστεί ως debuggable (debuggable="true") στο αρχείο Manifest.xml ενέχουν κίνδυνο καθώς επιτρέπουν συνδέσεις που μπορεί να οδηγήσουν σε εκμετάλλευση. Για περαιτέρω κατανόηση σχετικά με το πώς να εκμεταλλευτείτε debuggable εφαρμογές, ανατρέξτε σε ένα tutorial για την εύρεση και εκμετάλλευση debuggable εφαρμογών σε μια συσκευή.
  • Ρυθμίσεις Αντιγράφων Ασφαλείας: Το χαρακτηριστικό android:allowBackup="false" θα πρέπει να ορίζεται ρητά για εφαρμογές που διαχειρίζονται ευαίσθητες πληροφορίες ώστε να αποτρέπεται η μη εξουσιοδοτημένη δημιουργία αντιγράφων ασφαλείας μέσω adb, ειδικά όταν είναι ενεργοποιημένη η αποσφαλμάτωση usb.
  • Ασφάλεια Δικτύου: Οι προσαρμοσμένες ρυθμίσεις ασφάλειας δικτύου (android:networkSecurityConfig="@xml/network_security_config") στο res/xml/ μπορούν να καθορίσουν λεπτομέρειες ασφαλείας όπως πιστοποιητικά και ρυθμίσεις HTTP traffic. Ένα παράδειγμα είναι η επιτρεπόμενη HTTP traffic για συγκεκριμένα domains.
  • Εξαγόμενες Δραστηριότητες και Υπηρεσίες: Η αναγνώριση εξαγόμενων δραστηριοτήτων και υπηρεσιών στο manifest μπορεί να αναδείξει στοιχεία που μπορεί να κακοποιηθούν. Περαιτέρω ανάλυση κατά τη διάρκεια δυναμικής δοκιμής μπορεί να αποκαλύψει πώς να εκμεταλλευτείτε αυτά τα στοιχεία.
  • Content Providers και FileProviders: Οι εκτεθειμένοι content providers θα μπορούσαν να επιτρέψουν μη εξουσιοδοτημένη πρόσβαση ή τροποποίηση δεδομένων. Η ρύθμιση των FileProviders θα πρέπει επίσης να εξεταστεί προσεκτικά.
  • Broadcast Receivers και URL Schemes: Αυτά τα στοιχεία θα μπορούσαν να χρησιμοποιηθούν για εκμετάλλευση, με ιδιαίτερη προσοχή στο πώς διαχειρίζονται τα URL schemes για ευπάθειες εισόδου.
  • Εκδόσεις SDK: Τα χαρακτηριστικά minSdkVersion, targetSDKVersion, και maxSdkVersion υποδεικνύουν τις υποστηριζόμενες εκδόσεις Android, τονίζοντας τη σημασία της μη υποστήριξης παλαιών, ευάλωτων εκδόσεων Android για λόγους ασφαλείας.

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

Tapjacking

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

Βρείτε περισσότερες πληροφορίες στο:

Tapjacking

Hijacking Εργασιών

Μια δραστηριότητα με το launchMode ρυθμισμένο σε singleTask χωρίς καμία taskAffinity καθορισμένη είναι ευάλωτη σε hijacking εργασιών. Αυτό σημαίνει ότι μια εφαρμογή μπορεί να εγκατασταθεί και αν εκκινείται πριν από την πραγματική εφαρμογή μπορεί να υφαρπάξει την εργασία της πραγματικής εφαρμογής (έτσι ο χρήστης θα αλληλεπιδρά με την κακόβουλη εφαρμογή νομίζοντας ότι χρησιμοποιεί την πραγματική).

Περισσότερες πληροφορίες στο:

Android Task Hijacking

Ανασφαλής αποθήκευση δεδομένων

Εσωτερική Αποθήκευση

Στο Android, τα αρχεία που αποθηκεύονται στην εσωτερική αποθήκευση είναι σχεδιασμένα να είναι προσβάσιμα αποκλειστικά από την εφαρμογή που τα δημιούργησε. Αυτό το μέτρο ασφαλείας είναι επιβεβλημένο από το λειτουργικό σύστημα Android και είναι γενικά επαρκές για τις ανάγκες ασφαλείας των περισσότερων εφαρμογών. Ωστόσο, οι προγραμματιστές μερικές φορές χρησιμοποιούν τρόπους όπως MODE_WORLD_READABLE και MODE_WORLD_WRITABLE για να επιτρέψουν τα αρχεία να είναι κοινά μεταξύ διαφορετικών εφαρμογών. Ωστόσο, αυτοί οι τρόποι δεν περιορίζουν την πρόσβαση σε αυτά τα αρχεία από άλλες εφαρμογές, συμπεριλαμβανομένων πιθανώς κακόβουλων.

  1. Στατική Ανάλυση:
  • Βεβαιωθείτε ότι η χρήση των MODE_WORLD_READABLE και MODE_WORLD_WRITABLE είναι προσεκτικά εξετασμένη. Αυτοί οι τρόποι μπορεί να εκθέσουν τα αρχεία σε μη προγραμματισμένες ή μη εξουσιοδοτημένες προσβάσεις.
  1. Δυναμική Ανάλυση:
  • Επαληθεύστε τις άδειες που έχουν οριστεί στα αρχεία που δημιουργούνται από την εφαρμογή. Συγκεκριμένα, ελέγξτε αν οποιαδήποτε αρχεία είναι ρυθμισμένα να είναι αναγνώσιμα ή εγγράψιμα παγκοσμίως. Αυτό μπορεί να θέσει σε σημαντικό κίνδυνο την ασφάλεια, καθώς θα επιτρέπει σε οποιαδήποτε εφαρμογή εγκατασταθεί στη συσκευή, ανεξαρτήτως προέλευσης ή προθέσεων, να διαβάσει ή να τροποποιήσει αυτά τα αρχεία.

Εξωτερική Αποθήκευση

Όταν ασχολείστε με αρχεία σε εξωτερική αποθήκευση, όπως κάρτες SD, θα πρέπει να ληφθούν ορισμένες προφυλάξεις:

  1. Προσβασιμότητα:
  • Τα αρχεία στην εξωτερική αποθήκευση είναι παγκοσμίως αναγνώσιμα και εγγράψιμα. Αυτό σημαίνει ότι οποιαδήποτε εφαρμογή ή χρήστης μπορεί να έχει πρόσβαση σε αυτά τα αρχεία.
  1. Ανησυχίες Ασφαλείας:
  • Δεδομένης της ευκολίας πρόσβασης, συνιστάται να μην αποθηκεύετε ευαίσθητες πληροφορίες στην εξωτερική αποθήκευση.
  • Η εξωτερική αποθήκευση μπορεί να αφαιρεθεί ή να προσπελαστεί από οποιαδήποτε εφαρμογή, καθιστώντας την λιγότερο ασφαλή.
  1. Διαχείριση Δεδομένων από Εξωτερική Αποθήκευση:
  • Πάντα εκτελέστε έλεγχο εισόδου στα δεδομένα που ανακτώνται από την εξωτερική αποθήκευση. Αυτό είναι κρίσιμο επειδή τα δεδομένα προέρχονται από μια μη αξιόπιστη πηγή.
  • Η αποθήκευση εκτελέσιμων ή αρχείων κλάσης στην εξωτερική αποθήκευση για δυναμική φόρτωση αποθαρρύνεται έντονα.
  • Εάν η εφαρμογή σας πρέπει να ανακτήσει εκτελέσιμα αρχεία από την εξωτερική αποθήκευση, βεβαιωθείτε ότι αυτά τα αρχεία είναι υπογεγραμμένα και κρυπτογραφικά επαληθευμένα πριν φορτωθούν δυναμικά. Αυτό το βήμα είναι ζωτικής σημασίας για τη διατήρηση της ασφάλειας της εφαρμογής σας.

Η εξωτερική αποθήκευση μπορεί να προσεγγιστεί στο /storage/emulated/0, /sdcard, /mnt/sdcard

σημειωση

Ξεκινώντας από το Android 4.4 (API 17), η κάρτα SD έχει μια δομή καταλόγου που περιορίζει την πρόσβαση από μια εφαρμογή στον κατάλογο που είναι ειδικά για αυτήν την εφαρμογή. Αυτό αποτρέπει την κακόβουλη εφαρμογή από το να αποκτήσει πρόσβαση για ανάγνωση ή εγγραφή στα αρχεία άλλης εφαρμογής.

Ευαίσθητα δεδομένα αποθηκευμένα σε καθαρό κείμενο

  • Κοινές ρυθμίσεις: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα αρχεία xml στη διαδρομή /data/data/<packagename>/shared_prefs/ και μερικές φορές είναι δυνατό να βρείτε ευαίσθητες πληροφορίες σε καθαρό κείμενο σε αυτόν τον φάκελο.
  • Βάσεις Δεδομένων: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα βάσεις δεδομένων sqlite στη διαδρομή /data/data/<packagename>/databases/ και μερικές φορές είναι δυνατό να βρείτε ευαίσθητες πληροφορίες σε καθαρό κείμενο σε αυτόν τον φάκελο.

Σπασμένο TLS

Αποδοχή Όλων των Πιστοποιητικών

Για κάποιο λόγο, μερικές φορές οι προγραμματιστές αποδέχονται όλα τα πιστοποιητικά ακόμη και αν, για παράδειγμα, το όνομα κεντρικού υπολογιστή δεν ταιριάζει με γραμμές κώδικα όπως η παρακάτω:

java
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

Ένας καλός τρόπος για να το δοκιμάσετε είναι να προσπαθήσετε να καταγράψετε την κίνηση χρησιμοποιώντας κάποιο proxy όπως το Burp χωρίς να εξουσιοδοτήσετε το Burp CA στη συσκευή. Επίσης, μπορείτε να δημιουργήσετε με το Burp ένα πιστοποιητικό για διαφορετικό hostname και να το χρησιμοποιήσετε.

Σπασμένη Κρυπτογραφία

Κακές Διαδικασίες Διαχείρισης Κλειδιών

Ορισμένοι προγραμματιστές αποθηκεύουν ευαίσθητα δεδομένα στην τοπική αποθήκευση και τα κρυπτογραφούν με ένα κλειδί σκληρά κωδικοποιημένο/προβλέψιμο στον κώδικα. Αυτό δεν θα έπρεπε να γίνεται καθώς κάποια αναστροφή θα μπορούσε να επιτρέψει στους επιτιθέμενους να εξάγουν τις εμπιστευτικές πληροφορίες.

Χρήση Ανασφαλών και/ή Υποστηριζόμενων Αλγορίθμων

Οι προγραμματιστές δεν θα πρέπει να χρησιμοποιούν υποστηριζόμενους αλγορίθμους για να εκτελούν ελέγχους εξουσιοδότησης, να αποθηκεύουν ή να στέλνουν δεδομένα. Ορισμένοι από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Αν οι hashes χρησιμοποιούνται για την αποθήκευση κωδικών πρόσβασης, θα πρέπει να χρησιμοποιούνται hashes ανθεκτικοί σε brute-force με salt.

Άλλοι έλεγχοι

  • Συνιστάται να παραποιήσετε το APK για να δυσκολέψετε τη δουλειά του reverse engineer στους επιτιθέμενους.
  • Αν η εφαρμογή είναι ευαίσθητη (όπως οι τραπεζικές εφαρμογές), θα πρέπει να εκτελεί τους δικούς της ελέγχους για να δει αν το κινητό είναι ριζωμένο και να ενεργεί αναλόγως.
  • Αν η εφαρμογή είναι ευαίσθητη (όπως οι τραπεζικές εφαρμογές), θα πρέπει να ελέγχει αν χρησιμοποιείται emulator.
  • Αν η εφαρμογή είναι ευαίσθητη (όπως οι τραπεζικές εφαρμογές), θα πρέπει να ελέγχει την ακεραιότητά της πριν την εκτέλεση για να ελέγξει αν έχει τροποποιηθεί.
  • Χρησιμοποιήστε APKiD για να ελέγξετε ποιος compiler/packer/obfuscator χρησιμοποιήθηκε για την κατασκευή του APK.

Εφαρμογή React Native

Διαβάστε την παρακάτω σελίδα για να μάθετε πώς να έχετε εύκολη πρόσβαση στον κώδικα javascript των εφαρμογών React:

React Native Application

Εφαρμογές Xamarin

Διαβάστε την παρακάτω σελίδα για να μάθετε πώς να έχετε εύκολη πρόσβαση στον κώδικα C# μιας εφαρμογής xamarin:

Xamarin Apps

Superpacked Εφαρμογές

Σύμφωνα με αυτήν την ανάρτηση στο blog το superpacked είναι ένας αλγόριθμος Meta που συμπιέζει το περιεχόμενο μιας εφαρμογής σε ένα μόνο αρχείο. Το blog μιλάει για την πιθανότητα δημιουργίας μιας εφαρμογής που αποσυμπιέζει αυτού του είδους τις εφαρμογές... και μια ταχύτερη μέθοδο που περιλαμβάνει την εκτέλεση της εφαρμογής και τη συλλογή των αποσυμπιεσμένων αρχείων από το σύστημα αρχείων.

Αυτοματοποιημένη Στατική Ανάλυση Κώδικα

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

Με αυτή τη γνώση, το mariana-trench θα αναθεωρήσει τον κώδικα και θα βρει πιθανές ευπάθειες σε αυτόν.

Μυστικά που διαρρέουν

Μια εφαρμογή μπορεί να περιέχει μυστικά (API keys, κωδικούς πρόσβασης, κρυφές διευθύνσεις URL, υποτομείς...) μέσα σε αυτήν που μπορεί να είστε σε θέση να ανακαλύψετε. Μπορείτε να χρησιμοποιήσετε ένα εργαλείο όπως το https://github.com/dwisiswant0/apkleaks.

Παράκαμψη Βιομετρικής Αυθεντικοποίησης

Bypass Biometric Authentication (Android)

Άλλες ενδιαφέρουσες λειτουργίες

Άλλες τεχνικές

content:// protocol



Δυναμική Ανάλυση

Πρώτα απ' όλα, χρειάζεστε ένα περιβάλλον όπου μπορείτε να εγκαταστήσετε την εφαρμογή και όλο το περιβάλλον (Burp CA cert, Drozer και Frida κυρίως). Επομένως, μια ριζωμένη συσκευή (εξομοιωμένη ή όχι) είναι εξαιρετικά συνιστώμενη.

Διαδικτυακή Δυναμική Ανάλυση

Μπορείτε να δημιουργήσετε έναν δωρεάν λογαριασμό στο: https://appetize.io/. Αυτή η πλατφόρμα σας επιτρέπει να ανεβάσετε και να εκτελέσετε APKs, οπότε είναι χρήσιμη για να δείτε πώς συμπεριφέρεται ένα apk.

Μπορείτε ακόμη να δείτε τα logs της εφαρμογής σας στο διαδίκτυο και να συνδεθείτε μέσω adb.

Χάρη στη σύνδεση ADB μπορείτε να χρησιμοποιήσετε Drozer και Frida μέσα στους εξομοιωτές.

Τοπική Δυναμική Ανάλυση

Χρησιμοποιώντας έναν εξομοιωτή

  • Android Studio (Μπορείτε να δημιουργήσετε x86 και arm συσκευές, και σύμφωνα με αυτόοι τελευταίες εκδόσεις x86 υποστηρίζουν ARM βιβλιοθήκες χωρίς να χρειάζεται ένας αργός εξομοιωτής arm).
  • Μάθετε πώς να το ρυθμίσετε σε αυτή τη σελίδα:

AVD - Android Virtual Device

  • Genymotion (Δωρεάν έκδοση: Personal Edition, πρέπει να δημιουργήσετε έναν λογαριασμό. Συνιστάται να κατεβάσετε την έκδοση ΜΕ VirtualBox για να αποφύγετε πιθανά σφάλματα.)
  • Nox (Δωρεάν, αλλά δεν υποστηρίζει Frida ή Drozer).

note

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

Για να εγκαταστήσετε τις υπηρεσίες google (όπως το AppStore) στο Genymotion, πρέπει να κάνετε κλικ στο κόκκινο κουμπί που επισημαίνεται στην παρακάτω εικόνα:

Επίσης, σημειώστε ότι στη ρύθμιση της Android VM στο Genymotion μπορείτε να επιλέξετε Bridge Network mode (αυτό θα είναι χρήσιμο αν θα συνδεθείτε στην Android VM από μια διαφορετική VM με τα εργαλεία).

Χρησιμοποιήστε μια φυσική συσκευή

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

  1. Ρυθμίσεις.
  2. (Από Android 8.0) Επιλέξτε Σύστημα.
  3. Επιλέξτε Σχετικά με το τηλέφωνο.
  4. Πατήστε Αριθμός κατασκευής 7 φορές.
  5. Επιστρέψτε και θα βρείτε τις Επιλογές προγραμματιστή.

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

Ακούσια Διαρροή Δεδομένων

Καταγραφή

Οι προγραμματιστές θα πρέπει να είναι προσεκτικοί με την έκθεση πληροφοριών αποσφαλμάτωσης δημόσια, καθώς μπορεί να οδηγήσει σε διαρροές ευαίσθητων δεδομένων. Τα εργαλεία pidcat και adb logcat συνιστώνται για την παρακολούθηση των logs της εφαρμογής για να εντοπίσουν και να προστατεύσουν ευαίσθητες πληροφορίες. Pidcat προτιμάται για την ευχρηστία και την αναγνωσιμότητά του.

warning

Σημειώστε ότι από αργότερα από το Android 4.0, οι εφαρμογές μπορούν να έχουν πρόσβαση μόνο στα δικά τους logs. Έτσι, οι εφαρμογές δεν μπορούν να έχουν πρόσβαση στα logs άλλων εφαρμογών.
Ούτως ή άλλως, εξακολουθεί να συνιστάται να μην καταγράφετε ευαίσθητες πληροφορίες.

Caching του Buffer Αντιγραφής/Επικόλλησης

Το clipboard-based πλαίσιο του Android επιτρέπει τη λειτουργία αντιγραφής-επικόλλησης σε εφαρμογές, ωστόσο θέτει έναν κίνδυνο καθώς άλλες εφαρμογές μπορούν να πρόσβαση στο clipboard, εκθέτοντας ενδεχομένως ευαίσθητα δεδομένα. Είναι κρίσιμο να απενεργοποιήσετε τις λειτουργίες αντιγραφής/επικόλλησης για ευαίσθητες ενότητες μιας εφαρμογής, όπως λεπτομέρειες πιστωτικών καρτών, για να αποτρέψετε διαρροές δεδομένων.

Crash Logs

Αν μια εφαρμογή καταρρεύσει και αποθηκεύσει logs, αυτά τα logs μπορούν να βοηθήσουν τους επιτιθέμενους, ιδιαίτερα όταν η εφαρμογή δεν μπορεί να αναστραφεί. Για να μετριάσετε αυτόν τον κίνδυνο, αποφύγετε την καταγραφή σε περιπτώσεις κατάρρευσης, και αν τα logs πρέπει να μεταδοθούν μέσω του δικτύου, βεβαιωθείτε ότι αποστέλλονται μέσω ενός SSL καναλιού για ασφάλεια.

Ως pentester, προσπαθήστε να ρίξετε μια ματιά σε αυτά τα logs.

Δεδομένα Analytics που αποστέλλονται σε τρίτους

Οι εφαρμογές συχνά ενσωματώνουν υπηρεσίες όπως το Google Adsense, οι οποίες μπορεί να διαρρεύσουν ευαίσθητα δεδομένα λόγω κακής υλοποίησης από τους προγραμματιστές. Για να εντοπίσετε πιθανές διαρροές δεδομένων, είναι σκόπιμο να παρεμβάλετε την κίνηση της εφαρμογής και να ελέγξετε αν αποστέλλεται οποιαδήποτε ευαίσθητη πληροφορία σε υπηρεσίες τρίτων.

SQLite DBs

Οι περισσότερες εφαρμογές θα χρησιμοποιούν εσωτερικές βάσεις δεδομένων SQLite για να αποθηκεύσουν πληροφορίες. Κατά τη διάρκεια της pentest, ρίξτε μια ματιά στις βάσεις δεδομένων που δημιουργούνται, τα ονόματα των πινάκων και στηλών και όλα τα δεδομένα που αποθηκεύονται γιατί θα μπορούσατε να βρείτε ευαίσθητες πληροφορίες (που θα ήταν μια ευπάθεια).
Οι βάσεις δεδομένων θα πρέπει να βρίσκονται στο /data/data/the.package.name/databases όπως /data/data/com.mwr.example.sieve/databases.

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

Αριθμήστε τους πίνακες χρησιμοποιώντας .tables και αριθμήστε τις στήλες των πινάκων κάνοντας .schema <table_name>.

Drozer (Εκμετάλλευση Δραστηριοτήτων, Παρόχων Περιεχομένου και Υπηρεσιών)

Από Drozer Docs: Drozer σας επιτρέπει να αναλάβετε το ρόλο μιας εφαρμογής Android και να αλληλεπιδράσετε με άλλες εφαρμογές. Μπορεί να κάνει οτιδήποτε μπορεί να κάνει μια εγκατεστημένη εφαρμογή, όπως να χρησιμοποιήσει τον μηχανισμό Επικοινωνίας Μεταξύ Διαδικασιών (IPC) του Android και να αλληλεπιδράσει με το υποκείμενο λειτουργικό σύστημα.
Το Drozer είναι ένα χρήσιμο εργαλείο για να εκμεταλλευτείτε εξαγόμενες δραστηριότητες, εξαγόμενες υπηρεσίες και Παρόχους Περιεχομένου όπως θα μάθετε στις επόμενες ενότητες.

Εκμετάλλευση εξαγόμενων Δραστηριοτήτων

Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι μια Δραστηριότητα Android.
Επίσης θυμηθείτε ότι ο κώδικας μιας δραστηριότητας ξεκινά στη μέθοδο onCreate.

Παράκαμψη εξουσιοδότησης

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

Μάθετε πώς να εκμεταλλευτείτε εξαγόμενες δραστηριότητες με το Drozer.

Μπορείτε επίσης να ξεκινήσετε μια εξαγόμενη δραστηριότητα από το adb:

  • PackageName είναι com.example.demo
  • Exported ActivityName είναι com.example.test.MainActivity
bash
adb shell am start -n com.example.demo/com.example.test.MainActivity

ΣΗΜΕΙΩΣΗ: Το MobSF θα ανιχνεύσει ως κακόβουλη τη χρήση του singleTask/singleInstance ως android:launchMode σε μια δραστηριότητα, αλλά λόγω αυτού, προφανώς αυτό είναι επικίνδυνο μόνο σε παλιές εκδόσεις (API εκδόσεις < 21).

σημειωση

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

Διαρροή ευαίσθητων πληροφοριών

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

Tapjacking

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

Εκμετάλλευση Παρόχων Περιεχομένου - Πρόσβαση και χειρισμός ευαίσθητων πληροφοριών

Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι ένας Πάροχος Περιεχομένου.
Οι πάροχοι περιεχομένου χρησιμοποιούνται βασικά για να μοιράζονται δεδομένα. Αν μια εφαρμογή έχει διαθέσιμους παρόχους περιεχομένου, μπορεί να είστε σε θέση να εξάγετε ευαίσθητα δεδομένα από αυτούς. Είναι επίσης ενδιαφέρον να δοκιμάσετε πιθανές SQL injections και Path Traversals καθώς μπορεί να είναι ευάλωτοι.

Μάθετε πώς να εκμεταλλευτείτε τους Παρόχους Περιεχομένου με το Drozer.

Εκμετάλλευση Υπηρεσιών

Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι μια Υπηρεσία.
Θυμηθείτε ότι οι ενέργειες μιας Υπηρεσίας ξεκινούν στη μέθοδο onStartCommand.

Μια υπηρεσία είναι βασικά κάτι που μπορεί να λάβει δεδομένα, να τα επεξεργαστεί και να επιστρέψει (ή όχι) μια απάντηση. Έτσι, αν μια εφαρμογή εξάγει κάποιες υπηρεσίες, θα πρέπει να ελέγξετε τον κώδικα για να κατανοήσετε τι κάνει και να δοκιμάσετε το δυναμικά για να εξάγετε εμπιστευτικές πληροφορίες, παρακάμπτοντας μέτρα αυθεντικοποίησης...
Μάθετε πώς να εκμεταλλευτείτε τις Υπηρεσίες με το Drozer.

Εκμετάλλευση Δέκτες Εκπομπών

Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι ένας Δέκτης Εκπομπών.
Θυμηθείτε ότι οι ενέργειες ενός Δέκτη Εκπομπών ξεκινούν στη μέθοδο onReceive.

Ένας δέκτης εκπομπών θα περιμένει για έναν τύπο μηνύματος. Ανάλογα με το πώς ο δέκτης χειρίζεται το μήνυμα, μπορεί να είναι ευάλωτος.
Μάθετε πώς να εκμεταλλευτείτε τους Δέκτες Εκπομπών με το Drozer.

Μπορείτε να αναζητήσετε deep links χειροκίνητα, χρησιμοποιώντας εργαλεία όπως το MobSF ή σενάρια όπως αυτό.
Μπορείτε να ανοίξετε ένα δηλωμένο σχήμα χρησιμοποιώντας adb ή έναν περιηγητή:

bash
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]

Σημειώστε ότι μπορείτε να παραλείψετε το όνομα πακέτου και το κινητό θα καλέσει αυτόματα την εφαρμογή που θα πρέπει να ανοίξει αυτόν τον σύνδεσμο.

html
<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>

Κώδικας που εκτελείται

Για να βρείτε τον κώδικα που θα εκτελείται στην εφαρμογή, πηγαίνετε στη δραστηριότητα που καλείται από το deeplink και αναζητήστε τη συνάρτηση onNewIntent.

Ευαίσθητες πληροφορίες

Κάθε φορά που βρίσκετε ένα deep link ελέγξτε ότι δεν λαμβάνει ευαίσθητα δεδομένα (όπως κωδικούς πρόσβασης) μέσω παραμέτρων URL, γιατί οποιαδήποτε άλλη εφαρμογή θα μπορούσε να προσποιηθεί το deep link και να κλέψει αυτά τα δεδομένα!

Παράμετροι στη διαδρομή

Πρέπει επίσης να ελέγξετε αν κάποιο deep link χρησιμοποιεί μια παράμετρο μέσα στη διαδρομή του URL όπως: https://api.example.com/v1/users/{username}, σε αυτή την περίπτωση μπορείτε να αναγκάσετε μια διαδρομή traversal αποκτώντας πρόσβαση σε κάτι όπως: example://app/users?username=../../unwanted-endpoint%3fparam=value.
Σημειώστε ότι αν βρείτε τα σωστά endpoints μέσα στην εφαρμογή μπορεί να είστε σε θέση να προκαλέσετε μια Open Redirect (αν μέρος της διαδρομής χρησιμοποιείται ως όνομα τομέα), κατάληψη λογαριασμού (αν μπορείτε να τροποποιήσετε λεπτομέρειες χρηστών χωρίς CSRF token και το ευάλωτο endpoint χρησιμοποίησε τη σωστή μέθοδο) και οποιαδήποτε άλλη ευπάθεια. Περισσότερες πληροφορίες σχετικά με αυτό εδώ.

Περισσότερα παραδείγματα

Ένα ενδιαφέρον bug bounty report σχετικά με συνδέσμους (/.well-known/assetlinks.json).

Αποτυχίες Επιθεώρησης και Επαλήθευσης Επίπεδου Μεταφοράς

  • Οι πιστοποιήσεις δεν ελέγχονται πάντα σωστά από τις εφαρμογές Android. Είναι συνηθισμένο αυτές οι εφαρμογές να παραβλέπουν προειδοποιήσεις και να αποδέχονται αυτο-υπογεγραμμένες πιστοποιήσεις ή, σε ορισμένες περιπτώσεις, να επιστρέφουν στη χρήση HTTP συνδέσεων.
  • Οι διαπραγματεύσεις κατά τη διάρκεια του SSL/TLS handshake είναι μερικές φορές αδύναμες, χρησιμοποιώντας ανασφαλείς κρυπτογραφικές σουίτες. Αυτή η ευπάθεια καθιστά τη σύνδεση ευάλωτη σε επιθέσεις man-in-the-middle (MITM), επιτρέποντας στους επιτιθέμενους να αποκρυπτογραφήσουν τα δεδομένα.
  • Διαρροή ιδιωτικών πληροφοριών είναι ένας κίνδυνος όταν οι εφαρμογές πιστοποιούν χρησιμοποιώντας ασφαλείς διαύλους αλλά στη συνέχεια επικοινωνούν μέσω μη ασφαλών διαύλων για άλλες συναλλαγές. Αυτή η προσέγγιση αποτυγχάνει να προστατεύσει ευαίσθητα δεδομένα, όπως cookies συνεδρίας ή λεπτομέρειες χρηστών, από την παρεμβολή κακόβουλων οντοτήτων.

Επαλήθευση Πιστοποιητικού

Θα επικεντρωθούμε στην επαλήθευση πιστοποιητικού. Η ακεραιότητα του πιστοποιητικού του διακομιστή πρέπει να επαληθεύεται για να ενισχυθεί η ασφάλεια. Αυτό είναι κρίσιμο γιατί οι ανασφαλείς ρυθμίσεις TLS και η μετάδοση ευαίσθητων δεδομένων μέσω μη κρυπτογραφημένων καναλιών μπορεί να θέσουν σε σημαντικό κίνδυνο. Για λεπτομερείς βήματα σχετικά με την επαλήθευση πιστοποιητικών διακομιστή και την αντιμετώπιση ευπαθειών, αυτή η πηγή παρέχει εκτενή καθοδήγηση.

SSL Pinning

Το SSL Pinning είναι ένα μέτρο ασφαλείας όπου η εφαρμογή επαληθεύει το πιστοποιητικό του διακομιστή με μια γνωστή αντίγραφο που είναι αποθηκευμένο μέσα στην ίδια την εφαρμογή. Αυτή η μέθοδος είναι απαραίτητη για την αποτροπή επιθέσεων MITM. Συνιστάται έντονα η εφαρμογή του SSL Pinning για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες.

Επιθεώρηση Κίνησης

Για να επιθεωρήσετε την κίνηση HTTP, είναι απαραίτητο να εγκαταστήσετε το πιστοποιητικό του εργαλείου proxy (π.χ., Burp). Χωρίς την εγκατάσταση αυτού του πιστοποιητικού, η κρυπτογραφημένη κίνηση μπορεί να μην είναι ορατή μέσω του proxy. Για έναν οδηγό σχετικά με την εγκατάσταση ενός προσαρμοσμένου πιστοποιητικού CA, κάντε κλικ εδώ.

Οι εφαρμογές που στοχεύουν API Level 24 και άνω απαιτούν τροποποιήσεις στη Ρύθμιση Ασφαλείας Δικτύου για να αποδεχτούν το πιστοποιητικό CA του proxy. Αυτό το βήμα είναι κρίσιμο για την επιθεώρηση κρυπτογραφημένης κίνησης. Για οδηγίες σχετικά με την τροποποίηση της Ρύθμισης Ασφαλείας Δικτύου, ανατρέξτε σε αυτό το σεμινάριο.

Παράκαμψη SSL Pinning

Όταν έχει εφαρμοστεί το SSL Pinning, η παράκαμψή του γίνεται απαραίτητη για την επιθεώρηση της κίνησης HTTPS. Διατίθενται διάφορες μέθοδοι για αυτόν τον σκοπό:

  • Αυτόματα τροποποιήστε το apk για να παράκαμψετε το SSLPinning με apk-mitm. Το καλύτερο πλεονέκτημα αυτής της επιλογής είναι ότι δεν θα χρειαστείτε root για να παρακάμψετε το SSL Pinning, αλλά θα χρειαστεί να διαγράψετε την εφαρμογή και να εγκαταστήσετε τη νέα, και αυτό δεν θα λειτουργήσει πάντα.
  • Μπορείτε να χρησιμοποιήσετε Frida (που συζητείται παρακάτω) για να παρακάμψετε αυτή την προστασία. Εδώ έχετε έναν οδηγό για τη χρήση Burp+Frida+Genymotion: https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/
  • Μπορείτε επίσης να προσπαθήσετε να παράκαμψετε αυτόματα το SSL Pinning χρησιμοποιώντας objection: objection --gadget com.package.app explore --startup-command "android sslpinning disable"
  • Μπορείτε επίσης να προσπαθήσετε να παράκαμψετε αυτόματα το SSL Pinning χρησιμοποιώντας MobSF dynamic analysis (εξηγείται παρακάτω)
  • Αν νομίζετε ότι υπάρχει κάποια κίνηση που δεν καταγράφετε, μπορείτε να προσπαθήσετε να προωθήσετε την κίνηση στο burp χρησιμοποιώντας iptables. Διαβάστε αυτό το blog: https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62

Αναζητώντας Κοινές Ευπάθειες Ιστού

Είναι σημαντικό να αναζητήσετε επίσης κοινές ευπάθειες ιστού μέσα στην εφαρμογή. Λεπτομερείς πληροφορίες σχετικά με την αναγνώριση και την αντιμετώπιση αυτών των ευπαθειών είναι πέρα από το πεδίο αυτής της σύνοψης αλλά καλύπτονται εκτενώς αλλού.

Frida

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

Dump Memory - Fridump

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

Χρησιμοποιώντας Fridump3 μπορείτε να κάνετε dump τη μνήμη της εφαρμογής με:

bash
# With PID
python3 fridump3.py -u <PID>

# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"

Αυτό θα εκφορτώσει τη μνήμη στον φάκελο ./dump, και εκεί μπορείτε να κάνετε grep με κάτι όπως:

bash
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"

Ευαίσθητα δεδομένα στο Keystore

Στο Android, το Keystore είναι το καλύτερο μέρος για να αποθηκεύσετε ευαίσθητα δεδομένα, ωστόσο, με αρκετά δικαιώματα είναι ακόμα δυνατό να αποκτήσετε πρόσβαση σε αυτό. Καθώς οι εφαρμογές τείνουν να αποθηκεύουν εδώ ευαίσθητα δεδομένα σε καθαρό κείμενο, οι pentests θα πρέπει να ελέγχουν γι' αυτό ως χρήστης root ή κάποιος με φυσική πρόσβαση στη συσκευή θα μπορούσε να είναι σε θέση να κλέψει αυτά τα δεδομένα.

Ακόμα και αν μια εφαρμογή αποθηκεύει δεδομένα στο keystore, τα δεδομένα θα πρέπει να είναι κρυπτογραφημένα.

Για να αποκτήσετε πρόσβαση στα δεδομένα μέσα στο keystore, μπορείτε να χρησιμοποιήσετε αυτό το σενάριο Frida: https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js

bash
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js

Fingerprint/Biometrics Bypass

Χρησιμοποιώντας το παρακάτω σενάριο Frida, θα μπορούσε να είναι δυνατό να παρακαμφθεί η αυθεντικοποίηση δακτυλικών αποτυπωμάτων που ενδέχεται να εκτελούν οι εφαρμογές Android προκειμένου να προστατεύσουν ορισμένες ευαίσθητες περιοχές:

bash
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>

Εικόνες Υποβάθρου

Όταν βάζετε μια εφαρμογή σε υποβάθρο, το Android αποθηκεύει μια στιγμιότυπο της εφαρμογής έτσι ώστε όταν ανακτηθεί στο προσκήνιο να αρχίσει να φορτώνει την εικόνα πριν από την εφαρμογή, ώστε να φαίνεται ότι η εφαρμογή φορτώθηκε πιο γρήγορα.

Ωστόσο, αν αυτό το στιγμιότυπο περιέχει ευαίσθητες πληροφορίες, κάποιος με πρόσβαση στο στιγμιότυπο μπορεί να κλέψει αυτές τις πληροφορίες (σημειώστε ότι χρειάζεστε root για να έχετε πρόσβαση σε αυτό).

Τα στιγμιότυπα συνήθως αποθηκεύονται γύρω από: /data/system_ce/0/snapshots

Το Android παρέχει έναν τρόπο να αποτρέψει τη λήψη στιγμιότυπων οθόνης ρυθμίζοντας την παράμετρο διάταξης FLAG_SECURE. Χρησιμοποιώντας αυτή τη σημαία, το περιεχόμενο του παραθύρου θεωρείται ασφαλές, αποτρέποντας την εμφάνιση σε στιγμιότυπα οθόνης ή την προβολή σε μη ασφαλείς οθόνες.

bash
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

Αναλυτής Εφαρμογών Android

Αυτό το εργαλείο μπορεί να σας βοηθήσει να διαχειριστείτε διάφορα εργαλεία κατά τη διάρκεια της δυναμικής ανάλυσης: https://github.com/NotSoSecure/android_application_analyzer

Εισαγωγή Intent

Οι προγραμματιστές συχνά δημιουργούν proxy components όπως activities, services και broadcast receivers που χειρίζονται αυτά τα Intents και τα περνούν σε μεθόδους όπως startActivity(...) ή sendBroadcast(...), οι οποίες μπορεί να είναι επικίνδυνες.

Ο κίνδυνος έγκειται στην επιτρεπτικότητα στους επιτιθέμενους να ενεργοποιούν μη εξαγόμενα components εφαρμογών ή να έχουν πρόσβαση σε ευαίσθητους content providers παραπλανώντας αυτά τα Intents. Ένα αξιοσημείωτο παράδειγμα είναι το component WebView που μετατρέπει URLs σε αντικείμενα Intent μέσω Intent.parseUri(...) και στη συνέχεια τα εκτελεί, ενδεχομένως οδηγώντας σε κακόβουλες εισαγωγές Intents.

Βασικά Σημεία

  • Εισαγωγή Intent είναι παρόμοια με το πρόβλημα Open Redirect του ιστού.
  • Οι εκμεταλλεύσεις περιλαμβάνουν την παράδοση αντικειμένων Intent ως extras, τα οποία μπορούν να ανακατευθυνθούν για να εκτελέσουν μη ασφαλείς λειτουργίες.
  • Μπορεί να εκθέσει μη εξαγόμενα components και content providers στους επιτιθέμενους.
  • Η μετατροπή URL σε Intent του WebView μπορεί να διευκολύνει ακούσιες ενέργειες.

Εισαγωγές Πελάτη Android και άλλες

Πιθανώς γνωρίζετε για αυτούς τους τύπους ευπαθειών από τον Ιστό. Πρέπει να είστε ιδιαίτερα προσεκτικοί με αυτές τις ευπάθειες σε μια εφαρμογή Android:

  • SQL Injection: Όταν ασχολείστε με δυναμικά queries ή Content-Providers, βεβαιωθείτε ότι χρησιμοποιείτε παραμετροποιημένα queries.
  • JavaScript Injection (XSS): Επαληθεύστε ότι η υποστήριξη JavaScript και Plugin είναι απενεργοποιημένη για οποιαδήποτε WebViews (απενεργοποιημένη από προεπιλογή). Περισσότερες πληροφορίες εδώ.
  • Τοπική Συμπερίληψη Αρχείων: Οι WebViews θα πρέπει να έχουν απενεργοποιημένη την πρόσβαση στο σύστημα αρχείων (ενεργοποιημένη από προεπιλογή) - (webview.getSettings().setAllowFileAccess(false);). Περισσότερες πληροφορίες εδώ.
  • Διαρκή cookies: Σε πολλές περιπτώσεις, όταν η εφαρμογή android ολοκληρώνει τη συνεδρία, το cookie δεν ανακαλείται ή μπορεί ακόμη και να αποθηκευτεί στο δίσκο.
  • Secure Flag σε cookies

Αυτόματη Ανάλυση

MobSF

Στατική ανάλυση

Αξιολόγηση ευπαθειών της εφαρμογής χρησιμοποιώντας ένα ωραίο web-based frontend. Μπορείτε επίσης να εκτελέσετε δυναμική ανάλυση (αλλά πρέπει να προετοιμάσετε το περιβάλλον).

bash
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

Σημειώστε ότι το MobSF μπορεί να αναλύσει Android(apk), IOS(ipa) και Windows(apx) εφαρμογές (Οι εφαρμογές Windows πρέπει να αναλύονται από ένα MobSF εγκατεστημένο σε έναν υπολογιστή Windows).
Επίσης, αν δημιουργήσετε ένα ZIP αρχείο με τον πηγαίο κώδικα μιας Android ή IOS εφαρμογής (πηγαίνετε στον ριζικό φάκελο της εφαρμογής, επιλέξτε τα πάντα και δημιουργήστε ένα ZIP αρχείο), θα μπορέσει να το αναλύσει επίσης.

Το MobSF επιτρέπει επίσης την diff/Compare ανάλυση και την ενσωμάτωση του VirusTotal (θα χρειαστεί να ρυθμίσετε το API key σας στο MobSF/settings.py και να το ενεργοποιήσετε: VT_ENABLED = TRUE VT_API_KEY = <Your API key> VT_UPLOAD = TRUE). Μπορείτε επίσης να ρυθμίσετε το VT_UPLOAD σε False, τότε το hash θα ανεβεί αντί για το αρχείο.

Βοηθητική Δυναμική ανάλυση με το MobSF

MobSF μπορεί επίσης να είναι πολύ χρήσιμο για δυναμική ανάλυση σε Android, αλλά σε αυτή την περίπτωση θα χρειαστεί να εγκαταστήσετε το MobSF και το genymotion στον υπολογιστή σας (μια VM ή Docker δεν θα λειτουργήσει). Σημείωση: Πρέπει να ξεκινήσετε πρώτα μια VM στο genymotion και μετά το MobSF.
Ο δυναμικός αναλυτής MobSF μπορεί να:

  • Dump application data (URLs, logs, clipboard, screenshots που κάνατε εσείς, screenshots που έγιναν από τον "Exported Activity Tester", emails, SQLite βάσεις δεδομένων, XML αρχεία και άλλα δημιουργημένα αρχεία). Όλα αυτά γίνονται αυτόματα εκτός από τα screenshots, πρέπει να πατήσετε όταν θέλετε ένα screenshot ή πρέπει να πατήσετε "Exported Activity Tester" για να αποκτήσετε screenshots όλων των εξαγόμενων δραστηριοτήτων.
  • Capture HTTPS traffic
  • Χρησιμοποιήστε το Frida για να αποκτήσετε runtime information

Από τις εκδόσεις Android > 5, θα ξεκινήσει αυτόματα το Frida και θα ρυθμίσει τις παγκόσμιες ρυθμίσεις proxy για να συλλάβει την κίνηση. Θα συλλάβει μόνο την κίνηση από την εφαρμογή που δοκιμάζεται.

Frida

Από προεπιλογή, θα χρησιμοποιήσει επίσης κάποια Frida Scripts για να παρακάμψει το SSL pinning, ανίχνευση root και ανίχνευση debugger και για να παρακολουθήσει ενδιαφέροντα APIs.
Το MobSF μπορεί επίσης να καλέσει εξαγόμενες δραστηριότητες, να τραβήξει screenshots από αυτές και να τις αποθηκεύσει για την αναφορά.

Για να ξεκινήσετε τη δυναμική δοκιμή πατήστε το πράσινο κουμπί: "Start Instrumentation". Πατήστε το "Frida Live Logs" για να δείτε τα logs που δημιουργούνται από τα Frida scripts και το "Live API Monitor" για να δείτε όλες τις κλήσεις σε hooked μεθόδους, τα ορίσματα που περνιούνται και τις επιστρεφόμενες τιμές (αυτό θα εμφανιστεί μετά την πίεση του "Start Instrumentation").
Το MobSF επιτρέπει επίσης να φορτώσετε τα δικά σας Frida scripts (για να στείλετε τα αποτελέσματα των Frida scripts σας στο MobSF χρησιμοποιήστε τη λειτουργία send()). Έχει επίσης πολλά προ-γραμμένα scripts που μπορείτε να φορτώσετε (μπορείτε να προσθέσετε περισσότερα στο MobSF/DynamicAnalyzer/tools/frida_scripts/others/), απλά επιλέξτε τα, πατήστε "Load" και πατήστε "Start Instrumentation" (θα μπορείτε να δείτε τα logs αυτών των scripts μέσα στο "Frida Live Logs").

Επιπλέον, έχετε κάποιες βοηθητικές λειτουργίες Frida:

  • Enumerate Loaded Classes: Θα εκτυπώσει όλες τις φορτωμένες κλάσεις
  • Capture Strings: Θα εκτυπώσει όλες τις καταγεγραμμένες συμβολοσειρές κατά τη χρήση της εφαρμογής (πολύ θορυβώδες)
  • Capture String Comparisons: Μπορεί να είναι πολύ χρήσιμο. Θα δείξει τις 2 συμβολοσειρές που συγκρίνονται και αν το αποτέλεσμα ήταν True ή False.
  • Enumerate Class Methods: Βάλτε το όνομα της κλάσης (όπως "java.io.File") και θα εκτυπώσει όλες τις μεθόδους της κλάσης.
  • Search Class Pattern: Αναζητήστε κλάσεις κατά μοτίβο
  • Trace Class Methods: Trace μια ολόκληρη κλάση (δείτε τις εισόδους και εξόδους όλων των μεθόδων της κλάσης). Θυμηθείτε ότι από προεπιλογή το MobSF παρακολουθεί πολλές ενδιαφέρουσες μεθόδους Android Api.

Αφού επιλέξετε το βοηθητικό module που θέλετε να χρησιμοποιήσετε, πρέπει να πατήσετε "Start Intrumentation" και θα δείτε όλες τις εξόδους στο "Frida Live Logs".

Shell

Το MobSF σας παρέχει επίσης ένα shell με κάποιες adb εντολές, MobSF commands, και κοινές shell εντολές στο κάτω μέρος της σελίδας δυναμικής ανάλυσης. Ορισμένες ενδιαφέρουσες εντολές:

bash
help
shell ls
activities
exported_activities
services
receivers

HTTP εργαλεία

Όταν η κίνηση http καταγράφεται, μπορείτε να δείτε μια άσχημη προβολή της καταγεγραμμένης κίνησης στο "HTTP(S) Traffic" κάτω ή μια πιο ωραία προβολή στο "Start HTTPTools" πράσινο κουμπί. Από τη δεύτερη επιλογή, μπορείτε να στείλετε τα καταγεγραμμένα αιτήματα σε proxy όπως το Burp ή το Owasp ZAP.
Για να το κάνετε αυτό, ενεργοποιήστε το Burp --> απενεργοποιήστε το Intercept --> στο MobSB HTTPTools επιλέξτε το αίτημα --> πατήστε "Send to Fuzzer" --> επιλέξτε τη διεύθυνση proxy (http://127.0.0.1:8080\).

Αφού ολοκληρώσετε την δυναμική ανάλυση με το MobSF, μπορείτε να πατήσετε το "Start Web API Fuzzer" για να fuzz http αιτήματα και να αναζητήσετε ευπάθειες.

note

Μετά την εκτέλεση μιας δυναμικής ανάλυσης με το MobSF, οι ρυθμίσεις του proxy μπορεί να είναι λανθασμένες και δεν θα μπορείτε να τις διορθώσετε από το GUI. Μπορείτε να διορθώσετε τις ρυθμίσεις του proxy κάνοντας:

adb shell settings put global http_proxy :0

Βοηθητική Δυναμική Ανάλυση με το Inspeckage

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

Yaazhini

Αυτό είναι ένα υπέροχο εργαλείο για να εκτελέσετε στατική ανάλυση με GUI

Qark

Αυτό το εργαλείο έχει σχεδιαστεί για να αναζητά αρκετές ευπάθειες σχετικές με την ασφάλεια εφαρμογών Android, είτε στον κώδικα πηγής είτε σε πακεταρισμένα APKs. Το εργαλείο είναι επίσης ικανό να δημιουργεί ένα "Proof-of-Concept" deployable APK και εντολές ADB, για να εκμεταλλευτεί κάποιες από τις ευπάθειες που βρέθηκαν (Εκτεθειμένες δραστηριότητες, intents, tapjacking...). Όπως και με το Drozer, δεν χρειάζεται να κάνετε root τη συσκευή δοκιμής.

bash
pip3 install --user qark  # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java

ReverseAPK

  • Εμφανίζει όλα τα εξαγόμενα αρχεία για εύκολη αναφορά
  • Αυτόματα αποσυμπιέζει αρχεία APK σε μορφή Java και Smali
  • Αναλύει το AndroidManifest.xml για κοινές ευπάθειες και συμπεριφορές
  • Στατική ανάλυση πηγαίου κώδικα για κοινές ευπάθειες και συμπεριφορές
  • Πληροφορίες συσκευής
  • και άλλα
bash
reverse-apk relative/path/to/APP.apk

SUPER Android Analyzer

SUPER είναι μια εφαρμογή γραμμής εντολών που μπορεί να χρησιμοποιηθεί σε Windows, MacOS X και Linux, που αναλύει .apk αρχεία αναζητώντας ευπάθειες. Το κάνει αυτό αποσυμπιέζοντας τα APK και εφαρμόζοντας μια σειρά κανόνων για να ανιχνεύσει αυτές τις ευπάθειες.

Όλοι οι κανόνες είναι κεντραρισμένοι σε ένα αρχείο rules.json, και κάθε εταιρεία ή δοκιμαστής μπορεί να δημιουργήσει τους δικούς της κανόνες για να αναλύσει ό,τι χρειάζεται.

Κατεβάστε τα τελευταία δυαδικά αρχεία από τη σελίδα λήψης

super-analyzer {apk_file}

StaCoAn

Το StaCoAn είναι ένα crossplatform εργαλείο που βοηθά προγραμματιστές, κυνηγούς bug bounty και ηθικούς χάκερ να εκτελούν static code analysis σε κινητές εφαρμογές.

Η έννοια είναι ότι σύρετε και αποθέτετε το αρχείο της κινητής σας εφαρμογής (ένα αρχείο .apk ή .ipa) στην εφαρμογή StaCoAn και θα δημιουργήσει μια οπτική και φορητή αναφορά για εσάς. Μπορείτε να προσαρμόσετε τις ρυθμίσεις και τις λίστες λέξεων για να αποκτήσετε μια εξατομικευμένη εμπειρία.

Κατεβάστε latest release:

./stacoan

AndroBugs

Το AndroBugs Framework είναι ένα σύστημα ανάλυσης ευπαθειών Android που βοηθά τους προγραμματιστές ή τους χάκερ να εντοπίσουν πιθανές ευπάθειες ασφαλείας σε εφαρμογές Android.
Windows releases

python androbugs.py -f [APK file]
androbugs.exe -f [APK file]

Androwarn

Androwarn είναι ένα εργαλείο του οποίου ο κύριος στόχος είναι να ανιχνεύει και να προειδοποιεί τον χρήστη για πιθανές κακόβουλες συμπεριφορές που αναπτύσσονται από μια εφαρμογή Android.

Η ανίχνευση πραγματοποιείται με την στατική ανάλυση του Dalvik bytecode της εφαρμογής, που αναπαρίσταται ως Smali, με τη βιβλιοθήκη androguard.

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

python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3

MARA Framework

MARA είναι ένα Mobile Application Reverse engineering και Analysis Framework. Είναι ένα εργαλείο που συγκεντρώνει κοινώς χρησιμοποιούμενα εργαλεία αντίστροφης μηχανικής και ανάλυσης εφαρμογών κινητών, για να βοηθήσει στη δοκιμή εφαρμογών κινητών ενάντια στις απειλές ασφάλειας κινητών του OWASP. Σκοπός του είναι να διευκολύνει αυτή την εργασία και να την κάνει πιο φιλική προς τους προγραμματιστές εφαρμογών κινητών και τους επαγγελματίες ασφάλειας.

Είναι ικανό να:

  • Εξάγει κώδικα Java και Smali χρησιμοποιώντας διάφορα εργαλεία
  • Αναλύει APKs χρησιμοποιώντας: smalisca, ClassyShark, androbugs, androwarn, APKiD
  • Εξάγει ιδιωτικές πληροφορίες από το APK χρησιμοποιώντας regexps.
  • Αναλύει το Manifest.
  • Αναλύει βρέθηκαν τομείς χρησιμοποιώντας: pyssltest, testssl και whatweb
  • Αποκωδικοποιεί APK μέσω apk-deguard.com

Koodous

Χρήσιμο για την ανίχνευση κακόβουλου λογισμικού: https://koodous.com/

Obfuscating/Deobfuscating code

Σημειώστε ότι ανάλογα με την υπηρεσία και τη διαμόρφωση που χρησιμοποιείτε για να αποκρύψετε τον κώδικα. Τα μυστικά μπορεί να είναι ή να μην είναι αποκρυπτογραφημένα.

ProGuard

Από Wikipedia: ProGuard είναι ένα εργαλείο γραμμής εντολών ανοιχτού κώδικα που μειώνει, βελτιστοποιεί και αποκρύπτει τον κώδικα Java. Είναι ικανό να βελτιστοποιεί τον bytecode καθώς και να ανιχνεύει και να αφαιρεί μη χρησιμοποιούμενες εντολές. Το ProGuard είναι δωρεάν λογισμικό και διανέμεται υπό την άδεια GNU General Public License, έκδοση 2.

Το ProGuard διανέμεται ως μέρος του Android SDK και εκτελείται κατά την κατασκευή της εφαρμογής σε λειτουργία κυκλοφορίας.

DexGuard

Βρείτε έναν οδηγό βήμα προς βήμα για να αποκωδικοποιήσετε το apk στο https://blog.lexfo.fr/dexguard.html

(Από αυτόν τον οδηγό) Την τελευταία φορά που ελέγξαμε, η λειτουργία του Dexguard ήταν:

  • φορτώστε έναν πόρο ως InputStream;
  • τροφοδοτήστε το αποτέλεσμα σε μια κλάση που κληρονομεί από το FilterInputStream για να το αποκρυπτογραφήσετε;
  • κάντε κάποια άχρηστη απόκρυψη για να σπαταλήσετε λίγα λεπτά χρόνου από έναν αναλυτή;
  • τροφοδοτήστε το αποκρυπτογραφημένο αποτέλεσμα σε ένα ZipInputStream για να αποκτήσετε ένα αρχείο DEX;
  • τελικά φορτώστε το προκύπτον DEX ως Πόρο χρησιμοποιώντας τη μέθοδο loadDex.

DeGuard

Το DeGuard αντιστρέφει τη διαδικασία απόκρυψης που εκτελούν τα εργαλεία απόκρυψης του Android. Αυτό επιτρέπει πολλές αναλύσεις ασφάλειας, συμπεριλαμβανομένης της επιθεώρησης κώδικα και της πρόβλεψης βιβλιοθηκών.

Μπορείτε να ανεβάσετε ένα αποκρυπτογραφημένο APK στην πλατφόρμα τους.

[Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app

Αυτό είναι ένα εργαλείο LLM για να βρείτε τυχόν πιθανές ευπάθειες ασφάλειας σε εφαρμογές android και να αποκωδικοποιήσετε τον κώδικα της εφαρμογής android. Χρησιμοποιεί το δημόσιο API Gemini της Google.

Simplify

Είναι ένα γενικό αποκρυπτογραφητή android. Το Simplify εκτελεί εικονικά μια εφαρμογή για να κατανοήσει τη συμπεριφορά της και στη συνέχεια προσπαθεί να βελτιστοποιήσει τον κώδικα ώστε να συμπεριφέρεται ταυτόχρονα αλλά να είναι πιο εύκολο για έναν άνθρωπο να κατανοήσει. Κάθε τύπος βελτιστοποίησης είναι απλός και γενικός, οπότε δεν έχει σημασία ποιος είναι ο συγκεκριμένος τύπος απόκρυψης που χρησιμοποιείται.

APKiD

Το APKiD σας δίνει πληροφορίες σχετικά με πώς δημιουργήθηκε ένα APK. Αναγνωρίζει πολλούς μεταγλωττιστές, πακεταριστές, αποκρυπτογραφητές και άλλα περίεργα πράγματα. Είναι το PEiD για το Android.

Manual

Διαβάστε αυτό το tutorial για να μάθετε μερικά κόλπα σχετικά με το πώς να αντιστρέψετε την προσαρμοσμένη απόκρυψη

Labs

Androl4b

Το AndroL4b είναι μια εικονική μηχανή ασφάλειας Android βασισμένη στο ubuntu-mate που περιλαμβάνει τη συλλογή των τελευταίων πλαισίων, tutorials και εργαστηρίων από διάφορους ειδικούς και ερευνητές ασφάλειας για αντίστροφη μηχανική και ανάλυση κακόβουλου λογισμικού.

References

Yet to try

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