# macOS MDM {% hint style="success" %} Μάθετε & εξασκηθείτε στο AWS Hacking:[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Μάθετε & εξασκηθείτε στο GCP Hacking: [**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Υποστηρίξτε το HackTricks * Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)! * **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
{% endhint %} **Για να μάθετε για τα macOS MDMs ελέγξτε:** * [https://www.youtube.com/watch?v=ku8jZe-MHUU](https://www.youtube.com/watch?v=ku8jZe-MHUU) * [https://duo.com/labs/research/mdm-me-maybe](https://duo.com/labs/research/mdm-me-maybe) ## Βασικά ### **Επισκόπηση MDM (Mobile Device Management)** Το [Mobile Device Management](https://en.wikipedia.org/wiki/Mobile\_device\_management) (MDM) χρησιμοποιείται για τη διαχείριση διαφόρων συσκευών τελικών χρηστών όπως smartphones, laptops και tablets. Ειδικά για τις πλατφόρμες της Apple (iOS, macOS, tvOS), περιλαμβάνει ένα σύνολο εξειδικευμένων χαρακτηριστικών, APIs και πρακτικές. Η λειτουργία του MDM εξαρτάται από ένα συμβατό MDM server, το οποίο είναι είτε εμπορικά διαθέσιμο είτε ανοικτού κώδικα, και πρέπει να υποστηρίζει το [MDM Protocol](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Τα κύρια σημεία περιλαμβάνουν: * Κεντρικός έλεγχος των συσκευών. * Εξάρτηση από ένα MDM server που συμμορφώνεται με το πρωτόκολλο MDM. * Δυνατότητα του MDM server να αποστέλλει διάφορες εντολές στις συσκευές, για παράδειγμα απομάκρυνση δεδομένων ή εγκατάσταση ρυθμίσεων. ### **Βασικά του DEP (Device Enrollment Program)** Το [Device Enrollment Program](https://www.apple.com/business/site/docs/DEP\_Guide.pdf) (DEP) που προσφέρει η Apple διευκολύνει την ενσωμάτωση του Mobile Device Management (MDM) με τη διευκόλυνση της αυτόματης διαμόρφωσης για συσκευές iOS, macOS και tvOS. Το DEP αυτοματοποιεί τη διαδικασία εγγραφής, επιτρέποντας στις συσκευές να είναι λειτουργικές αμέσως μετά τον αποσυσκευασμό, με ελάχιστη παρέμβαση χρήστη ή διαχειριστή. Τα βασικά στοιχεία περιλαμβάνουν: * Επιτρέπει στις συσκευές να εγγράφονται αυτόνομα σε έναν προκαθορισμένο MDM server κατά την αρχική ενεργοποίηση. * Χρήσιμο κυρίως για ολοκαίνουριες συσκευές, αλλά εφαρμόσιμο και για συσκευές που υποβάλλονται σε αναδιαμόρφωση. * Διευκολύνει μια απλή εγκατάσταση, καθιστώντας τις συσκευές έτοιμες για οργανωτική χρήση γρήγορα. ### **Σκέψεις ασφαλείας** Είναι κρίσιμο να σημειωθεί ότι η ευκολία εγγραφής που παρέχει το DEP, ενώ είναι χρήσιμη, μπορεί επίσης να δημιουργήσει κινδύνους ασφαλείας. Αν δεν επιβάλλονται επαρκείς προστατευτικές μέτρησεις για την εγγραφή στο MDM, οι επιτιθέμενοι ενδέχεται να εκμεταλλευτούν αυτήν την απλοποιημένη διαδικασία για να εγγράψουν τη συσκευή τους στο MDM server του οργανισμού, παριστάνοντας μια εταιρική συσκευή. {% hint style="danger" %} **Ειδοποίηση Ασφαλείας**: Η απλοποιημένη εγγραφή στο DEP θα μπορούσε πιθανόν να επιτρέψει τη μη εξουσιοδοτημένη εγγραφή συσκευών στο MDM server του οργανισμού εάν δεν υπάρχουν κατάλληλα μέτρα προστασίας. {% endhint %} ### Τι είναι το SCEP (Simple Certificate Enrolment Protocol); * Ένα σχετικά παλιό πρωτόκολλο, δημιουργημένο πριν από την ευρεία χρήση του TLS και του HTTPS. * Δίνει στους πελάτες ένα τυποποιημένο τρόπο αποστολής ενός **Certificate Signing Request** (CSR) με σκοπό τη χορήγηση πιστοποιητικού. Ο πελάτης θα ζητήσει από τον διακομιστή να του δώσει ένα υπογεγραμμένο πιστοποιητικό. ### Τι είναι τα Configuration Profiles (επίσης γνωστά ως mobileconfigs); * Η επίσημη της Apple μέθοδος **ορισμού/επιβολής των ρυθμίσεων του συστήματος.** * Μορφή αρχείου που μπορεί να περιέχει πολλαπλά φορτία. * Βασίζεται σε λίστες ιδιοτήτων (του είδους XML). * "μπορεί να υπογραφεί και να κρυπτογραφηθεί για την επικύρωση της προέλευσής τους, τη διασφάλιση της ακεραιότητάς τους και την προστασία του περιεχομένου τους." Βασικά — Σελίδα 70, Οδηγός Ασφαλείας iOS, Ιανουάριος 2018. ## Πρωτόκολλα ### MDM * Συνδυασμός των APNs (**Apple διακομιστές**) + RESTful API (**MDM διακομιστές προμηθευτών**) * Η **επικοινωνία** πραγματοποιείται μεταξύ μιας **συσκευής** και ενός διακομιστή που σχετίζεται με ένα προϊόν διαχείρισης συσκευών * Οι **εντολές** παραδίδονται από το MDM στη συσκευή σε **λεξικά κωδικοποιημένα σε plist** * Όλα μέσω **HTTPS**. Οι MDM διακομιστές μπορούν να είναι (και συνήθως είναι) πιναρισμένοι. * Η Apple χορηγεί στον προμηθευτή MDM ένα **πιστοποιητικό APNs** για πιστοποίηση ### DEP * **3 APIs**: 1 για αντιπροσώπους, 1 για προμηθευτές MDM, 1 για ταυτότητα συσκευών (μη τεκμηριωμένο): * Το ονομαζόμενο [DEP "cloud service" API](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Χρησιμοποιείται από τους MDM διακομιστές για τη συσχέτιση των προφίλ DEP με συγκεκριμένες συσκευές. * Το [API DEP που χρησιμοποιείται από τους Εξουσιοδοτημένους Αντιπροσώπους της Apple](https://applecareconnect.apple.com/api-docs/depuat/html/WSImpManual.html) για την εγγραφή συσκευών, τον έλεγχο της κατάστασης εγγραφής και την έλεγχο της κατάστασης συναλλαγής. * Το μη τεκμηριωμένο ιδιωτικό API DEP. Χρησιμοποιείται από τις Συσκευές Apple για να ζητήσουν το προφίλ DEP τους. Στο macOS, το δυαδικό `cloudconfigurationd` είναι υπεύθυνο για την επικοινωνία μέσω αυτού του API. * Πιο σύγχρονο και βασισμένο σε **JSON** (έναντι του plist) * Η Apple χορηγεί ένα **OAuth token** στον προμηθευτή MDM **DEP "cloud service" API** * RESTful * συγχρονίζει εγγραφές συσκευών από την Apple στον MDM server * συγχρονίζει τα "προφίλ DE ### Βήμα 4: Έλεγχος DEP - Λήψη της Εγγραφής Ενεργοποίησης Αυτό το μέρος της διαδικασίας συμβαίνει όταν ένας **χρήστης εκκινεί ένα Mac για πρώτη φορά** (ή μετά από πλήρη επαναφορά) ![](<../../../.gitbook/assets/image (1044).png>) ή όταν εκτελείται η εντολή `sudo profiles show -type enrollment` * Καθορισμός εάν το συσκευή είναι ενεργοποιημένη για DEP * Η Εγγραφή Ενεργοποίησης είναι το εσωτερικό όνομα για το **DEP "προφίλ"** * Ξεκινά μόλις η συσκευή συνδεθεί στο Internet * Καθορίζεται από το **`CPFetchActivationRecord`** * Υλοποιείται από το **`cloudconfigurationd`** μέσω XPC. Το **"Βοηθός Ρύθμισης**" (όταν η συσκευή εκκινείται για πρώτη φορά) ή η εντολή **`profiles`** θα **επικοινωνήσει με αυτό το daemon** για να ανακτήσει την εγγραφή ενεργοποίησης. * LaunchDaemon (τρέχει πάντα ως root) Ακολουθεί μερικά βήματα για τη λήψη της Εγγραφής Ενεργοποίησης που εκτελείται από το **`MCTeslaConfigurationFetcher`**. Αυτή η διαδικασία χρησιμοποιεί έναν κρυπτογράφηση που ονομάζεται **Absinthe** 1. Ανάκτηση **πιστοποιητικού** 1. GET [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer) 2. **Αρχικοποίηση** κατάστασης από το πιστοποιητικό (**`NACInit`**) 1. Χρησιμοποιεί διάφορα δεδομένα που είναι συσκευή-ειδικά (π.χ. **Αριθμός Σειριακού μέσω `IOKit`**) 3. Ανάκτηση **κλειδιού συνεδρίας** 1. POST [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session) 4. Δημιουργία της συνεδρίας (**`NACKeyEstablishment`**) 5. Αποστολή του αιτήματος 1. POST στο [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) αποστέλλοντας τα δεδομένα `{ "action": "RequestProfileConfiguration", "sn": "" }` 2. Το JSON payload κρυπτογραφείται χρησιμοποιώντας το Absinthe (**`NACSign`**) 3. Όλα τα αιτήματα γίνονται μέσω HTTPs, χρησιμοποιούνται ενσωματωμένα πιστοποιητικά ρίζας ![](<../../../.gitbook/assets/image (566) (1).png>) Η απάντηση είναι ένα JSON λεξικό με μερικά σημαντικά δεδομένα όπως: * **url**: URL του κεντρικού οικοδεσπότη MDM για το προφίλ ενεργοποίησης * **anchor-certs**: Πίνακας DER πιστοποιητικών που χρησιμοποιούνται ως αξιόπιστες ρίζες ### **Βήμα 5: Ανάκτηση Προφίλ** ![](<../../../.gitbook/assets/image (444).png>) * Αίτημα αποστέλλεται στο **url που παρέχεται στο προφίλ DEP**. * Τα **πιστοποιητικά αγκύρωσης** χρησιμοποιούνται για την **αξιολόγηση της εμπιστοσύνης** εάν παρέχονται. * Υπενθύμιση: η ιδιότητα **anchor\_certs** του προφίλ DEP * Το αίτημα είναι ένα απλό .plist με αναγνώριση συσκευής * Παραδείγματα: **UDID, έκδοση OS**. * Υπογραμμένο με CMS, DER-κωδικοποιημένο * Υπογράφεται χρησιμοποιώντας το **πιστοποιητικό ταυτότητας συσκευής (από APNS)** * Η **αλυσίδα πιστοποιητικών** περιλαμβάνει ληγμένο **Apple iPhone Device CA** ![](<../../../.gitbook/assets/image (567) (1) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2).png>) ### Βήμα 6: Εγκατάσταση Προφίλ * Μόλις ανακτηθεί, το **προφίλ αποθηκεύεται στο σύστημα** * Αυτό το βήμα ξεκινά αυτόματα (εάν βρίσκεστε στο **βοηθό ρύθμισης**) * Καθορίζεται από το **`CPInstallActivationProfile`** * Υλοποιείται από το mdmclient μέσω XPC * LaunchDaemon (ως root) ή LaunchAgent (ως χρήστης), ανάλογα με το πλαίσιο * Τα προφίλ ρυθμίσεων έχουν πολλαπλά φορτία για εγκατάσταση * Το πλαίσιο έχει μια αρχιτεκτονική βασισμένη σε πρόσθετα για την εγκατάσταση προφίλ * Κάθε τύπος φορτίου συσχετίζεται με ένα πρόσθετο * Μπορεί να είναι XPC (στο πλαίσιο) ή κλασικό Cocoa (στο ManagedClient.app) * Παράδειγμα: * Τα φορτία Πιστοποιητικού χρησιμοποιούν το CertificateService.xpc Συνήθως, το **προφίλ ενεργοποίησης** που παρέχεται από έναν πάροχο MDM θα **περιλαμβάνει τα ακόλουθα φορτία**: * `com.apple.mdm`: για την **εγγραφή** της συσκευής στο MDM * `com.apple.security.scep`: για την ασφαλή παροχή ενός **πιστοποιητικού πελάτη** στη συσκευή. * `com.apple.security.pem`: για την **εγκατάσταση αξιόπιστων πιστοποιητικών CA** στο Κλειδί Συστήματος της συσκευής. * Η εγκατάσταση του φορτίου MDM ισοδυναμεί με το **έλεγχο MDM** στην τεκμηρίωση * Το φορτίο περιέχει βασικές ιδιότητες: * * Διεύθυνση URL Έλεγχου MDM (**`CheckInURL`**) * Διεύθυνση URL Ερωτημάτων MDM (**`ServerURL`**) + θέμα APNs για να το ενεργοποιήσει * Για την εγκατάσταση του φορτίου MDM, αποστέλλεται αίτημα στο **`CheckInURL`** * Υλοποιείται στο **`mdmclient`** * Το φορτίο MDM μπορεί να εξαρτάται από άλλα φορτία * Επιτρέπει την **ανάθεση αιτημάτων σε συγκεκριμένα πιστοποιητικά**: * Ιδιότητα: **`CheckInURLPinningCertificateUUIDs`** * Ιδιότητα: **`ServerURLPinningCertificateUUIDs`** * Παραδίδεται μέσω φορτίου PEM * Επιτρέπει στη συσκευή να αναθέσει ένα πιστοποιητικό ταυτότητας: * Ιδιότητα: IdentityCertificateUUID * Παραδίδεται μέσω φορτίου SCEP ### **Βήμα 7: Ακρόαση για εντολές MDM** * Αφού ολοκληρωθεί ο έλεγχος MDM, ο πάροχος μπορεί να **εκδώσει ειδοποιήσεις push χρησιμοποιώντας το APNs** * Κατά τη λήψη, χειρίζεται από το **`mdmclient`** * Για να ελέγξει για εντολές MDM, αποστέλλεται αίτημα στο ServerURL * Χρησιμοποιεί το προηγουμένως εγκατεστημένο φορτίο MDM: * **`ServerURLPinningCertificateUUIDs`** για ανάθεση αιτήματος * **`IdentityCertificateUUID`** για πιστοποίηση TLS πιστοποιητικού πελάτη ## Επιθέσεις ### Εγγραφή Συσκευών σε Άλλους Οργανισμούς Όπως αναφέρθηκε προηγουμένως, για να προσπαθήσετε να εγγράψετε μια συσκευή σε έναν οργανισμό **χρειάζεστε μόνο τον Αριθμό Σειριακού που ανήκει σε αυτόν τον Οργανισμό**. Μόλις η συσκευή εγγραφεί, πολλοί οργανισμοί θα εγκαταστήσουν ευαίσθητα δεδομένα στη νέα συσκευή: πιστοποιητικά, εφαρμογές, κωδικοί WiFi, ρυθμίσεις VPN [και άλλα](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).\ Επομένως, αυτό θα μπορούσε