Caches de confiança
Um dos objetos incluídos na cadeia da Inicialização Segura é o cache de confiança estático, um registro confiado de todos os binários Mach-O masterizados no volume de sistema assinado. Cada Mach-O é representado por um hash de diretório de código. Para ter uma busca eficiente, esses hashes são ordenados antes de serem inseridos no cache de confiança. O diretório de código é o resultado da operação de assinatura realizada por codesign(1)
. Para exigir o cache de confiança, a SIP deve permanecer ativada. Para desativar a exigência do cache de confiança em um Mac com Apple Silicon, a inicialização segura deve ser configurada como Segurança Permissiva.
Quando um binário é executado (seja como parte da semeação de um novo processo ou para mapear o código executável em um processo existente), seu diretório de código é extraído e tem um hash calculado. Se o hash resultante for encontrado no cache de confiança, os mapeamentos executáveis criados para o binário receberão privilégios de plataforma, o que significa que eles poderão possuir qualquer direito e serem executados sem nenhuma verificação adicional quanto à autenticação da assinatura. Isso contrasta com um Mac baseado em Intel, onde os privilégios de plataforma são passados ao conteúdo do sistema operacional pelo certificado da Apple que assina os binários. (Esse certificado não limita quais direitos o binário pode possuir.)
Binários de fora da plataforma (por exemplo, códigos de terceiros autenticados) devem ter cadeias de certificados válidas para que sejam executados e os direitos que possuem são limitados pelo perfil de assinatura emitido para o desenvolvedor pelo Programa Apple Developer.
Todos os binários fornecidos com o macOS são assinados com um identificador de plataforma. Em um Mac com Apple Silicon, esse identificador é usado para indicar que, mesmo que o binário esteja assinado pela Apple, seu hash do diretório de código deve estar presente no cache de confiança para que seja executado. Em um Mac baseado em Intel, o identificador de plataforma é usado para realizar a revogação direcionada de binários de uma versão mais antiga do macOS; essa revogação direcionada ajuda a impedir que esses binários sejam executados em versões mais recentes.
O cache de confiança estático bloqueia completamente um conjunto de binários a uma versão determinada do macOS. Esse comportamento ajuda a impedir que binários legitimamente assinados pela Apple de sistemas operacionais mais antigos sejam introduzidos em versões mais recentes para que um invasor obtenha vantagens.
Código de plataforma fornecido fora do sistema operacional
A Apple fornece alguns binários, como o Xcode e o conjunto de ferramentas de desenvolvimento, que não são assinados com um identificador de plataforma. Mesmo assim, eles ainda têm permissão de execução com privilégios de plataforma em um Mac com Apple Silicon e Mac com um chip T2. Por esse software de plataforma ser fornecido independentemente do macOS, ele não está sujeito aos comportamentos de revogação impostos pelo cache de confiança estático.
Caches de confiança carregáveis
A Apple fornece certos pacotes de software com caches de confiança carregáveis. Esses caches têm a mesma estrutura de dados dos caches de confiança estáticos. Mas embora haja apenas um cache de confiança estático — e a garantia de que seu conteúdo esteja sempre bloqueado em intervalos somente leitura após a primeira inicialização do kernel ter terminado — caches de confiança carregáveis são adicionados ao sistema no tempo de execução.
Esses caches de confiança são autenticados pelos mesmos mecanismos que autenticam a inicialização do firmware (personalização que usa o serviço de assinatura confiável da Apple) ou como objetos assinados globalmente (cujas assinaturas não os vincula a um dispositivo em particular).
Um exemplo de um cache de confiança personalizado é o cache, fornecido com a imagem de disco usada para realizar o diagnóstico em um Mac com Apple Silicon. Esse cache de confiança é personalizado, junto com a imagem de disco, e carregado no kernel do computador de um Mac enquanto ele está inicializado em um modo de diagnóstico. O cache de confiança permite que o software na imagem de disco seja executado com privilégios de plataforma.
Um exemplo de cache de confiança assinado globalmente é fornecido com as atualizações e software do macOS. Esse cache de confiança permite que um pedaço de código na atualização de software — o cérebro da atualização — seja executado com privilégios de plataforma. O cérebro da atualização realiza qualquer trabalho para preparar a atualização de software que o sistema host não tenha a capacidade de realizar de maneira consistente entre as versões.