Cachés de confianza
Uno de los objetos incluidos en la cadena de arranque seguro es la caché de confianza estática, un registro de confianza de todos los objetos binarios Mach-O que se controlan en el volumen del sistema firmado. Cada Mach-O se representa con un hash de directorio de código. Para una búsqueda eficaz, estos hashes se ordenan antes de insertarse en la caché de confianza. El directorio de código es el resultado de la operación de firma realizada por codesign(1)
. Para aplicar la caché de confianza, la SIP debe permanecer activada. Para desactivar la aplicación de la caché de confianza en un Mac con chip de Apple, se debe establecer el arranque seguro en el modo de seguridad permisiva.
Cuando se ejecuta un archivo binario (ya sea para originar un nuevo proceso o para asignar código ejecutable a un proceso existente), su directorio de código se extrae y se convierte en un hash. Si el hash resultante se encuentra en la caché de confianza, se concederán privilegios de plataforma a las asignaciones ejecutables creadas para el archivo binario; es decir, pueden poseer cualquier autorización y ejecutarse sin verificación adicional en lo que respecta a la autenticidad de la firma. Esto contrasta con un Mac basado en Intel, donde el certificado de Apple que firma los archivos binarios transfiere los privilegios de plataforma al contenido del sistema operativo (este certificado no limita qué autorizaciones puede poseer el archivo binario).
Los archivos binarios que no son de plataforma (por ejemplo, código de terceros certificado) deben tener cadenas de certificados válidas para poder ejecutarse y las autorizaciones que puedan poseer estarán restringidas por el perfil de firma emitido para el desarrollador por el programa para desarrolladores de Apple.
Todos los archivos binarios incluidos en macOS están firmados con un identificador de plataforma. En un Mac con chip de Apple, este identificador se usa para indicar que, aunque el archivo binario está firmado por Apple, el hash de su directorio de código debe estar presente en la caché de confianza para poder ejecutarse. En un Mac basado en Intel, el identificador de plataforma se usa para realizar una revocación específica de archivos binarios a partir de una versión anterior de macOS, lo que impide que esos archivos binarios se ejecuten en versiones más recientes.
La caché de confianza estática bloquea completamente un conjunto de archivos binarios en una versión de macOS determinada. Este comportamiento ayuda a impedir que los archivos binarios firmados legítimamente por Apple de sistemas operativos anteriores se introduzcan en versiones más recientes para que un atacante consiga ventaja.
Código de plataforma proporcionado fuera del sistema operativo
Apple proporciona archivos binarios (por ejemplo, Xcode y la pila de herramientas de desarrollo) que no están firmados con un identificador de plataforma. Incluso en este caso, se pueden ejecutar con privilegios de plataforma en un Mac con chip de Apple y en un Mac con un chip T2. Dado que este software de plataforma se proporciona independientemente de macOS, no se encuentra sujeto a los comportamientos de revocación impuestos por la caché de confianza estática.
Cachés de confianza cargables
Apple proporciona determinados paquetes de software con cachés de confianza cargables. Estas cachés tienen la misma estructura de datos que la caché de confianza estática. Sin embargo, aunque solo hay una caché de confianza estática y su contenido siempre está bloqueado en intervalos de solo lectura después de que se complete la inicialización temprana del kernel, se añaden cachés de confianza cargables al sistema en tiempo de ejecución.
Estas cachés de confianza se autentican mediante el mismo mecanismo que autentica el firmware de arranque (personalización que usa el servicio de firmas de confianza de Apple) o bien como objetos firmados globalmente (cuyas firmas no los vinculan a un servicio determinado).
Un ejemplo de una caché de confianza personalizada es la caché que se proporciona con la imagen de disco que se usa para realizar diagnósticos de campo en un Mac con chip de Apple. Esta caché de confianza está personalizada, junto con la imagen del disco, y se carga en el kernel del ordenador Mac mientras se arranca en un modo de diagnóstico. La caché de confianza permite al software de la imagen de disco ejecutarse con privilegio de plataforma.
Las actualizaciones de software de macOS incluyen un ejemplo de una caché de confianza firmada. Esta caché de confianza permite que un fragmento de código de la actualización de software (el motor de actualización) se ejecute con privilegio de plataforma. El motor de actualización realiza todo el trabajo para preparar la actualización de software, puesto que el sistema de host carece de la capacidad para ofrecer un rendimiento coherente entre las distintas versiones.