macOS Kernel Extensions & Debugging
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)
Kernel extensions (Kexts) su paketi sa .kext
ekstenzijom koji se učitavaju direktno u macOS kernel prostor, pružajući dodatnu funkcionalnost glavnom operativnom sistemu.
Očigledno, ovo je toliko moćno da je komplikovano učitati kernel ekstenziju. Ovo su zahtevi koje kernel ekstenzija mora ispuniti da bi bila učitana:
Kada se ulazi u režim oporavka, kernel ekstenzije moraju biti dozvoljene za učitavanje:
Kernel ekstenzija mora biti potpisana sa sertifikatom za potpisivanje kernel koda, koji može biti dodeljen samo od strane Apple-a. Ko će detaljno pregledati kompaniju i razloge zašto je to potrebno.
Kernel ekstenzija takođe mora biti notarizovana, Apple će moći da je proveri na malver.
Zatim, root korisnik je taj koji može učitati kernel ekstenziju i datoteke unutar paketa moraju pripadati root-u.
Tokom procesa učitavanja, paket mora biti pripremljen na zaštićenoj lokaciji koja nije root: /Library/StagedExtensions
(zahteva com.apple.rootless.storage.KernelExtensionManagement
dozvolu).
Na kraju, kada se pokuša učitati, korisnik će dobiti zahtev za potvrdu i, ako bude prihvaćen, računar mora biti ponovo pokrenut da bi se učitao.
U Catalina je to bilo ovako: Zanimljivo je napomenuti da se proceso verifikacije dešava u userland-u. Međutim, samo aplikacije sa com.apple.private.security.kext-management
dozvolom mogu zatražiti od kernela da učita ekstenziju: kextcache
, kextload
, kextutil
, kextd
, syspolicyd
kextutil
cli pokreće proceso verifikacije za učitavanje ekstenzije
Razgovaraće sa kextd
slanjem putem Mach servisa.
kextd
će proveriti nekoliko stvari, kao što su potpis
Razgovaraće sa syspolicyd
da bi proverio da li se ekstenzija može učitati.
syspolicyd
će pitati korisnika ako ekstenzija nije prethodno učitana.
syspolicyd
će izvestiti rezultat kextd
kextd
će konačno moći da kaže kernelu da učita ekstenziju
Ako kextd
nije dostupan, kextutil
može izvršiti iste provere.
Iako se očekuje da su kernel ekstenzije u /System/Library/Extensions/
, ako odete u ovu fasciklu nećete pronaći nijedan binarni fajl. To je zbog kernelcache i da biste obrnuli jedan .kext
potrebno je da pronađete način da ga dobijete.
Kernelcache je prekompajlirana i prelinkovana verzija XNU kernela, zajedno sa esencijalnim uređajnim drajverima i kernel ekstenzijama. Čuva se u kompresovanom formatu i dekompresuje se u memoriju tokom procesa pokretanja. Kernelcache omogućava brže vreme pokretanja tako što ima 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 prilikom pokretanja.
U iOS-u se nalazi u /System/Library/Caches/com.apple.kernelcaches/kernelcache
, u macOS-u ga možete pronaći sa: find / -name "kernelcache" 2>/dev/null
U mom slučaju u macOS-u pronašao sam ga u:
/System/Volumes/Preboot/1BAEB4B5-180B-4C46-BD53-51152B7D92DA/boot/DAD35E7BC0CDA79634C20BD1BD80678DFB510B2AAD3D25C1228BB34BCD0A711529D3D571C93E29E1D0C1264750FA043F/System/Library/Caches/com.apple.kernelcaches/kernelcache
IMG4 format fajla je kontejnerski format koji koristi Apple u svojim iOS i macOS uređajima za sigurno čuvanje i verifikaciju firmware komponenti (kao što je kernelcache). IMG4 format uključuje zaglavlje i nekoliko oznaka koje enkapsuliraju različite delove podataka uključujući stvarni payload (kao što je kernel ili bootloader), potpis i skup manifest svojstava. Format podržava kriptografsku verifikaciju, omogućavajući uređaju da potvrdi autentičnost i integritet firmware komponente pre nego što je izvrši.
Obično se sastoji od sledećih komponenti:
Payload (IM4P):
Često kompresovan (LZFSE4, LZSS, …)
Opcionalno enkriptovan
Manifest (IM4M):
Sadrži potpis
Dodatni ključ/vrednost rečnik
Restore Info (IM4R):
Takođe poznat kao APNonce
Sprečava ponavljanje nekih ažuriranja
OPCIONALNO: Obično se ovo ne nalazi
Dekomprimujte Kernelcache:
Na https://github.com/dortania/KdkSupportPkg/releases je moguće pronaći sve kernel debug kitove. Možete ga preuzeti, montirati, otvoriti pomoću alata Suspicious Package, pristupiti .kext
folderu i izvući ga.
Proverite ga za simbole sa:
Ponekad Apple objavljuje kernelcache sa symbolima. Možete preuzeti neke firmvere sa simbolima prateći linkove na tim stranicama. Firmveri će sadržati kernelcache među ostalim datotekama.
Da izvucite datoteke, počnite tako što ćete promeniti ekstenziju sa .ipsw
na .zip
i raspakovati je.
Nakon vađenja firmvera dobićete datoteku poput: kernelcache.release.iphone14
. U IMG4 formatu, možete izvući zanimljive informacije pomoću:
Proverite da li kernelcache ima simbole sa
Sa ovim možemo sada izvući sve ekstenzije ili onu koja vas zanima:
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)