Ampliar la funcionalidad del kernel de forma segura en macOS
A partir de macOS 11, si se activan las extensiones del kernel (kexts) de terceros, estas no se pueden cargar en el kernel por solicitud. En su lugar, se combinan en una colección del kernel auxiliar (AuxKC) que se carga durante el proceso de arranque. Para computadoras Mac con Apple Chip, la medición de la AuxKC se registra en LocalPolicy (mientras que para el hardware anterior, la AuxKC reside en el volumen de datos). La reconstrucción de la AuxKC requiere la aprobación del usuario y el reinicio de macOS para cargar las modificaciones en el kernel, y es necesario que el arranque seguro esté configurado como Seguridad reducida.
Importante: ya no se recomienda el uso de kexts en macOS, ya que ponen en riesgo la integridad y fiabilidad del sistema operativo, y Apple recomienda a los usuarios elegir soluciones que no requieran extender el kernel.
Extensiones del kernel en una Mac con Apple Chip
Las kexts deben activarse explícitamente en computadoras Mac con Apple Chip; para esto, mantén presionado el botón de encendido durante el arranque para ingresar al modo One True Recovery (1TR) y luego cambia a Seguridad reducida y marca la casilla para activar las extensiones del kernel. Esta acción también requiere ingresar una contraseña de administrador para autorizar la reducción de seguridad. La combinación del requisito de 1TR y la contraseña dificulta que los atacantes sólo de software que inician dentro de macOS puedan inyectar kexts en macOS, que luego podrían manipular para obtener privilegios para el kernel.
Después de que un usuario autoriza la carga de kexts, se utiliza el flujo de carga de extensiones de kernel aprobadas por el usuario que se explicó anteriormente para autorizar la instalación de kexts. La autorización que se usa para el flujo anterior también se usa para capturar un hash SHA384 de la lista de kexts autorizadas por el usuario (UAKL) en LocalPolicy. El daemon de administración del kernel (kmd
) es entonces el responsable de validar sólo aquellas kexts que se encuentran en el 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 incluirse en la AuxKC.
Si la SIP se desactiva, la firma de la kext no se aplica.
Este enfoque permite flujos de seguridad permisiva en los que los desarrolladores o usuarios que no forman parte del programa de desarrolladores de Apple prueban las kexts antes de que se firmen.
Después de que se crea la AuxKC, su medición se envía al Secure Enclave para firmarse e incluirse en una estructura de datos Image4 que puede ser evaluada por iBoot durante el arranque. Como parte de la construcción de la AuxKC, también se genera una recepción de kext, la cual contiene la lista de kexts que se incluyeron en la AuxKC, ya que el conjunto podría ser un subconjunto de la UAKL en caso de que se encuentren kexts no permitidas. Un hash SHA384 de la estructura de datos Image4 de la AuxKC y la recepción de la kext se incluyen en LocalPolicy. El hash de Image4 de la AuxKC se utiliza para una verificación adicional por parte de iBoot durante el arranque para garantizar que no sea posible arrancar un archivo Image4 de AuxKC más antiguo firmado por el Secure Enclave con una LocalPolicy más nueva. Los subsistemas, tales como Apple Pay, utilizan la recepción de la kext para determinar si hay alguna kext cargada que pudiera interferir con la confiabilidad de macOS. Si la hay, puede que se desactiven las funcionalidades de Apple Pay.
Extensiones del sistema
macOS 10.15 permite a los desarrolladores extender las capacidades de macOS al instalar y administrar las extensiones del sistema que se ejecutan en el espacio del usuario, en lugar de hacerlo en el nivel del kernel. Al ejecutarse en el espacio del usuario, las extensiones del sistema aumentan la estabilidad y la seguridad de macOS. Aunque las kexts inherentemente tienen acceso total al sistema operativo completo, las extensiones que se ejecutan en el espacio del usuario sólo reciben los privilegios necesarios para realizar sus funciones específicas.
Los desarrolladores pueden usar infraestructuras, como DriverKit, EndpointSecurity y NetworkExtension para escribir en unidades USB y de interfaz humana, herramientas de seguridad de punto final (como agentes de prevención de pérdida de datos u otros agentes de punto final), y herramientas de VPN y redes; todo sin necesitar escribir kexts. Los agentes de seguridad de terceros sólo se deben usar si aprovechan estas API o si tienen un mapa de ruta sólido para hacer la transición hacia ellas, y fuera de las extensiones de kernel.
Carga de extensiones de kernel aprobadas por el usuario
Para mejorar la seguridad, se necesita el consentimiento del usuario para cargar las extensiones de kernel instaladas durante o después de la instalación de macOS 10.13. A este proceso se le conoce como carga de extensión de kernel aprobada por el usuario. Se requiere la autorización del administrador para aprobar una extensión de kernel. Las extensiones de kernel no requieren autorización si ocurre lo siguiente:
Se instalaron en una Mac con macOS 10.12 o versiones anteriores.
Están reemplazando extensiones aprobadas previamente.
Tienen permitido cargarse sin el consentimiento del usuario al usar la herramienta de línea de comandos
spctl
disponible cuando se arranca la Mac en recoveryOS.Tienen permitido cargarse usando la configuración de la administración de dispositivos móviles (MDM).
A partir de macOS 10.13.2, los usuarios pueden usar MDM para especificar una lista de extensiones de kernel que se cargue sin el consentimiento del usuario. Esta opción requiere una Mac con macOS 10.13.2 que esté inscrita en una solución MDM ya sea con Apple School Manager, Apple Business Manager o una inscripción a MDM realizada por el usuario.