iOS UIPasteboard

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Κόκκινης Ομάδας AWS του HackTricks)!

Άλλοι τρόποι υποστήριξης του HackTricks:

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

  • Γενικός πίνακας αντιγραφής σε επίπεδο συστήματος: Χρησιμοποιείται για την κοινοποίηση δεδομένων με οποιαδήποτε εφαρμογή και σχεδιάστηκε για να διατηρεί δεδομένα μεταξύ επανεκκινήσεων συσκευής και απεγκαταστάσεων εφαρμογών, μια λειτουργία που είναι διαθέσιμη από το iOS 10.

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

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

  • Δεν υπάρχει μηχανισμός για τους χρήστες να διαχειρίζονται τις άδειες εφαρμογών για πρόσβαση στον πίνακα αντιγραφής.

  • Για να μειώσουν τον κίνδυνο μη εξουσιοδοτημένης παρακολούθησης του πίνακα αντιγραφής, η πρόσβαση περιορίζεται όταν η εφαρμογή βρίσκεται στο προσκήνιο (από το iOS 9).

  • Η χρήση μόνιμων ονομασμένων πινάκων αντιγραφής αποτρέπεται υπέρ των κοινών δοχείων λόγω ανησυχιών απορρήτου.

  • Η λειτουργία Κοινού Προσωπικού Χώρου που εισήχθη με το iOS 10, επιτρέποντας την κοινοποίηση περιεχομένου σε συσκευές μέσω του γενικού πίνακα αντιγραφής, μπορεί να διαχειριστεί από τους προγραμματιστές για να ορίσουν λήξη δεδομένων και να απενεργοποιήσουν την αυτόματη μεταφορά περιεχομένου.

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

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

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

  • generalPasteboard για την αναγνώριση της χρήσης του γενικού πίνακα αντιγραφής σε επίπεδο συστήματος.

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

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

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

  • Παρακολούθηση του generalPasteboard για τη χρήση σε επίπεδο συστήματος.

  • Ιχνηλάτηση των pasteboardWithName:create: και pasteboardWithUniqueName για προσαρμοσμένες υλοποιήσεις.

  • Παρακολούθηση των κλήσεων μεθόδων setPersistent: που έχουν αποσυρθεί για έλεγχο των ρυθμίσεων διατήρησης.

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

  • Ονόματα πινάκων αντιγραφής και περιεχόμενα (για παράδειγμα, έλεγχος για συμβολοσειρές, διευθύνσεις URL, εικόνες).

  • Αριθμός στοιχείων και τύποι δεδομένων που υπάρχουν, εκμεταλλευόμενοι ελέγχους τυπικών και προσαρμοσμένων τύπων δεδομένων.

  • Επιλογές λήξης και τοπικής μόνο με επιθεώρηση της μεθόδου setItems:options:.

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

Εδώ υπάρχει ένα απλό παράδειγμα σεναρίου JavaScript, εμπνευσμένο από τη μέθοδο του objection, για να διαβάζει και να καταγράφει τις αλλαγές από τον πίνακα αντιγραφής κάθε 5 δευτερόλεπτα:

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);

Αναφορές

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Last updated