macOS Kernel Extensions

Μάθετε AWS χάκινγκ από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)!

Βασικές Πληροφορίες

Οι επεκτάσεις πυρήνα (Kexts) είναι πακέτα με επέκταση .kext που φορτώνονται απευθείας στον χώρο πυρήνα του macOS, παρέχοντας επιπλέον λειτουργικότητα στον κύριο λειτουργικό σύστημα.

Απαιτήσεις

Φυσικά, αυτό είναι τόσο ισχυρό που είναι περίπλοκο να φορτωθεί μια επέκταση πυρήνα. Αυτές είναι οι απαιτήσεις που πρέπει να πληροί μια επέκταση πυρήνα για να φορτωθεί:

  • Κατά την είσοδο σε λειτουργία ανάκαμψης, οι επεκτάσεις πυρήνα πρέπει να επιτρέπεται να φορτωθούν:

  • Η επέκταση πυρήνα πρέπει να είναι υπογεγραμμένη με πιστοποιητικό υπογραφής κώδικα πυρήνα, το οποίο μπορεί να χορηγηθεί μόνο από την Apple. Ποιος θα εξετάσει λεπτομερώς την εταιρεία και τους λόγους για τους οποίους απαιτείται.

  • Η επέκταση πυρήνα πρέπει επίσης να είναι επικυρωμένη, ώστε η Apple να μπορεί να την ελέγξει για κακόβουλο λογισμικό.

  • Στη συνέχεια, ο χρήστης root είναι αυτός που μπορεί να φορτώσει την επέκταση πυρήνα και τα αρχεία μέσα στο πακέτο πρέπει να ανήκουν στο root.

  • Κατά τη διαδικασία φόρτωσης, το πακέτο πρέπει να προετοιμαστεί σε μια προστατευμένη μη-ριζική τοποθεσία: /Library/StagedExtensions (απαιτεί τη χορήγηση com.apple.rootless.storage.KernelExtensionManagement).

  • Τέλος, κατά την προσπάθεια φόρτωσής της, ο χρήστης θα λάβει αίτημα επιβεβαίωσης και, εάν γίνει αποδεκτό, ο υπολογιστής πρέπει να επανεκκινηθεί για να τη φορτώσει.

Διαδικασία Φόρτωσης

Στο Catalina ήταν ως εξής: Είναι ενδιαφέρον να σημειωθεί ότι η διαδικασία επαλήθευσης συμβαίνει στο userland. Ωστόσο, μόνο εφαρμογές με τη χορήγηση com.apple.private.security.kext-management μπορούν να ζητήσουν από τον πυρήνα να φορτώσει μια επέκταση: kextcache, kextload, kextutil, kextd, syspolicyd

  1. Το kextutil cli ξεκινά τη διαδικασία επαλήθευσης για τη φόρτωση μιας επέκτασης

  • Θα επικοινωνήσει με το kextd στέλνοντας χρησιμοποιώντας ένα Mach service.

  1. Το kextd θα ελέγξει διάφορα πράγματα, όπως η υπογραφή

  • Θα επικοινωνήσει με το syspolicyd για να ελέγξει αν η επέκταση μπορεί να φορτωθεί.

  1. Το syspolicyd θα ζητήσει το αίτημα επιβεβαίωσης από τον χρήστη αν η επέκταση δεν έχει φορτωθεί προηγουμένως.

  • Το syspolicyd θα αναφέρει το αποτέλεσμα στο kextd

  1. Το kextd θα μπορεί εν τέλει να πει στον πυρήνα να φορτώσει την επέκταση

Αν το kextd δεν είναι διαθέσιμο, το kextutil μπορεί να πραγματοποιήσει τις ίδιες ελέγχους.

Αναφορές

Μάθετε AWS χάκινγκ από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)!

Last updated