macOS Kernel & System Extensions
XNU Kernel
Srce macOS-a je XNU, što označava "X is Not Unix". Ovaj kernel je suštinski sastavljen od Mach mikrokernela (o kojem će biti reči kasnije), i elemenata iz Berkeley Software Distribution (BSD). XNU takođe pruža platformu za kernel drivere putem sistema nazvanog I/O Kit. XNU kernel je deo Darwin open source projekta, što znači da je njegov izvorni kod slobodno dostupan.
Iz perspektive istraživača bezbednosti ili Unix programera, macOS može delovati prilično slično sistemu FreeBSD sa elegantnim grafičkim korisničkim interfejsom i nizom prilagođenih aplikacija. Većina aplikacija razvijenih za BSD će se kompajlirati i pokrenuti na macOS-u bez potrebe za modifikacijama, jer su alati komandne linije poznati Unix korisnicima prisutni u macOS-u. Međutim, zbog toga što XNU kernel inkorporira Mach, postoje značajne razlike između tradicionalnog Unix-sličnog sistema i macOS-a, a ove razlike mogu izazvati potencijalne probleme ili pružiti jedinstvene prednosti.
Izvorni kod XNU-a: https://opensource.apple.com/source/xnu/
Mach
Mach je mikrokernel dizajniran da bude kompatibilan sa UNIX-om. Jedan od njegovih ključnih dizajnerskih principa bio je da minimizira količinu koda koji se izvršava u kernel prostoru i umesto toga omogući mnogim tipičnim funkcijama kernela, poput sistema za datoteke, mreženja i I/O, da se izvršavaju kao zadaci na nivou korisnika.
U XNU-u, Mach je odgovoran za mnoge kritične operacije niskog nivoa koje kernel obično obavlja, poput raspoređivanja procesora, multitaskinga i upravljanja virtuelnom memorijom.
BSD
XNU kernel takođe inkorporira značajnu količinu koda koji potiče iz projekta FreeBSD. Ovaj kod se izvršava kao deo kernela zajedno sa Mach-om, u istom adresnom prostoru. Međutim, FreeBSD kod unutar XNU-a može biti značajno različit od originalnog FreeBSD koda jer su bile potrebne modifikacije kako bi se osigurala njegova kompatibilnost sa Mach-om. FreeBSD doprinosi mnogim operacijama kernela uključujući:
Upravljanje procesima
Obrada signala
Osnovni mehanizmi bezbednosti, uključujući upravljanje korisnicima i grupama
Infrastruktura sistemskih poziva
TCP/IP stek i soketi
Firewall i filtriranje paketa
Razumevanje interakcije između BSD-a i Mach-a može biti kompleksno, zbog njihovih različitih konceptualnih okvira. Na primer, BSD koristi procese kao svoje osnovne izvršne jedinice, dok Mach operiše na osnovu niti. Ova razlika je usklađena u XNU-u tako što svaki BSD proces povezan je sa Mach zadatkom koji sadrži tačno jednu Mach nit. Kada se koristi BSD-ov fork() sistemski poziv, BSD kod unutar kernela koristi Mach funkcije za kreiranje strukture zadatka i niti.
Štaviše, Mach i BSD održavaju različite modele bezbednosti: Mach-ov model bezbednosti se zasniva na pravima porta, dok BSD-ov model bezbednosti funkcioniše na osnovu vlasništva procesa. Dispariteti između ova dva modela ponekad su rezultirali ranjivostima lokalnog eskaliranja privilegija. Osim tipičnih sistemskih poziva, postoje i Mach zamke koje omogućavaju programima na nivou korisnika da interaguju sa kernelom. Ovi različiti elementi zajedno čine složenu, hibridnu arhitekturu macOS kernela.
I/O Kit - Drajveri
I/O Kit je open-source, objektno orijentisani framework za drajvere uređaja u XNU kernelu, koji rukuje dinamički učitavanim drajverima uređaja. Omogućava dodavanje modularnog koda u kernel u hodu, podržavajući različit hardver.
pagemacOS IOKitIPC - Međuprocesna komunikacija
pagemacOS IPC - Inter Process CommunicationKernelcache
Kernelcache je prekompajlirana i prelinkovana verzija XNU kernela, zajedno sa esencijalnim drajverima uređaja i kernel ekstenzijama. Čuva se u kompresovanom formatu i dekompresuje u memoriju tokom procesa pokretanja. Kernelcache omogućava brže vreme pokretanja imajući spremnu verziju kernela i ključnih drajvera, smanjujući vreme i resurse koji bi inače bili potrošeni na dinamičko učitavanje i povezivanje ovih komponenti tokom pokretanja.
Na iOS-u se nalazi u /System/Library/Caches/com.apple.kernelcaches/kernelcache
, a na macOS-u ga možete pronaći sa find / -name kernelcache 2>/dev/null
ili mdfind kernelcache | grep kernelcache
Moguće je pokrenuti kextstat
da proverite učitane kernel ekstenzije.
IMG4
IMG4 format datoteke je kontejnerski format koji koristi Apple u svojim iOS i macOS uređajima za sigurno čuvanje i proveru firmware komponenti (poput kernelcache). IMG4 format uključuje zaglavlje i nekoliko oznaka koje obuhvataju različite delove podataka uključujući stvarni payload (kao što je kernel ili bootloader), potpis, i skup manifestnih svojstava. Format podržava kriptografsku verifikaciju, omogućavajući uređaju da potvrdi autentičnost i integritet firmware komponente pre njene izvršne.
Obično je sastavljen od sledećih komponenti:
Payload (IM4P):
Često kompresovan (LZFSE4, LZSS, …)
Opciono enkriptovan
Manifest (IM4M):
Sadrži Potpis
Dodatni rečnik Ključ/Vrednost
Informacije o obnovi (IM4R):
Takođe poznato kao APNonce
Sprječava ponovno izvođenje nekih ažuriranja
OPCIONALNO: Obično se ovo ne nalazi
Dekompresujte Kernelcache:
Simboli kernel keša
Ponekad Apple objavljuje kernel keš sa simbolima. Možete preuzeti neke firmvere sa simbolima prateći linkove na https://theapplewiki.com.
IPSW
Ovo su Apple firmveri koje možete preuzeti sa https://ipsw.me/. Pored ostalih datoteka, sadržaće kernel keš. Da biste izvukli datoteke, jednostavno ih raspakujte.
Nakon izdvajanja firmvera dobićete datoteku poput: kernelcache.release.iphone14
. U IMG4 formatu, možete izvući zanimljive informacije pomoću:
Možete proveriti izvučeni kernelcache za simbole pomoću: nm -a kernelcache.release.iphone14.e | wc -l
Sada možemo izvući sve ekstenzije ili onu koja vas zanima:
macOS Kernel ekstenzije
macOS je izuzetno restriktivan kada je u pitanju učitavanje Kernel ekstenzija (.kext) zbog visokih privilegija pod kojima će se kod izvršavati. Zapravo, podrazumevano je praktično nemoguće (osim ako se ne pronađe način zaobilaženja).
pagemacOS Kernel ExtensionsmacOS Sistem ekstenzije
Umesto korišćenja Kernel ekstenzija, macOS je kreirao Sistem ekstenzije, koje pružaju API-je na nivou korisnika za interakciju sa kernelom. Na ovaj način, programeri mogu izbeći korišćenje kernel ekstenzija.
pagemacOS System ExtensionsReference
Last updated