macOS XPC Connecting Process Check
XPC Connecting Process Check
Όταν μια σύνδεση δημιουργείται σε μια υπηρεσία XPC, ο διακομιστής θα ελέγξει αν η σύνδεση επιτρέπεται. Αυτοί είναι οι έλεγχοι που θα εκτελέσει συνήθως:
Έλεγχος αν η διαδικασία που συνδέεται είναι υπογεγραμμένη με πιστοποιητικό υπογεγραμμένο από την Apple (δίδεται μόνο από την Apple).
Αν αυτό δεν επαληθευτεί, ένας επιτιθέμενος θα μπορούσε να δημιουργήσει ένα ψεύτικο πιστοποιητικό για να ταιριάζει με οποιονδήποτε άλλο έλεγχο.
Έλεγχος αν η διαδικασία που συνδέεται είναι υπογεγραμμένη με το πιστοποιητικό της οργάνωσης, (έλεγχος ταυτότητας ομάδας).
Αν αυτό δεν επαληθευτεί, οποιοδήποτε πιστοποιητικό προγραμματιστή από την Apple μπορεί να χρησιμοποιηθεί για υπογραφή και σύνδεση με την υπηρεσία.
Έλεγχος αν η διαδικασία που συνδέεται περιέχει ένα σωστό bundle ID.
Αν αυτό δεν επαληθευτεί, οποιοδήποτε εργαλείο υπογεγραμμένο από την ίδια οργάνωση θα μπορούσε να χρησιμοποιηθεί για αλληλεπίδραση με την υπηρεσία XPC.
(4 ή 5) Έλεγχος αν η διαδικασία που συνδέεται έχει έναν σωστό αριθμό έκδοσης λογισμικού.
Αν αυτό δεν επαληθευτεί, ένας παλιός, ανασφαλής πελάτης, ευάλωτος σε ένεση διαδικασίας θα μπορούσε να χρησιμοποιηθεί για σύνδεση με την υπηρεσία XPC ακόμη και με τους άλλους ελέγχους σε εφαρμογή.
(4 ή 5) Έλεγχος αν η διαδικασία που συνδέεται έχει σκληρυμένο χρόνο εκτέλεσης χωρίς επικίνδυνες εξουσιοδοτήσεις (όπως αυτές που επιτρέπουν τη φόρτωση αυθαίρετων βιβλιοθηκών ή τη χρήση μεταβλητών περιβάλλοντος DYLD)
Αν αυτό δεν επαληθευτεί, ο πελάτης μπορεί να είναι ευάλωτος σε ένεση κώδικα
Έλεγχος αν η διαδικασία που συνδέεται έχει μια εξουσιοδότηση που της επιτρέπει να συνδεθεί με την υπηρεσία. Αυτό ισχύει για τα δυαδικά αρχεία της Apple.
Η επικύρωση πρέπει να είναι βασισμένη στο token ελέγχου του πελάτη αντί για το ID διαδικασίας του (PID) καθώς το πρώτο αποτρέπει τις επιθέσεις επαναχρησιμοποίησης PID.
Οι προγραμματιστές σπάνια χρησιμοποιούν την κλήση API token ελέγχου καθώς είναι ιδιωτική, οπότε η Apple θα μπορούσε να αλλάξει οποιαδήποτε στιγμή. Επιπλέον, η χρήση ιδιωτικών API δεν επιτρέπεται σε εφαρμογές του Mac App Store.
Αν η μέθοδος
processIdentifier
χρησιμοποιηθεί, μπορεί να είναι ευάλωτηxpc_dictionary_get_audit_token
θα πρέπει να χρησιμοποιείται αντί γιαxpc_connection_get_audit_token
, καθώς η τελευταία θα μπορούσε επίσης να είναι ευάλωτη σε ορισμένες καταστάσεις.
Communication Attacks
Για περισσότερες πληροφορίες σχετικά με την επίθεση επαναχρησιμοποίησης PID ελέγξτε:
macOS PID ReuseΓια περισσότερες πληροφορίες σχετικά με την επίθεση xpc_connection_get_audit_token
ελέγξτε:
Trustcache - Downgrade Attacks Prevention
Το Trustcache είναι μια αμυντική μέθοδος που εισήχθη σε μηχανές Apple Silicon που αποθηκεύει μια βάση δεδομένων CDHSAH των δυαδικών αρχείων της Apple, ώστε μόνο οι επιτρεπόμενοι μη τροποποιημένοι δυαδικοί κώδικες να μπορούν να εκτελούνται. Αυτό αποτρέπει την εκτέλεση υποβαθμισμένων εκδόσεων.
Code Examples
Ο διακομιστής θα υλοποιήσει αυτή την επικύρωση σε μια συνάρτηση που ονομάζεται shouldAcceptNewConnection
.
Το αντικείμενο NSXPCConnection έχει μια ιδιωτική ιδιότητα auditToken
(αυτή που θα έπρεπε να χρησιμοποιείται αλλά μπορεί να αλλάξει) και μια δημόσια ιδιότητα processIdentifier
(αυτή που δεν θα έπρεπε να χρησιμοποιείται).
Η διαδικασία σύνδεσης θα μπορούσε να επαληθευτεί με κάτι σαν:
Αν ένας προγραμματιστής δεν θέλει να ελέγξει την έκδοση του πελάτη, θα μπορούσε τουλάχιστον να ελέγξει ότι ο πελάτης δεν είναι ευάλωτος σε διαδικαστική έγχυση:
Last updated