Proceso de arranque en una Mac con Apple Chip
Al encender una computadora Mac con Apple Chip, se realiza un proceso de arranque muy similar al de un iPhone o iPad.
El chip ejecuta código desde la ROM de arranque en el primer paso de la cadena de confianza. El arranque seguro de macOS en una Mac con Apple Chip verifica no sólo el código del sistema operativo en sí, sino también las políticas de seguridad e incluso las kexts (lo cual es compatible, aunque no se recomienda) configuradas por usuarios autorizados.
Cuando se ejecuta el gestor de arranque de bajo nivel (LLB), este verifica las firmas y carga firmware vinculado con el sistema para núcleos intra-SoC, como el almacenamiento, la pantalla, la administración del sistema y los controladores Thunderbolt. El LLB también es responsable de cargar LocalPolicy, que es un archivo firmado por el procesador Secure Enclave. El archivo LocalPolicy describe la configuración que el usuario seleccionó para las políticas de seguridad de ejecución y arranque del sistema. LocalPolicy tiene el mismo formato de estructura de datos que los demás objetos de arranque, pero está firmado de forma local mediante una clave privada, la cual está disponible sólo dentro del Secure Enclave de una computadora en particular, en lugar de estar firmado por un servidor central de Apple (tal como en las actualizaciones de software).
Para ayudar a evitar la reproducción de cualquier LocalPolicy anterior, el LLB debe buscar un valor de antirreproducción en el componente de almacenamiento seguro adjunto al Secure Enclave. Para hacer esto, utiliza la ROM de arranque del Secure Enclave y se asegura de que el valor de antirreproducción en el archivo LocalPolicy coincida con el del componente de almacenamiento seguro. Esto ayuda a evitar que se le vuelva a aplicar al sistema un LocalPolicy anterior, que podría tener una configuración de seguridad menor, después de que se ha actualizado la seguridad. El resultado es que el arranque seguro en una Mac con Apple Chip ayuda a proteger no sólo contra el retroceso a versiones del sistema operativo anteriores, sino también contra la reducción de la política de seguridad.
El archivo LocalPolicy captura si el sistema operativo está configurado para seguridad máxima, reducida o permisiva.
Máxima seguridad: el sistema se comporta como iOS y iPadOS, y durante el arranque sólo permite software que tenga la versión más reciente que estaba disponible al momento de la instalación.
Seguridad reducida: LLB recibe la instrucción de confiar en firmas “globales” que se incluyen con el sistema operativo. Esto permite al sistema ejecutar versiones anteriores de macOS. Debido a que las versiones anteriores de macOS inevitablemente tienen vulnerabilidades sin parches, este modo de seguridad se describe como Seguridad reducida. Este es también el nivel de política necesario para admitir el arranque de extensiones del kernel (kexts).
Seguridad permisiva: el sistema se comporta del mismo modo que Seguridad reducida, en el sentido de que usa la verificación de firmas global para iBoot y más, pero también le indica a iBoot que debe aceptar algunos objetos de arranque firmados por el Secure Enclave con la misma clave usada para firmar LocalPolicy. Este nivel de política admite que los usuarios creen, firmen y arranquen sus propios kernels XNU personalizados.
Si LocalPolicy le indica a LLB que el sistema operativo seleccionado se está ejecutando en Máxima seguridad, LLB evalúa la firma personalizada para iBoot; y si se ejecuta en seguridad reducida o permisiva, evalúa la firma global. Cualquier error de verificación de firma ocasionará que el sistema se inicie en recoveryOS para ofrecer opciones de reparación.
Después de que se pasa de LLB a iBoot, se carga el firmware vinculado con macOS, como el del motor neural seguro, el procesador siempre activo y otros. iBoot también analiza la información sobre LocalPolicy que le entrega LLB. Si LocalPolicy indica que debe existir una colección del kernel auxiliar (AuxKC), iBoot la busca en el sistema de archivos, verifica que esté firmada por el Secure Enclave mediante la misma clave que LocalPolicy y comprueba que su hash coincida con un hash almacenado en el archivo LocalPolicy. Si se verifica la AuxKC, iBoot la coloca en la memoria junto con la colección del kernel de arranque, antes de bloquear la región completa de la memoria que cubre la colección del kernel de arranque y la AuxKC con la protección de la integridad del coprocesador del sistema (SCIP). Si la política indica que debería haber una AuxKC presente pero no se encuentra, el sistema continúa arrancando en macOS sin ella. iBoot también es responsable de verificar el hash de raíz para el volumen del sistema firmado (SSV) con la finalidad de revisar que el sistema de archivos que montará el kernel tenga una integridad completa verificada.