macOS Gatekeeper / Quarantine / XProtect
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Gatekeeper είναι μια λειτουργία ασφαλείας που έχει αναπτυχθεί για τα λειτουργικά συστήματα Mac, σχεδιασμένη για να διασφαλίσει ότι οι χρήστες εκτελούν μόνο αξιόπιστο λογισμικό στα συστήματά τους. Λειτουργεί επικυρώνοντας το λογισμικό που κατεβάζει ο χρήστης και προσπαθεί να ανοίξει από πηγές εκτός του App Store, όπως μια εφαρμογή, ένα πρόσθετο ή ένα πακέτο εγκατάστασης.
Ο βασικός μηχανισμός του Gatekeeper έγκειται στη διαδικασία επικύρωσης του. Ελέγχει αν το κατεβασμένο λογισμικό είναι υπογεγραμμένο από έναν αναγνωρισμένο προγραμματιστή, διασφαλίζοντας την αυθεντικότητα του λογισμικού. Επιπλέον, διαπιστώνει αν το λογισμικό είναι notarised από την Apple, επιβεβαιώνοντας ότι είναι απαλλαγμένο από γνωστό κακόβουλο περιεχόμενο και δεν έχει παραποιηθεί μετά την notarisation.
Επιπλέον, το Gatekeeper ενισχύει τον έλεγχο και την ασφάλεια του χρήστη ζητώντας από τους χρήστες να εγκρίνουν το άνοιγμα του κατεβασμένου λογισμικού για πρώτη φορά. Αυτή η προστασία βοηθά στην αποφυγή της εκτέλεσης δυνητικά επιβλαβούς εκτελέσιμου κώδικα που μπορεί να έχουν μπερδέψει με ένα αβλαβές αρχείο δεδομένων.
Οι υπογραφές εφαρμογών, γνωστές και ως υπογραφές κώδικα, είναι ένα κρίσιμο στοιχείο της υποδομής ασφαλείας της Apple. Χρησιμοποιούνται για να επικυρώνουν την ταυτότητα του συγγραφέα του λογισμικού (του προγραμματιστή) και για να διασφαλίσουν ότι ο κώδικας δεν έχει παραποιηθεί από την τελευταία φορά που υπογράφηκε.
Ακολουθεί πώς λειτουργεί:
Υπογραφή της Εφαρμογής: Όταν ένας προγραμματιστής είναι έτοιμος να διανείμει την εφαρμογή του, υπογράφει την εφαρμογή χρησιμοποιώντας ένα ιδιωτικό κλειδί. Αυτό το ιδιωτικό κλειδί σχετίζεται με ένα πιστοποιητικό που εκδίδει η Apple στον προγραμματιστή όταν εγγραφεί στο Πρόγραμμα Προγραμματιστών της Apple. Η διαδικασία υπογραφής περιλαμβάνει τη δημιουργία ενός κρυπτογραφικού hash όλων των μερών της εφαρμογής και την κρυπτογράφηση αυτού του hash με το ιδιωτικό κλειδί του προγραμματιστή.
Διανομή της Εφαρμογής: Η υπογεγραμμένη εφαρμογή διανέμεται στους χρήστες μαζί με το πιστοποιητικό του προγραμματιστή, το οποίο περιέχει το αντίστοιχο δημόσιο κλειδί.
Επικύρωση της Εφαρμογής: Όταν ένας χρήστης κατεβάσει και προσπαθήσει να εκτελέσει την εφαρμογή, το λειτουργικό σύστημα Mac του χρησιμοποιεί το δημόσιο κλειδί από το πιστοποιητικό του προγραμματιστή για να αποκρυπτογραφήσει το hash. Στη συνέχεια, υπολογίζει ξανά το hash με βάση την τρέχουσα κατάσταση της εφαρμογής και το συγκρίνει με το αποκρυπτογραφημένο hash. Αν ταιριάζουν, σημαίνει ότι η εφαρμογή δεν έχει τροποποιηθεί από την υπογραφή του προγραμματιστή και το σύστημα επιτρέπει την εκτέλεση της εφαρμογής.
Οι υπογραφές εφαρμογών είναι ένα απαραίτητο μέρος της τεχνολογίας Gatekeeper της Apple. Όταν ένας χρήστης προσπαθεί να ανοίξει μια εφαρμογή που έχει κατεβάσει από το διαδίκτυο, το Gatekeeper επαληθεύει την υπογραφή της εφαρμογής. Αν είναι υπογεγραμμένη με πιστοποιητικό που έχει εκδοθεί από την Apple σε γνωστό προγραμματιστή και ο κώδικας δεν έχει παραποιηθεί, το Gatekeeper επιτρέπει την εκτέλεση της εφαρμογής. Διαφορετικά, αποκλείει την εφαρμογή και ειδοποιεί τον χρήστη.
Από το macOS Catalina και μετά, το Gatekeeper ελέγχει επίσης αν η εφαρμογή έχει notarised από την Apple, προσθέτοντας ένα επιπλέον επίπεδο ασφάλειας. Η διαδικασία notarization ελέγχει την εφαρμογή για γνωστά ζητήματα ασφαλείας και κακόβουλο κώδικα, και αν αυτές οι έλεγχοι περάσουν, η Apple προσθέτει ένα εισιτήριο στην εφαρμογή που μπορεί να επαληθεύσει το Gatekeeper.
Όταν ελέγχετε κάποιο δείγμα κακόβουλου λογισμικού, θα πρέπει πάντα να ελέγχετε την υπογραφή του δυαδικού, καθώς ο προγραμματιστής που το υπέγραψε μπορεί ήδη να είναι σχετικός με κακόβουλο λογισμικό.
Η διαδικασία notarization της Apple λειτουργεί ως επιπλέον προστασία για να προστατεύσει τους χρήστες από δυνητικά επιβλαβές λογισμικό. Περιλαμβάνει την υποβολή της εφαρμογής από τον προγραμματιστή για εξέταση από την Υπηρεσία Notary της Apple, η οποία δεν πρέπει να συγχέεται με την Εξέταση Εφαρμογών. Αυτή η υπηρεσία είναι ένα αυτοματοποιημένο σύστημα που εξετάζει το υποβληθέν λογισμικό για την παρουσία κακόβουλου περιεχομένου και τυχόν πιθανών προβλημάτων με την υπογραφή κώδικα.
Εάν το λογισμικό περάσει αυτή την επιθεώρηση χωρίς να εγείρει ανησυχίες, η Υπηρεσία Notary δημιουργεί ένα εισιτήριο notarization. Ο προγραμματιστής είναι υποχρεωμένος να συνδέσει αυτό το εισιτήριο με το λογισμικό του, μια διαδικασία που ονομάζεται 'stapling.' Επιπλέον, το εισιτήριο notarization δημοσιεύεται επίσης online όπου ο Gatekeeper, η τεχνολογία ασφαλείας της Apple, μπορεί να έχει πρόσβαση σε αυτό.
Κατά την πρώτη εγκατάσταση ή εκτέλεση του λογισμικού από τον χρήστη, η ύπαρξη του εισιτηρίου notarization - είτε είναι συνδεδεμένο με το εκτελέσιμο είτε βρίσκεται online - ενημερώνει τον Gatekeeper ότι το λογισμικό έχει υποβληθεί σε notarization από την Apple. Ως αποτέλεσμα, ο Gatekeeper εμφανίζει ένα περιγραφικό μήνυμα στο αρχικό παράθυρο εκκίνησης, υποδεικνύοντας ότι το λογισμικό έχει υποβληθεί σε ελέγχους για κακόβουλο περιεχόμενο από την Apple. Αυτή η διαδικασία ενισχύει την εμπιστοσύνη των χρηστών στην ασφάλεια του λογισμικού που εγκαθιστούν ή εκτελούν στα συστήματά τους.
Σημειώστε ότι από την έκδοση Sequoia, spctl
δεν επιτρέπει πλέον την τροποποίηση της διαμόρφωσης του Gatekeeper.
spctl
είναι το εργαλείο CLI για την καταμέτρηση και αλληλεπίδραση με τον Gatekeeper (με την υπηρεσία syspolicyd
μέσω μηνυμάτων XPC). Για παράδειγμα, είναι δυνατόν να δείτε την κατάσταση του GateKeeper με:
Σημειώστε ότι οι έλεγχοι υπογραφής του GateKeeper εκτελούνται μόνο για αρχεία με το χαρακτηριστικό Καραντίνας, όχι για κάθε αρχείο.
Ο GateKeeper θα ελέγξει αν σύμφωνα με τις προτιμήσεις & την υπογραφή μπορεί να εκτελεστεί ένα δυαδικό αρχείο:
syspolicyd
είναι ο κύριος δαίμονας που είναι υπεύθυνος για την επιβολή του Gatekeeper. Διατηρεί μια βάση δεδομένων που βρίσκεται στο /var/db/SystemPolicy
και είναι δυνατή η εύρεση του κώδικα για την υποστήριξη της βάσης δεδομένων εδώ και του SQL template εδώ. Σημειώστε ότι η βάση δεδομένων δεν περιορίζεται από το SIP και είναι εγ writable από τον root και η βάση δεδομένων /var/db/.SystemPolicy-default
χρησιμοποιείται ως αρχικό αντίγραφο ασφαλείας σε περίπτωση που η άλλη καταστραφεί.
Επιπλέον, τα πακέτα /var/db/gke.bundle
και /var/db/gkopaque.bundle
περιέχουν αρχεία με κανόνες που εισάγονται στη βάση δεδομένων. Μπορείτε να ελέγξετε αυτή τη βάση δεδομένων ως root με:
syspolicyd
εκθέτει επίσης έναν XPC server με διάφορες λειτουργίες όπως assess
, update
, record
και cancel
που είναι επίσης προσβάσιμες χρησιμοποιώντας τα APIs Security.framework
's SecAssessment*
και το xpctl
στην πραγματικότητα επικοινωνεί με το syspolicyd
μέσω XPC.
Σημειώστε πώς ο πρώτος κανόνας τελείωσε σε "App Store" και ο δεύτερος σε "Developer ID" και ότι στην προηγούμενη εικόνα ήταν ενεργοποιημένο να εκτελεί εφαρμογές από το App Store και αναγνωρισμένους προγραμματιστές. Αν τροποποιήσετε αυτή τη ρύθμιση σε App Store, οι κανόνες "Notarized Developer ID" θα εξαφανιστούν.
Υπάρχουν επίσης χιλιάδες κανόνες τύπου GKE :
Αυτοί είναι οι κατακερματισμοί που προέρχονται από:
/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth
/var/db/gke.bundle/Contents/Resources/gk.db
/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db
Ή μπορείτε να παραθέσετε τις προηγούμενες πληροφορίες με:
Οι επιλογές --master-disable
και --global-disable
του spctl
θα απενεργοποιήσουν εντελώς αυτούς τους ελέγχους υπογραφής:
Όταν είναι πλήρως ενεργοποιημένο, μια νέα επιλογή θα εμφανιστεί:
Είναι δυνατόν να ελέγξετε αν μια εφαρμογή θα επιτραπεί από το GateKeeper με:
Είναι δυνατόν να προστεθούν νέοι κανόνες στο GateKeeper για να επιτραπεί η εκτέλεση ορισμένων εφαρμογών με:
Regarding kernel extensions, the folder /var/db/SystemPolicyConfiguration
contains files with lists of kexts allowed to be loaded. Moreover, spctl
has the entitlement com.apple.private.iokit.nvram-csr
because it's capable of adding new pre-approved kernel extensions which need to be saved also in NVRAM in a kext-allowed-teams
key.
Upon downloading an application or file, specific macOS applications such as web browsers or email clients attach an extended file attribute, commonly known as the "quarantine flag," to the downloaded file. This attribute acts as a security measure to mark the file as coming from an untrusted source (the internet), and potentially carrying risks. However, not all applications attach this attribute, for instance, common BitTorrent client software usually bypasses this process.
Η παρουσία μιας σημαίας καραντίνας σηματοδοτεί τη λειτουργία ασφαλείας Gatekeeper του macOS όταν ένας χρήστης προσπαθεί να εκτελέσει το αρχείο.
In the case where the quarantine flag is not present (as with files downloaded via some BitTorrent clients), Gatekeeper's checks may not be performed. Thus, users should exercise caution when opening files downloaded from less secure or unknown sources.
Έλεγχος της έγκυρης υπογραφής κώδικα είναι μια χρονικά απαιτητική διαδικασία που περιλαμβάνει τη δημιουργία κρυπτογραφικών hashes του κώδικα και όλων των πόρων του. Επιπλέον, ο έλεγχος εγκυρότητας πιστοποιητικού περιλαμβάνει τη διαδικτυακή αναζήτηση στους διακομιστές της Apple για να δει αν έχει ανακληθεί μετά την έκδοσή του. Για αυτούς τους λόγους, ένας πλήρης έλεγχος υπογραφής κώδικα και πιστοποίησης είναι μη πρακτικός να εκτελείται κάθε φορά που εκκινείται μια εφαρμογή.
Therefore, these checks are only run when executing apps with the quarantined attribute.
This attribute must be set by the application creating/downloading the file.
However, files that are sandboxed will have this attribute set to every file they create. And non sandboxed apps can set it themselves, or specify the LSFileQuarantineEnabled key in the Info.plist which will make the system set the com.apple.quarantine
extended attribute on the files created,
Moreover, all files created by a process calling qtn_proc_apply_to_self
are quarantined. Or the API qtn_file_apply_to_path
adds the quarantine attribute to a specified file path.
It's possible to check it's status and enable/disable (root required) with:
Μπορείτε επίσης να βρείτε αν ένα αρχείο έχει την επεκτεινόμενη ιδιότητα καραντίνας με:
Ελέγξτε την τιμή των εκτεταμένων χαρακτηριστικών και βρείτε την εφαρμογή που έγραψε το χαρακτηριστικό καραντίνας με:
Στην πραγματικότητα, μια διαδικασία "θα μπορούσε να ορίσει σημαίες καραντίνας στα αρχεία που δημιουργεί" (έχω ήδη προσπαθήσει να εφαρμόσω τη σημαία USER_APPROVED σε ένα δημιουργημένο αρχείο, αλλά δεν θα την εφαρμόσει):
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)