tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

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

  • Γενικό σύστημα pasteboard: Αυτό χρησιμοποιείται για την κοινή χρήση δεδομένων με οποιαδήποτε εφαρμογή και έχει σχεδιαστεί για να διατηρεί δεδομένα κατά τη διάρκεια επανεκκινήσεων της συσκευής και απεγκαταστάσεων εφαρμογών, μια δυνατότητα που είναι διαθέσιμη από το iOS 10.
  • Προσαρμοσμένα / Ονομασμένα pasteboards: Αυτά είναι ειδικά για την κοινή χρήση δεδομένων εντός μιας εφαρμογής ή με άλλη εφαρμογή που μοιράζεται το ίδιο ID ομάδας και δεν έχουν σχεδιαστεί για να διατηρούνται πέρα από τη διάρκεια της διαδικασίας εφαρμογής που τα δημιουργεί, ακολουθώντας τις αλλαγές που εισήχθησαν στο iOS 10.

Σκέψεις ασφαλείας παίζουν σημαντικό ρόλο κατά τη χρήση των pasteboards. Για παράδειγμα:

  • Δεν υπάρχει μηχανισμός για τους χρήστες να διαχειρίζονται τις άδειες εφαρμογών για πρόσβαση στο pasteboard.
  • Για να μετριαστεί ο κίνδυνος μη εξουσιοδοτημένης παρακολούθησης του pasteboard στο παρασκήνιο, η πρόσβαση περιορίζεται όταν η εφαρμογή είναι στο προσκήνιο (από το iOS 9).
  • Η χρήση μόνιμων ονομασμένων pasteboards αποθαρρύνεται υπέρ των κοινών κοντέινερ λόγω ανησυχιών για την ιδιωτικότητα.
  • Η δυνατότητα Universal Clipboard που εισήχθη με το iOS 10, επιτρέποντας την κοινή χρήση περιεχομένου μεταξύ συσκευών μέσω του γενικού pasteboard, μπορεί να διαχειριστεί από τους προγραμματιστές για να ορίσουν την ημερομηνία λήξης των δεδομένων και να απενεργοποιήσουν τη αυτόματη μεταφορά περιεχομένου.

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

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

Για στατική ανάλυση, αναζητήστε τον πηγαίο κώδικα ή το δυαδικό αρχείο για:

  • generalPasteboard για να προσδιορίσετε τη χρήση του γενικού συστήματος pasteboard.
  • pasteboardWithName:create: και pasteboardWithUniqueName για τη δημιουργία προσαρμοσμένων pasteboards. Επαληθεύστε αν είναι ενεργοποιημένη η διατήρηση, αν και αυτό είναι αποσυρμένο.

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

Η δυναμική ανάλυση περιλαμβάνει την παρακολούθηση ή την ιχνηλάτηση συγκεκριμένων μεθόδων:

  • Παρακολουθήστε το generalPasteboard για τη χρήση σε επίπεδο συστήματος.
  • Ιχνηλατήστε το pasteboardWithName:create: και pasteboardWithUniqueName για προσαρμοσμένες υλοποιήσεις.
  • Παρακολουθήστε τις αποσυρμένες κλήσεις μεθόδου setPersistent: για να ελέγξετε τις ρυθμίσεις διατήρησης.

Κύριες λεπτομέρειες που πρέπει να παρακολουθούνται περιλαμβάνουν:

  • Ονόματα pasteboard και περιεχόμενα (για παράδειγμα, έλεγχος για συμβολοσειρές, URLs, εικόνες).
  • Αριθμός στοιχείων και τύποι δεδομένων που υπάρχουν, αξιοποιώντας τυπικούς και προσαρμοσμένους ελέγχους τύπων δεδομένων.
  • Επιλογές λήξης και τοπικών μόνο ελέγχοντας τη μέθοδο setItems:options:.

Ένα παράδειγμα χρήσης εργαλείου παρακολούθησης είναι ο παρακολούθηση pasteboard του objection, που ελέγχει το generalPasteboard κάθε 5 δευτερόλεπτα για αλλαγές και εξάγει τα νέα δεδομένα.

Ακολουθεί ένα απλό παράδειγμα σεναρίου JavaScript, εμπνευσμένο από την προσέγγιση του objection, για να διαβάσει και να καταγράψει τις αλλαγές από το pasteboard κάθε 5 δευτερόλεπτα:

javascript
const UIPasteboard = ObjC.classes.UIPasteboard
const Pasteboard = UIPasteboard.generalPasteboard()
var items = ""
var count = Pasteboard.changeCount().toString()

setInterval(function () {
const currentCount = Pasteboard.changeCount().toString()
const currentItems = Pasteboard.items().toString()

if (currentCount === count) {
return
}

items = currentItems
count = currentCount

console.log(
"[* Pasteboard changed] count: " +
count +
" hasStrings: " +
Pasteboard.hasStrings().toString() +
" hasURLs: " +
Pasteboard.hasURLs().toString() +
" hasImages: " +
Pasteboard.hasImages().toString()
)
console.log(items)
}, 1000 * 5)

Αναφορές

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks