macOS Kernel Extensions
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Información Básica
Las extensiones del kernel (Kexts) son paquetes con una extensión .kext
que se cargan directamente en el espacio del kernel de macOS, proporcionando funcionalidad adicional al sistema operativo principal.
Requisitos
Obviamente, esto es tan poderoso que es complicado cargar una extensión del kernel. Estos son los requisitos que una extensión del kernel debe cumplir para ser cargada:
Al ingresar al modo de recuperación, las extensiones del kernel deben ser permitidas para ser cargadas:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2730383215-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FOGiU7XValBchYYDg6h1H%252Fuploads%252Fgit-blob-eb7611c98db8c5b2047719eeb3f450eee5194812%252Fimage%2520%28327%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=bc12955b&sv=1)
La extensión del kernel debe estar firmada con un certificado de firma de código del kernel, que solo puede ser otorgado por Apple. Quien revisará en detalle la empresa y las razones por las que se necesita.
La extensión del kernel también debe estar notarizada, Apple podrá verificarla en busca de malware.
Luego, el usuario root es quien puede cargar la extensión del kernel y los archivos dentro del paquete deben pertenecer a root.
Durante el proceso de carga, el paquete debe estar preparado en una ubicación protegida no root:
/Library/StagedExtensions
(requiere el permisocom.apple.rootless.storage.KernelExtensionManagement
).Finalmente, al intentar cargarla, el usuario recibirá una solicitud de confirmación y, si se acepta, la computadora debe ser reiniciada para cargarla.
Proceso de carga
En Catalina fue así: Es interesante notar que el proceso de verificación ocurre en userland. Sin embargo, solo las aplicaciones con el permiso com.apple.private.security.kext-management
pueden solicitar al kernel que cargue una extensión: kextcache
, kextload
, kextutil
, kextd
, syspolicyd
kextutil
cli inicia el proceso de verificación para cargar una extensión
Hablará con
kextd
enviando usando un servicio Mach.
kextd
verificará varias cosas, como la firma
Hablará con
syspolicyd
para verificar si la extensión puede ser cargada.
syspolicyd
preguntará al usuario si la extensión no ha sido cargada previamente.
syspolicyd
informará el resultado akextd
kextd
finalmente podrá decirle al kernel que cargue la extensión
Si kextd
no está disponible, kextutil
puede realizar las mismas verificaciones.
Referencias
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated