Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) γιανα δημιουργήσετε εύκολα και να**αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της κοινότητας.\
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
*Αν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
Κατά τη διάρκεια του ελέγχου **θα προταθούν αρκετές λειτουργίες** (σύνδεση στη συσκευή, ανάγνωση/εγγραφή/μεταφόρτωση/λήψη αρχείων, χρήση ορισμένων εργαλείων...). Επομένως, αν δεν ξέρετε πώς να εκτελέσετε οποιαδήποτε από αυτές τις ενέργειες, παρακαλούμε, **ξεκινήστε την ανάγνωση της σελίδας**:
Συνιστάται η χρήση του εργαλείου [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) γιανα πραγματοποιήσετε αυτόματη Στατική Ανάλυση στο αρχείο IPA.
Αναγνώριση των **προστασιών που υπάρχουν στο δυαδικό αρχείο**:
***PIE (Position Independent Executable)**: Όταν είναι ενεργοποιημένο, η εφαρμογή φορτώνεται σε τυχαία διεύθυνση μνήμης κάθε φορά που ξεκινά, κάνοντας πιο δύσκολο το να προβλέψετε την αρχική διεύθυνση μνήμης της.
***Stack Canaries**: Για τον έλεγχο της ακεραιότητας της στοίβας, τοποθετείται μια τιμή 'canary' στη στοίβα πριν καλείται μια συνάρτηση και επαληθεύεται ξανά όταν η συνάρτηση τελειώνει.
***Κρυπτογραφημένο Δυαδικό**: Το δυαδικό πρέπει να είναι κρυπτογραφημένο
```bash
otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # Το cryptid πρέπει να είναι 1
```
**Αναγνώριση Ευαίσθητων/Ευάλωτων Συναρτήσεων**
***Αδύναμοι Αλγόριθμοι Κατακερματισμού**
```bash
# Στη συσκευή iOS
otool -Iv <app> | grep -w "_CC_MD5"
otool -Iv <app> | grep -w "_CC_SHA1"
# Σε Linux
grep -iER "_CC_MD5"
grep -iER "_CC_SHA1"
```
***Ανασφαλείς Συναρτήσεις Τυχαίων Αριθμών**
```bash
# Στη συσκευή iOS
otool -Iv <app> | grep -w "_random"
otool -Iv <app> | grep -w "_srand"
otool -Iv <app> | grep -w "_rand"
# Σε Linux
grep -iER "_random"
grep -iER "_srand"
grep -iER "_rand"
```
***Ανασφαλής Συνάρτηση 'Malloc'**
```bash
# Στη συσκευή iOS
otool -Iv <app> | grep -w "_malloc"
# Σε Linux
grep -iER "_malloc"
```
***Ανασφαλείς και Ευάλωτες Συναρτήσεις**
```bash
# Στη συσκευή iOS
otool -Iv <app> | grep -w "_gets"
otool -Iv <app> | grep -w "_memcpy"
otool -Iv <app> | grep -w "_strncpy"
otool -Iv <app> | grep -w "_strlen"
otool -Iv <app> | grep -w "_vsnprintf"
otool -Iv <app> | grep -w "_sscanf"
otool -Iv <app> | grep -w "_strtok"
otool -Iv <app> | grep -w "_alloca"
otool -Iv <app> | grep -w "_sprintf"
otool -Iv <app> | grep -w "_printf"
otool -Iv <app> | grep -w "_vsprintf"
# Σε Linux
grep -R "_gets"
grep -iER "_memcpy"
grep -iER "_strncpy"
grep -iER "_strlen"
grep -iER "_vsnprintf"
grep -iER "_sscanf"
grep -iER "_strtok"
grep -iER "_alloca"
grep -iER "_sprintf"
grep -iER "_printf"
grep -iER "_vsprintf"
```
### Βασική Δυναμική Ανάλυση
Ελέγξτε τη δυναμική ανάλυση που πραγματοποιεί το [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF). Θα πρέπει να πλοηγηθείτε μέσα από τις διάφορες προβολές και να αλληλεπιδράσετε μαζί τους, αλλά θα συνδέσει πολλές κλάσεις και θα ετοιμάσει έναν αναφορά όταν τελειώσετε.
### Κατάλογος Εγκατεστημένων Εφαρμογών
Χρησιμοποιήστε την εντολή `frida-ps -Uai`γιανα προσδιορίσετε το **αναγνωριστικό δέματος** των εγκατεστημένων εφαρμογών:
Η δομή ενός **αρχείου IPA** είναι ουσιαστικά αυτή ενός **συμπιεσμένου πακέτου**. Με τη μετονομασία της επέκτασής του σε `.zip`, μπορεί να**αποσυμπιεστεί**γιανα αποκαλύψει το περιεχόμενό του. Μέσα σε αυτή τη δομή, ένα **Bundle** αντιπροσωπεύει μια πλήρως συσκευασμένη εφαρμογή έτοιμη για εγκατάσταση. Μέσα, θα βρείτε έναν κατάλογο με το όνομα `<NAME>.app`, ο οποίος ενθυλακώνει τους πόρους της εφαρμογής.
* **`Info.plist`**: Αυτό το αρχείο περιέχει συγκεκριμένες λεπτομέρειες ρύθμισης της εφαρμογής.
* **`_CodeSignature/`**: Αυτός ο κατάλογος περιλαμβάνει ένα αρχείο plist που περιέχει μια υπογραφή, εξασφαλίζοντας την ακεραιότητα όλων των αρχείων στο πακέτο.
* **`Assets.car`**: Ένα συμπιεσμένο αρχείο που αποθηκεύει αρχεία πόρων όπως εικονίδια.
* **`Frameworks/`**: Αυτός ο φάκελος φιλοξενεί τις φυσικές βιβλιοθήκες της εφαρμογής, οι οποίες μπορεί να είναι σε μορφή αρχείων `.dylib` ή `.framework`.
* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Χρησιμοποιείται για την αποθήκευση μόνιμων δεδομένων της εφαρμογής για χρήση χωρίς σύνδεση, για την προσωρινή αποθήκευση δεδομένων και για την προσθήκη λειτουργιών αναίρεσης στην εφαρμογή σας σε μια συσκευή. Για συγχρονισμό δεδομένων σε πολλές συσκευές σε έναν λογαριασμό iCloud, το Core Data αντιστοιχεί αυτόματα το σχήμα σας σε έναν χώρο CloudKit.
* [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): Το αρχείο `PkgInfo` είναι ένας εναλλακτικός τρόπος να καθορίσετε τους κωδικούς τύπου και δημιουργού της εφαρμογής ή του πακέτου σας.
* **en.lproj, fr.proj, Base.lproj**: Είναι τα πακέτα γλωσσών που περιέχουν πόρους για αυτές τις συγκεκριμένες γλώσσες, καθώς και έναν προεπιλεγμένο πόρο σε περίπτωση που μια γλώσσα δεν υποστηρίζεται.
* **Ασφάλεια**: Ο κατάλογος `_CodeSignature/` διαδραματίζει κρίσιμο ρόλο στην ασφάλεια της εφαρμογής επαληθεύοντας την ακεραιότητα όλων των συσκευασμένων αρχείων μέσω ψηφιακών υπογραφών.
* **Διαχείριση Πόρων**: Το αρχείο `Assets.car` χρησιμοποιεί συμπίεση για την αποτελεσματική διαχείριση γραφικών πόρων, το οποίο είναι κρίσιμο για τη βελτιστοποίηση της απόδοσης της εφαρμογής και τη μείωση του συνολικού μεγέθους της.
* **Βιβλιοθήκες και Πρόσθετα**: Αυτοί οι κατάλογοι υπογραμμίζουν την modularidad των εφαρμογών iOS, επιτρέποντας στους προγραμματιστές να συμπεριλάβουν επαναχρησιμοποιήσιμες βιβλιοθήκες κώδικα (`Frameworks/`) και να επεκτείνουν τη λειτουργικότητα της εφαρμογής (`PlugIns/`).
* **Τοπικοποίηση**: Η δομή υποστηρίζει πολλές γλώσσες, διευκολύνοντας την παγκόσμια επιτυχία της εφαρμογής με τη συμπερίληψη πόρων για συγκεκριμένα πακέτα γλωσσών.
Το**Info.plist** λειτουργεί ως βάση για τις εφαρμογές iOS, ενθυλακώνοντας κύρια δεδομένα ρύθμισης σε μορφή **κλειδί-τιμή**. Αυτό το αρχείο είναι απαραίτητο όχι μόνο για τις εφαρμογές αλλά και για τις επεκτάσεις εφαρμογών και τις βιβλιοθήκες που συσκευάζονται μέσα. Είναι δομημένο είτε σε μορφή XML είτε σε δυαδική μορφή και περιέχει κρίσιμες πληροφορίες που κυμαίνονται από άδειες εφαρμογών έως ρυθμίσεις ασφαλείας. Για μια λεπτομερή εξερεύνηση των διαθέσιμων κλειδιών, μπορεί κάποιος να ανατρέξει στην [**Τεκμηρίωση Προγραμματιστή της Apple**](https://developer.apple.com/documentation/bundleresources/information\_property\_list?language=objc).
Για όσους επιθυμούν να εργαστούν με αυτό το αρχείο σε μια πιο προσβάσιμη μορφή, η μετατροπή σε XML μπορεί να επιτευχθεί εύκολα μέσω της χρήσης του `plutil` στο macOS (διαθέσιμο φυσικά σε εκδόσεις 10.2 και μεταγενέστερες) ή του `plistutil` στο Linux. Οι εντολές για τη μετατροπή είναι οι ακόλουθες:
Ανάμεσα στον αμέτρητο αριθμό πληροφοριών που μπορεί να αποκαλύψει το **Info.plist** αρχείο, σημαντικές καταχωρήσεις περιλαμβάνουν τις συμβολοσειρές άδειας εφαρμογής (`UsageDescription`), τις προσαρμοσμένες σχήματα URL (`CFBundleURLTypes`), και τις ρυθμίσεις για την Ασφάλεια Μεταφοράς Εφαρμογής (`NSAppTransportSecurity`). Αυτές οι καταχωρήσεις, μαζί με άλλες όπως οι καταχωρήσεις προσαρμοσμένων τύπων εγγράφων που εξάγονται/εισάγονται (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), μπορούν να εντοπιστούν εύκολα ελέγχοντας το αρχείο ή χρησιμοποιώντας ένα απλό `grep` εντολή:
Στο περιβάλλον του iOS, οι κατάλογοι είναι ειδικά ορισμένοι για τις **εφαρμογές συστήματος** και τις **εφαρμογές που έχει εγκαταστήσει ο χρήστης**. Οι εφαρμογές συστήματος βρίσκονται στον κατάλογο `/Applications`, ενώ οι εφαρμογές που έχει εγκαταστήσει ο χρήστης τοποθετούνται κάτω από τον κατάλογο `/private/var/containers/`. Αυτές οι εφαρμογές είναι ανατεθειμένες ένα μοναδικό αναγνωριστικό γνωστό ως **128-bit UUID**, κάτι που καθιστά δύσκολη την χειροκίνητη εντοπισμό του φακέλου μιας εφαρμογής λόγω της τυχαιότητας των ονομάτων των καταλόγων.
Για να διευκολύνει τον εντοπισμό του φακέλου εγκατάστασης μιας εφαρμογής που έχει εγκαταστήσει ο χρήστης, το εργαλείο **objection** παρέχει ένα χρήσιμο πλήκτρο, το `env`. Αυτή η εντολή αποκαλύπτει λεπτομερείς πληροφορίες καταλόγου για τη συγκεκριμένη εφαρμογή. Παρακάτω παρουσιάζεται ένα παράδειγμα πώς να χρησιμοποιήσετε αυτήν την εντολή:
Εντολές όπως `ps` και `lsof` μπορούν επίσης να χρησιμοποιηθούν γιανα αναγνωρίσουν τη διεργασία της εφαρμογής και να εμφανίσουν τα ανοιχτά αρχεία, αντίστοιχα, παρέχοντας εισαγωγές στις διαδρομές του ενεργού φακέλου της εφαρμογής:
* Αυτός είναι ο Κατάλογος Εφαρμογής όπως φαίνεται πριν στο IPA, περιέχει τα απαραίτητα δεδομένα της εφαρμογής, στατικό περιεχόμενο καθώς και το μεταγλωττισμένο δυαδικό της εφαρμογής.
* Περιέχει όλα τα **αρχεία που δεν είναι συγκεκριμένα για τον χρήστη**, όπως **cache**, **προτιμήσεις**, **cookies**, και αρχεία διαμόρφωσης λίστας ιδιοτήτων (plist).
*Οι εφαρμογές iOS συνήθως χρησιμοποιούν τους υποκαταλόγους `Application Support` και `Caches`, αλλά η εφαρμογή μπορεί να δημιουργήσει προσαρμοσμένους υποκαταλόγους.
Ας ρίξουμε μια πιο προσεκτική ματιά στον Κατάλογο Εφαρμογής (.app) του iGoat-Swift μέσα στον Κατάλογο Bundle (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`):
Μέσα στον φάκελο `<application-name>.app` θα βρείτε ένα δυαδικό αρχείο που ονομάζεται `<application-name>`. Αυτό είναι το αρχείο που θα **εκτελεστεί**. Μπορείτε να πραγματοποιήσετε μια βασική επιθεώρηση του δυαδικού με το εργαλείο **`otool`**:
Ωστόσο, οι καλύτερες επιλογές για αποσυναρμολόγηση του δυαδικού κώδικα είναι: [**Hopper**](https://www.hopperapp.com/download.html?) και [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/).
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) γιανα δημιουργήσετε εύκολα και να**αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της κοινότητας.\
Τα ακόλουθα μέρη για αποθήκευση πληροφοριών πρέπει να ελεγχθούν **αμέσως μετά την εγκατάσταση της εφαρμογής**, **μετά τον έλεγχο όλων των λειτουργιών** της εφαρμογής και ακόμη μετά το **αποσυνδεθείτε από έναν χρήστη και συνδεθείτε σε διαφορετικό**.\
Ο στόχος είναι να βρείτε **μη προστατευμένες ευαίσθητες πληροφορίες** της εφαρμογής (κωδικοί πρόσβασης, τοκεν), του τρέχοντος χρήστη και των προηγουμένως συνδεδεμένων χρηστών.
Τα αρχεία **plist** είναι δομημένα αρχεία XML που **περιέχουν ζεύγη κλειδιού-τιμής**. Είναι ένας τρόπος αποθήκευσης μόνιμων δεδομένων, οπότε μερικές φορές μπορείτε να βρείτε **ευαίσθητες πληροφορίες σε αυτά τα αρχεία**. Συνιστάται να ελέγξετε αυτά τα αρχεία μετά την εγκατάσταση της εφαρμογής και μετά την εντατική χρήση της γιανα δείτε αν γράφονται νέα δεδομένα.
Ο πιο συνηθισμένος τρόπος να διατηρούνται τα δεδομένα σε αρχεία plist είναι μέσω της χρήσης του **NSUserDefaults**. Αυτό το αρχείο plist αποθηκεύεται μέσα στο αμμοδοχείο της εφαρμογής στο **`Library/Preferences/<appBundleID>.plist`**
Η κλάση [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) παρέχει μια προγραμματιστική διεπαφή για την αλληλεπίδραση με το προεπιλεγμένο σύστημα. Το προεπιλεγμένο σύστημα επιτρέπει σε μια εφαρμογή να προσαρμόσει τη συμπεριφορά της σύμφωνα με τις **προτιμήσεις του χρήστη**. Τα δεδομένα που αποθηκεύονται από το `NSUserDefaults` μπορούν να προβληθούν στο πακέτο της εφαρμογής. Αυτή η κλάση αποθηκεύει **δεδομένα** σε ένα αρχείο **plist**, αλλά προορίζεται να χρησιμοποιείται με μικρές ποσότητες δεδομένων.
Αυτά τα δεδομένα δεν μπορούν να προσπελαστούν απευθείας μέσω ενός αξιόπιστου υπολογιστή, αλλά μπορούν να προσπελαστούν κάνοντας ένα **αντίγραφο ασφαλείας**.
Μπορείτε να**ανακτήσετε** τις πληροφορίες που αποθηκεύονται χρησιμοποιώντας το **`NSUserDefaults`** χρησιμοποιώντας το `ios nsuserdefaults get` του objection.
Για να βρείτε όλα τα plist που χρησιμοποιεί η εφαρμογή, μπορείτε να έχετε πρόσβαση στο `/private/var/mobile/Containers/Data/Application/{APPID}` και να εκτελέσετε:
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) είναι ένα πλαίσιο εργασίας για τη διαχείριση του επιπέδου μοντέλου αντικειμένων στην εφαρμογή σας. [Το Core Data μπορεί να χρησιμοποιήσει το SQLite ως μόνιμη αποθήκευση](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), αλλά το ίδιο το πλαίσιο δεν είναι μια βάση δεδομένων.\
Το CoreData δεν κρυπτογραφεί τα δεδομένα του από προεπιλογή. Ωστόσο, μπορεί να προστεθεί ένα επιπλέον επίπεδο κρυπτογράφησης στο CoreData. Δείτε το [GitHub Repo](https://github.com/project-imas/encrypted-core-data) για περισσότερες λεπτομέρειες.
Μπορείτε να βρείτε τις πληροφορίες SQLite Core Data μιας εφαρμογής στη διαδρομή `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`
Συχνά οι εφαρμογές δημιουργούν τις δικές τους βάσεις δεδομένων SQLite. Ενδέχεται να**αποθηκεύουν****ευαίσθητα****δεδομένα** σε αυτές και να τα αφήνουν μη κρυπτογραφημένα. Επομένως, είναι πάντα ενδιαφέρον να ελέγχετε κάθε βάση δεδομένων μέσα στον κατάλογο των εφαρμογών. Πηγαίνετε στον κατάλογο της εφαρμογής όπου αποθηκεύονται τα δεδομένα (`/private/var/mobile/Containers/Data/Application/{APPID}`)
Οι προγραμματιστές έχουν τη δυνατότητα να**αποθηκεύουν και συγχρονίζουν δεδομένα** μέσα σε μια **βάση δεδομένων που φιλοξενείται στο cloud χωρίς SQL** μέσω των Βάσεων Δεδομένων σε Πραγματικό Χρόνο του Firebase. Τα δεδομένα αποθηκεύονται σε μορφή JSON και συγχρονίζονται σε όλους τους συνδεδεμένους πελάτες σε πραγματικό χρόνο.
Το [Realm Objective-C](https://realm.io/docs/objc/latest/) και το [Realm Swift](https://realm.io/docs/swift/latest/) προσφέρουν μια ισχυρή εναλλακτική λύση για την αποθήκευση δεδομένων, η οποία δεν παρέχεται από την Apple. Από προεπιλογή, τα δεδομένα αποθηκεύονται μη κρυπτογραφημένα, με την κρυπτογράφηση να είναι διαθέσιμη μέσω συγκεκριμένης ρύθμισης.
Οι βάσεις δεδομένων βρίσκονται στο: `/private/var/mobile/Containers/Data/Application/{APPID}`. Για να εξερευνήσετε αυτά τα αρχεία, μπορείτε να χρησιμοποιήσετε εντολές όπως:
Το [Couchbase Lite](https://github.com/couchbase/couchbase-lite-ios) περιγράφεται ως έναν **ελαφρύ** και **ενσωματωμένο** μηχανισμό βάσης δεδομένων που ακολουθεί την προσέγγιση **εγγράφου-στρατού** (NoSQL). Σχεδιασμένο να είναι φυσικό στα **iOS** και **macOS**, προσφέρει τη δυνατότητα συγχρονισμού δεδομένων χωρίς διακοπές.
Το iOS αποθηκεύει τα cookies των εφαρμογών στο **`Library/Cookies/cookies.binarycookies`** μέσα στον φάκελο κάθε εφαρμογής. Ωστόσο, οι προγραμματιστές μερικές φορές αποφασίζουν να τα αποθηκεύσουν στο **keychain** καθώς το ανωτέρω **αρχείο cookie μπορεί να προσπελαστεί σε αντίγραφα ασφαλείας**.
Για να επιθεωρήσετε το αρχείο cookies μπορείτε να χρησιμοποιήσετε [**αυτό το python script**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) ή να χρησιμοποιήσετε την εντολή **`ios cookies get`** του objection.\
Από προεπιλογή, η NSURLSession αποθηκεύει δεδομένα, όπως **αιτήσεις HTTP και απαντήσεις στη βάση δεδομένων Cache.db**. Αυτή η βάση δεδομένων μπορεί να περιέχει **ευαίσθητα δεδομένα**, εάν έχουν αποθηκευτεί τοκενς, ονόματα χρηστών ή οποιεσδήποτε άλλες ευαίσθητες πληροφορίες. Για να βρείτε τις αποθηκευμένες πληροφορίες, ανοίξτε τον κατάλογο δεδομένων της εφαρμογής (`/var/mobile/Containers/Data/Application/<UUID>`) και πηγαίνετε στο `/Library/Caches/<Bundle Identifier>`. Η**προσωρινή μνήμη του WebKit αποθηκεύεται επίσης στο αρχείο Cache.db**. Το**Objection** μπορεί να ανοίξει και να αλληλεπιδράσει με τη βάση δεδομένων με την εντολή `sqlite connect Cache.db`, καθώς πρόκειται για μια **κανονική βάση δεδομένων SQLite**.
Συνιστάται να**απενεργοποιήσετε την αποθήκευση αυτών των δεδομένων**, καθώς μπορεί να περιέχουν ευαίσθητες πληροφορίες στο αίτημα ή την απάντηση. Η παρακάτω λίστα δείχνει διαφορετικούς τρόπους επίτευξης αυτού:
1. Συνιστάται να αφαιρέσετε τις αποθηκευμένες απαντήσεις μετά την αποσύνδεση. Αυτό μπορεί να γίνει με τη μέθοδο που παρέχεται από την Apple με το όνομα [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses) Μπορείτε να καλέσετε αυτήν τη μέθοδο ως εξής:
Αυτή η μέθοδος θα αφαιρέσει όλα τα αποθηκευμένα αιτήματα και απαντήσεις από το αρχείο Cache.db.
2. Εάν δεν χρειάζεστε να χρησιμοποιήσετε τα cookies, θα ήταν συνιστώμενο να χρησιμοποιήσετε απλώς την ιδιότητα [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) της URLSession, η οποία θα απενεργοποιήσει την αποθήκευση cookies και προσωρινής μνήμης.
`Ένα αντικείμενο διαμόρφωσης συνεδρίας ephemeral είναι παρόμοιο με μια προεπιλεγμένη διαμόρφωση συνεδρίας (δείτε default), εκτός από το γεγονός ότι το αντίστοιχο αντικείμενο συνεδρίας δεν αποθηκεύει caches, αποθηκεύεις διαπιστεύσεων ή οποιαδήποτε δεδομένα συνεδρίας στο δίσκο. Αντ' αυτού, τα σχετικά με τη συνεδρία δεδομένα αποθηκεύονται στη RAM. Το μόνο χρονικό σημείο που μια συνεδρία ephemeral γράφει δεδομένα στο δίσκο είναι όταν της λέτε να γράψει τα περιεχόμενα ενός URL σε ένα αρχείο.`
3.Η προσωρινή μνήμη μπορεί επίσης να απενεργοποιηθεί με την ρύθμιση της πολιτικής Cache σε [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Αυτό θα απενεργοποιήσει την αποθήκευση της προσωρινής μνήμης με οποιονδήποτε τρόπο, είτε στη μνήμη είτε στον δίσκο.
Κάθε φορά που πατάτε το κουμπί αρχικής οθόνης, το iOS **παίρνει ένα στιγμιότυπο της τρέχουσας οθόνης**γιανα μπορεί να γίνει η μετάβαση στην εφαρμογή με πιο ομαλό τρόπο. Ωστόσο, εάν **ευαίσθητα δεδομένα** υπάρχουν στην τρέχουσα οθόνη, θα **αποθηκευτούν** στην **εικόνα** (η οποία **διατηρείται****ακόμα και μετά****την****επανεκκίνηση**). Αυτά είναι τα στιγμιότυπα στα οποία μπορείτε επίσης να έχετε πρόσβαση διπλά πατώντας δύο φορές την αρχική οθόνη γιανα μεταβείτε ανάμεσα στις εφαρμογές.
Εκτός εάν το iPhone έχει κάνει jailbreak, ο**επιτιθέμενος** χρειάζεται να έχει **πρόσβαση** στη **συσκευή****χωρίς****κλείδωμα**γιανα δει αυτά τα στιγμιότυπα. Από προεπιλογή, το τελευταίο στιγμιότυπο αποθηκεύεται στο sandbox της εφαρμογής στον κατάλογο `Library/Caches/Snapshots/` ή `Library/SplashBoard/Snapshots` (τα αξιόπιστα υπολογιστικά μηχανήματα δεν μπορούν να έχουν πρόσβαση στο σύστημα αρχείων από το iOX 7.0).
Ένας τρόπος να αποτρέψετε αυτήν την κακή συμπεριφορά είναι να τοποθετήσετε μια κενή οθόνη ή να αφαιρέσετε τα ευαίσθητα δεδομένα πριν πάρετε το στιγμιότυπο χρησιμοποιώντας τη λειτουργία `ApplicationDidEnterBackground()`.
Αυτό ορίζει την εικόνα φόντου σε `overlayImage.png` όταν η εφαρμογή μεταβαίνει στο παρασκήνιο. Αυτό εμποδίζει τη διαρροή ευαίσθητων δεδομένων επειδή το `overlayImage.png` θα αντικαθιστά πάντα την τρέχουσα προβολή.
Για πρόσβαση και διαχείριση του keychain του iOS, υπάρχουν εργαλεία όπως το [**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper), κατάλληλα για συσκευές που έχουν κάνει jailbreak. Επιπλέον, το [**Objection**](https://github.com/sensepost/objection) παρέχει την εντολή `ios keychain dump`για παρόμοιους σκοπούς.
Η κλάση **NSURLCredential** είναι ιδανική για την αποθήκευση ευαίσθητων πληροφοριών απευθείας στο keychain, παρακάμπτοντας την ανάγκη για NSUserDefaults ή άλλες επικαλύψεις. Για να αποθηκεύσετε διαπιστευτήρια μετά την σύνδεση, χρησιμοποιείται ο παρακάτω κώδικας σε Swift:
Από το iOS 8.0 και μετά, οι χρήστες μπορούν να εγκαταστήσουν επεκτάσεις προσαρμοσμένων πληκτρολογίων, τα οποία διαχειρίζονται στο **Ρυθμίσεις > Γενικές > Πληκτρολόγιο > Πληκτρολόγια**. Ενώ αυτά τα πληκτρολόγια προσφέρουν επεκτεινόμενη λειτουργικότητα, αποτελούν κίνδυνο για καταγραφή πληκτρολογίων και μετάδοση δεδομένων σε εξωτερικούς διακομιστές, αν και οι χρήστες ενημερώνονται για τα πληκτρολόγια που απαιτούν πρόσβαση στο δίκτυο. Οι εφαρμογές μπορούν, και πρέπει, να περιορίσουν τη χρήση προσαρμοσμένων πληκτρολογίων για την εισαγωγή ευαίσθητων πληροφοριών.
* Συνιστάται η απενεργοποίηση των πληκτρολογίων τρίτων για ενισχυμένη ασφάλεια.
*Να ληφθεί υπόψη η λειτουργία αυτόματης διόρθωσης και αυτόματων προτάσεων του προεπιλεγμένου πληκτρολογίου του iOS, το οποίο μπορεί να αποθηκεύει ευαίσθητες πληροφορίες σε αρχεία προσωρινής μνήμης που βρίσκονται στο `Library/Keyboard/{locale}-dynamic-text.dat` ή `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Αυτά τα αρχεία πρέπει να ελέγχονται τακτικά για ευαίσθητα δεδομένα. Συνιστάται η επαναφορά του λεξικού πληκτρολογίου μέσω των **Ρυθμίσεις > Γενικές > Επαναφορά > Επαναφορά Λεξικού Πληκτρολογίου**για την εκκαθάριση των αποθηκευμένων δεδομένων.
*Η παρακολούθηση της κίνησης δικτύου μπορεί να αποκαλύψει εάν ένα προσαρμοσμένο πληκτρολόγιο μεταδίδει απομακρυσμένα πληκτρολογήματα.
Το πρωτόκολλο [UITextInputTraits](https://developer.apple.com/reference/uikit/uitextinputtraits) προσφέρει ιδιότητες για τη διαχείριση της αυτόματης διόρθωσης και της ασφαλούς εισαγωγής κειμένου, τα οποία είναι ουσιώδη για την αποτροπή της προσωρινής αποθήκευσης ευαίσθητων πληροφοριών. Για παράδειγμα, η απενεργοποίηση της αυτόματης διόρθωσης και η ενεργοποίηση της ασφαλούς εισαγωγής κειμένου μπορεί να επιτευχθεί με:
Επιπλέον, οι προγραμματιστές θα πρέπει να διασφαλίζουν ότι τα πεδία κειμένου, ειδικά αυτά που προορίζονται για την εισαγωγή ευαίσθητων πληροφοριών όπως κωδικοί πρόσβασης και PIN, απενεργοποιούν την προσωρινή αποθήκευση ορίζοντας το `autocorrectionType` σε `UITextAutocorrectionTypeNo` και το `secureTextEntry` σε `YES`.
Η αποσφαλμάτωση κώδικα συχνά περιλαμβάνει τη χρήση **καταγραφής**. Υπάρχει κίνδυνος καθώς **οι καταγραφές μπορεί να περιέχουν ευαίσθητες πληροφορίες**. Παλαιότερα, στο iOS 6 και σε προηγούμενες εκδόσεις, οι καταγραφές ήταν προσβάσιμες από όλες τις εφαρμογές, δημιουργώντας κίνδυνο διαρροής ευαίσθητων δεδομένων. **Τώρα, οι εφαρμογές περιορίζονται στην πρόσβαση μόνο στις δικές τους καταγραφές**.
Παρά τους περιορισμούς αυτούς, ένας **επιτιθέμενος με φυσική πρόσβαση** σε ένα ξεκλείδωτο συσκευή μπορεί ακόμα να εκμεταλλευτεί αυτό συνδέοντας τη συσκευή σε έναν υπολογιστή και **διαβάζοντας τις καταγραφές**. Είναι σημαντικό να σημειωθεί ότι οι καταγραφές παραμένουν στο δίσκο ακόμα και μετά την απεγκατάσταση της εφαρμογής.
Για τη μείωση των κινδύνων, συνιστάται να**αλληλεπιδράσετε ενδελεχώς με την εφαρμογή**, εξερευνώντας όλες τις λειτουργίες και τις εισόδους της γιανα διασφαλίσετε ότι δεν καταγράφονται απαράδεκτα ευαίσθητες πληροφορίες.
Για πιο προηγμένη καταγραφή, η σύνδεση στο κέλυφος της συσκευής και η χρήση του **socat** μπορεί να παρέχει παρακολούθηση καταγραφών σε πραγματικό χρόνο:
Ακολουθούν εντολές για παρακολούθηση δραστηριοτήτων καταγραφής, οι οποίες μπορεί να είναι ανεκτίμητες για τη διάγνωση προβλημάτων ή την αναγνώριση πιθανών διαρροών δεδομένων στα αρχεία καταγραφής.
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) για εύκολη δημιουργία και **αυτοματοποίηση ροών εργασίας** με τα πιο προηγμένα εργαλεία της κοινότητας.\
Οι**λειτουργίες αυτόματης δημιουργίας αντιγράφων ασφαλείας** ενσωματώνονται στο iOS, διευκολύνοντας τη δημιουργία αντιγράφων δεδομένων συσκευής μέσω του iTunes (μέχρι το macOS Catalina), του Finder (από το macOS Catalina και μετά) ή του iCloud. Αυτά τα αντίγραφα ασφαλείας περιλαμβάνουν σχεδόν όλα τα δεδομένα της συσκευής, εξαιρουμένων υψηλά ευαίσθητων στοιχείων όπως λεπτομέρειες Apple Pay και ρυθμίσεις Touch ID.
Η περιλαμβανόμενη **εγκατάσταση εφαρμογών και των δεδομένων τους** στα αντίγραφα ασφαλείας θέτει το ζήτημα της πιθανής **διαρροής δεδομένων** και του κινδύνου ότι **οι τροποποιήσεις στα αντίγραφα ασφαλείας μπορεί να αλλάξουν τη λειτουργικότητα της εφαρμογής**. Συνιστάται να**μην αποθηκεύετε ευαίσθητες πληροφορίες σε καθαρό κείμενο** μέσα στον κατάλογο οποιασδήποτε εφαρμογής ή των υποκαταλόγων της για τη μείωση αυτών των κινδύνων.
Τα αρχεία στα `Documents/` και `Library/Application Support/` αντιγράφονται από προεπιλογή. Οι προγραμματιστές μπορούν να αποκλείσουν συγκεκριμένα αρχεία ή καταλόγους από τα αντίγραφα ασφαλείας χρησιμοποιώντας το `NSURL setResourceValue:forKey:error:` με το `NSURLIsExcludedFromBackupKey`. Αυτή η πρακτική είναι κρίσιμη για την προστασία ευαίσθητων δεδομένων από το να συμπεριληφθούν στα αντίγραφα ασφαλείας.
Για να αξιολογήσετε την ασφάλεια του αντιγράφου ασφαλείας μιας εφαρμογής, ξεκινήστε με το **δημιουργία ενός αντιγράφου ασφαλείας** χρησιμοποιώντας το Finder, στη συνέχεια εντοπίστε το χρησιμοποιώντας τις οδηγίες από την [επίσημη τεκμηρίωση της Apple](https://support.apple.com/en-us/HT204215). Αναλύστε το αντίγραφο ασφαλείας για ευαίσθητα δεδομένα ή ρυθμίσεις που θα μπορούσαν να τροποποιηθούν γιανα επηρεάσουν τη συμπεριφορά της εφαρμογής.
Ευαίσθητες πληροφορίες μπορούν να αναζητηθούν χρησιμοποιώντας εργαλεία γραμμής εντολών ή εφαρμογές όπως το [iMazing](https://imazing.com). Για κρυπτογραφημένα αντίγραφα ασφαλείας, η ύπαρξη κρυπτογράφησης μπορεί να επιβεβαιωθεί ελέγχοντας το κλειδί "IsEncrypted" στο αρχείο "Manifest.plist" στη ρίζα του αντιγράφου ασφαλείας.
Για την αντιμετώπιση κρυπτογραφημένων αντιγράφων ασφαλείας, τα σενάρια Python που είναι διαθέσιμα στο [αποθετήριο GitHub της DinoSec](https://github.com/dinosec/iphone-dataprotection/tree/master/python\_scripts), όπως το **backup\_tool.py** και το **backup\_passwd.py**, μπορεί να είναι χρήσιμα, αν και ενδέχεται να απαιτούν προσαρμογές για συμβατότητα με τις πιο πρόσφατες εκδόσεις του iTunes/Finder. Το εργαλείο [**iOSbackup**](https://pypi.org/project/iOSbackup/) είναι μια άλλη επιλογή για πρόσβαση σε αρχεία εντός κρυπτογραφημένων αντιγράφων ασφαλείας.
Ένα παράδειγμα τροποποίησης της συμπεριφοράς μιας εφαρμογής μέσω τροποποιήσεων στο αντίγραφο ασφαλείας παρουσιάζεται στην εφαρμογή πορτοφόλι Bitcoin [Bither](https://github.com/bither/bither-ios), όπου το PIN κλειδώματος του UI αποθηκεύεται μέσα στο `net.bither.plist` υπό το κλειδί **pin\_code**. Η αφαίρεση αυτού του κλειδιού από το plist και η επαναφορά του αντιγράφου ασφαλείας καταργεί την απαίτηση του PIN, παρέχοντας απεριόριστη πρόσβαση.
Όταν ασχολείστε με ευαίσθητες πληροφορίες που αποθηκεύονται στη μνήμη μιας εφαρμογής, είναι κρίσιμο να περιορίσετε τον χρόνο έκθεσης αυτών των δεδομένων. Υπάρχουν δύο κύριες προσεγγίσεις για την εξέταση του περιεχομένου της μνήμης: **δημιουργία εκχύλισης μνήμης** και **ανάλυση της μνήμης επί τόπου**. Καιοι δύο μέθοδοι έχουν τις προκλήσεις τους, συμπεριλαμβανομένης της πιθανότητας να χάσετε κρίσιμα δεδομένα κατά τη διαδικασία εκχύλισης ή ανάλυσης.
Τόσο για συσκευές με jailbreak όσο και για συσκευές χωρίς jailbreak, εργαλεία όπως το [objection](https://github.com/sensepost/objection) και το [Fridump](https://github.com/Nightbringer21/fridump) επιτρέπουν την εκχύλιση της μνήμης διεργασίας μιας εφαρμογής. Μόλις γίνει η εκχύλιση, η ανάλυση αυτών των δεδομένων απαιτεί διάφορα εργαλεία, ανάλογα με τη φύση των πληροφοριών που αναζητάτε.
Για πιο λεπτομερή ανάλυση, συμπεριλαμβανομένης της αναζήτησης συγκεκριμένων τύπων δεδομένων ή προτύπων, το **radare2** προσφέρει εκτεταμένες δυνατότητες αναζήτησης:
Το**r2frida** παρέχει μια ισχυρή εναλλακτική λύση για την επιθεώρηση της μνήμης μιας εφαρμογής σε πραγματικό χρόνο, χωρίς την ανάγκη για αντιγραφή μνήμης. Αυτό το εργαλείο επιτρέπει την εκτέλεση εντολών αναζήτησης απευθείας στη μνήμη της εκτελούμενης εφαρμογής:
Ορισμένοι προγραμματιστές αποθηκεύουν ευαίσθητα δεδομένα στην τοπική αποθήκευση και τα κρυπτογραφούν με ένα κλειδί που είναι σκληροπροσδιορίσιμο στον κώδικα. Αυτό δεν πρέπει να γίνεται, καθώς μερικές αναστροφές μπορεί να επιτρέψουν σε επιτιθέμενους να εξάγουν τις εμπιστευτικές πληροφορίες.
Οι προγραμματιστές δεν πρέπει να χρησιμοποιούν **απαρχαιωμένους αλγορίθμους**για την εκτέλεση ελέγχων **εξουσιοδότησης**, **αποθήκευσης** ή **αποστολής** δεδομένων. Κάποιοι από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Εάν οι**κατακερματισμοί** χρησιμοποιούνται για την αποθήκευση κωδικών πρόσβασης για παράδειγμα, πρέπει να χρησιμοποιούνται ανθεκτικοί στη βίαιη αναζήτηση κατακερματισμοί με αλάτι.
Οι κύριοι έλεγχοι που πρέπει να πραγματοποιηθούν είναι να βρεθούν **σκληροπροσδιορισμένοι** κωδικοί/μυστικά στον κώδικα, ή αν αυτοί είναι **προβλέψιμοι**, και ανο κώδικας χρησιμοποιεί κάποιο είδος **αδύναμων** αλγορίθμων **κρυπτογραφίας**.
Για **περισσότερες πληροφορίες** σχετικά με τις κρυπτογραφικές API και βιβλιοθήκες του iOS, επισκεφθείτε τη διεύθυνση [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography)
Η**τοπική ταυτοποίηση** διαδραματίζει έναν κρίσιμο ρόλο, ειδικά όταν πρόκειται για την προστασία της πρόσβασης σε ένα απομακρυσμένο σημείο μέσω κρυπτογραφικών μεθόδων. Η ουσία εδώ είναι ότι χωρίς τη σωστή υλοποίηση, οι μηχανισμοί τοπικής ταυτοποίησης μπορούν να παρακαμφθούν.
Το [**πλαίσιο τοπικής ταυτοποίησης της Apple**](https://developer.apple.com/documentation/localauthentication) και το [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) παρέχουν ανθεκτικές API για τους προγραμματιστές, προκειμένου να διευκολύνουν τα διάλογοι ταυτοποίησης χρήστη και να χειρίζονται με ασφάλεια μυστικά δεδομένα, αντίστοιχα. Το Secure Enclave ασφαλίζει το αναγνωριστικό δακτυλικών αποτυπωμάτων για το Touch ID, ενώ το Face ID βασίζεται στην αναγνώριση προσώπου χωρίς να θέτει σε κίνδυνο τα βιομετρικά δεδομένα.
* **`LocalAuthentication.framework`** για υψηλού επιπέδου ταυτοποίηση χρήστη χωρίς πρόσβαση σε βιομετρικά δεδομένα.
* **`Security.framework`** για πρόσβαση σε υπηρεσίες χαμηλότερου επιπέδου στο keychain, ασφαλίζοντας μυστικά δεδομένα με βιομετρική ταυτοποίηση. Διάφορα [περιτυλίγματα ανοιχτού κώδικα](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) κάνουν την πρόσβαση στο keychain πιο απλή.
Ωστόσο, τόσο το `LocalAuthentication.framework` όσο και το `Security.framework` παρουσιάζουν ευπάθειες, καθώς κυρίως επιστρέφουν λογικές τιμές χωρίς να μεταδίδουν δεδομένα για τις διαδικασίες ταυτοποίησης, κάνοντάς τα ευάλωτα στην παράκαμψη (αναφερθείτε στο [Μην με αγγίζεις έτσι, από τον David Lindner κ.ά.](https://www.youtube.com/watch?v=XhXIHVGCFFM)).
Για να ζητήσουν από τους χρήστες ταυτοποίηση, οι προγραμματιστές πρέπει να χρησιμοποιήσουν τη μέθοδο **`evaluatePolicy`** εντός της κλάσης **`LAContext`**, επιλέγοντας μεταξύ:
* **`deviceOwnerAuthentication`**: Ζητά το Touch ID ή τον κωδικό πρόσβασης της συσκευής, αποτυγχάνοντας εάν κανένα από τα δύο δεν είναι ενεργοποιημένο.
* **`deviceOwnerAuthenticationWithBiometrics`**: Ζητά αποκλειστικά το Touch ID.
Η εφαρμογή **τοπικής ταυτοποίησης** σε εφαρμογές iOS περιλαμβάνει τη χρήση των **keychain APIs**για την ασφαλή αποθήκευση μυστικών δεδομένων όπως διαπιστευτήρια ταυτοποίησης. Αυτή η διαδικασία εξασφαλίζει ότι τα δεδομένα μπορούν να προσπελαστούν μόνο από τον χρήστη, χρησιμοποιώντας τον κωδικό πρόσβασης της συσκευής τους ή τη βιομετρική ταυτοποίηση όπως το Touch ID.
Το keychain προσφέρει τη δυνατότητα να ορίσετε στοιχεία με το χαρακτηριστικό `SecAccessControl`, το οποίο περιορίζει την πρόσβαση στο στοιχείο μέχρι ο χρήστης να ταυτοποιηθεί με επιτυχία μέσω του Touch ID ή του κωδικού πρόσβασης της συσκευής. Αυτό το χαρακτηριστικό είναι κρίσιμο για τη βελτίωση της ασφάλειας.
Παρακάτω υπάρχουν παραδείγματα κώδικα σε Swift και Objective-C που δείχνουν πώς να αποθηκεύσετε και να ανακτήσετε ένα συμβολοσειριακό δεδομένο από/προς το keychain, εκμεταλλευόμενοι αυτά τα χαρακτηριστικά ασφαλείας. Τα παραδείγματα δείχνουν ειδικά πώς να ρυθμίσετε τον έλεγχο πρόσβασης γιανα απαιτεί αυθεντικοποίηση Touch ID και να διασφαλίσετε ότι τα δεδομένα είναι προσβάσιμα μόνο στη συσκευή όπου ρυθμίστηκαν, υπό την προϋπόθεση ότι έχει ρυθμιστεί ένας κωδικός πρόσβασης συσκευής.
Η επίθεση σε εφαρμογές iOS απαιτεί τη χρήση διαφόρων εργαλείων και τεχνικών για την εντοπισμό ευπάθειών και την εκμετάλλευσή τους. Αυτό το κεφάλαιο παρέχει οδηγίες για την εκτέλεση επιθέσεων εφαρμογύν iOS και την προστασία των εφαρμογών από αυτού του είδους επιθέσεις.
Τώρα μπορούμε να ζητήσουμε το στοιχείο που αποθηκεύτηκε στο keychain. Οι υπηρεσίες keychain θα εμφανίσουν το παράθυρο ελέγχου ταυτότητας στον χρήστη και θα επιστρέψουν δεδομένα ή nil ανάλογα με το αν παρέχθηκε κατάλληλο δακτυλικό αποτύπωμα ή όχι.
Η χρήση πλαισίων (frameworks) σε μια εφαρμογή μπορεί επίσης να ανιχνευθεί αναλύοντας τη λίστα των κοινών δυναμικών βιβλιοθηκών του δυαδικού αρχείου της εφαρμογής. Αυτό μπορεί να γίνει χρησιμοποιώντας το `otool`:
Εάν χρησιμοποιείται το `LocalAuthentication.framework` σε μια εφαρμογή, το αποτέλεσμα θα περιέχει και τις παρακάτω γραμμές (να θυμάστε ότι το `LocalAuthentication.framework` χρησιμοποιεί το `Security.framework` υπό το καπάκι):
Μέσω της **Αντίρρησης Βιομετρικών Δεδομένων**, που βρίσκεται στη [σελίδα GitHub αυτή](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), υπάρχει μια τεχνική για την αντιμετώπιση του μηχανισμού **LocalAuthentication**. Η ουσία αυτής της προσέγγισης ενεργοποιείται με τη χρήση του **Frida**για τη χειραγώγηση της λειτουργίας `evaluatePolicy`, εξασφαλίζοντας ότι δίνει συνεχώς ένα αποτέλεσμα `True`, ανεξαρτήτως της πραγματικής επιτυχίας της ταυτοποίησης. Αυτό είναι ιδιαίτερα χρήσιμο για την παράκαμψη ελαττωματικών διαδικασιών βιομετρικής ταυτοποίησης.
Αυτή η εντολή ενεργοποιεί μια ακολουθία όπου το Objection καταχωρίζει μια εργασία που αλλάζει αποτελεσματικά το αποτέλεσμα του ελέγχου `evaluatePolicy` σε `True`.
[TouchIDAuthentication showAlert:@"Your device doesn't support Touch ID or you haven't configured Touch ID authentication on your device" withTitle:@"Error"];
Για να επιτευχθεί η **παράκαμψη** της Τοπικής Ταυτοποίησης, γράφεται ένα σενάριο Frida. Αυτό το σενάριο στοχεύει τον έλεγχο **evaluatePolicy**, παρεμβαίνοντας στην κλήση του γιανα εξασφαλίσει ότι επιστρέφει **success=1**. Αλλάζοντας τη συμπεριφορά της κλήσης, ο έλεγχος ταυτοποίησης παρακάμπτεται αποτελεσματικά.
Το παρακάτω σενάριο ενσωματώνεται γιανα τροποποιήσει το αποτέλεσμα της μεθόδου **evaluatePolicy**. Αλλάζει το αποτέλεσμα της κλήσης γιανα υποδεικνύει πάντα επιτυχία.
Είναι σημαντικό να ελέγχετε ότι δεν υπάρχει επικοινωνία **χωρίς κρυπτογράφηση** και επίσης ότι η εφαρμογή ελέγχει σωστά το **πιστοποιητικό TLS** του διακομιστή.\
Για να ελέγξετε αυτού του είδους τα θέματα, μπορείτε να χρησιμοποιήσετε ένα proxy όπως το **Burp**:
Ένα συνηθισμένο πρόβλημα κατά τον έλεγχο του πιστοποιητικού TLS είναι να ελέγχετε αν το πιστοποιητικό υπογράφτηκε από ένα **αξιόπιστο****Φορέα Πιστοποίησης (CA)**, αλλά **να μην ελέγχετε**αν**το όνομα του κεντρικού υπολογιστή** του πιστοποιητικού είναι το όνομα το οποίο προσπελαύνεται.\
Για να ελέγξετε αυτό το πρόβλημα χρησιμοποιώντας το Burp, μετά την εμπιστοποίηση του CA του Burp στο iPhone, μπορείτε να**δημιουργήσετε ένα νέο πιστοποιητικό με το Burp για ένα διαφορετικό όνομα κεντρικού υπολογιστή** και να το χρησιμοποιήσετε. Αν η εφαρμογή εξακολουθεί να λειτουργεί, τότε κάτι είναι ευάλωτο.
Εάν μια εφαρμογή χρησιμοποιεί σωστά το SSL Pinning, τότε η εφαρμογή θα λειτουργεί μόνο αν το πιστοποιητικό είναι αυτό που αναμένεται. Κατά τον έλεγχο μιας εφαρμογής **αυτό μπορεί να αποτελέσει πρόβλημα καθώς το Burp θα εξυπηρετεί το δικό του πιστοποιητικό.**\
Για να παρακάμψετε αυτήν την προστασία μέσα σε μια συσκευή με jailbreak, μπορείτε να εγκαταστήσετε την εφαρμογή [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) ή να εγκαταστήσετε το [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)
* **`iTunesArtwork`**: Το εικονίδιο που χρησιμοποιεί η εφαρμογή
* **`iTunesMetadata.plist`**: Πληροφορίες της εφαρμογής που χρησιμοποιούνται στο App Store
* **`/Library/*`**: Περιέχει τις προτιμήσεις και τη μνήμη cache. Στο **`/Library/Cache/Snapshots/*`** μπορείτε να βρείτε το στιγμιότυπο που πραγματοποιήθηκε στην εφαρμογή πριν την στείλετε στο παρασκήνιο.
### Hot Patching/Επιβολή Ενημερώσεων
Οι προγραμματιστές μπορούν να ενημερώσουν απομακρυσμένα **όλες τις εγκαταστάσεις της εφαρμογής τους αμέσως** χωρίς να χρειάζεται να υποβάλουν ξανά την εφαρμογή στο App Store και να περιμένουν μέχρι να εγκριθεί.\
Για αυτόν τον σκοπό συνήθως χρησιμοποιείται το [**JSPatch**](https://github.com/bang590/JSPatch)**.** Αλλά υπάρχουν και άλλες επιλογές όπως το [Siren](https://github.com/ArtSabintsev/Siren) και το [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
**Αυτός είναι ένας επικίνδυνος μηχανισμός που θα μπορούσε να καταχραστείται από κακόβουλα SDK τρίτων, επομένως συνιστάται να ελέγξετε ποια μέθοδος χρησιμοποιείται για την αυτόματη ενημέρωση (αν υπάρχει) και να το δοκιμάσετε.** Μπορείτε να δοκιμάσετε να κατεβάσετε μια προηγούμενη έκδοση της εφαρμογής για αυτόν τον σκοπό.
Ένα σημαντικό πρόβλημα με τα **SDK τρίτων** είναι η **έλλειψη λεπτομερούς ελέγχου** επί των λειτουργιών τους. Οι προγραμματιστές αντιμετωπίζουν την επιλογή: είτε να ενσωματώσουν το SDK και να αποδεχτούν όλες τις λειτουργίες του, συμπεριλαμβανομένων πιθανών ευπαθειών ασφάλειας και ανησυχιών απορρήτου, είτε να απορρίψουν εντελώς τα οφέλη του. Συχνά, οι προγραμματιστές δεν μπορούν να επιδιορθώσουν τις ευπαθείες μέσα σε αυτά τα SDK μόνοι τους. Επιπλέον, καθώς τα SDK κερδίζουν εμπιστοσύνη στην κοινότητα, μερικά ενδέχεται να περιέχουν κακόβουλο λογισμικό.
Οι υπηρεσίες που παρέχονται από τα SDK τρίτων μπορεί να περιλαμβάνουν παρακολούθηση συμπεριφοράς χρήστη, εμφάνιση διαφημίσεων ή βελτίωση της εμπειρίας χρήστη. Ωστόσο, αυτό εισάγει έναν κίνδυνο καθώς οι προγραμματιστές ενδέχεται να μην είναι πλήρως ενήμεροι για τον κώδικα που εκτελείται από αυτές τις βιβλιοθήκες, οδηγώντας σε πιθανούς κινδύνους απορρήτου και ασφάλειας. Είναι ζωτικής σημασίας να περιορίσετε τις πληροφορίες που μοιράζεστε με υπηρεσίες τρίτων σε αυτές που είναι απαραίτητες και να διασφαλίσετε ότι δεν εκθέτετε ευαίσθητα δεδομένα.
Η υλοποίηση υπηρεσιών τρίτων έρχεται συνήθως σε δύο μορφές: μια ανεξάρτ
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) για εύκολη δημιουργία και **αυτοματοποίηση ροών εργασίας** με τα πιο προηγμένα εργαλεία της κοινότητας.\
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
*Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να**κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).