macOS Kernel Extensions

Impara l'hacking di AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Informazioni di base

Le estensioni del kernel (Kexts) sono pacchetti con estensione .kext che vengono caricati direttamente nello spazio del kernel di macOS, fornendo funzionalità aggiuntive al sistema operativo principale.

Requisiti

Ovviamente, è così potente che è complicato caricare un'estensione del kernel. Questi sono i requisiti che una estensione del kernel deve soddisfare per essere caricata:

  • Quando si entra in modalità di ripristino, le estensioni del kernel devono essere autorizzate a essere caricate:

  • L'estensione del kernel deve essere firmata con un certificato di firma del codice del kernel, che può essere concesso solo da Apple. Chi esaminerà dettagliatamente l'azienda e i motivi per cui è necessario.

  • L'estensione del kernel deve anche essere notarizzata, Apple sarà in grado di controllarla per malware.

  • Quindi, l'utente root è l'unico che può caricare l'estensione del kernel e i file all'interno del pacchetto devono appartenere a root.

  • Durante il processo di caricamento, il pacchetto deve essere preparato in una posizione protetta non di root: /Library/StagedExtensions (richiede il permesso com.apple.rootless.storage.KernelExtensionManagement).

  • Infine, quando si tenta di caricarlo, l'utente riceverà una richiesta di conferma e, se accettata, il computer deve essere riavviato per caricarla.

Processo di caricamento

In Catalina era così: È interessante notare che il processo di verifica avviene in userland. Tuttavia, solo le applicazioni con il permesso com.apple.private.security.kext-management possono richiedere al kernel di caricare un'estensione: kextcache, kextload, kextutil, kextd, syspolicyd

  1. kextutil cli avvia il processo di verifica per il caricamento di un'estensione

  • Parlerà con kextd inviando tramite un servizio Mach.

  1. kextd controllerà diverse cose, come la firma

  • Parlerà con syspolicyd per verificare se l'estensione può essere caricata.

  1. syspolicyd chiederà all'utente se l'estensione non è stata caricata in precedenza.

  • syspolicyd riporterà il risultato a kextd

  1. kextd potrà infine dire al kernel di caricare l'estensione

Se kextd non è disponibile, kextutil può eseguire gli stessi controlli.

References

Impara l'hacking di AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Last updated