macOS Kernel & System Extensions
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)
Ο πυρήνας του macOS είναι ο XNU, που σημαίνει "X is Not Unix". Αυτός ο πυρήνας αποτελείται θεμελιωδώς από τον Mach microkernel (θα συζητηθεί αργότερα), και στοιχεία από την Berkeley Software Distribution (BSD). Ο XNU παρέχει επίσης μια πλατφόρμα για drivers πυρήνα μέσω ενός συστήματος που ονομάζεται I/O Kit. Ο πυρήνας XNU είναι μέρος του ανοιχτού κώδικα έργου Darwin, που σημαίνει ότι ο πηγαίος κώδικας του είναι ελεύθερα προσβάσιμος.
Από την προοπτική ενός ερευνητή ασφαλείας ή ενός προγραμματιστή Unix, το macOS μπορεί να φαίνεται αρκετά παρόμοιο με ένα σύστημα FreeBSD με μια κομψή GUI και μια σειρά από προσαρμοσμένες εφαρμογές. Οι περισσότερες εφαρμογές που αναπτύσσονται για BSD θα μεταγλωττιστούν και θα εκτελούνται στο macOS χωρίς να χρειάζονται τροποποιήσεις, καθώς τα εργαλεία γραμμής εντολών που είναι οικεία στους χρήστες Unix είναι όλα παρόντα στο macOS. Ωστόσο, επειδή ο πυρήνας XNU ενσωματώνει τον Mach, υπάρχουν κάποιες σημαντικές διαφορές μεταξύ ενός παραδοσιακού συστήματος τύπου Unix και του macOS, και αυτές οι διαφορές μπορεί να προκαλέσουν πιθανά προβλήματα ή να προσφέρουν μοναδικά πλεονεκτήματα.
Ανοιχτός κώδικας έκδοση του XNU: https://opensource.apple.com/source/xnu/
Ο Mach είναι ένας microkernel σχεδιασμένος να είναι συμβατός με UNIX. ΈPrinciple του σχεδιασμού του ήταν να ελαχιστοποιήσει την ποσότητα του κώδικα που εκτελείται στον χώρο πυρήνα και αντ' αυτού να επιτρέπει πολλές τυπικές λειτουργίες του πυρήνα, όπως το σύστημα αρχείων, το δίκτυο και το I/O, να εκτελούνται ως εργασίες επιπέδου χρήστη.
Στον XNU, ο Mach είναι υπεύθυνος για πολλές από τις κρίσιμες χαμηλού επιπέδου λειτουργίες που συνήθως χειρίζεται ένας πυρήνας, όπως ο προγραμματισμός επεξεργαστή, η πολυδιεργασία και η διαχείριση εικονικής μνήμης.
Ο πυρήνας XNU ενσωματώνει επίσης μια σημαντική ποσότητα κώδικα που προέρχεται από το έργο FreeBSD. Αυτός ο κώδικας εκτελείται ως μέρος του πυρήνα μαζί με τον Mach, στον ίδιο χώρο διευθύνσεων. Ωστόσο, ο κώδικας FreeBSD μέσα στον XNU μπορεί να διαφέρει σημαντικά από τον αρχικό κώδικα FreeBSD επειδή απαιτούνταν τροποποιήσεις για να διασφαλιστεί η συμβατότητά του με τον Mach. Το FreeBSD συμβάλλει σε πολλές λειτουργίες του πυρήνα, συμπεριλαμβανομένων:
Διαχείριση διεργασιών
Διαχείριση σημάτων
Βασικοί μηχανισμοί ασφαλείας, συμπεριλαμβανομένης της διαχείρισης χρηστών και ομάδων
Υποδομή κλήσεων συστήματος
Στοίβα TCP/IP και sockets
Firewall και φιλτράρισμα πακέτων
Η κατανόηση της αλληλεπίδρασης μεταξύ BSD και Mach μπορεί να είναι περίπλοκη, λόγω των διαφορετικών εννοιολογικών πλαισίων τους. Για παράδειγμα, το BSD χρησιμοποιεί διεργασίες ως τη θεμελιώδη μονάδα εκτέλεσης του, ενώ ο Mach λειτουργεί με βάση τα νήματα. Αυτή η διαφορά συμφιλιώνεται στον XNU με την συσχέτιση κάθε διεργασίας BSD με μια εργασία Mach που περιέχει ακριβώς ένα νήμα Mach. Όταν χρησιμοποιείται η κλήση συστήματος fork() του BSD, ο κώδικας BSD μέσα στον πυρήνα χρησιμοποιεί τις λειτουργίες Mach για να δημιουργήσει μια εργασία και μια δομή νήματος.
Επιπλέον, ο Mach και το BSD διατηρούν διαφορετικά μοντέλα ασφαλείας: το μοντέλο ασφαλείας του Mach βασίζεται στα δικαιώματα θυρών, ενώ το μοντέλο ασφαλείας του BSD λειτουργεί με βάση την ιδιοκτησία διεργασιών. Οι διαφορές μεταξύ αυτών των δύο μοντέλων έχουν κατά καιρούς οδηγήσει σε τοπικές ευπάθειες ανύψωσης προνομίων. Εκτός από τις τυπικές κλήσεις συστήματος, υπάρχουν επίσης παγίδες Mach που επιτρέπουν στα προγράμματα χώρου χρήστη να αλληλεπιδρούν με τον πυρήνα. Αυτά τα διαφορετικά στοιχεία μαζί σχηματίζουν την πολύπλευρη, υβριδική αρχιτεκτονική του πυρήνα macOS.
Το I/O Kit είναι ένα ανοιχτού κώδικα, αντικειμενοστραφές πλαίσιο οδηγών συσκευών στον πυρήνα XNU, που χειρίζεται δυναμικά φορτωμένους οδηγούς συσκευών. Επιτρέπει την προσθήκη αρθρωτού κώδικα στον πυρήνα εν κινήσει, υποστηρίζοντας ποικιλία υλικού.
macOS IOKitΤο macOS είναι πολύ περιοριστικό για τη φόρτωση επεκτάσεων πυρήνα (.kext) λόγω των υψηλών προνομίων με τα οποία θα εκτελείται ο κώδικας. Στην πραγματικότητα, από προεπιλογή είναι σχεδόν αδύνατο (εκτός αν βρεθεί μια παράκαμψη).
Στην επόμενη σελίδα μπορείτε επίσης να δείτε πώς να ανακτήσετε το .kext
που φορτώνει το macOS μέσα στο kernelcache:
Αντί να χρησιμοποιεί επεκτάσεις πυρήνα, το macOS δημιούργησε τις επεκτάσεις συστήματος, οι οποίες προσφέρουν APIs επιπέδου χρήστη για αλληλεπίδραση με τον πυρήνα. Με αυτόν τον τρόπο, οι προγραμματιστές μπορούν να αποφύγουν τη χρήση επεκτάσεων πυρήνα.
macOS System ExtensionsLearn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)