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 extensies (Kexts) is pakkette met 'n .kext
uitbreiding wat direk in die macOS-kernruimte gelaai word, wat addisionele funksionaliteit aan die hoofbedryfstelsel bied.
Dit is duidelik dat dit so kragtig is dat dit gekompliseerd is om 'n kernuitbreiding te laai. Dit is die vereistes waaraan 'n kernuitbreiding moet voldoen om gelaai te word:
Wanneer jy herstelmodus binnegaan, moet kern uitbreidings toegelaat word om gelaai te word:
Die kernuitbreiding moet onderteken wees met 'n kernkode-ondertekeningssertifikaat, wat slegs deur Apple toegestaan kan word. Wie die maatskappy en die redes waarom dit nodig is, in detail sal hersien.
Die kernuitbreiding moet ook notarized wees, Apple sal dit vir malware kan nagaan.
Dan is die root gebruiker die een wat die kernuitbreiding kan laai en die lêers binne die pakket moet aan root behoort.
Tydens die oplaadproses moet die pakket in 'n beskermde nie-root ligging voorberei word: /Library/StagedExtensions
(vereis die com.apple.rootless.storage.KernelExtensionManagement
grant).
Laastens, wanneer daar probeer word om dit te laai, sal die gebruiker 'n bevestigingsversoek ontvang en, indien aanvaar, moet die rekenaar herstart word om dit te laai.
In Catalina was dit soos volg: Dit is interessant om op te let dat die verifikasie proses in userland plaasvind. Dit is egter slegs toepassings met die com.apple.private.security.kext-management
grant wat die kern kan vra om 'n uitbreiding te laai: kextcache
, kextload
, kextutil
, kextd
, syspolicyd
kextutil
cli begin die verifikasie proses om 'n uitbreiding te laai
Dit sal met kextd
praat deur 'n Mach-diens te gebruik.
kextd
sal verskeie dinge nagaan, soos die handtekening
Dit sal met syspolicyd
praat om te kontroleer of die uitbreiding gelaai kan word.
syspolicyd
sal die gebruiker vra of die uitbreiding nie voorheen gelaai is nie.
syspolicyd
sal die resultaat aan kextd
rapporteer
kextd
sal uiteindelik in staat wees om die kern te sê om die uitbreiding te laai
As kextd
nie beskikbaar is nie, kan kextutil
dieselfde kontroles uitvoer.
Alhoewel die kernel uitbreidings verwag word om in /System/Library/Extensions/
te wees, as jy na hierdie gids gaan, sal jy geen binêre vind nie. Dit is as gevolg van die kernelcache en om een .kext
te reverseer, moet jy 'n manier vind om dit te verkry.
Die kernelcache is 'n vooraf-gecompileerde en vooraf-gekoppelde weergawe van die XNU-kern, saam met noodsaaklike toestel drywers en kernel uitbreidings. Dit word in 'n gecomprimeerde formaat gestoor en word tydens die opstartproses in geheue gedecomprimeer. Die kernelcache fasiliteer 'n sneller opstarttyd deur 'n gereed-om-te-loop weergawe van die kern en belangrike drywers beskikbaar te hê, wat die tyd en hulpbronne verminder wat andersins aan die dinamiese laai en koppeling van hierdie komponente tydens opstart bestee sou word.
In iOS is dit geleë in /System/Library/Caches/com.apple.kernelcaches/kernelcache
in macOS kan jy dit vind met: find / -name "kernelcache" 2>/dev/null
In my geval in macOS het ek dit gevind in:
/System/Volumes/Preboot/1BAEB4B5-180B-4C46-BD53-51152B7D92DA/boot/DAD35E7BC0CDA79634C20BD1BD80678DFB510B2AAD3D25C1228BB34BCD0A711529D3D571C93E29E1D0C1264750FA043F/System/Library/Caches/com.apple.kernelcaches/kernelcache
Die IMG4 lêerformaat is 'n houerformaat wat deur Apple in sy iOS en macOS toestelle gebruik word om firmware komponente veilig te stoor en te verifieer (soos kernelcache). Die IMG4 formaat sluit 'n kop en verskeie etikette in wat verskillende stukke data kapsuleer, insluitend die werklike payload (soos 'n kern of opstartlader), 'n handtekening, en 'n stel manifest eienskappe. Die formaat ondersteun kriptografiese verifikasie, wat die toestel toelaat om die egtheid en integriteit van die firmware komponent te bevestig voordat dit uitgevoer word.
Dit bestaan gewoonlik uit die volgende komponente:
Payload (IM4P):
Gereeld gecomprimeer (LZFSE4, LZSS, …)
Opsioneel versleuteld
Manifest (IM4M):
Bevat Handtekening
Bykomende Sleutel/Waarde woordeboek
Herstel Inligting (IM4R):
Ook bekend as APNonce
Voorkom die herhaling van sommige opdaterings
OPSIONEEL: Gewoonlik word dit nie gevind nie
Decompress die Kernelcache:
In https://github.com/dortania/KdkSupportPkg/releases is dit moontlik om al die kernel debug kits te vind. Jy kan dit aflaai, monteer, dit oopmaak met die Suspicious Package hulpmiddel, toegang verkry tot die .kext
gids en uit te trek.
Kontroleer dit vir simbole met:
Soms vry Apple kernelcache met symbols. Jy kan 'n paar firmware met symbols aflaai deur die skakels op daardie bladsye te volg. Die firmwares sal die kernelcache onder andere lêers bevat.
Om die lêers te onttrek, begin deur die uitbreiding van .ipsw
na .zip
te verander en dit te ontpak.
Na die ontrekking van die firmware sal jy 'n lêer soos: kernelcache.release.iphone14
kry. Dit is in IMG4 formaat, jy kan die interessante inligting ontbloot met:
Kontroleer of die kernelcache simbole het met
Met dit kan ons nou alle uitbreidings of die een waarin jy belangstel onttrek:
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)