iOS Pentesting
Χρησιμοποιήστε Trickest για να δημιουργήσετε και να αυτοματοποιήσετε ροές εργασίας που υποστηρίζονται από τα πιο προηγμένα εργαλεία της κοινότητας. Αποκτήστε πρόσβαση σήμερα:
iOS Βασικές Γνώσεις
iOS BasicsΠεριβάλλον Δοκιμών
Σε αυτή τη σελίδα μπορείτε να βρείτε πληροφορίες σχετικά με τον iOS simulator, emulators και jailbreaking:
iOS Testing EnvironmentΑρχική Ανάλυση
Βασικές Λειτουργίες Δοκιμών iOS
Κατά τη διάρκεια της δοκιμής θα προταθούν αρκετές λειτουργίες (σύνδεση στη συσκευή, ανάγνωση/γραφή/ανέβασμα/κατέβασμα αρχείων, χρήση ορισμένων εργαλείων...). Επομένως, αν δεν ξέρετε πώς να εκτελέσετε καμία από αυτές τις ενέργειες, παρακαλώ, ξεκινήστε να διαβάζετε τη σελίδα:
iOS Basic Testing OperationsΓια τα επόμενα βήματα η εφαρμογή θα πρέπει να είναι εγκατεστημένη στη συσκευή και θα πρέπει να έχει ήδη αποκτήσει το IPA αρχείο της εφαρμογής. Διαβάστε τη σελίδα Βασικές Λειτουργίες Δοκιμών iOS για να μάθετε πώς να το κάνετε αυτό.
Βασική Στατική Ανάλυση
Συνιστάται να χρησιμοποιήσετε το εργαλείο MobSF για να εκτελέσετε μια αυτόματη Στατική Ανάλυση στο IPA αρχείο.
Αναγνώριση των προστασιών που υπάρχουν στο δυαδικό:
PIE (Position Independent Executable): Όταν είναι ενεργοποιημένο, η εφαρμογή φορτώνεται σε μια τυχαία διεύθυνση μνήμης κάθε φορά που εκκινείται, καθιστώντας πιο δύσκολη την πρόβλεψη της αρχικής της διεύθυνσης μνήμης.
Stack Canaries: Για να επικυρωθεί η ακεραιότητα της στοίβας, μια τιμή ‘canary’ τοποθετείται στη στοίβα πριν από την κλήση μιας συνάρτησης και επικυρώνεται ξανά μόλις η συνάρτηση τελειώσει.
ARC (Automatic Reference Counting): Για να αποτραπούν κοινά σφάλματα διαφθοράς μνήμης
Κρυπτογραφημένο Δυαδικό: Το δυαδικό θα πρέπει να είναι κρυπτογραφημένο
Αναγνώριση Ευαίσθητων/Ανασφαλών Συναρτήσεων
Αδύνατοι Αλγόριθμοι Χαρακτηρισμού
Ανασφαλείς Τυχαίοι Αλγόριθμοι
Ανασφαλής Συνάρτηση ‘Malloc’
Ανασφαλείς και Ευάλωτες Συναρτήσεις
Βασική Δυναμική Ανάλυση
Δείτε τη δυναμική ανάλυση που εκτελεί το MobSF. Θα χρειαστεί να πλοηγηθείτε μέσα από τις διάφορες προβολές και να αλληλεπιδράσετε μαζί τους, αλλά θα συνδέει πολλές κλάσεις κάνοντας άλλες ενέργειες και θα ετοιμάσει μια αναφορά μόλις ολοκληρώσετε.
Καταγραφή Εγκατεστημένων Εφαρμογών
Χρησιμοποιήστε την εντολή frida-ps -Uai
για να προσδιορίσετε τον bundle identifier των εγκατεστημένων εφαρμογών:
Βασική Αρίθμηση & Hooking
Μάθετε πώς να αριθμείτε τα συστατικά της εφαρμογής και πώς να hookάρει εύκολα μεθόδους και κλάσεις με το objection:
iOS Hooking With ObjectionΔομή IPA
Η δομή ενός 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, προτιμήσεις, cookies, και αρχεία ρύθμισης παραμέτρων plist.
Οι εφαρμογές iOS συνήθως χρησιμοποιούν τους υποφακέλους
Application Support
καιCaches
, αλλά η εφαρμογή μπορεί να δημιουργήσει προσαρμοσμένους υποφακέλους.Library/Caches/
Περιέχει ημι-μόνιμα αρχεία cache.
Αόρατος στους χρήστες και οι χρήστες δεν μπορούν να γράψουν σε αυτόν.
Το περιεχόμενο σε αυτόν τον φάκελο δεν είναι αντίγραφο ασφαλείας.
Το OS μπορεί να διαγράψει τα αρχεία αυτού του φακέλου αυτόματα όταν η εφαρμογή δεν εκτελείται και ο χώρος αποθήκευσης είναι περιορισμένος.
Library/Application Support/
Περιέχει μόνιμα αρχεία απαραίτητα για την εκτέλεση της εφαρμογής.
Αόρατος στους χρήστες και οι χρήστες δεν μπορούν να γράψουν σε αυτόν.
Το περιεχόμενο σε αυτόν τον φάκελο είναι αντίγραφο ασφαλείας.
Η εφαρμογή μπορεί να απενεργοποιήσει διαδρομές ορίζοντας το
NSURLIsExcludedFromBackupKey
.Library/Preferences/
Χρησιμοποιείται για την αποθήκευση ιδιοτήτων που μπορούν να διαρκέσουν ακόμη και μετά την επανεκκίνηση μιας εφαρμογής.
Οι πληροφορίες αποθηκεύονται, χωρίς κρυπτογράφηση, μέσα στο sandbox της εφαρμογής σε ένα αρχείο plist που ονομάζεται [BUNDLE_ID].plist.
Όλα τα ζεύγη κλειδιού/τιμής που αποθηκεύονται χρησιμοποιώντας το
NSUserDefaults
μπορούν να βρεθούν σε αυτό το αρχείο.tmp/
Χρησιμοποιήστε αυτόν τον φάκελο για να γράψετε προσωρινά αρχεία που δεν χρειάζεται να διαρκέσουν μεταξύ των εκκινήσεων της εφαρμογής.
Περιέχει μη μόνιμα αρχεία cache.
Αόρατος στους χρήστες.
Το περιεχόμενο σε αυτόν τον φάκελο δεν είναι αντίγραφο ασφαλείας.
Το OS μπορεί να διαγράψει τα αρχεία αυτού του φακέλου αυτόματα όταν η εφαρμογή δεν εκτελείται και ο χώρος αποθήκευσης είναι περιορισμένος.
Ας ρίξουμε μια πιο προσεκτική ματιά στον φάκελο Application Bundle (.app) της iGoat-Swift μέσα στον φάκελο Bundle (/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app
):
Binary Reversing
Μέσα στον φάκελο <application-name>.app
θα βρείτε ένα δυαδικό αρχείο που ονομάζεται <application-name>
. Αυτό είναι το αρχείο που θα εκτελείται. Μπορείτε να εκτελέσετε μια βασική επιθεώρηση του δυαδικού αρχείου με το εργαλείο otool
:
Ελέγξτε αν η εφαρμογή είναι κρυπτογραφημένη
Δείτε αν υπάρχει κάποια έξοδος για:
Αποσυναρμολόγηση του δυαδικού αρχείου
Αποσυναρμολόγηση της ενότητας κειμένου:
Για να εκτυπώσετε το Objective-C segment της δείγματος εφαρμογής, μπορείτε να χρησιμοποιήσετε:
Για να αποκτήσετε πιο συμπαγή κώδικα Objective-C μπορείτε να χρησιμοποιήσετε class-dump:
Ωστόσο, οι καλύτερες επιλογές για την αποσυναρμολόγηση του δυαδικού είναι: Hopper και IDA.
Χρησιμοποιήστε Trickest για να δημιουργήσετε και να ** αυτοματοποιήσετε ροές εργασίας** που υποστηρίζονται από τα πιο προηγμένα εργαλεία της κοινότητας. Αποκτήστε πρόσβαση σήμερα:
Αποθήκευση Δεδομένων
Για να μάθετε πώς το iOS αποθηκεύει δεδομένα στη συσκευή, διαβάστε αυτή τη σελίδα:
iOS BasicsΟι παρακάτω τοποθεσίες αποθήκευσης πληροφοριών θα πρέπει να ελέγχονται αμέσως μετά την εγκατάσταση της εφαρμογής, μετά τον έλεγχο όλων των λειτουργιών της εφαρμογής και ακόμη και μετά την αποσύνδεση από έναν χρήστη και σύνδεση σε έναν διαφορετικό. Ο στόχος είναι να βρείτε μη προστατευμένες ευαίσθητες πληροφορίες της εφαρμογής (κωδικοί πρόσβασης, tokens), του τρέχοντος χρήστη και προηγούμενων συνδεδεμένων χρηστών.
Plist
Τα 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
είναι ένα πλαίσιο για τη διαχείριση της μοντελοποιημένης στρώσης αντικειμένων στην εφαρμογή σας. Το Core Data μπορεί να χρησιμοποιήσει το SQLite ως μόνιμο αποθηκευτικό χώρο, αλλά το πλαίσιο αυτό καθαυτό δεν είναι μια βάση δεδομένων.
Το CoreData δεν κρυπτογραφεί τα δεδομένα του από προεπιλογή. Ωστόσο, μπορεί να προστεθεί μια επιπλέον στρώση κρυπτογράφησης στο CoreData. Δείτε το GitHub Repo για περισσότερες λεπτομέρειες.
Μπορείτε να βρείτε τις πληροφορίες Core Data SQLite μιας εφαρμογής στη διαδρομή /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support
Εάν μπορείτε να ανοίξετε το SQLite και να αποκτήσετε πρόσβαση σε ευαίσθητες πληροφορίες, τότε έχετε βρει μια κακή ρύθμιση.
YapDatabase
YapDatabase είναι ένα αποθηκευτικό σύστημα κλειδιού/τιμής που έχει κατασκευαστεί πάνω από το SQLite. Δεδομένου ότι οι βάσεις δεδομένων Yap είναι βάσεις δεδομένων sqlite, μπορείτε να τις βρείτε χρησιμοποιώντας την προτεινόμενη εντολή στην προηγούμενη ενότητα.
Άλλες Βάσεις Δεδομένων SQLite
Είναι κοινό για τις εφαρμογές να δημιουργούν τη δική τους βάση δεδομένων sqlite. Μπορεί να αποθηκεύουν ευαίσθητα δεδομένα σε αυτές και να τα αφήνουν μη κρυπτογραφημένα. Επομένως, είναι πάντα ενδιαφέρον να ελέγχετε κάθε βάση δεδομένων μέσα στον κατάλογο των εφαρμογών. Επομένως, πηγαίνετε στον κατάλογο της εφαρμογής όπου αποθηκεύονται τα δεδομένα (/private/var/mobile/Containers/Data/Application/{APPID}
)
Firebase Real-Time Databases
Οι προγραμματιστές έχουν τη δυνατότητα να αποθηκεύουν και να συγχρονίζουν δεδομένα μέσα σε μια βάση δεδομένων NoSQL που φιλοξενείται στο cloud μέσω των Firebase Real-Time Databases. Αποθηκευμένα σε μορφή JSON, τα δεδομένα συγχρονίζονται σε όλους τους συνδεδεμένους πελάτες σε πραγματικό χρόνο.
Μπορείτε να βρείτε πώς να ελέγξετε για κακώς διαμορφωμένες βάσεις δεδομένων Firebase εδώ:
Firebase DatabaseRealm databases
Realm Objective-C και Realm Swift προσφέρουν μια ισχυρή εναλλακτική λύση για την αποθήκευση δεδομένων, που δεν παρέχεται από την Apple. Από προεπιλογή, αποθηκεύουν δεδομένα χωρίς κρυπτογράφηση, με κρυπτογράφηση διαθέσιμη μέσω συγκεκριμένης διαμόρφωσης.
Οι βάσεις δεδομένων βρίσκονται στη διεύθυνση: /private/var/mobile/Containers/Data/Application/{APPID}
. Για να εξερευνήσετε αυτά τα αρχεία, μπορείτε να χρησιμοποιήσετε εντολές όπως:
Για την προβολή αυτών των αρχείων βάσης δεδομένων, προτείνεται το εργαλείο Realm Studio.
Για την υλοποίηση κρυπτογράφησης μέσα σε μια βάση δεδομένων Realm, μπορεί να χρησιμοποιηθεί το παρακάτω απόσπασμα κώδικα:
Couchbase Lite Databases
Couchbase Lite περιγράφεται ως μια ελαφριά και ενσωματωμένη μηχανή βάσης δεδομένων που ακολουθεί την προσανατολισμένη σε έγγραφα (NoSQL) προσέγγιση. Σχεδιασμένη να είναι εγγενής για iOS και macOS, προσφέρει τη δυνατότητα συγχρονισμού δεδομένων χωρίς προβλήματα.
Για να εντοπιστούν πιθανές βάσεις δεδομένων Couchbase σε μια συσκευή, θα πρέπει να ελεγχθεί ο παρακάτω φάκελος:
Cookies
Το iOS αποθηκεύει τα cookies των εφαρμογών στο Library/Cookies/cookies.binarycookies
μέσα στον φάκελο κάθε εφαρμογής. Ωστόσο, οι προγραμματιστές μερικές φορές αποφασίζουν να τα αποθηκεύσουν στο keychain καθώς το αναφερόμενο cookie file μπορεί να προσπελαστεί σε αντίγραφα ασφαλείας.
Για να επιθεωρήσετε το αρχείο cookies μπορείτε να χρησιμοποιήσετε αυτό το python script ή να χρησιμοποιήσετε το ios cookies get
του objection.
Μπορείτε επίσης να χρησιμοποιήσετε το objection για να μετατρέψετε αυτά τα αρχεία σε μορφή JSON και να επιθεωρήσετε τα δεδομένα.
Cache
Από προεπιλογή, το 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 με οποιονδήποτε τρόπο, είτε στη μνήμη είτε σε δίσκο.
Snapshots
Όποτε πατάτε το κουμπί αρχικής οθόνης, το iOS λαμβάνει μια στιγμιότυπο της τρέχουσας οθόνης για να μπορέσει να κάνει τη μετάβαση στην εφαρμογή με πολύ πιο ομαλό τρόπο. Ωστόσο, εάν υπάρχουν ευαίσθητα δεδομένα στην τρέχουσα οθόνη, θα αποθηκευτούν στην εικόνα (η οποία διατηρείται μετά από επανεκκινήσεις). Αυτά είναι τα στιγμιότυπα που μπορείτε επίσης να αποκτήσετε πρόσβαση διπλά πατώντας την αρχική οθόνη για να αλλάξετε μεταξύ εφαρμογών.
Εκτός εάν το iPhone είναι jailbroken, ο επιτιθέμενος χρειάζεται να έχει πρόσβαση στη σ συσκευή ξεκλειδωμένη για να δει αυτά τα στιγμιότυπα οθόνης. Από προεπιλογή, το τελευταίο στιγμιότυπο αποθηκεύεται στο sandbox της εφαρμογής στον φάκελο Library/Caches/Snapshots/
ή Library/SplashBoard/Snapshots
(οι αξιόπιστοι υπολογιστές δεν μπορούν να έχουν πρόσβαση στο σύστημα αρχείων από το iOX 7.0).
Ένας τρόπος για να αποτρέψετε αυτή τη κακή συμπεριφορά είναι να βάλετε μια κενή οθόνη ή να αφαιρέσετε τα ευαίσθητα δεδομένα πριν από τη λήψη του στιγμιότυπου χρησιμοποιώντας τη λειτουργία ApplicationDidEnterBackground()
.
Ακολουθεί μια δείγμα μεθόδου αποκατάστασης που θα ορίσει ένα προεπιλεγμένο στιγμιότυπο οθόνης.
Swift:
Objective-C:
Αυτό ρυθμίζει την εικόνα φόντου σε overlayImage.png
όποτε η εφαρμογή είναι στο παρασκήνιο. Αποτρέπει τις ευαίσθητες διαρροές δεδομένων επειδή το overlayImage.png
θα υπερκαλύπτει πάντα την τρέχουσα προβολή.
Keychain
Για την πρόσβαση και τη διαχείριση του iOS keychain, είναι διαθέσιμα εργαλεία όπως το Keychain-Dumper, κατάλληλο για jailbroken συσκευές. Επιπλέον, το Objection παρέχει την εντολή ios keychain dump
για παρόμοιους σκοπούς.
Αποθήκευση Διαπιστευτηρίων
Η κλάση NSURLCredential είναι ιδανική για την αποθήκευση ευαίσθητων πληροφοριών απευθείας στο keychain, παρακάμπτοντας την ανάγκη για NSUserDefaults ή άλλες περιτυλίξεις. Για την αποθήκευση διαπιστευτηρίων μετά την είσοδο, χρησιμοποιείται ο παρακάτω κώδικας Swift: