macOS Kernel Extensions & Debugging
Reading time: 6 minutes
tip
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)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Osnovne informacije
Kernel ekstenzije (Kexts) su paketi sa .kext
ekstenzijom koji se učitavaju direktno u macOS kernel prostor, pružajući dodatnu funkcionalnost glavnom operativnom sistemu.
Zahtevi
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 uđete u režim oporavka, kernel ekstenzije moraju biti dozvoljene za učitavanje:
.png)
- 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
(zahtevacom.apple.rootless.storage.KernelExtensionManagement
dozvolu). - Na kraju, kada pokušate da je učitate, korisnik će dobiti zahtev za potvrdu i, ako bude prihvaćen, računar mora biti ponovo pokrenut da bi se učitala.
Proces učitavanja
U Catalini je to izgledalo ovako: Zanimljivo je napomenuti da se proverava proces 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 proveru za učitavanje ekstenzije
- Razgovaraće sa
kextd
slanjem putem Mach servisa.
kextd
će proveriti nekoliko stvari, kao što je potpis
- Razgovaraće sa
syspolicyd
da proveri da li se ekstenzija može učitati.
syspolicyd
će pitati korisnika ako ekstenzija nije prethodno učitana.
syspolicyd
će izvestiti rezultatkextd
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.
Enumeracija (učitane kexts)
# Get loaded kernel extensions
kextstat
# Get dependencies of the kext number 22
kextstat | grep " 22 " | cut -c2-5,50- | cut -d '(' -f1
Kernelcache
caution
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
morate pronaći 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 olakšava brže vreme pokretanja tako što ima verziju kernela i ključnih drajvera spremnu za rad, smanjujući vreme i resurse koji bi inače bili potrošeni na dinamičko učitavanje i linkovanje ovih komponenti prilikom pokretanja.
Lokalni Kernelcache
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
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
Dekompresujte Kernelcache:
# img4tool (https://github.com/tihmstar/img4tool
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
# pyimg4 (https://github.com/m1stadev/PyIMG4)
pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
Preuzimanje
Na https://github.com/dortania/KdkSupportPkg/releases je moguće pronaći sve kernel debug kitove. Možete ga preuzeti, montirati, otvoriti sa alatom Suspicious Package, pristupiti .kext
folderu i izvući ga.
Proverite ga za simbole sa:
nm -a ~/Downloads/Sandbox.kext/Contents/MacOS/Sandbox | wc -l
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 biste izvukli 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:
pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
Inspecting kernelcache
Proverite da li kernelcache ima simbole sa
nm -a kernelcache.release.iphone14.e | wc -l
Sa ovim možemo sada izvući sve ekstenzije ili onu koja vas zanima:
# List all extensions
kextex -l kernelcache.release.iphone14.e
## Extract com.apple.security.sandbox
kextex -e com.apple.security.sandbox kernelcache.release.iphone14.e
# Extract all
kextex_all kernelcache.release.iphone14.e
# Check the extension for symbols
nm -a binaries/com.apple.security.sandbox | wc -l
Debugging
Referencije
- https://www.makeuseof.com/how-to-enable-third-party-kernel-extensions-apple-silicon-mac/
- https://www.youtube.com/watch?v=hGKOskSiaQo
tip
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)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.