hacktricks/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md

4 KiB

Extensiones de Kernel de macOS

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Información básica

Las extensiones de kernel (Kexts) son paquetes con extensión .kext que se cargan directamente en el espacio del kernel de macOS, proporcionando funcionalidades adicionales al sistema operativo central.

Requisitos

Obviamente, esto es tan poderoso que es complicado cargar una extensión de kernel. Estos son los requisitos que debe cumplir una extensión de kernel para ser cargada:

  • Al entrar en modo de recuperación, las extensiones de kernel deben estar permitidas para ser cargadas:
  • La extensión de kernel debe estar firmada con un certificado de firma de código de 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 de kernel también debe estar notarizada, Apple podrá verificarla en busca de malware.
  • Luego, el usuario root es el que puede cargar la extensión y los archivos dentro del paquete deben pertenecer a root.
  • Finalmente, al intentar cargarla, el usuario recibirá una solicitud de confirmación y, si se acepta, la computadora debe reiniciarse para cargarla.

Proceso de carga

En Catalina era así: Es interesante destacar que el proceso de verificación ocurre en userland. Sin embargo, solo las aplicaciones con la concesión com.apple.private.security.kext-management pueden solicitar al kernel que cargue una extensión: kextcache, kextload, kextutil, kextd, syspolicyd

  1. kextutil cli inicia el proceso de verificación para cargar una extensión
    • Se comunicará con kextd enviando un servicio Mach
  2. kextd verificará varias cosas, como la firma
    • Se comunicará con syspolicyd para verificar si se puede cargar la extensión
  3. syspolicyd preguntará al usuario si la extensión no se ha cargado previamente
    • syspolicyd indicará el resultado a kextd
  4. kextd finalmente podrá indicar al kernel que cargue la extensión

Si kextd no está disponible, kextutil puede realizar las mismas comprobaciones.

Referencias