Cache di attendibilità
Uno degli oggetti inclusi nella catena di avvio protetto è la cache di attendibilità statica, un record attendibile di tutti i binari Mach-O salvati nel volume di sistema firmato. Ciascun Mach-O è rappresentato da un hash di directory di codice. Per rendere efficiente la ricerca, tali hash vengono ordinati prima di essere inseriti nella cache di attendibilità. La directory di codice è il risultato dell’operazione di firma eseguita da codesign(1)
. Per implementare la cache di attendibilità, la protezione dell’integrità del sistema deve rimanere abilitata. Per poter disabilitare l’implementazione della cache di attendibilità sui Mac dotati di chip Apple, l’avvio protetto deve essere impostato su “Sicurezza assente”.
Quando viene eseguito un binario (sia che generi un nuovo processo o che mappi del codice eseguibile in un processo esistente), viene estratta la relativa directory di codice a cui viene applicato un hash. Se l’hash risultante viene trovato nella cache di attendibilità, alle mappature eseguibili create per il binario verranno concessi i privilegi da piattaforma, ovvero possono avere qualsiasi permesso ed essere eseguite senza ulteriori verifiche di autenticità della firma. Ciò è in contrasto con quello che si verifica sui Mac dotati di processore Intel, dove i privilegi da piattaforma vengono concessi al contenuto del sistema operativo dal certificato Apple che firma i binari. (Questo certificato non pone restrizioni sui permessi che il binario potrebbe avere).
I binari non appartenenti alla piattaforma (ad esempio, codice autenticato di terze parti) devono avere catene di certificati valide per poter essere eseguiti e i permessi che potrebbero avere sono limitati dal profilo di firma emesso dall’Apple Developer Program allo sviluppatore.
Tutti i binari inclusi all’interno di macOS sono firmati con un identificativo di piattaforma. Sui Mac dotati di chip Apple, tale identificativo è utilizzato per indicare che, nonostante il binario sia firmato da Apple, il relativo hash della directory di codice deve essere presente nella cache di attendibilità perché possa essere eseguito. Sui Mac dotati di processore Intel, l’identificativo di piattaforma è utilizzato per eseguire una revoca mirata dei binari da versioni meno recenti di macOS; tale revoca mirata aiuta a impedirne l’esecuzione sulle versioni più recenti.
La cache di attendibilità vincola completamente un insieme di binari a una determinata versione di macOS. Ciò aiuta a impedire che binari legittimamente firmati da Apple provenienti da sistemi operativi meno recenti vengano introdotti da un hacker in versioni più nuove per trarne vantaggio.
Codice di piattaforma fornito al di fuori del sistema operativo
Apple fornisce alcuni binari (come ad esempio Xcode e l’insieme degli strumenti di sviluppo) che non sono firmati con un identificativo di piattaforma. Tuttavia, essi possono essere eseguiti con privilegi di piattaforma sui Mac dotati di chip Apple e sui Mac con chip T2. Dal momento che tale software di piattaforma viene fornito in maniera indipendente da macOS, non è soggetto alle metodologie di revoca imposte dalla cache di attendibilità statica.
Cache di attendibilità caricabili
Apple fornisce alcuni pacchetti software con delle cache di attendibilità caricabili. Tali cache hanno la stessa struttura di dati della cache di attendibilità statica. Ma sebbene vi sia una sola cache di attendibilità statica e i suoi contenuti siano sempre bloccati in intervalli di sola lettura dopo il completamento dell’inizializzazione iniziale del kernel, le cache di attendibilità caricabili vengono aggiunte al sistema in fase di esecuzione.
Queste cache di attendibilità vengono autenticate tramite lo stesso meccanismo che autentica il firmware di avvio (personalizzazione tramite il servizio di firma attendibile di Apple) oppure vengono autenticate come oggetti firmati globali (le cui firme non li legano a un particolare dispositivo).
Un esempio di cache di attendibilità personalizzata è quella fornita con l’immagine disco utilizzata per eseguire la diagnosi sui Mac dotati di chip Apple. Questa cache è personalizzata, insieme all’immagine disco, e caricata nel kernel del Mac mentre questo viene avviato in modalità di diagnosi. La cache di attendibilità consente al software all’interno dell’immagine disco di essere eseguito con privilegi da piattaforma.
Un esempio di cache di attendibilità firmata globalmente è fornita con gli aggiornamenti software di macOS. Questa cache di attendibilità consente a una parte del codice dell’aggiornamento software (la parte principale) di essere eseguita con privilegi da piattaforma. La parte principale effettua tutte quelle operazioni necessarie all’aggiornamento software che il sistema host non è in grado di eseguire in modo coerente tra una versione e l’altra.