macOS SIP
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)
Η Προστασία Ακεραιότητας Συστήματος (SIP) στο macOS είναι ένας μηχανισμός σχεδιασμένος να αποτρέπει ακόμη και τους πιο προνομιούχους χρήστες από το να κάνουν μη εξουσιοδοτημένες αλλαγές σε βασικούς φακέλους του συστήματος. Αυτή η δυνατότητα παίζει κρίσιμο ρόλο στη διατήρηση της ακεραιότητας του συστήματος περιορίζοντας ενέργειες όπως η προσθήκη, η τροποποίηση ή η διαγραφή αρχείων σε προστατευμένες περιοχές. Οι κύριοι φάκελοι που προστατεύονται από το SIP περιλαμβάνουν:
/System
/bin
/sbin
/usr
Οι κανόνες που διέπουν τη συμπεριφορά του SIP ορίζονται στο αρχείο ρύθμισης που βρίσκεται στο /System/Library/Sandbox/rootless.conf
. Μέσα σε αυτό το αρχείο, οι διαδρομές που προηγούνται από ένα αστερίσκο (*) αναφέρονται ως εξαιρέσεις στους αυστηρούς περιορισμούς του SIP.
Σκεφτείτε το παρακάτω παράδειγμα:
Αυτό το απόσπασμα υποδηλώνει ότι ενώ το SIP γενικά ασφαλίζει τον /usr
κατάλογο, υπάρχουν συγκεκριμένοι υποκατάλογοι (/usr/libexec/cups
, /usr/local
, και /usr/share/man
) όπου οι τροποποιήσεις είναι επιτρεπτές, όπως υποδεικνύεται από το αστερίσκο (*) που προηγείται των διαδρομών τους.
Για να επαληθεύσετε εάν ένας κατάλογος ή αρχείο είναι προστατευμένο από το SIP, μπορείτε να χρησιμοποιήσετε την εντολή ls -lOd
για να ελέγξετε την παρουσία της σημαίας restricted
ή sunlnk
. Για παράδειγμα:
Σε αυτή την περίπτωση, η σημαία sunlnk
υποδηλώνει ότι ο φάκελος /usr/libexec/cups
δεν μπορεί να διαγραφεί, αν και τα αρχεία μέσα σε αυτόν μπορούν να δημιουργηθούν, να τροποποιηθούν ή να διαγραφούν.
Από την άλλη πλευρά:
Εδώ, η restricted
σημαία υποδεικνύει ότι ο φάκελος /usr/libexec
είναι προστατευμένος από το SIP. Σε έναν φάκελο που προστατεύεται από το SIP, δεν μπορούν να δημιουργηθούν, να τροποποιηθούν ή να διαγραφούν αρχεία.
Επιπλέον, αν ένα αρχείο περιέχει το χαρακτηριστικό com.apple.rootless
εκτεταμένο χαρακτηριστικό, αυτό το αρχείο θα είναι επίσης προστατευμένο από το SIP.
Σημειώστε ότι το Sandbox hook hook_vnode_check_setextattr
αποτρέπει οποιαδήποτε προσπάθεια τροποποίησης του εκτεταμένου χαρακτηριστικού com.apple.rootless
.
Το SIP περιορίζει επίσης άλλες ενέργειες root όπως:
Φόρτωση μη αξιόπιστων επεκτάσεων πυρήνα
Λήψη task-ports για διαδικασίες υπογεγραμμένες από την Apple
Τροποποίηση μεταβλητών NVRAM
Επιτρέποντας την αποσφαλμάτωση πυρήνα
Οι επιλογές διατηρούνται στη μεταβλητή nvram ως bitflag (csr-active-config
σε Intel και lp-sip0
διαβάζεται από το εκκινηθέν Device Tree για ARM). Μπορείτε να βρείτε τις σημαίες στον πηγαίο κώδικα XNU στο csr.sh
:
Μπορείτε να ελέγξετε αν το SIP είναι ενεργοποιημένο στο σύστημά σας με την παρακάτω εντολή:
Αν χρειάζεται να απενεργοποιήσετε το SIP, πρέπει να επανεκκινήσετε τον υπολογιστή σας σε λειτουργία ανάκτησης (πατώντας Command+R κατά την εκκίνηση), στη συνέχεια εκτελέστε την παρακάτω εντολή:
Αν επιθυμείτε να διατηρήσετε το SIP ενεργοποιημένο αλλά να αφαιρέσετε τις προστασίες αποσφαλμάτωσης, μπορείτε να το κάνετε με:
Απαγορεύει τη φόρτωση μη υπογεγραμμένων επεκτάσεων πυρήνα (kexts), διασφαλίζοντας ότι μόνο οι επαληθευμένες επεκτάσεις αλληλεπιδρούν με τον πυρήνα του συστήματος.
Αποτρέπει την αποσφαλμάτωση των διαδικασιών του συστήματος macOS, προστατεύοντας τα βασικά συστατικά του συστήματος από μη εξουσιοδοτημένη πρόσβαση και τροποποίηση.
Αναστέλλει εργαλεία όπως το dtrace από την επιθεώρηση διαδικασιών του συστήματος, προστατεύοντας περαιτέρω την ακεραιότητα της λειτουργίας του συστήματος.
Μάθετε περισσότερα για τις πληροφορίες SIP σε αυτή την ομιλία.
com.apple.rootless.xpc.bootstrap
: Έλεγχος launchd
com.apple.rootless.install[.heritable]
: Πρόσβαση στο σύστημα αρχείων
com.apple.rootless.kext-management
: kext_request
com.apple.rootless.datavault.controller
: Διαχείριση UF_DATAVAULT
com.apple.rootless.xpc.bootstrap
: Δυνατότητες ρύθμισης XPC
com.apple.rootless.xpc.effective-root
: Root μέσω launchd XPC
com.apple.rootless.restricted-block-devices
: Πρόσβαση σε ακατέργαστες συσκευές μπλοκ
com.apple.rootless.internal.installer-equivalent
: Απεριόριστη πρόσβαση στο σύστημα αρχείων
com.apple.rootless.restricted-nvram-variables[.heritable]
: Πλήρης πρόσβαση σε NVRAM
com.apple.rootless.storage.label
: Τροποποίηση αρχείων που περιορίζονται από το com.apple.rootless xattr με την αντίστοιχη ετικέτα
com.apple.rootless.volume.VM.label
: Διατήρηση VM swap στον τόμο
Η παράκαμψη του SIP επιτρέπει σε έναν επιτιθέμενο να:
Πρόσβαση σε Δεδομένα Χρήστη: Διαβάστε ευαίσθητα δεδομένα χρήστη όπως αλληλογραφία, μηνύματα και ιστορικό Safari από όλους τους λογαριασμούς χρηστών.
Παράκαμψη TCC: Άμεση χειραγώγηση της βάσης δεδομένων TCC (Διαφάνεια, Συναίνεση και Έλεγχος) για να παραχωρήσετε μη εξουσιοδοτημένη πρόσβαση στην κάμερα, το μικρόφωνο και άλλους πόρους.
Καθιερώστε Επιμονή: Τοποθετήστε κακόβουλο λογισμικό σε τοποθεσίες προστατευμένες από SIP, καθιστώντας το ανθεκτικό στην αφαίρεση, ακόμη και από δικαιώματα root. Αυτό περιλαμβάνει επίσης την πιθανότητα να παραποιήσετε το Εργαλείο Αφαίρεσης Κακόβουλου Λογισμικού (MRT).
Φόρτωση Επεκτάσεων Πυρήνα: Αν και υπάρχουν επιπλέον προστασίες, η παράκαμψη του SIP απλοποιεί τη διαδικασία φόρτωσης μη υπογεγραμμένων επεκτάσεων πυρήνα.
Τα πακέτα εγκατάστασης που υπογράφονται με το πιστοποιητικό της Apple μπορούν να παρακάμψουν τις προστασίες της. Αυτό σημαίνει ότι ακόμη και τα πακέτα που υπογράφονται από τυπικούς προγραμματιστές θα αποκλειστούν αν προσπαθήσουν να τροποποιήσουν καταλόγους που προστατεύονται από SIP.
Ένα πιθανό παραθυράκι είναι ότι αν ένα αρχείο καθοριστεί στο rootless.conf
αλλά δεν υπάρχει αυτή τη στιγμή, μπορεί να δημιουργηθεί. Το κακόβουλο λογισμικό θα μπορούσε να εκμεταλλευτεί αυτό για να καθιερώσει επιμονή στο σύστημα. Για παράδειγμα, ένα κακόβουλο πρόγραμμα θα μπορούσε να δημιουργήσει ένα αρχείο .plist στο /System/Library/LaunchDaemons
αν είναι καταχωρημένο στο rootless.conf
αλλά δεν είναι παρόν.
Η εξουσιοδότηση com.apple.rootless.install.heritable
επιτρέπει την παράκαμψη του SIP
Ανακαλύφθηκε ότι ήταν δυνατό να ανταλλάξετε το πακέτο εγκατάστασης αφού το σύστημα επιβεβαίωσε την υπογραφή του κώδικα και στη συνέχεια, το σύστημα θα εγκαθιστούσε το κακόβουλο πακέτο αντί για το αρχικό. Καθώς αυτές οι ενέργειες εκτελούνταν από system_installd
, θα επέτρεπε την παράκαμψη του SIP.
Αν ένα πακέτο εγκαταστάθηκε από μια προσαρτημένη εικόνα ή εξωτερικό δίσκο, ο εγκαταστάτης θα εκτελούσε το δυαδικό αρχείο από αυτό το σύστημα αρχείων (αντί από μια τοποθεσία προστατευμένη από SIP), κάνοντάς το system_installd
να εκτελεί ένα αυθαίρετο δυαδικό.
Ερευνητές από αυτή την ανάρτηση blog ανακάλυψαν μια ευπάθεια στον μηχανισμό Προστασίας Ακεραιότητας Συστήματος (SIP) του macOS, που ονομάζεται 'Shrootless'. Αυτή η ευπάθεια επικεντρώνεται στον δαίμονα system_installd
, ο οποίος έχει μια εξουσιοδότηση, com.apple.rootless.install.heritable
, που επιτρέπει σε οποιαδήποτε από τις διαδικασίες παιδιών του να παρακάμψει τους περιορισμούς του συστήματος αρχείων SIP.
Ο δαίμονας system_installd
θα εγκαταστήσει πακέτα που έχουν υπογραφεί από Apple.
Οι ερευνητές διαπίστωσαν ότι κατά την εγκατάσταση ενός πακέτου υπογεγραμμένου από την Apple (.pkg αρχείο), ο system_installd
εκτελεί οποιαδήποτε σενάρια μετά την εγκατάσταση που περιλαμβάνονται στο πακέτο. Αυτά τα σενάρια εκτελούνται από το προεπιλεγμένο κέλυφος, zsh
, το οποίο αυτόματα εκτελεί εντολές από το /etc/zshenv
αρχείο, αν υπάρχει, ακόμη και σε μη διαδραστική λειτουργία. Αυτή η συμπεριφορά θα μπορούσε να εκμεταλλευτεί από επιτιθέμενους: δημιουργώντας ένα κακόβουλο αρχείο /etc/zshenv
και περιμένοντας να καλέσει το system_installd
το zsh
, θα μπορούσαν να εκτελέσουν αυθαίρετες ενέργειες στη συσκευή.
Επιπλέον, ανακαλύφθηκε ότι το /etc/zshenv
θα μπορούσε να χρησιμοποιηθεί ως γενική τεχνική επίθεσης, όχι μόνο για μια παράκαμψη SIP. Κάθε προφίλ χρήστη έχει ένα αρχείο ~/.zshenv
, το οποίο συμπεριφέρεται με τον ίδιο τρόπο όπως το /etc/zshenv
αλλά δεν απαιτεί δικαιώματα root. Αυτό το αρχείο θα μπορούσε να χρησιμοποιηθεί ως μηχανισμός επιμονής, ενεργοποιούμενο κάθε φορά που ξεκινά το zsh
, ή ως μηχανισμός ανύψωσης προνομίων. Αν ένας χρήστης διαχειριστής ανυψωθεί σε root χρησιμοποιώντας sudo -s
ή sudo <εντολή>
, το αρχείο ~/.zshenv
θα ενεργοποιηθεί, ανυψώνοντας αποτελεσματικά σε root.
Στο CVE-2022-22583 ανακαλύφθηκε ότι η ίδια διαδικασία system_installd
θα μπορούσε να καταχραστεί επειδή τοποθετούσε το σενάριο μετά την εγκατάσταση σε έναν τυχαία ονομασμένο φάκελο που προστατεύεται από SIP μέσα στο /tmp
. Το θέμα είναι ότι το /tmp
από μόνο του δεν προστατεύεται από SIP, οπότε ήταν δυνατό να προσαρτηθεί μια εικονική εικόνα σε αυτό, στη συνέχεια ο εγκαταστάτης θα τοποθετούσε εκεί το σενάριο μετά την εγκατάσταση, αποσύνδεε την εικονική εικόνα, αναδημιουργούσε όλους τους φακέλους και πρόσθετε το σενάριο μετά την εγκατάσταση με το payload για εκτέλεση.
Μια ευπάθεια εντοπίστηκε όπου το fsck_cs
παραπλανήθηκε να διαφθείρει ένα κρίσιμο αρχείο, λόγω της ικανότητάς του να ακολουθεί συμβολικούς συνδέσμους. Συγκεκριμένα, οι επιτιθέμενοι δημιούργησαν έναν σύνδεσμο από /dev/diskX
στο αρχείο /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist
. Η εκτέλεση του fsck_cs
στο /dev/diskX
οδήγησε στη διαφθορά του Info.plist
. Η ακεραιότητα αυτού του αρχείου είναι ζωτικής σημασίας για την SIP (Προστασία Ακεραιότητας Συστήματος) του λειτουργικού συστήματος, η οποία ελέγχει τη φόρτωση επεκτάσεων πυρήνα. Μόλις διαφθαρεί, η ικανότητα του SIP να διαχειρίζεται τις εξαιρέσεις πυρήνα διακυβεύεται.
Οι εντολές για την εκμετάλλευση αυτής της ευπάθειας είναι:
Η εκμετάλλευση αυτής της ευπάθειας έχει σοβαρές επιπτώσεις. Το αρχείο Info.plist
, το οποίο είναι κανονικά υπεύθυνο για τη διαχείριση των δικαιωμάτων για τις επεκτάσεις πυρήνα, καθίσταται αναποτελεσματικό. Αυτό περιλαμβάνει την αδυναμία να αποκλειστούν ορισμένες επεκτάσεις, όπως η AppleHWAccess.kext
. Ως εκ τούτου, με τον μηχανισμό ελέγχου του SIP εκτός λειτουργίας, αυτή η επέκταση μπορεί να φορτωθεί, παρέχοντας μη εξουσιοδοτημένη πρόσβαση ανάγνωσης και εγγραφής στη μνήμη RAM του συστήματος.
Ήταν δυνατό να τοποθετηθεί ένα νέο σύστημα αρχείων πάνω από SIP protected folders για να παρακαμφθεί η προστασία.
Το σύστημα είναι ρυθμισμένο να εκκινεί από μια ενσωματωμένη εικόνα δίσκου εγκατάστασης μέσα στο Install macOS Sierra.app
για να αναβαθμίσει το λειτουργικό σύστημα, χρησιμοποιώντας το εργαλείο bless
. Η εντολή που χρησιμοποιείται είναι η εξής:
Η ασφάλεια αυτής της διαδικασίας μπορεί να παραβιαστεί αν ένας επιτιθέμενος τροποποιήσει την εικόνα αναβάθμισης (InstallESD.dmg
) πριν από την εκκίνηση. Η στρατηγική περιλαμβάνει την αντικατάσταση ενός δυναμικού φορτωτή (dyld) με μια κακόβουλη έκδοση (libBaseIA.dylib
). Αυτή η αντικατάσταση έχει ως αποτέλεσμα την εκτέλεση του κώδικα του επιτιθέμενου όταν ξεκινά ο εγκαταστάτης.
Ο κώδικας του επιτιθέμενου αποκτά έλεγχο κατά τη διάρκεια της διαδικασίας αναβάθμισης, εκμεταλλευόμενος την εμπιστοσύνη του συστήματος στον εγκαταστάτη. Η επίθεση προχωρά με την τροποποίηση της εικόνας InstallESD.dmg
μέσω της μεθόδου swizzling, στοχεύοντας ιδιαίτερα τη μέθοδο extractBootBits
. Αυτό επιτρέπει την ένεση κακόβουλου κώδικα πριν χρησιμοποιηθεί η εικόνα δίσκου.
Επιπλέον, μέσα στο InstallESD.dmg
, υπάρχει ένα BaseSystem.dmg
, το οποίο χρησιμεύει ως το ριζικό σύστημα αρχείων του κώδικα αναβάθμισης. Η ένεση μιας δυναμικής βιβλιοθήκης σε αυτό επιτρέπει στον κακόβουλο κώδικα να λειτουργεί μέσα σε μια διαδικασία ικανή να τροποποιεί αρχεία επιπέδου OS, αυξάνοντας σημαντικά την πιθανότητα παραβίασης του συστήματος.
Σε αυτή την ομιλία από DEF CON 31, δείχνεται πώς το systemmigrationd
(το οποίο μπορεί να παρακάμψει το SIP) εκτελεί ένα bash και ένα perl script, τα οποία μπορούν να καταχραστούν μέσω των μεταβλητών περιβάλλοντος BASH_ENV
και PERL5OPT
.
Όπως αναφέρεται σε αυτή την ανάρτηση blog, ένα script postinstall
από τα πακέτα InstallAssistant.pkg
επέτρεπε την εκτέλεση:
και ήταν δυνατό να δημιουργηθεί ένα symlink στο ${SHARED_SUPPORT_PATH}/SharedSupport.dmg
που θα επέτρεπε σε έναν χρήστη να παρακάμψει οποιοδήποτε αρχείο, παρακάμπτοντας την προστασία SIP.
Η άδεια com.apple.rootless.install
επιτρέπει την παράκαμψη του SIP
Η άδεια com.apple.rootless.install
είναι γνωστό ότι παρακάμπτει την Προστασία Ακεραιότητας Συστήματος (SIP) στο macOS. Αυτό αναφέρθηκε ιδιαίτερα σε σχέση με CVE-2022-26712.
Σε αυτήν την συγκεκριμένη περίπτωση, η υπηρεσία XPC του συστήματος που βρίσκεται στο /System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc
διαθέτει αυτήν την άδεια. Αυτό επιτρέπει στη σχετική διαδικασία να παρακάμψει τους περιορισμούς του SIP. Επιπλέον, αυτή η υπηρεσία παρουσιάζει μια μέθοδο που επιτρέπει τη μετακίνηση αρχείων χωρίς να επιβάλλει οποιαδήποτε μέτρα ασφαλείας.
Τα Σφραγισμένα Στιγμιότυπα Συστήματος είναι μια δυνατότητα που εισήγαγε η Apple στο macOS Big Sur (macOS 11) ως μέρος του μηχανισμού Προστασίας Ακεραιότητας Συστήματος (SIP) για να παρέχει μια επιπλέον στρώση ασφάλειας και σταθερότητας του συστήματος. Είναι ουσιαστικά εκδόσεις μόνο για ανάγνωση του όγκου του συστήματος.
Ακολουθεί μια πιο λεπτομερής ματιά:
Αμετάβλητο Σύστημα: Τα Σφραγισμένα Στιγμιότυπα Συστήματος καθιστούν τον όγκο του macOS "αμετάβλητο", πράγμα που σημαίνει ότι δεν μπορεί να τροποποιηθεί. Αυτό αποτρέπει οποιεσδήποτε μη εξουσιοδοτημένες ή τυχαίες αλλαγές στο σύστημα που θα μπορούσαν να θέσουν σε κίνδυνο την ασφάλεια ή τη σταθερότητα του συστήματος.
Ενημερώσεις Λογισμικού Συστήματος: Όταν εγκαθιστάτε ενημερώσεις ή αναβαθμίσεις macOS, το macOS δημιουργεί ένα νέο στιγμιότυπο συστήματος. Ο όγκος εκκίνησης του macOS χρησιμοποιεί στη συνέχεια το APFS (Apple File System) για να μεταβεί σε αυτό το νέο στιγμιότυπο. Ολόκληρη η διαδικασία εφαρμογής ενημερώσεων γίνεται πιο ασφαλής και αξιόπιστη καθώς το σύστημα μπορεί πάντα να επιστρέψει στο προηγούμενο στιγμιότυπο αν κάτι πάει στραβά κατά τη διάρκεια της ενημέρωσης.
Διαχωρισμός Δεδομένων: Σε συνδυασμό με την έννοια του διαχωρισμού Δεδομένων και Όγκου Συστήματος που εισήχθη στο macOS Catalina, η δυνατότητα Σφραγισμένου Στιγμιότυπου Συστήματος διασφαλίζει ότι όλα τα δεδομένα και οι ρυθμίσεις σας αποθηκεύονται σε έναν ξεχωριστό όγκο "Δεδομένα". Αυτός ο διαχωρισμός καθιστά τα δεδομένα σας ανεξάρτητα από το σύστημα, απλοποιώντας τη διαδικασία ενημερώσεων του συστήματος και ενισχύοντας την ασφάλεια του συστήματος.
Θυμηθείτε ότι αυτά τα στιγμιότυπα διαχειρίζονται αυτόματα από το macOS και δεν καταλαμβάνουν επιπλέον χώρο στον δίσκο σας, χάρη στις δυνατότητες κοινής χρήσης χώρου του APFS. Είναι επίσης σημαντικό να σημειωθεί ότι αυτά τα στιγμιότυπα διαφέρουν από τα στιγμιότυπα Time Machine, τα οποία είναι αντίγραφα ασφαλείας προσβάσιμα από τον χρήστη του ολόκληρου του συστήματος.
Η εντολή diskutil apfs list
παραθέτει τις λεπτομέρειες των όγκων APFS και τη διάταξή τους:
Στην προηγούμενη έξοδο είναι δυνατό να δείτε ότι οι θέσεις προσβάσιμες από τον χρήστη είναι συνδεδεμένες κάτω από το /System/Volumes/Data
.
Επιπλέον, το στιγμιότυπο όγκου συστήματος macOS είναι συνδεδεμένο στο /
και είναι σφραγισμένο (κρυπτογραφικά υπογεγραμμένο από το OS). Έτσι, αν παρακαμφθεί το SIP και τροποποιηθεί, το OS δεν θα εκκινήσει πλέον.
Είναι επίσης δυνατό να επιβεβαιωθεί ότι η σφράγιση είναι ενεργοποιημένη εκτελώντας:
Επιπλέον, ο δίσκος στιγμιότυπου είναι επίσης προσαρτημένος ως μόνο για ανάγνωση:
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)