Extensión segura del kernel en macOS
A partir de macOS 11, si se habilitan extensiones del kernel (kexts) de terceros, no se podrán cargar en el kernel a petición. En su lugar, se combinan en una colección de kernel auxiliar (AuxKC) que se carga durante el proceso de arranque. En un Mac con chip de Apple, la medición de la AuxKC se firma en el archivo LocalPolicy, mientras que en el hardware anterior, la AuxKC residía en el volumen de datos. Para volver a compilar la AuxKC se requiere la autorización del usuario y reiniciar macOS para cargar los cambios en el kernel, así como que el arranque seguro esté establecido en “Seguridad reducida”.
Importante: Las kexts ya no se recomiendan para macOS. Las kexts ponen en riesgo la integridad y fiabilidad del sistema operativo, y Apple recomienda a los usuarios optar por soluciones que no requieran extender el kernel.
Extensiones del kernel en un Mac con chip de Apple
Las kexts deben activarse explícitamente en un Mac con chip de Apple, para lo que se debe mantener pulsado el botón de encendido en el arranque para acceder al Sistema operativo de recuperación auténtico (1TR), bajar al nivel de seguridad reducida y, a continuación, marcar la casilla para activar las extensiones del kernel. Esta acción también requiere introducir una contraseña de administrador para autorizar la bajada del nivel de seguridad. La combinación del modo 1TR y el requisito de la contraseña dificulta que los atacantes de software inyecten kexts en macOS partiendo desde el propio sistema operativo, lo que podrían aprovechar para obtener privilegios de kernel.
Después de que un usuario autorice la carga de las kexts, el flujo de carga de extensiones del kernel autorizadas por el usuario anterior se utiliza para autorizar la instalación de las kexts. La autorización que se usa para el flujo anterior también sirve para capturar un hash SHA384 de la lista de kexts autorizadas por el usuario (UAKL) en LocalPolicy. A continuación, el daemon de gestión del kernel (kmd
) se encargará de validar solo aquellas kexts encontradas en la UAKL para su inclusión en la AuxKC.
Si la protección de la integridad del sistema (SIP) está activada, la firma de cada kext se verifica antes de incluirla en la AuxKC.
Si la SIP está desactivada, no se exige la firma de la kext.
Este enfoque permite flujos de seguridad permisiva, en los que desarrolladores o usuarios que no forman parte del programa para desarrolladores de Apple (Apple Developer Program) prueban kexts antes de que se firmen.
Una vez creada la AuxKC, su medición se envía a Secure Enclave para firmarse e incluirse en una estructura de datos Image4 que iBoot puede evaluar en el arranque. Como parte de la construcción de la AuxKC, también se genera un recibo de kexts. Este recibo contiene la lista de kexts incluidas realmente en la AuxKC, ya que el conjunto podría ser un subconjunto de la UAKL si se encontraran kexts prohibidas. En LocalPolicy se incluyen un hash SHA384 de la estructura de datos Image4 de la AuxKC y el recibo de kexts. El hash Image4 de la AuxKC se usa para que iBoot realice una verificación adicional en el arranque para ayudar a garantizar que no es posible arrancar un archivo Image4 anterior de la AuxKC firmado por Secure Enclave con un archivo LocalPolicy más reciente. Los subsistemas como Apple Pay utilizan el recibo de kexts para determinar si hay alguna kext cargada actualmente que pudiera interferir con la confianza de macOS. Si la hubiera, podrían desactivarse las funcionalidades de Apple Pay.
Extensiones del sistema
macOS 10.15 permite a los desarrolladores extender las capacidades de macOS instalando y gestionando extensiones del sistema que se ejecutan en el espacio del usuario en lugar de hacerlo a nivel del kernel. Las extensiones del sistema, al ejecutarse en el espacio del usuario, aumentan la estabilidad y seguridad de macOS. Aunque las kexts tienen intrínsecamente acceso completo a todo el sistema operativo, a las extensiones que se ejecutan en el espacio del usuario solo se les concede los privilegios necesarios para llevar a cabo su función especificada.
Los desarrolladores pueden usar estructuras tecnológicas (como DriverKit, EndpointSecurity y NetworkExtension) para escribir controladores de interfaz humana y de USB, herramientas de seguridad de endpoint (como la prevención de pérdida de datos u otros agentes de endpoint) y herramientas de red y VPN sin tener que escribir kexts. Los agentes de seguridad de terceros solamente se deberían usar si aprovechan estas API o si tienen un plan de desarrollo sólido para hacer la transición hacia ellas y alejarse de las extensiones del kernel.
Carga de extensiones del kernel autorizadas por el usuario
Para mejorar la seguridad, se requiere el consentimiento del usuario para cargar las extensiones del kernel instaladas junto con macOS 10.13 o después de su instalación. Este proceso se conoce como carga de extensión del kernel aprobada por el usuario. Se requiere la autorización del administrador para aprobar una extensión del kernel. Las extensiones del kernel no requieren autorización si:
se han instalado en un Mac con macOS 10.12 o anterior;
sustituyen extensiones aprobadas previamente;
se pueden cargar sin el consentimiento del usuario utilizando la herramienta de línea de comandos
spctl
disponible al arrancar un Mac desde el sistema operativo de recuperación;se pueden cargar con la configuración de una solución de gestión de dispositivos móviles (MDM).
A partir de macOS 10.13.2, los usuarios pueden usar una solución MDM para especificar una lista de extensiones del kernel que se cargan sin el consentimiento del usuario. Esta opción requiere que un Mac con macOS 10.13.2 esté inscrito en la solución MDM (mediante Apple School Manager, Apple Business Manager: o una inscripción en MDM realizada por el usuario).