# macOS MDM {{#include ../../../banners/hacktricks-training.md}} **Da biste saznali više o macOS MDM-ima, proverite:** - [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) ## Osnovi ### **MDM (Upravljanje mobilnim uređajima) Pregled** [Upravljanje mobilnim uređajima](https://en.wikipedia.org/wiki/Mobile_device_management) (MDM) se koristi za nadgledanje različitih uređaja krajnjih korisnika kao što su pametni telefoni, laptopovi i tableti. Posebno za Apple-ove platforme (iOS, macOS, tvOS), uključuje skup specijalizovanih funkcija, API-ja i praksi. Rad MDM-a zavisi od kompatibilnog MDM servera, koji može biti komercijalno dostupan ili otvorenog koda, i mora podržavati [MDM protokol](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Ključne tačke uključuju: - Centralizovana kontrola nad uređajima. - Zavist od MDM servera koji se pridržava MDM protokola. - Sposobnost MDM servera da šalje različite komande uređajima, na primer, daljinsko brisanje podataka ili instalaciju konfiguracije. ### **Osnovi DEP (Program za registraciju uređaja)** [Program za registraciju uređaja](https://www.apple.com/business/site/docs/DEP_Guide.pdf) (DEP) koji nudi Apple pojednostavljuje integraciju upravljanja mobilnim uređajima (MDM) omogućavajući konfiguraciju bez dodira za iOS, macOS i tvOS uređaje. DEP automatizuje proces registracije, omogućavajući uređajima da budu operativni odmah po otvaranju pakovanja, uz minimalnu intervenciju korisnika ili administratora. Osnovni aspekti uključuju: - Omogućava uređajima da se autonomno registruju sa unapred definisanim MDM serverom prilikom prve aktivacije. - Pretežno korisno za potpuno nove uređaje, ali se takođe može primeniti na uređaje koji prolaze kroz rekonstrukciju. - Olakšava jednostavnu postavku, čineći uređaje spremnim za organizacionu upotrebu brzo. ### **Bezbednosna razmatranja** Važno je napomenuti da lakoća registracije koju pruža DEP, iako korisna, može takođe predstavljati bezbednosne rizike. Ako zaštitne mere nisu adekvatno primenjene za MDM registraciju, napadači bi mogli iskoristiti ovaj pojednostavljeni proces da registruju svoj uređaj na MDM serveru organizacije, pretvarajući se da su korporativni uređaji. > [!CAUTION] > **Bezbednosna upozorenje**: Pojednostavljena DEP registracija mogla bi potencijalno omogućiti neovlašćenu registraciju uređaja na MDM serveru organizacije ako odgovarajuće zaštitne mere nisu na snazi. ### Osnovi Šta je SCEP (Protokol za jednostavnu registraciju sertifikata)? - Relativno stari protokol, stvoren pre nego što su TLS i HTTPS postali široko rasprostranjeni. - Pruža klijentima standardizovan način slanja **Zahteva za potpisivanje sertifikata** (CSR) u svrhu dobijanja sertifikata. Klijent će tražiti od servera da mu da potpisani sertifikat. ### Šta su Konfiguracijski profili (aka mobileconfigs)? - Apple-ov zvanični način **postavljanja/primene sistemske konfiguracije.** - Format datoteke koji može sadržati više opterećenja. - Zasnovan na listama svojstava (XML tip). - “mogu biti potpisani i šifrovani kako bi se potvrdio njihov izvor, osigurala njihova celovitost i zaštitili njihovi sadržaji.” Osnovi — Strana 70, iOS Bezbednosni vodič, januar 2018. ## Protokoli ### MDM - Kombinacija APNs (**Apple server**a) + RESTful API (**MDM** **dobavljača** servera) - **Komunikacija** se odvija između **uređaja** i servera povezanog sa **proizvodom za upravljanje uređajima** - **Komande** se isporučuju sa MDM-a na uređaj u **plist-encoded rečnicima** - Sve preko **HTTPS**. MDM serveri mogu biti (i obično su) pinovani. - Apple dodeljuje MDM dobavljaču **APNs sertifikat** za autentifikaciju ### DEP - **3 API-ja**: 1 za prodavce, 1 za MDM dobavljače, 1 za identitet uređaja (nedokumentovan): - Takozvani [DEP "cloud service" API](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Ovaj API koriste MDM serveri za povezivanje DEP profila sa specifičnim uređajima. - [DEP API koji koriste Apple ovlašćeni prodavci](https://applecareconnect.apple.com/api-docs/depuat/html/WSImpManual.html) za registraciju uređaja, proveru statusa registracije i proveru statusa transakcije. - Nedokumentovani privatni DEP API. Ovaj API koriste Apple uređaji za zahtev svog DEP profila. Na macOS-u, `cloudconfigurationd` binarni fajl je odgovoran za komunikaciju preko ovog API-ja. - Moderniji i **JSON** zasnovan (naspram plist) - Apple dodeljuje **OAuth token** MDM dobavljaču **DEP "cloud service" API** - RESTful - sinhronizuje zapise uređaja sa Apple-om na MDM server - sinhronizuje “DEP profile” sa Apple-om sa MDM servera (isporučuje Apple uređaju kasnije) - DEP “profil” sadrži: - URL MDM dobavljača servera - Dodatni poverljivi sertifikati za URL servera (opciono pinovanje) - Dodatne postavke (npr. koje ekrane preskočiti u Setup Assistant) ## Serijski broj Apple uređaji proizvedeni nakon 2010. godine obično imaju **12-znamenkaste alfanumeričke** serijske brojeve, pri čemu **prva tri broja predstavljaju mesto proizvodnje**, sledeća **dva** označavaju **godinu** i **nedelju** proizvodnje, sledeća **tri** broja daju **jedinstveni** **identifikator**, a **poslednja** **četiri** broja predstavljaju **broj modela**. {{#ref}} macos-serial-number.md {{#endref}} ## Koraci za registraciju i upravljanje 1. Kreiranje zapisa uređaja (Prodavac, Apple): Zapis za novi uređaj se kreira 2. Dodeljivanje zapisa uređaja (Kupac): Uređaj se dodeljuje MDM serveru 3. Sinhronizacija zapisa uređaja (MDM dobavljač): MDM sinhronizuje zapise uređaja i šalje DEP profile Apple-u 4. DEP prijava (Uređaj): Uređaj dobija svoj DEP profil 5. Preuzimanje profila (Uređaj) 6. Instalacija profila (Uređaj) a. uključuje MDM, SCEP i root CA opterećenja 7. Izdavanje MDM komande (Uređaj) ![](<../../../images/image (694).png>) Datoteka `/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd` izvozi funkcije koje se mogu smatrati **visok nivo "koraka"** procesa registracije. ### Korak 4: DEP prijava - Dobijanje aktivacionog zapisa Ovaj deo procesa se odvija kada **korisnik prvi put pokrene Mac** (ili nakon potpunog brisanja) ![](<../../../images/image (1044).png>) ili kada se izvršava `sudo profiles show -type enrollment` - Utvrditi **da li je uređaj DEP omogućen** - Aktivacioni zapis je interno ime za **DEP “profil”** - Počinje čim se uređaj poveže na Internet - Pokreće ga **`CPFetchActivationRecord`** - Implementira ga **`cloudconfigurationd`** putem XPC. **"Setup Assistant"** (kada se uređaj prvi put pokrene) ili **`profiles`** komanda će **kontaktirati ovaj daemon** da preuzme aktivacioni zapis. - LaunchDaemon (uvek se pokreće kao root) Sledi nekoliko koraka da se dobije aktivacioni zapis koji obavlja **`MCTeslaConfigurationFetcher`**. Ovaj proces koristi enkripciju nazvanu **Absinthe** 1. Preuzmi **sertifikat** 1. GET [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer) 2. **Inicijalizuj** stanje iz sertifikata (**`NACInit`**) 1. Koristi razne podatke specifične za uređaj (tj. **Serijski broj putem `IOKit`**) 3. Preuzmi **ključ sesije** 1. POST [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session) 4. Uspostavi sesiju (**`NACKeyEstablishment`**) 5. Napravi zahtev 1. POST na [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) šaljući podatke `{ "action": "RequestProfileConfiguration", "sn": "" }` 2. JSON opterećenje je šifrovano koristeći Absinthe (**`NACSign`**) 3. Svi zahtevi preko HTTPs, koriste se ugrađeni root sertifikati ![](<../../../images/image (566) (1).png>) Odgovor je JSON rečnik sa nekim važnim podacima kao što su: - **url**: URL MDM dobavljača hosta za aktivacioni profil - **anchor-certs**: Niz DER sertifikata koji se koriste kao poverljivi sidri ### **Korak 5: Preuzimanje profila** ![](<../../../images/image (444).png>) - Zahtev poslat na **url naveden u DEP profilu**. - **Sidreni sertifikati** se koriste za **procenu poverenja** ako su navedeni. - Podsetnik: **anchor_certs** svojstvo DEP profila - **Zahtev je jednostavan .plist** sa identifikacijom uređaja - Primeri: **UDID, verzija OS-a**. - CMS-potpisan, DER-enkodiran - Potpisan koristeći **sertifikat identiteta uređaja (iz APNS)** - **Lanac sertifikata** uključuje istekao **Apple iPhone Device CA** ![](<../../../images/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) (2) (2).png>) ### Korak 6: Instalacija profila - Kada se preuzme, **profil se čuva na sistemu** - Ovaj korak počinje automatski (ako je u **setup assistant**) - Pokreće ga **`CPInstallActivationProfile`** - Implementira ga mdmclient preko XPC - LaunchDaemon (kao root) ili LaunchAgent (kao korisnik), u zavisnosti od konteksta - Konfiguracijski profili imaju više opterećenja za instalaciju - Okvir ima arhitekturu zasnovanu na plugin-ima za instalaciju profila - Svaka vrsta opterećenja je povezana sa plugin-om - Može biti XPC (u okviru) ili klasični Cocoa (u ManagedClient.app) - Primer: - Opterećenja sertifikata koriste CertificateService.xpc Tipično, **aktivacioni profil** koji pruža MDM dobavljač će **uključivati sledeća opterećenja**: - `com.apple.mdm`: da **registruje** uređaj u MDM - `com.apple.security.scep`: da sigurno pruži **sertifikat klijenta** uređaju. - `com.apple.security.pem`: da **instalira poverljive CA sertifikate** u sistemski ključan. - Instalacija MDM opterećenja ekvivalentna je **MDM prijavi u dokumentaciji** - Opterećenje **sadrži ključne osobine**: - - MDM Check-In URL (**`CheckInURL`**) - MDM Command Polling URL (**`ServerURL`**) + APNs tema za aktivaciju - Da bi se instaliralo MDM opterećenje, zahtev se šalje na **`CheckInURL`** - Implementirano u **`mdmclient`** - MDM opterećenje može zavisiti od drugih opterećenja - Omogućava **zahteve da budu pinovani na specifične sertifikate**: - Svojstvo: **`CheckInURLPinningCertificateUUIDs`** - Svojstvo: **`ServerURLPinningCertificateUUIDs`** - Isporučuje se putem PEM opterećenja - Omogućava uređaju da bude dodeljen sertifikat identiteta: - Svojstvo: IdentityCertificateUUID - Isporučuje se putem SCEP opterećenja ### **Korak 7: Slušanje za MDM komande** - Nakon što je MDM prijava završena, dobavljač može **izdati push obaveštenja koristeći APNs** - Po prijemu, obrađuje ga **`mdmclient`** - Da bi se proverile MDM komande, zahtev se šalje na ServerURL - Koristi prethodno instalirano MDM opterećenje: - **`ServerURLPinningCertificateUUIDs`** za pinovanje zahteva - **`IdentityCertificateUUID`** za TLS sertifikat klijenta ## Napadi ### Registracija uređaja u drugim organizacijama Kao što je ranije komentarisano, da bi se pokušalo registrovati uređaj u organizaciji **potreban je samo Serijski broj koji pripada toj organizaciji**. Kada se uređaj registruje, nekoliko organizacija će instalirati osetljive podatke na novi uređaj: sertifikate, aplikacije, WiFi lozinke, VPN konfiguracije [i tako dalje](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).\ Stoga, ovo bi moglo biti opasno mesto za napadače ako proces registracije nije pravilno zaštićen: {{#ref}} enrolling-devices-in-other-organisations.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}}