Cachés de confianza
Uno de los objetos incluidos en la cadena de arranque seguro es la caché de confianza estática, que es un registro de confianza de todos los binarios Mach-O que se controla en el volumen del sistema firmado. Cada Mach-O está representado por un hash de directorio de código. Para una búsqueda eficiente, estos hashes se ordenan antes de insertarse en la caché de confianza. El directorio de códigos es el resultado de la operación de firma realizada por codesign(1)
. Para hacer cumplir la caché de confianza, la SIP debe permanecer activada. Para desactivar la aplicación de la caché de confianza en una Mac con Apple Chip, el arranque seguro debe configurarse como Seguridad permisiva.
Cuando se ejecuta un binario (ya sea como parte de generar un proceso nuevo o de asignar código ejecutable a un proceso existente), su directorio de códigos se extrae y se genera un hash. Si el hash resultante se encuentra en la caché de confianza, las asignaciones ejecutables creadas para el binario recibirán privilegios de plataforma; es decir que podrán tener cualquier privilegio y podrán ejecutarse sin verificaciones adicionales de la autenticidad de la firma. Esto contrasta con las computadoras Mac basadas en Intel, en donde los privilegios de plataforma se transfieren al contenido del sistema operativo mediante el certificado de Apple que firma los archivos binarios (este certificado no limita qué privilegios puede tener el binario).
Los 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 pueden poseer están limitadas por el perfil de firma emitido para el desarrollador por parte del Programa de desarrolladores de Apple.
Todos los binarios enviados dentro de macOS están firmados con un identificador de plataforma. En las computadoras Mac con Apple Chip, este identificador se usa para indicar que, aunque el binario está firmado por Apple, el hash de su directorio de códigos debe estar presente en la caché de confianza para poder ejecutarse. En las computadoras Mac basadas en Intel, el identificador de plataforma se usa para realizar la revocación dirigida de binarios de una versión anterior de macOS, la cual ayuda a impedir que se ejecuten los binarios en versiones más recientes.
La caché de confianza estática bloquea por completo un conjunto de binarios en una versión determinada de macOS. Este comportamiento ayuda a impedir que los binarios de sistemas operativos más antiguos que están legítimamente firmados por Apple se introduzcan en sistemas más recientes para que un atacante obtenga algún beneficio.
Código de plataforma enviado fuera del sistema operativo
Apple envía algunos binarios, por ejemplo, Xcode y el conjunto de herramientas de desarrollo, que no están firmados con un identificador de plataforma. Aún así, se les permite ejecutarse con privilegios de plataforma en las Mac con Apple Chip o con un chip T2. Debido a que este software de plataforma se envía de forma separada de macOS, no está sujeto a los comportamientos de revocación impuestos por la caché de confianza estática.
Cachés de confianza cargables
Apple envía algunos 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 sólo hay una caché de confianza estática y se garantiza que sus contenidos siempre se bloquearán en rangos de sólo lectura después de que se haya completado la inicialización del kernel, las cachés de confianza cargables se agregan al sistema durante el tiempo de ejecución.
Estas cachés de confianza se autentican a través del mismo mecanismo que autentica el firmware de arranque (personalización mediante el servicio de firma confiable de Apple) o como objetos firmados globalmente (cuyas firmas no los vinculan a un dispositivo en particular).
Un ejemplo de caché de confianza personalizada es la caché que se envía con la imagen de disco que se utiliza para realizar diagnósticos en campo en computadoras Mac con Apple Chip. Esta caché de confianza se personaliza, junto con la imagen del disco, y se carga en el kernel de la computadora Mac en cuestión mientras se arranca en modo de diagnóstico. La caché de confianza permite que el software que está dentro de la imagen del disco se ejecute con privilegios de plataforma.
Un ejemplo de una caché de confianza firmada globalmente se envía con las actualizaciones de software de macOS. Esta caché de confianza permite que una parte del código dentro de la actualización de software, el cerebro de la actualización, se ejecute con privilegios de plataforma. El cerebro de la actualización realiza cualquier proceso necesario para organizar la actualización de software que el sistema host no tenga la capacidad de realizar de manera consistente en todas las versiones.