iOS Pentesting
Last updated
Last updated
Χρησιμοποιήστε Trickest για να δημιουργήσετε και να ** αυτοματοποιήσετε ροές εργασίας** με τη βοήθεια των πιο προηγμένων εργαλείων της κοινότητας. Αποκτήστε πρόσβαση σήμερα:
Σε αυτή τη σελίδα μπορείτε να βρείτε πληροφορίες σχετικά με τον iOS simulator, emulators και jailbreaking:
Κατά τη διάρκεια της δοκιμής θα προταθούν αρκετές λειτουργίες (σύνδεση στη συσκευή, ανάγνωση/γραφή/ανέβασμα/κατέβασμα αρχείων, χρήση κάποιων εργαλείων...). Επομένως, αν δεν ξέρετε πώς να εκτελέσετε καμία από αυτές τις ενέργειες, παρακαλώ, ξεκινήστε να διαβάζετε τη σελίδα:
Για τα επόμενα βήματα η εφαρμογή θα πρέπει να είναι εγκατεστημένη στη συσκευή και θα πρέπει να έχει ήδη αποκτήσει το IPA αρχείο της εφαρμογής. Διαβάστε τη σελίδα Βασικές Λειτουργίες Δοκιμών iOS για να μάθετε πώς να το κάνετε αυτό.
Συνιστάται να χρησιμοποιήσετε το εργαλείο MobSF για να εκτελέσετε μια αυτόματη Στατική Ανάλυση στο IPA αρχείο.
Αναγνώριση των προστασιών που υπάρχουν στο δυαδικό:
PIE (Position Independent Executable): Όταν είναι ενεργοποιημένο, η εφαρμογή φορτώνεται σε μια τυχαία διεύθυνση μνήμης κάθε φορά που εκκινείται, καθιστώντας πιο δύσκολη την πρόβλεψη της αρχικής διεύθυνσης μνήμης της.
Stack Canaries: Για να επικυρωθεί η ακεραιότητα της στοίβας, μια τιμή ‘canary’ τοποθετείται στη στοίβα πριν από την κλήση μιας συνάρτησης και επικυρώνεται ξανά μόλις τελειώσει η συνάρτηση.
ARC (Automatic Reference Counting): Για να αποτραπούν κοινά σφάλματα διαφθοράς μνήμης
Κρυπτογραφημένο Δυαδικό: Το δυαδικό θα πρέπει να είναι κρυπτογραφημένο
Αναγνώριση Ευαίσθητων/Ανασφαλών Συναρτήσεων
Αδύνατοι Αλγόριθμοι Χαρακτηρισμού
Ανασφαλείς Τυχαίοι Αλγόριθμοι
Ανασφαλής Συνάρτηση ‘Malloc’
Ανασφαλείς και Ευάλωτες Συναρτήσεις
Δείτε τη δυναμική ανάλυση που εκτελεί το MobSF. Θα χρειαστεί να πλοηγηθείτε μέσα από τις διάφορες προβολές και να αλληλεπιδράσετε μαζί τους, αλλά θα συνδέει πολλές κλάσεις κάνοντας άλλες ενέργειες και θα ετοιμάσει μια αναφορά μόλις ολοκληρώσετε.
Χρησιμοποιήστε την εντολή frida-ps -Uai
για να προσδιορίσετε τον bundle identifier των εγκατεστημένων εφαρμογών:
Μάθετε πώς να αριθμείτε τα συστατικά της εφαρμογής και πώς να hookάρετε μεθόδους και κλάσεις με το objection:
Η δομή ενός IPA αρχείου είναι ουσιαστικά αυτή ενός συμπιεσμένου πακέτου. Με την αλλαγή της επέκτασής του σε .zip
, μπορεί να αποσυμπιεστεί για να αποκαλύψει το περιεχόμενό του. Μέσα σε αυτή τη δομή, ένα Bundle αντιπροσωπεύει μια πλήρως συσκευασμένη εφαρμογή έτοιμη για εγκατάσταση. Μέσα, θα βρείτε έναν φάκελο με όνομα <NAME>.app
, ο οποίος περιέχει τους πόρους της εφαρμογής.
Info.plist
: Αυτό το αρχείο περιέχει συγκεκριμένες λεπτομέρειες ρύθμισης της εφαρμογής.
_CodeSignature/
: Αυτός ο φάκελος περιλαμβάνει ένα αρχείο plist που περιέχει μια υπογραφή, διασφαλίζοντας την ακεραιότητα όλων των αρχείων στο bundle.
Assets.car
: Ένα συμπιεσμένο αρχείο που αποθηκεύει αρχεία πόρων όπως εικονίδια.
Frameworks/
: Αυτός ο φάκελος φιλοξενεί τις εγγενείς βιβλιοθήκες της εφαρμογής, οι οποίες μπορεί να είναι σε μορφή αρχείων .dylib
ή .framework
.
PlugIns/
: Αυτό μπορεί να περιλαμβάνει επεκτάσεις της εφαρμογής, γνωστές ως αρχεία .appex
, αν και δεν είναι πάντα παρόντα. * Core Data
: Χρησιμοποιείται για να αποθηκεύει τα μόνιμα δεδομένα της εφαρμογής σας για offline χρήση, να αποθηκεύει προσωρινά δεδομένα και να προσθέτει λειτουργία undo στην εφαρμογή σας σε μία μόνο συσκευή. Για να συγχρονίσετε δεδομένα σε πολλές συσκευές σε έναν μόνο λογαριασμό iCloud, το Core Data αντικατοπτρίζει αυτόματα το σχήμα σας σε ένα CloudKit container.
PkgInfo
: Το αρχείο PkgInfo
είναι ένας εναλλακτικός τρόπος για να καθορίσετε τους τύπους και τους κωδικούς δημιουργού της εφαρμογής ή του bundle σας.
en.lproj, fr.proj, Base.lproj: Είναι τα πακέτα γλώσσας που περιέχουν πόρους για αυτές τις συγκεκριμένες γλώσσες, και έναν προεπιλεγμένο πόρο σε περίπτωση που μια γλώσσα δεν υποστηρίζεται.
Ασφάλεια: Ο φάκελος _CodeSignature/
παίζει κρίσιμο ρόλο στην ασφάλεια της εφαρμογής επαληθεύοντας την ακεραιότητα όλων των συσκευασμένων αρχείων μέσω ψηφιακών υπογραφών.
Διαχείριση Πόρων: Το αρχείο Assets.car
χρησιμοποιεί συμπίεση για να διαχειρίζεται αποτελεσματικά τα γραφικά στοιχεία, κρίσιμο για τη βελτιστοποίηση της απόδοσης της εφαρμογής και τη μείωση του συνολικού της μεγέθους.
Frameworks και PlugIns: Αυτοί οι φάκελοι υπογραμμίζουν τη μονάδα των εφαρμογών iOS, επιτρέποντας στους προγραμματιστές να συμπεριλαμβάνουν επαναχρησιμοποιήσιμες βιβλιοθήκες κώδικα (Frameworks/
) και να επεκτείνουν τη λειτουργικότητα της εφαρμογής (PlugIns/
).
Τοπικοποίηση: Η δομή υποστηρίζει πολλές γλώσσες, διευκολύνοντας την παγκόσμια εμβέλεια της εφαρμογής περιλαμβάνοντας πόρους για συγκεκριμένα πακέτα γλώσσας.
Info.plist
Το Info.plist χρησιμεύει ως θεμέλιο για τις εφαρμογές iOS, περιλαμβάνοντας βασικά δεδομένα ρύθμισης με τη μορφή ζευγών κλειδιού-τιμής. Αυτό το αρχείο είναι απαραίτητο όχι μόνο για τις εφαρμογές αλλά και για τις επεκτάσεις εφαρμογών και τα frameworks που περιλαμβάνονται. Είναι δομημένο είτε σε XML είτε σε δυαδική μορφή και περιέχει κρίσιμες πληροφορίες που κυμαίνονται από άδειες εφαρμογής έως ρυθμίσεις ασφαλείας. Για μια λεπτομερή εξερεύνηση των διαθέσιμων κλειδιών, μπορείτε να ανατρέξετε στην Τεκμηρίωση Προγραμματιστών της Apple.
Για όσους επιθυμούν να εργαστούν με αυτό το αρχείο σε μια πιο προσβάσιμη μορφή, η μετατροπή σε XML μπορεί να επιτευχθεί εύκολα μέσω της χρήσης του plutil
σε macOS (διαθέσιμο εγγενώς σε εκδόσεις 10.2 και μεταγενέστερες) ή plistutil
σε Linux. Οι εντολές για τη μετατροπή είναι οι εξής:
Για macOS:
Για Linux:
Μεταξύ της πληθώρας πληροφοριών που μπορεί να αποκαλύψει το αρχείο Info.plist, οι αξιοσημείωτες καταχωρήσεις περιλαμβάνουν τις συμβολοσειρές αδειών εφαρμογής (UsageDescription
), τα προσαρμοσμένα URL schemes (CFBundleURLTypes
), και τις ρυθμίσεις για την Ασφάλεια Μεταφοράς Εφαρμογών (NSAppTransportSecurity
). Αυτές οι καταχωρήσεις, μαζί με άλλες όπως οι εξαγόμενοι/εισαγόμενοι προσαρμοσμένοι τύποι εγγράφων (UTExportedTypeDeclarations
/ UTImportedTypeDeclarations
), μπορούν να εντοπιστούν εύκολα με την επιθεώρηση του αρχείου ή χρησιμοποιώντας μια απλή εντολή grep
:
Διαδρομές Δεδομένων
Στο περιβάλλον iOS, οι καταλόγοι προορίζονται συγκεκριμένα για συστήματα εφαρμογών και εφαρμογές που έχουν εγκατασταθεί από τον χρήστη. Οι εφαρμογές συστήματος βρίσκονται στον κατάλογο /Applications
, ενώ οι εφαρμογές που έχουν εγκατασταθεί από τον χρήστη τοποθετούνται κάτω από /var/mobile/containers/Data/Application/
. Αυτές οι εφαρμογές έχουν ανατεθεί μια μοναδική ταυτότητα γνωστή ως 128-bit UUID, καθιστώντας την εργασία της χειροκίνητης εύρεσης του φακέλου μιας εφαρμογής δύσκολη λόγω της τυχαιότητας των ονομάτων των καταλόγων.
Καθώς οι εφαρμογές στο iOS πρέπει να είναι απομονωμένες, κάθε εφαρμογή θα έχει επίσης έναν φάκελο μέσα στο $HOME/Library/Containers
με το CFBundleIdentifier
της εφαρμογής ως όνομα φακέλου.
Ωστόσο, και οι δύο φάκελοι (φάκελοι δεδομένων & κοντέινερ) έχουν το αρχείο .com.apple.mobile_container_manager.metadata.plist
που συνδέει και τα δύο αρχεία στο κλειδί MCMetadataIdentifier
).
Για να διευκολυνθεί η ανακάλυψη του καταλόγου εγκατάστασης μιας εφαρμογής που έχει εγκατασταθεί από τον χρήστη, το objection tool παρέχει μια χρήσιμη εντολή, env
. Αυτή η εντολή αποκαλύπτει λεπτομερείς πληροφορίες καταλόγου για την εφαρμογή σε ερώτηση. Παρακάτω είναι ένα παράδειγμα του πώς να χρησιμοποιήσετε αυτήν την εντολή:
Εναλλακτικά, το όνομα της εφαρμογής μπορεί να αναζητηθεί μέσα στον /private/var/containers
χρησιμοποιώντας την εντολή find
:
Οι εντολές όπως ps
και lsof
μπορούν επίσης να χρησιμοποιηθούν για να εντοπίσουν τη διαδικασία της εφαρμογής και να καταγράψουν τα ανοιχτά αρχεία, αντίστοιχα, παρέχοντας πληροφορίες σχετικά με τις ενεργές διαδρομές καταλόγου της εφαρμογής:
Bundle directory:
AppName.app
Αυτό είναι το Application Bundle όπως έχει δει προηγουμένως στο IPA, περιέχει βασικά δεδομένα εφαρμογής, στατικό περιεχόμενο καθώς και το μεταγλωττισμένο δυαδικό της εφαρμογής.
Αυτός ο φάκελος είναι ορατός στους χρήστες, αλλά οι χρήστες δεν μπορούν να γράψουν σε αυτόν.
Το περιεχόμενο σε αυτόν τον φάκελο δεν είναι αντίγραφο ασφαλείας.
Τα περιεχόμενα αυτού του φακέλου χρησιμοποιούνται για επικύρωση της υπογραφής κώδικα.
Data directory:
Documents/
Περιέχει όλα τα δεδομένα που δημιουργούνται από τον χρήστη. Ο τελικός χρήστης της εφαρμογής ξεκινά τη δημιουργία αυτών των δεδομένων.
Ορατός στους χρήστες και οι χρήστες μπορούν να γράψουν σε αυτόν.
Το περιεχόμενο σε αυτόν τον φάκελο είναι αντίγραφο ασφαλείας.
Η εφαρμογή μπορεί να απενεργοποιήσει διαδρομές ορίζοντας το NSURLIsExcludedFromBackupKey
.
Library/
Περιέχει όλα τα αρχεία που δεν είναι συγκεκριμένα για τον χρήστη, όπως caches, preferences, cookies, και αρχεία ρύθμισης παραμέτρων plist.
Οι εφαρμογές iOS συνήθως χρησιμοποιούν τους υποφακέλους Application Support
και Caches
, αλλά η εφαρμογή μπορεί να δημιουργήσει προσαρμοσμένους υποφακέλους.
Library/Caches/
Περιέχει ημι-μόνιμα αρχεία cache.
Αόρατος στους χρήστες και οι χρήστες δεν μπορούν να γράψουν σε αυτόν.
Το περιεχόμενο σε αυτόν τον φάκελο δεν είναι αντίγραφο ασφαλείας.
Το λειτουργικό σύστημα μπορεί να διαγράψει αυτόματα τα αρχεία αυτού του φακέλου όταν η εφαρμογή δεν εκτελείται και ο χώρος αποθήκευσης είναι περιορισμένος.
Library/Application Support/
Περιέχει μόνιμα αρχεία απαραίτητα για τη λειτουργία της εφαρμογής.
Αόρατος για τους χρήστες και οι χρήστες δεν μπορούν να γράψουν σε αυτόν.
Το περιεχόμενο σε αυτόν τον φάκελο είναι αντίγραφο ασφαλείας.
Η εφαρμογή μπορεί να απενεργοποιήσει διαδρομές ορίζοντας το NSURLIsExcludedFromBackupKey
.
Library/Preferences/
Χρησιμοποιείται για την αποθήκευση ιδιοτήτων που μπορούν να διατηρηθούν ακόμη και μετά την επανεκκίνηση μιας εφαρμογής.
Οι πληροφορίες αποθηκεύονται, χωρίς κρυπτογράφηση, μέσα στο sandbox της εφαρμογής σε ένα αρχείο plist που ονομάζεται [BUNDLE_ID].plist.
Όλα τα ζεύγη κλειδιού/τιμής που αποθηκεύονται χρησιμοποιώντας το NSUserDefaults
μπορούν να βρεθούν σε αυτό το αρχείο.
tmp/
Χρησιμοποιήστε αυτόν τον φάκελο για να γράψετε προσωρινά αρχεία που δεν χρειάζεται να διατηρηθούν μεταξύ των εκκινήσεων της εφαρμογής.
Περιέχει μη μόνιμα αρχεία cache.
Αόρατος για τους χρήστες.
Το περιεχόμενο σε αυτόν τον φάκελο δεν είναι αντίγραφο ασφαλείας.
Το λειτουργικό σύστημα μπορεί να διαγράψει αυτόματα τα αρχεία αυτού του φακέλου όταν η εφαρμογή δεν εκτελείται και ο χώρος αποθήκευσης είναι περιορισμένος.
Ας ρίξουμε μια πιο προσεκτική ματιά στον Application Bundle (.app) του iGoat-Swift μέσα στον φάκελο Bundle (/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app
):
Μέσα στον φάκελο <application-name>.app
θα βρείτε ένα δυαδικό αρχείο που ονομάζεται <application-name>
. Αυτό είναι το αρχείο που θα εκτελεστεί. Μπορείτε να εκτελέσετε μια βασική επιθεώρηση του δυαδικού αρχείου με το εργαλείο otool
:
Ελέγξτε αν η εφαρμογή είναι κρυπτογραφημένη
Δείτε αν υπάρχει κάποια έξοδος για:
Αποσυναρμολόγηση του δυαδικού αρχείου
Αποσυναρμολόγηση της ενότητας κειμένου:
Για να εκτυπώσετε το Objective-C segment της δείγματος εφαρμογής, μπορείτε να χρησιμοποιήσετε:
Για να αποκτήσετε πιο συμπαγή κώδικα Objective-C μπορείτε να χρησιμοποιήσετε class-dump:
Ωστόσο, οι καλύτερες επιλογές για την αποσυναρμολόγηση του δυαδικού είναι: Hopper και IDA.
Χρησιμοποιήστε Trickest για να δημιουργήσετε και να ** αυτοματοποιήσετε ροές εργασίας** που υποστηρίζονται από τα πιο προηγμένα εργαλεία της κοινότητας. Αποκτήστε πρόσβαση σήμερα:
Για να μάθετε πώς το iOS αποθηκεύει δεδομένα στη συσκευή, διαβάστε αυτή τη σελίδα:
Οι παρακάτω τοποθεσίες αποθήκευσης πληροφοριών θα πρέπει να ελέγχονται αμέσως μετά την εγκατάσταση της εφαρμογής, μετά τον έλεγχο όλων των λειτουργιών της εφαρμογής και ακόμη και μετά την αποσύνδεση από έναν χρήστη και σύνδεση σε έναν διαφορετικό. Ο στόχος είναι να βρείτε μη προστατευμένες ευαίσθητες πληροφορίες της εφαρμογής (κωδικοί πρόσβασης, tokens), του τρέχοντος χρήστη και προηγούμενων συνδεδεμένων χρηστών.
Τα plist αρχεία είναι δομημένα XML αρχεία που περιέχουν ζεύγη κλειδιού-τιμής. Είναι ένας τρόπος αποθήκευσης μόνιμων δεδομένων, οπότε μερικές φορές μπορεί να βρείτε ευαίσθητες πληροφορίες σε αυτά τα αρχεία. Συνιστάται να ελέγξετε αυτά τα αρχεία μετά την εγκατάσταση της εφαρμογής και μετά τη χρήση της εντατικά για να δείτε αν έχουν γραφτεί νέα δεδομένα.
Ο πιο κοινός τρόπος για να διατηρήσετε δεδομένα σε αρχεία plist είναι μέσω της χρήσης του NSUserDefaults. Αυτό το αρχείο plist αποθηκεύεται μέσα στο sandbox της εφαρμογής στο Library/Preferences/<appBundleID>.plist
Η κλάση NSUserDefaults
παρέχει μια προγραμματιστική διεπαφή για την αλληλεπίδραση με το προεπιλεγμένο σύστημα. Το προεπιλεγμένο σύστημα επιτρέπει σε μια εφαρμογή να προσαρμόσει τη συμπεριφορά της σύμφωνα με τις προτιμήσεις του χρήστη. Τα δεδομένα που αποθηκεύονται από το NSUserDefaults
μπορούν να προβληθούν στο πακέτο της εφαρμογής. Αυτή η κλάση αποθηκεύει δεδομένα σε ένα αρχείο plist, αλλά προορίζεται να χρησιμοποιείται με μικρές ποσότητες δεδομένων.
Αυτά τα δεδομένα δεν μπορούν πλέον να προσπελαστούν απευθείας μέσω ενός αξιόπιστου υπολογιστή, αλλά μπορούν να προσπελαστούν εκτελώντας ένα backup.
Μπορείτε να dump τις πληροφορίες που αποθηκεύονται χρησιμοποιώντας το NSUserDefaults
με την εντολή ios nsuserdefaults get
του objection.
Για να βρείτε όλα τα plist που χρησιμοποιούνται από την εφαρμογή, μπορείτε να αποκτήσετε πρόσβαση στο /private/var/mobile/Containers/Data/Application/{APPID}
και να εκτελέσετε:
Για να μετατρέψετε αρχεία από XML ή δυαδική (bplist) μορφή σε XML, διατίθενται διάφορες μέθοδοι ανάλογα με το λειτουργικό σας σύστημα:
Για χρήστες macOS: Χρησιμοποιήστε την εντολή plutil
. Είναι ένα ενσωματωμένο εργαλείο στο macOS (10.2+), σχεδιασμένο για αυτόν τον σκοπό:
Για Χρήστες Linux: Εγκαταστήστε πρώτα το libplist-utils
, στη συνέχεια χρησιμοποιήστε το plistutil
για να μετατρέψετε το αρχείο σας:
Μέσα σε μια συνεδρία Objection: Για την ανάλυση κινητών εφαρμογών, μια συγκεκριμένη εντολή σας επιτρέπει να μετατρέψετε αρχεία plist απευθείας:
Core Data
είναι ένα πλαίσιο για τη διαχείριση της μοντελοποιημένης στρώσης αντικειμένων στην εφαρμογή σας. Το Core Data μπορεί να χρησιμοποιήσει το SQLite ως μόνιμο αποθηκευτικό χώρο, αλλά το πλαίσιο αυτό καθαυτό δεν είναι μια βάση δεδομένων.
Το CoreData δεν κρυπτογραφεί τα δεδομένα του από προεπιλογή. Ωστόσο, μπορεί να προστεθεί μια επιπλέον στρώση κρυπτογράφησης στο CoreData. Δείτε το GitHub Repo για περισσότερες λεπτομέρειες.
Μπορείτε να βρείτε τις πληροφορίες SQLite Core Data μιας εφαρμογής στη διαδρομή /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support
Αν μπορείτε να ανοίξετε το SQLite και να αποκτήσετε πρόσβαση σε ευαίσθητες πληροφορίες, τότε έχετε βρει μια κακή ρύθμιση.
YapDatabase είναι ένα αποθηκευτικό σύστημα κλειδιού/τιμής που έχει κατασκευαστεί πάνω από το SQLite. Δεδομένου ότι οι βάσεις δεδομένων Yap είναι βάσεις δεδομένων sqlite, μπορείτε να τις βρείτε χρησιμοποιώντας την προτεινόμενη εντολή στην προηγούμενη ενότητα.
Είναι συνηθισμένο για τις εφαρμογές να δημιουργούν τη δική τους βάση δεδομένων sqlite. Μπορεί να αποθηκεύουν ευαίσθητα δεδομένα σε αυτές και να τα αφήνουν μη κρυπτογραφημένα. Επομένως, είναι πάντα ενδιαφέρον να ελέγχετε κάθε βάση δεδομένων μέσα στον κατάλογο των εφαρμογών. Επομένως, πηγαίνετε στον κατάλογο της εφαρμογής όπου αποθηκεύονται τα δεδομένα (/private/var/mobile/Containers/Data/Application/{APPID}
)
Οι προγραμματιστές έχουν τη δυνατότητα να αποθηκεύουν και να συγχρονίζουν δεδομένα μέσα σε μια βάση δεδομένων NoSQL που φιλοξενείται στο cloud μέσω των Firebase Real-Time Databases. Αποθηκευμένα σε μορφή JSON, τα δεδομένα συγχρονίζονται σε όλους τους συνδεδεμένους πελάτες σε πραγματικό χρόνο.
Μπορείτε να βρείτε πώς να ελέγξετε για κακώς διαμορφωμένες βάσεις δεδομένων Firebase εδώ:
Realm Objective-C και Realm Swift προσφέρουν μια ισχυρή εναλλακτική λύση για την αποθήκευση δεδομένων, που δεν παρέχεται από την Apple. Από προεπιλογή, αποθηκεύουν δεδομένα χωρίς κρυπτογράφηση, με κρυπτογράφηση διαθέσιμη μέσω συγκεκριμένης διαμόρφωσης.
Οι βάσεις δεδομένων βρίσκονται στη διεύθυνση: /private/var/mobile/Containers/Data/Application/{APPID}
. Για να εξερευνήσετε αυτά τα αρχεία, μπορείτε να χρησιμοποιήσετε εντολές όπως:
Για την προβολή αυτών των αρχείων βάσης δεδομένων, προτείνεται το εργαλείο Realm Studio.
Για την υλοποίηση κρυπτογράφησης μέσα σε μια βάση δεδομένων Realm, μπορεί να χρησιμοποιηθεί το παρακάτω απόσπασμα κώδικα:
Couchbase Lite περιγράφεται ως μια ελαφριά και ενσωματωμένη μηχανή βάσης δεδομένων που ακολουθεί την προσέγγιση προσανατολισμένη σε έγγραφα (NoSQL). Σχεδιασμένη να είναι εγγενής για iOS και macOS, προσφέρει τη δυνατότητα συγχρονισμού δεδομένων χωρίς προβλήματα.
Για να εντοπιστούν πιθανές βάσεις δεδομένων Couchbase σε μια συσκευή, θα πρέπει να ελεγχθεί ο παρακάτω κατάλογος:
Το iOS αποθηκεύει τα cookies των εφαρμογών στο Library/Cookies/cookies.binarycookies
μέσα στον φάκελο κάθε εφαρμογής. Ωστόσο, οι προγραμματιστές μερικές φορές αποφασίζουν να τα αποθηκεύσουν στο keychain καθώς το αναφερόμενο cookie file μπορεί να προσπελαστεί σε αντίγραφα ασφαλείας.
Για να επιθεωρήσετε το αρχείο cookies μπορείτε να χρησιμοποιήσετε αυτό το python script ή να χρησιμοποιήσετε το ios cookies get
του objection.
Μπορείτε επίσης να χρησιμοποιήσετε το objection για να μετατρέψετε αυτά τα αρχεία σε μορφή JSON και να επιθεωρήσετε τα δεδομένα.
Από προεπιλογή, το NSURLSession αποθηκεύει δεδομένα, όπως HTTP αιτήματα και απαντήσεις στη βάση δεδομένων Cache.db. Αυτή η βάση δεδομένων μπορεί να περιέχει ευαίσθητα δεδομένα, εάν έχουν αποθηκευτεί tokens, ονόματα χρηστών ή οποιαδήποτε άλλη ευαίσθητη πληροφορία. Για να βρείτε τις αποθηκευμένες πληροφορίες, ανοίξτε τον κατάλογο δεδομένων της εφαρμογής (/var/mobile/Containers/Data/Application/<UUID>
) και μεταβείτε στο /Library/Caches/<Bundle Identifier>
. Η cache του WebKit αποθηκεύεται επίσης στο αρχείο Cache.db. Η Objection μπορεί να ανοίξει και να αλληλεπιδράσει με τη βάση δεδομένων με την εντολή sqlite connect Cache.db
, καθώς είναι μια κανονική βάση δεδομένων SQLite.
Συνιστάται να απενεργοποιήσετε την αποθήκευση αυτών των δεδομένων, καθώς μπορεί να περιέχουν ευαίσθητες πληροφορίες στην αίτηση ή την απάντηση. Η παρακάτω λίστα δείχνει διάφορους τρόπους για να το επιτύχετε αυτό:
Συνιστάται να αφαιρείτε τις αποθηκευμένες απαντήσεις μετά την αποσύνδεση. Αυτό μπορεί να γίνει με τη μέθοδο που παρέχει η Apple, που ονομάζεται removeAllCachedResponses
. Μπορείτε να καλέσετε αυτή τη μέθοδο ως εξής:
URLCache.shared.removeAllCachedResponses()
Αυτή η μέθοδος θα αφαιρέσει όλα τα αποθηκευμένα αιτήματα και απαντήσεις από το αρχείο Cache.db. 2. Εάν δεν χρειάζεται να χρησιμοποιήσετε το πλεονέκτημα των cookies, θα ήταν προτιμότερο να χρησιμοποιήσετε την ιδιότητα διαμόρφωσης .ephemeral του URLSession, η οποία θα απενεργοποιήσει την αποθήκευση cookies και Caches.
Ένα αντικείμενο διαμόρφωσης συνεδρίας ephemeral είναι παρόμοιο με μια προεπιλεγμένη διαμόρφωση συνεδρίας (βλ. προεπιλογή), εκτός από το ότι το αντίστοιχο αντικείμενο συνεδρίας δεν αποθηκεύει caches, αποθήκες διαπιστευτηρίων ή οποιαδήποτε δεδομένα που σχετίζονται με τη συνεδρία σε δίσκο. Αντίθετα, τα δεδομένα που σχετίζονται με τη συνεδρία αποθηκεύονται στη RAM. Η μόνη φορά που μια ephemeral συνεδρία γράφει δεδομένα σε δίσκο είναι όταν της πείτε να γράψει το περιεχόμενο μιας διεύθυνσης URL σε ένα αρχείο.
3. Η cache μπορεί επίσης να απενεργοποιηθεί ρυθμίζοντας την Πολιτική Cache σε .notAllowed. Αυτό θα απενεργοποιήσει την αποθήκευση της Cache με οποιονδήποτε τρόπο, είτε στη μνήμη είτε σε δίσκο.
Όποτε πατάτε το κουμπί αρχικής οθόνης, το iOS λαμβάνει μια στιγμιότυπο της τρέχουσας οθόνης για να μπορέσει να κάνει τη μετάβαση στην εφαρμογή με πολύ πιο ομαλό τρόπο. Ωστόσο, εάν υπάρχουν ευαίσθητα δεδομένα στην τρέχουσα οθόνη, θα αποθηκευτούν στην εικόνα (η οποία διατηρείται μετά από επανεκκινήσεις). Αυτά είναι τα στιγμιότυπα που μπορείτε επίσης να αποκτήσετε πρόσβαση διπλά πατώντας την αρχική οθόνη για να αλλάξετε μεταξύ εφαρμογών.
Εκτός εάν το iPhone είναι jailbroken, ο επιτιθέμενος χρειάζεται να έχει πρόσβαση στη σ συσκευή ξεκλειδωμένη για να δει αυτά τα στιγμιότυπα οθόνης. Από προεπιλογή, το τελευταίο στιγμιότυπο αποθηκεύεται στο sandbox της εφαρμογής στον φάκελο Library/Caches/Snapshots/
ή Library/SplashBoard/Snapshots
(οι αξιόπιστοι υπολογιστές δεν μπορούν να έχουν πρόσβαση στο σύστημα αρχείων από το iOX 7.0).
Ένας τρόπος για να αποτρέψετε αυτή τη κακή συμπεριφορά είναι να βάλετε μια κενή οθόνη ή να αφαιρέσετε τα ευαίσθητα δεδομένα πριν από τη λήψη του στιγμιότυπου χρησιμοποιώντας τη λειτουργία ApplicationDidEnterBackground()
.
Ακολουθεί μια δείγμα μεθόδου αποκατάστασης που θα ορίσει ένα προεπιλεγμένο στιγμιότυπο οθόνης.
Swift:
Objective-C:
Αυτό ρυθμίζει την εικόνα φόντου σε overlayImage.png
όποτε η εφαρμογή είναι στο παρασκήνιο. Αποτρέπει τις ευαίσθητες διαρροές δεδομένων επειδή το overlayImage.png
θα υπερκαλύπτει πάντα την τρέχουσα προβολή.
Για την πρόσβαση και τη διαχείριση του iOS keychain, είναι διαθέσιμα εργαλεία όπως το Keychain-Dumper, κατάλληλο για jailbroken συσκευές. Επιπλέον, το Objection παρέχει την εντολή ios keychain dump
για παρόμοιους σκοπούς.
Η κλάση NSURLCredential είναι ιδανική για την αποθήκευση ευαίσθητων πληροφοριών απευθείας στο keychain, παρακάμπτοντας την ανάγκη για NSUserDefaults ή άλλες περιτυλίξεις. Για να αποθηκεύσετε διαπιστευτήρια μετά την είσοδο, χρησιμοποιείται ο παρακάτω κώδικας Swift:
Για να εξαγάγετε αυτά τα αποθηκευμένα διαπιστευτήρια, χρησιμοποιείται η εντολή ios nsurlcredentialstorage dump
του Objection.
Με το iOS 8.0 και μετά, οι χρήστες μπορούν να εγκαταστήσουν προσαρμοσμένες επεκτάσεις πληκτρολογίου, οι οποίες είναι διαχειρίσιμες υπό Ρυθμίσεις > Γενικά > Πληκτρολόγιο > Πληκτρολόγια. Ενώ αυτά τα πληκτρολόγια προσφέρουν επεκτεταμένη λειτουργικότητα, ενέχουν τον κίνδυνο καταγραφής πλήκτρων και μετάδοσης δεδομένων σε εξωτερικούς διακομιστές, αν και οι χρήστες ειδοποιούνται για τα πληκτρολόγια που απαιτούν πρόσβαση στο δίκτυο. Οι εφαρμογές μπορούν και πρέπει να περιορίζουν τη χρήση προσαρμοσμένων πληκτρολογίων για την εισαγωγή ευαίσθητων πληροφοριών.
Συστάσεις Ασφαλείας:
Συνιστάται να απενεργοποιείτε τα πληκτρολόγια τρίτων για αυξημένη ασφάλεια.
Να είστε προσεκτικοί με τις δυνατότητες αυτόματης διόρθωσης και αυτόματων προτάσεων του προεπιλεγμένου πληκτρολογίου iOS, οι οποίες μπορεί να αποθηκεύουν ευαίσθητες πληροφορίες σε αρχεία κρυφής μνήμης που βρίσκονται σε Library/Keyboard/{locale}-dynamic-text.dat
ή /private/var/mobile/Library/Keyboard/dynamic-text.dat
. Αυτά τα αρχεία κρυφής μνήμης θα πρέπει να ελέγχονται τακτικά για ευαίσθητα δεδομένα. Συνιστάται η επαναφορά του λεξικού πληκτρολογίου μέσω Ρυθμίσεις > Γενικά > Επαναφορά > Επαναφορά Λεξικού Πληκτρολογίου για την εκκαθάριση των αποθηκευμένων δεδομένων.
Η παρεμβολή της δικτυακής κίνησης μπορεί να αποκαλύψει εάν ένα προσαρμοσμένο πληκτρολόγιο μεταδίδει πλήκτρα απομακρυσμένα.
Το UITextInputTraits protocol προσφέρει ιδιότητες για τη διαχείριση της αυτόματης διόρθωσης και της ασφαλούς εισαγωγής κειμένου, που είναι απαραίτητες για την πρόληψη της κρυφής μνήμης ευαίσθητων πληροφοριών. Για παράδειγμα, η απενεργοποίηση της αυτόματης διόρθωσης και η ενεργοποίηση της ασφαλούς εισαγωγής κειμένου μπορεί να επιτευχθεί με:
Επιπλέον, οι προγραμματιστές θα πρέπει να διασφαλίσουν ότι τα πεδία κειμένου, ειδικά αυτά για την εισαγωγή ευαίσθητων πληροφοριών όπως κωδικοί πρόσβασης και PIN, απενεργοποιούν την προσωρινή αποθήκευση ρυθμίζοντας το autocorrectionType
σε UITextAutocorrectionTypeNo
και το secureTextEntry
σε YES
.
Η αποσφαλμάτωση κώδικα συχνά περιλαμβάνει τη χρήση του logging. Υπάρχει κίνδυνος καθώς τα logs μπορεί να περιέχουν ευαίσθητες πληροφορίες. Προηγουμένως, σε iOS 6 και παλαιότερες εκδόσεις, τα logs ήταν προσβάσιμα σε όλες τις εφαρμογές, θέτοντας σε κίνδυνο τη διαρροή ευαίσθητων δεδομένων. Τώρα, οι εφαρμογές περιορίζονται στην πρόσβαση μόνο στα logs τους.
Παρά αυτούς τους περιορισμούς, ένας επιτιθέμενος με φυσική πρόσβαση σε μια ξεκλείδωτη συσκευή μπορεί να εκμεταλλευτεί αυτό συνδέοντας τη συσκευή σε έναν υπολογιστή και διαβάζοντας τα logs. Είναι σημαντικό να σημειωθεί ότι τα logs παραμένουν στον δίσκο ακόμη και μετά την απεγκατάσταση της εφαρμογής.
Για να μετριαστούν οι κίνδυνοι, συνιστάται να αλληλεπιδράτε διεξοδικά με την εφαρμογή, εξερευνώντας όλες τις λειτουργίες και τις εισόδους της για να διασφαλίσετε ότι δεν καταγράφεται κατά λάθος καμία ευαίσθητη πληροφορία.
Κατά την ανασκόπηση του πηγαίου κώδικα της εφαρμογής για πιθανές διαρροές, αναζητήστε τόσο προκαθορισμένες όσο και προσαρμοσμένες δηλώσεις logging χρησιμοποιώντας λέξεις-κλειδιά όπως NSLog
, NSAssert
, NSCAssert
, fprintf
για ενσωματωμένες λειτουργίες, και οποιαδήποτε αναφορά σε Logging
ή Logfile
για προσαρμοσμένες υλοποιήσεις.
Οι εφαρμογές καταγράφουν διάφορα κομμάτια πληροφοριών που μπορεί να είναι ευαίσθητα. Για να παρακολουθήσετε αυτά τα logs, εργαλεία και εντολές όπως:
είναι χρήσιμα. Επιπλέον, το Xcode παρέχει έναν τρόπο για να συλλέξετε τα αρχεία καταγραφής κονσόλας:
Ανοίξτε το Xcode.
Συνδέστε τη συσκευή iOS.
Μεταβείτε στο Παράθυρο -> Συσκευές και Προσομοιωτές.
Επιλέξτε τη συσκευή σας.
Προκαλέστε το ζήτημα που ερευνάτε.
Χρησιμοποιήστε το κουμπί Άνοιγμα Κονσόλας για να δείτε τα αρχεία καταγραφής σε ένα νέο παράθυρο.
Για πιο προηγμένη καταγραφή, η σύνδεση στο shell της συσκευής και η χρήση του socat μπορεί να παρέχει παρακολούθηση αρχείων καταγραφής σε πραγματικό χρόνο:
Ακολουθούν εντολές για την παρακολούθηση δραστηριοτήτων καταγραφής, οι οποίες μπορεί να είναι πολύτιμες για τη διάγνωση προβλημάτων ή την αναγνώριση πιθανής διαρροής δεδομένων στα αρχεία καταγραφής.
Χρησιμοποιήστε Trickest για να δημιουργήσετε και να ** αυτοματοποιήσετε ροές εργασίας** με τη βοήθεια των πιο προηγμένων εργαλείων της κοινότητας. Αποκτήστε πρόσβαση σήμερα:
Οι λειτουργίες αυτόματης δημιουργίας αντιγράφων είναι ενσωματωμένες στο iOS, διευκολύνοντας τη δημιουργία αντιγράφων δεδομένων συσκευής μέσω του iTunes (έως macOS Catalina), Finder (από macOS Catalina και μετά) ή iCloud. Αυτά τα αντίγραφα περιλαμβάνουν σχεδόν όλα τα δεδομένα της συσκευής, εξαιρουμένων των πολύ ευαίσθητων στοιχείων όπως οι λεπτομέρειες Apple Pay και οι ρυθμίσεις Touch ID.
Η συμπερίληψη των εγκατεστημένων εφαρμογών και των δεδομένων τους στα αντίγραφα εγείρει το ζήτημα της πιθανής διαρροής δεδομένων και του κινδύνου ότι οι τροποποιήσεις αντιγράφων θα μπορούσαν να αλλάξουν τη λειτουργικότητα της εφαρμογής. Συνιστάται να μην αποθηκεύετε ευαίσθητες πληροφορίες σε απλό κείμενο μέσα στον κατάλογο οποιασδήποτε εφαρμογής ή στους υποκαταλόγους της για να μετριάσετε αυτούς τους κινδύνους.
Αρχεία στον κατάλογο Documents/
και Library/Application Support/
δημιουργούνται αντίγραφα από προεπιλογή. Οι προγραμματιστές μπορούν να εξαιρέσουν συγκεκριμένα αρχεία ή καταλόγους από τα αντίγραφα χρησιμοποιώντας NSURL setResourceValue:forKey:error:
με το NSURLIsExcludedFromBackupKey
. Αυτή η πρακτική είναι κρίσιμη για την προστασία ευαίσθητων δεδομένων από το να περιλαμβάνονται σε αντίγραφα.
Για να αξιολογήσετε την ασφάλεια των αντιγράφων μιας εφαρμογής, ξεκινήστε με τη δημιουργία ενός αντιγράφου χρησιμοποιώντας το Finder, στη συνέχεια εντοπίστε το χρησιμοποιώντας καθοδήγηση από την επίσημη τεκμηρίωση της Apple. Αναλύστε το αντίγραφο για ευαίσθητα δεδομένα ή ρυθμίσεις που θα μπορούσαν να τροποποιηθούν για να επηρεάσουν τη συμπεριφορά της εφαρμογής.
Μπορείτε να αναζητήσετε ευαίσθητες πληροφορίες χρησιμοποιώντας εργαλεία γραμμής εντολών ή εφαρμογές όπως το iMazing. Για κρυπτογραφημένα αντίγραφα, η παρουσία κρυπτογράφησης μπορεί να επιβεβαιωθεί ελέγχοντας το κλειδί "IsEncrypted" στο αρχείο "Manifest.plist" στη ρίζα του αντιγράφου.
Για την αντιμετώπιση κρυπτογραφημένων αντιγράφων ασφαλείας, τα Python scripts που είναι διαθέσιμα στο DinoSec's GitHub repo, όπως το backup_tool.py και το backup_passwd.py, μπορεί να είναι χρήσιμα, αν και ενδέχεται να απαιτούν προσαρμογές για συμβατότητα με τις τελευταίες εκδόσεις του iTunes/Finder. Το iOSbackup εργαλείο είναι μια άλλη επιλογή για την πρόσβαση σε αρχεία εντός προστατευμένων με κωδικό αντιγράφων ασφαλείας.
Ένα παράδειγμα τροποποίησης της συμπεριφοράς μιας εφαρμογής μέσω τροποποιήσεων αντιγράφων ασφαλείας αποδεικνύεται στην εφαρμογή πορτοφολιού bitcoin Bither, όπου το PIN κλειδώματος της διεπαφής αποθηκεύεται στο net.bither.plist
κάτω από το κλειδί pin_code. Η αφαίρεση αυτού του κλειδιού από το plist και η αποκατάσταση του αντιγράφου ασφαλείας αφαιρεί την απαίτηση PIN, παρέχοντας απεριόριστη πρόσβαση.
Όταν ασχολείστε με ευαίσθητες πληροφορίες που αποθηκεύονται στη μνήμη μιας εφαρμογής, είναι κρίσιμο να περιορίσετε τον χρόνο έκθεσης αυτών των δεδομένων. Υπάρχουν δύο κύριες προσεγγίσεις για την εξέταση του περιεχομένου της μνήμης: δημιουργία dump μνήμης και ανάλυση της μνήμης σε πραγματικό χρόνο. Και οι δύο μέθοδοι έχουν τις προκλήσεις τους, συμπεριλαμβανομένου του ενδεχόμενου να χάσετε κρίσιμα δεδομένα κατά τη διάρκεια της διαδικασίας dump ή ανάλυσης.
Για τόσο jailbroken όσο και μη jailbroken συσκευές, εργαλεία όπως το objection και το Fridump επιτρέπουν την εξαγωγή της μνήμης διαδικασίας μιας εφαρμογής. Αφού γίνει η εξαγωγή, η ανάλυση αυτών των δεδομένων απαιτεί διάφορα εργαλεία, ανάλογα με τη φύση των πληροφοριών που αναζητάτε.
Για να εξάγετε συμβολοσειρές από ένα dump μνήμης, μπορούν να χρησιμοποιηθούν εντολές όπως strings
ή rabin2 -zz
:
Για πιο λεπτομερή ανάλυση, συμπεριλαμβανομένης της αναζήτησης συγκεκριμένων τύπων δεδομένων ή προτύπων, radare2 προσφέρει εκτενείς δυνατότητες αναζήτησης:
r2frida παρέχει μια ισχυρή εναλλακτική για την επιθεώρηση της μνήμης μιας εφαρμογής σε πραγματικό χρόνο, χωρίς την ανάγκη για dump μνήμης. Αυτό το εργαλείο επιτρέπει την εκτέλεση εντολών αναζήτησης απευθείας στη μνήμη της εκτελούμενης εφαρμογής:
Ορισμένοι προγραμματιστές αποθηκεύουν ευαίσθητα δεδομένα στην τοπική αποθήκευση και τα κρυπτογραφούν με ένα κλειδί σκληρά κωδικοποιημένο/προβλέψιμο στον κώδικα. Αυτό δεν θα έπρεπε να γίνεται καθώς κάποια αναστροφή θα μπορούσε να επιτρέψει στους επιτιθέμενους να εξάγουν τις εμπιστευτικές πληροφορίες.
Οι προγραμματιστές δεν θα πρέπει να χρησιμοποιούν υποστηριζόμενους αλγορίθμους για να εκτελούν ελέγχους εξουσιοδότησης, να αποθηκεύουν ή να στέλνουν δεδομένα. Ορισμένοι από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Αν hashes χρησιμοποιούνται για την αποθήκευση κωδικών πρόσβασης για παράδειγμα, θα πρέπει να χρησιμοποιούνται hashes ανθεκτικά σε brute-force με salt.
Οι κύριοι έλεγχοι που πρέπει να εκτελούνται είναι να βρείτε αν μπορείτε να βρείτε σκληρά κωδικοποιημένους κωδικούς/μυστικά στον κώδικα, ή αν αυτά είναι προβλέψιμα, και αν ο κώδικας χρησιμοποιεί κάποιο είδος αδύναμων κρυπτογραφικών αλγορίθμων.
Είναι ενδιαφέρον να γνωρίζετε ότι μπορείτε να παρακολουθείτε ορισμένες βιβλιοθήκες κρυπτογραφίας αυτόματα χρησιμοποιώντας objection με:
Για περισσότερες πληροφορίες σχετικά με τις κρυπτογραφικές APIs και βιβλιοθήκες iOS, επισκεφθείτε https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography
Η τοπική αυθεντικοποίηση παίζει κρίσιμο ρόλο, ειδικά όταν αφορά την προστασία της πρόσβασης σε ένα απομακρυσμένο σημείο μέσω κρυπτογραφικών μεθόδων. Η ουσία εδώ είναι ότι χωρίς σωστή υλοποίηση, οι μηχανισμοί τοπικής αυθεντικοποίησης μπορούν να παρακαμφθούν.
Το πλαίσιο Τοπικής Αυθεντικοποίησης της Apple και το keychain παρέχουν ισχυρές APIs για τους προγραμματιστές ώστε να διευκολύνουν τα διαλόγους αυθεντικοποίησης χρηστών και να χειρίζονται με ασφάλεια μυστικά δεδομένα, αντίστοιχα. Το Secure Enclave ασφαλίζει το αναγνωριστικό δακτυλικού αποτυπώματος για το Touch ID, ενώ το Face ID βασίζεται στην αναγνώριση προσώπου χωρίς να διακυβεύει τα βιομετρικά δεδομένα.
Για να ενσωματώσουν το Touch ID/Face ID, οι προγραμματιστές έχουν δύο επιλογές API:
LocalAuthentication.framework
για αυθεντικοποίηση χρηστών υψηλού επιπέδου χωρίς πρόσβαση σε βιομετρικά δεδομένα.
Security.framework
για πρόσβαση σε υπηρεσίες keychain χαμηλού επιπέδου, ασφαλίζοντας μυστικά δεδομένα με βιομετρική αυθεντικοποίηση. Διάφοροι ανοιχτού κώδικα περιτυλίκτες διευκολύνουν την πρόσβαση στο keychain.
Ωστόσο, τόσο το LocalAuthentication.framework
όσο και το Security.framework
παρουσιάζουν ευπάθειες, καθώς επιστρέφουν κυρίως boolean τιμές χωρίς να μεταδίδουν δεδομένα για διαδικασίες αυθεντικοποίησης, καθιστώντας τα ευάλωτα σε παράκαμψη (ανατρέξτε στο Don't touch me that way, by David Lindner et al).
Για να ζητήσουν από τους χρήστες αυθεντικοποίηση, οι προγραμματιστές θα πρέπει να χρησιμοποιήσουν τη μέθοδο evaluatePolicy
μέσα στην κλάση LAContext
, επιλέγοντας μεταξύ:
deviceOwnerAuthentication
: Ζητάει Touch ID ή κωδικό πρόσβασης συσκευής, αποτυγχάνει αν κανένα από τα δύο δεν είναι ενεργοποιημένο.
deviceOwnerAuthenticationWithBiometrics
: Ζητάει αποκλειστικά Touch ID.
Μια επιτυχής αυθεντικοποίηση υποδεικνύεται από μια boolean τιμή επιστροφής από το evaluatePolicy
, υποδεικνύοντας μια πιθανή αδυναμία ασφαλείας.
Η υλοποίηση τοπικής αυθεντικοποίησης σε εφαρμογές iOS περιλαμβάνει τη χρήση των keychain APIs για την ασφαλή αποθήκευση μυστικών δεδομένων όπως τα διαπιστευτήρια αυθεντικοποίησης. Αυτή η διαδικασία διασφαλίζει ότι τα δεδομένα μπορούν να προσπελαστούν μόνο από τον χρήστη, χρησιμοποιώντας τον κωδικό πρόσβασης της συσκευής τους ή βιομετρική αυθεντικοποίηση όπως το Touch ID.
Το keychain προσφέρει τη δυνατότητα να ορίσετε στοιχεία με το χαρακτηριστικό SecAccessControl
, το οποίο περιορίζει την πρόσβαση στο στοιχείο μέχρι ο χρήστης να αυθεντικοποιηθεί επιτυχώς μέσω Touch ID ή κωδικού πρόσβασης συσκευής. Αυτή η δυνατότητα είναι κρίσιμη για την ενίσχυση της ασφάλειας.
Παρακάτω παρατίθενται παραδείγματα κώδικα σε Swift και Objective-C που δείχνουν πώς να αποθηκεύσετε και να ανακτήσετε μια συμβολοσειρά από/στο keychain, εκμεταλλευόμενοι αυτές τις δυνατότητες ασφαλείας. Τα παραδείγματα δείχνουν συγκεκριμένα πώς να ρυθμίσετε τον έλεγχο πρόσβασης ώστε να απαιτεί αυθεντικοποίηση Touch ID και να διασφαλίσετε ότι τα δεδομένα είναι προσβάσιμα μόνο στη συσκευή στην οποία ρυθμίστηκαν, υπό την προϋπόθεση ότι έχει ρυθμιστεί κωδικός πρόσβασης συσκευής.
Τώρα μπορούμε να ζητήσουμε το αποθηκευμένο στοιχείο από το keychain. Οι υπηρεσίες keychain θα παρουσιάσουν το διάλογο αυθεντικοποίησης στον χρήστη και θα επιστρέψουν δεδομένα ή nil ανάλογα με το αν παρέχεται ή όχι ένα κατάλληλο δακτυλικό αποτύπωμα.
Η χρήση πλαισίων σε μια εφαρμογή μπορεί επίσης να ανιχνευθεί αναλύοντας τη λίστα των κοινών δυναμικών βιβλιοθηκών του δυαδικού αρχείου της εφαρμογής. Αυτό μπορεί να γίνει χρησιμοποιώντας το otool
:
Αν χρησιμοποιείται το LocalAuthentication.framework
σε μια εφαρμογή, η έξοδος θα περιέχει και τις δύο παρακάτω γραμμές (θυμηθείτε ότι το LocalAuthentication.framework
χρησιμοποιεί το Security.framework
από κάτω):
Αν χρησιμοποιείται το Security.framework
, μόνο το δεύτερο θα εμφανιστεί.
Μέσω της Παράκαμψης Βιομετρικών Δεδομένων Objection, που βρίσκεται σε αυτή τη σελίδα GitHub, διατίθεται μια τεχνική για την υπέρβαση του μηχανισμού LocalAuthentication. Ο πυρήνας αυτής της προσέγγισης περιλαμβάνει την εκμετάλλευση του Frida για την παραποίηση της συνάρτησης evaluatePolicy
, διασφαλίζοντας ότι αποδίδει πάντα ένα αποτέλεσμα True
, ανεξαρτήτως της πραγματικής επιτυχίας αυθεντικοποίησης. Αυτό είναι ιδιαίτερα χρήσιμο για την παράκαμψη ελαττωματικών διαδικασιών βιομετρικής αυθεντικοποίησης.
Για να ενεργοποιηθεί αυτή η παράκαμψη, χρησιμοποιείται η εξής εντολή:
Αυτή η εντολή ενεργοποιεί μια ακολουθία όπου το Objection καταχωρεί μια εργασία που ουσιαστικά αλλάζει το αποτέλεσμα του ελέγχου evaluatePolicy
σε True
.
Ένα παράδειγμα χρήσης του evaluatePolicy
από την εφαρμογή DVIA-v2:
Για να επιτευχθεί η bypass της Τοπικής Αυθεντικοποίησης, έχει γραφτεί ένα σενάριο Frida. Αυτό το σενάριο στοχεύει τον έλεγχο evaluatePolicy, παρεμβαίνοντας στην ανατροφοδότηση του για να διασφαλίσει ότι επιστρέφει success=1. Αλλάζοντας τη συμπεριφορά της ανατροφοδότησης, ο έλεγχος αυθεντικοποίησης παρακάμπτεται αποτελεσματικά.
Το παρακάτω σενάριο εισάγεται για να τροποποιήσει το αποτέλεσμα της μεθόδου evaluatePolicy. Αλλάζει το αποτέλεσμα της ανατροφοδότησης ώστε να υποδεικνύει πάντα επιτυχία.
Για να εισάγετε το σενάριο Frida και να παρακάμψετε την βιομετρική αυθεντικοποίηση, χρησιμοποιείται η ακόλουθη εντολή:
Είναι σημαντικό να ελέγξετε ότι δεν υπάρχει επικοινωνία χωρίς κρυπτογράφηση και επίσης ότι η εφαρμογή επικυρώνει σωστά το πιστοποιητικό TLS του διακομιστή. Για να ελέγξετε αυτά τα ζητήματα μπορείτε να χρησιμοποιήσετε έναν proxy όπως το Burp:
Ένα κοινό ζήτημα στην επικύρωση του πιστοποιητικού TLS είναι να ελέγξετε ότι το πιστοποιητικό έχει υπογραφεί από μια έμπιστη CA, αλλά όχι να ελέγξετε αν το όνομα του κεντρικού υπολογιστή του πιστοποιητικού είναι το όνομα του κεντρικού υπολογιστή που προσπελάζεται. Για να ελέγξετε αυτό το ζήτημα χρησιμοποιώντας το Burp, αφού εμπιστευτείτε το CA του Burp στο iPhone, μπορείτε να δημιουργήσετε ένα νέο πιστοποιητικό με το Burp για έναν διαφορετικό κεντρικό υπολογιστή και να το χρησιμοποιήσετε. Αν η εφαρμογή εξακολουθεί να λειτουργεί, τότε κάτι είναι ευάλωτο.
Αν μια εφαρμογή χρησιμοποιεί σωστά το SSL Pinning, τότε η εφαρμογή θα λειτουργεί μόνο αν το πιστοποιητικό είναι αυτό που αναμένεται. Όταν δοκιμάζετε μια εφαρμογή αυτό μπορεί να είναι πρόβλημα καθώς το Burp θα σερβίρει το δικό του πιστοποιητικό. Για να παρακάμψετε αυτή την προστασία σε μια jailbroken συσκευή, μπορείτε να εγκαταστήσετε την εφαρμογή SSL Kill Switch ή να εγκαταστήσετε Burp Mobile Assistant
Μπορείτε επίσης να χρησιμοποιήσετε το objection's ios sslpinning disable
Στο /System/Library
μπορείτε να βρείτε τα frameworks που είναι εγκατεστημένα στο τηλέφωνο που χρησιμοποιούνται από τις συστημικές εφαρμογές
Οι εφαρμογές που εγκαθίστανται από τον χρήστη από το App Store βρίσκονται μέσα στο /User/Applications
Και το /User/Library
περιέχει δεδομένα που αποθηκεύονται από τις εφαρμογές επιπέδου χρήστη
Μπορείτε να αποκτήσετε πρόσβαση στο /User/Library/Notes/notes.sqlite
για να διαβάσετε τις σημειώσεις που αποθηκεύονται μέσα στην εφαρμογή.
Μέσα στον φάκελο μιας εγκατεστημένης εφαρμογής (/User/Applications/<APP ID>/
) μπορείτε να βρείτε μερικά ενδιαφέροντα αρχεία:
iTunesArtwork
: Το εικονίδιο που χρησιμοποιείται από την εφαρμογή
iTunesMetadata.plist
: Πληροφορίες της εφαρμογής που χρησιμοποιούνται στο App Store
/Library/*
: Περιέχει τις προτιμήσεις και την προσωρινή μνήμη. Στο /Library/Cache/Snapshots/*
μπορείτε να βρείτε το στιγμιότυπο που πραγματοποιήθηκε στην εφαρμογή πριν την στείλετε στο παρασκήνιο.
Οι προγραμματιστές μπορούν απομακρυσμένα να διορθώσουν όλες τις εγκαταστάσεις της εφαρμογής τους άμεσα χωρίς να χρειάζεται να υποβάλουν ξανά την εφαρμογή στο App Store και να περιμένουν μέχρι να εγκριθεί. Για αυτό το σκοπό συνήθως χρησιμοποιείται το JSPatch. Αλλά υπάρχουν και άλλες επιλογές όπως το Siren και το react-native-appstore-version-checker. Αυτός είναι ένας επικίνδυνος μηχανισμός που θα μπορούσε να καταχραστεί από κακόβουλα SDK τρίτων, επομένως συνιστάται να ελέγξετε ποια μέθοδος χρησιμοποιείται για την αυτόματη ενημέρωση (αν υπάρχει) και να την δοκιμάσετε. Μπορείτε να προσπαθήσετε να κατεβάσετε μια προηγούμενη έκδοση της εφαρμογής για αυτό το σκοπό.
Μια σημαντική πρόκληση με τα SDK τρίτων είναι η έλλειψη λεπτομερούς ελέγχου πάνω στις λειτουργίες τους. Οι προγραμματιστές αντιμετωπίζουν μια επιλογή: είτε να ενσωματώσουν το SDK και να αποδεχτούν όλες τις δυνατότητές του, συμπεριλαμβανομένων πιθανών ευπαθειών ασφαλείας και ανησυχιών για την ιδιωτικότητα, είτε να παραιτηθούν εντελώς από τα οφέλη του. Συχνά, οι προγραμματιστές δεν είναι σε θέση να διορθώσουν τις ευπάθειες μέσα σε αυτά τα SDK οι ίδιοι. Επιπλέον, καθώς τα SDK κερδίζουν εμπιστοσύνη στην κοινότητα, ορισμένα μπορεί να αρχίσουν να περιέχουν κακόβουλο λογισμικό.
Οι υπηρεσίες που παρέχονται από τα SDK τρίτων μπορεί να περιλαμβάνουν παρακολούθηση συμπεριφοράς χρηστών, προβολές διαφημίσεων ή βελτιώσεις εμπειρίας χρήστη. Ωστόσο, αυτό εισάγει έναν κίνδυνο καθώς οι προγραμματιστές μπορεί να μην είναι πλήρως ενήμεροι για τον κώδικα που εκτελείται από αυτές τις βιβλιοθήκες, οδηγώντας σε πιθανούς κινδύνους για την ιδιωτικότητα και την ασφάλεια. Είναι κρίσιμο να περιορίσετε τις πληροφορίες που μοιράζεστε με υπηρεσίες τρίτων σε ό,τι είναι απαραίτητο και να διασφαλίσετε ότι δεν εκτίθεται ευαίσθητη δεδομένα.
Η υλοποίηση υπηρεσιών τρίτων συνήθως έρχεται σε δύο μορφές: μια αυτόνομη βιβλιοθήκη ή ένα πλήρες SDK. Για να προστατεύσετε την ιδιωτικότητα των χρηστών, οποιαδήποτε δεδομένα μοιράζεστε με αυτές τις υπηρεσίες θα πρέπει να είναι ανώνυμα για να αποτραπεί η αποκάλυψη Προσωπικά Αναγνωρίσιμων Πληροφοριών (PII).
Για να προσδιορίσετε τις βιβλιοθήκες που χρησιμοποιεί μια εφαρμογή, μπορεί να χρησιμοποιηθεί η εντολή otool
. Αυτό το εργαλείο θα πρέπει να εκτελείται κατά της εφαρμογής και κάθε κοινής βιβλιοθήκης που χρησιμοποιεί για να ανακαλύψει πρόσθετες βιβλιοθήκες.
OWASP iGoat https://github.com/OWASP/igoat <<< Objective-C έκδοση https://github.com/OWASP/iGoat-Swift <<< Swift έκδοση
Χρησιμοποιήστε Trickest για να δημιουργήσετε εύκολα και να αυτοματοποιήσετε ροές εργασίας που υποστηρίζονται από τα πιο προηγμένα εργαλεία της κοινότητας. Αποκτήστε πρόσβαση σήμερα:
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)