macOS Launch/Environment Constraints & Trust Cache
Βασικές Πληροφορίες
Οι περιορισμοί εκκίνησης στο macOS εισήχθηκαν για να ενισχύσουν την ασφάλεια, ρυθμίζοντας τον τρόπο, τον χρήστη και την προέλευση από την οποία μπορεί να ξεκινήσει ένα διεργασία. Εισήχθηκαν στο macOS Ventura και παρέχουν ένα πλαίσιο που κατηγοριοποιεί κάθε δυαδικό σύστημα σε διακριτές κατηγορίες περιορισμών, οι οποίες καθορίζονται μέσα στην προσωπική μνήμη εμπιστοσύνης, μια λίστα που περιέχει δυαδικά συστήματα και τις αντίστοιχες κατακερματισμένες τους τιμές. Αυτοί οι περιορισμοί επεκτείνονται σε κάθε εκτελέσιμο δυαδικό αρχείο εντός του συστήματος, περιλαμβάνοντας ένα σύνολο κανόνων που καθορίζουν τις απαιτήσεις για την εκκίνηση ενός συγκεκριμένου δυαδικού αρχείου. Οι κανόνες περιλαμβάνουν περιορισμούς που πρέπει να ικανοποιεί ένα δυαδικό αρχείο, περιορισμούς γονικής διεργασίας που πρέπει να πληροί η γονική διεργασία του, και περιορισμούς ευθύνης που πρέπει να τηρούνται από άλλες σχετικές οντότητες.
Ο μηχανισμός επεκτείνεται σε εφαρμογές τρίτων μερών μέσω των περιορισμών περιβάλλοντος, που ξεκινούν από το macOS Sonoma, επιτρέποντας στους προγραμματιστές να προστατεύουν τις εφαρμογές τους καθορίζοντας ένα σύνολο κλειδιών και τιμών για τους περιορισμούς περιβάλλοντος.
Ορίζετε τους περιορισμούς εκκίνησης περιβάλλοντος και βιβλιοθηκών σε λεξικά περιορισμών που είτε αποθηκεύετε σε αρχεία launchd
property list, είτε σε ξεχωριστά αρχεία property list που χρησιμοποιείτε στον υπογραφή κώδικα.
Υπάρχουν 4 τύποι περιορισμών:
Περιορισμοί Εαυτού: Περιορισμοί που εφαρμόζονται στο τρέχον δυαδικό αρχείο.
Περιορισμοί Γονικής Διεργασίας: Περιορισμοί που εφαρμόζονται στη γονική διεργασία (για παράδειγμα η
launchd
που εκτελεί ένα υπηρεσία XP)Περιορισμοί Ευθύνης: Περιορισμοί που εφαρμόζονται στη διεργασία που καλεί την υπηρεσία σε μια επικοινωνία XPC
Περιορισμοί Φόρτωσης Βιβλιοθήκης: Χρησιμοποιήστε περιορισμούς φόρτωσης βιβλιοθήκης για να περιγράψετε εκλεκτικά κώδικα που μπορεί να φορτωθεί
Έτσι, όταν μια διεργασία προσπαθεί να ξεκινήσει μια άλλη διεργασία - καλώντας τις συναρτήσεις execve(_:_:_:)
ή posix_spawn(_:_:_:_:_:_:)
- το λειτουργικό σύστημα ελέγχει αν το εκτελέσιμο αρχείο ικανοποιεί τον περιορισμό του εαυτού του. Επίσης, ελέγχει αν το εκτελέσιμο αρχείο της **γο
(on-authorized-authapfs-volume || on-system-volume)
: Πρέπει να βρίσκεται στον τόμο System ή Cryptexes.launch-type == 1
: Πρέπει να είναι ένα σύστημα υπηρεσίας (plist στο LaunchDaemons).validation-category == 1
: Ένα εκτελέσιμο αρχείο του λειτουργικού συστήματος.is-init-proc
: Launchd
Αντιστροφή των κατηγοριών LC
Έχετε περισσότερες πληροφορίες εδώ, αλλά βασικά, ορίζονται στο AMFI (AppleMobileFileIntegrity), οπότε πρέπει να κατεβάσετε το Kernel Development Kit για να πάρετε το KEXT. Τα σύμβολα που ξεκινούν με kConstraintCategory
είναι τα ενδιαφέροντα. Αν τα εξάγετε, θα πάρετε έναν κωδικοποιημένο ροή DER (ASN.1) που θα πρέπει να αποκωδικοποιήσετε με το ASN.1 Decoder ή τη βιβλιοθήκη python-asn1 και το σενάριο dump.py
, andrivet/python-asn1 που θα σας δώσει ένα πιο κατανοητό αλφαριθμητικό.
Περιορισμοί Περιβάλλοντος
Αυτοί είναι οι περιορισμοί εκκίνησης που έχουν ρυθμιστεί σε εφαρμογές τρίτων. Ο προγραμματιστής μπορεί να επιλέξει τα γεγονότα και τους λογικούς τελεστές που θα χρησιμοποιηθούν στην εφαρμογή του για να περιορίσει την πρόσβαση σε αυτήν.
Είναι δυνατόν να απαριθμήσετε τους περιορισμούς περιβάλλοντος μιας εφαρμογής με:
Αποθήκες Εμπιστοσύνης
Στο macOS υπάρχουν μερικές αποθήκες εμπιστοσύνης:
/System/Volumes/Preboot/*/boot/*/usr/standalone/firmware/FUD/BaseSystemTrustCache.img4
/System/Volumes/Preboot/*/boot/*/usr/standalone/firmware/FUD/StaticTrustCache.img4
/System/Library/Security/OSLaunchPolicyData
Και στο iOS φαίνεται ότι βρίσκεται στο /usr/standalone/firmware/FUD/StaticTrustCache.img4
.
Στο macOS που τρέχει σε συσκευές Apple Silicon, αν ένα υπογεγραμμένο από την Apple δυαδικό αρχείο δεν βρίσκεται στην αποθήκη εμπιστοσύνης, το AMFI θα αρνηθεί να το φορτώσει.
Απαρίθμηση Αποθηκών Εμπιστοσύνης
Τα προηγούμενα αρχεία αποθήκης εμπιστοσύνης είναι σε μορφή IMG4 και IM4P, με το IM4P να είναι η ενότητα φορτίου μιας μορφής IMG4.
Μπορείτε να χρησιμοποιήσετε το pyimg4 για να εξαγάγετε το φορτίο των βάσεων δεδομένων:
(Μια άλλη επιλογή θα μπορούσε να είναι η χρήση του εργαλείου img4tool, το οποίο θα λειτουργήσει ακόμα και στο M1 ακόμα κι αν η έκδοση είναι παλιά και για x86_64 αν το εγκαταστήσετε στις κατάλληλες τοποθεσίες).
Τώρα μπορείτε να χρησιμοποιήσετε το εργαλείο trustcache για να λάβετε τις πληροφορίες σε μια αναγνώσιμη μορφή:
Η αποθήκη εμπιστοσύνης ακολουθεί την παρακάτω δομή, οπότε η κατηγορία LC είναι η 4η στήλη.
Στη συνέχεια, μπορείτε να χρησιμοποιήσετε ένα σενάριο όπως αυτό για να εξάγετε δεδομένα.
Από αυτά τα δεδομένα μπορείτε να ελέγξετε τις εφαρμογές με μια τιμή περιορισμού εκκίνησης 0
, που είναι αυτές που δεν έχουν περιορισμούς (ελέγξτε εδώ για τις τιμές κάθε εφαρμογής).
Προστασία από επιθέσεις
Οι περιορισμοί εκκίνησης θα είχαν αντιμετωπίσει αρκετές παλαιές επιθέσεις, διασφαλίζοντας ότι η διαδικασία δεν θα εκτελεστεί σε απροσδόκητες συνθήκες: Για παράδειγμα από απροσδόκητες τοποθεσίες ή όταν καλείται από μη αναμενόμενη γονική διεργασία (αν μόνο το launchd θα έπρεπε να το εκκινήσει).
Επιπλέον, οι περιορισμοί εκκίνησης αντιμετωπίζουν επίσης επιθέσεις υποβάθμισης.
Ωστόσο, δεν αντιμετωπίζουν κοινές καταχρήσεις XPC, ενσωματώσεις κώδικα Electron ή ενσωματώσεις dylib χωρίς επικύρωση βιβλιοθήκης (εκτός αν είναι γνωστά τα αναγνωριστικά ομάδας που μπορούν να φορτώσουν βιβλιοθήκες).
Προστασία XPC Daemon
Στην έκδοση Sonoma, ένα σημαντικό σημείο είναι η διαμόρφωση της ευθύνης της υπηρεσίας XPC daemon. Η υπηρεσία XPC είναι υπεύθυνη για τον εαυτό της, αντί να είναι υπεύθυνος ο συνδεόμενος πελάτης. Αυτό καταγράφεται στην αναφορά ανατροφοδότησης FB13206884. Αυτή η ρύθμιση μπορεί να φαίνεται ελαττωματική, καθώς επιτρέπει ορισμένες αλληλεπιδράσεις με την υπηρεσία XPC:
Εκκίνηση της υπηρεσίας XPC: Αν θεωρηθεί ως σφάλμα, αυτή η ρύθμιση δεν επιτρέπει την εκκίνηση της υπηρεσίας XPC μέσω κώδικα επιτιθέμενου.
Σύνδεση σε μια ενεργή υπηρεσία: Αν η υπηρεσία XPC είναι ήδη εκτελούμενη (πιθανώς ενεργοποιημένη από την αρχική εφαρμογή της), δεν υπάρχουν εμπόδια για τη σύνδεση σε αυτήν.
Αν και η επιβολή περιορισμών στην υπηρεσία XPC μπορεί να είναι χρήσιμη με τον περιορισμό του παραθύρου για πιθανές επιθέσεις, δεν αντιμετωπίζει τον κύριο προβληματισμό. Η διασφάλιση της ασφάλειας της υπηρεσίας XPC απαιτεί ουσιαστικά την αποτελεσματική επαλήθευση του συνδεόμενου πελάτη. Αυτή παραμένει η μοναδική μέθοδος για την ενίσχυση της ασφάλειας της υπηρεσίας. Επίσης, αξίζει να σημειωθεί ότι η αναφερόμενη διαμόρφωση ευθύνης είναι προς το παρόν λειτουργική, πράγμα που μπορεί να μην συμφωνεί με τον αρχικό σχεδιασμό.
Προστασία Electron
Ακόμα κι αν απαιτείται η εφαρμογή να ανοίγεται από την LaunchService (στους περιορισμούς των γονικών διεργασιών). Αυτό μπορεί να επιτευχθεί χρησιμοποιώντας την εντολή open
(η οποία μπορεί να ορίσει μεταβλητές περιβάλλοντος) ή χρησιμοποιώντας το API της Launch Services (όπου μπορούν να δηλωθούν μεταβλητές περιβάλλοντος).
Αναφορές
Last updated