Sicurezza del volume di sistema firmato
In macOS 10.15, Apple ha introdotto il volume di sistema di sola lettura, ovvero un volume dedicato e isolato per i contenuti di sistema. macOS 11 o versioni successive aggiunge delle protezioni crittografiche forti per i contenuti di sistema con un volume di sistema firmato. Il volume di sistema firmato è dotato di un meccanismo nel kernel che verifica l’integrità dei contenuti del sistema e rifiuta qualsiasi dato (codice e non codice) che non disponga di una firma crittografica valida fornita da Apple. A partire da iOS 15 e iPadOS 15, anche il volume di sistema su iPhone e iPad acquisisce la protezione crittografica di un volume di sistema firmato.
Il volume di sistema firmato non solo aiuta a impedire la manomissione del software Apple che fa parte del sistema operativo, rende anche l’aggiornamento del software di macOS più affidabile e molto più sicuro. E dato che il volume di sistema firmato utilizza istantanee APFS (Apple File System), se un aggiornamento non può essere effettuato, è possibile ripristinare la versione meno recente del sistema senza eseguire una reinstallazione.
Fin dalla sua introduzione, APFS ha garantito l’integrità dei metadati del file system tramite checksum non crittografici sul dispositivo di archiviazione interno. Il volume di sistema firmato rafforza il meccanismo di integrità aggiungendo hash crittografici, estendendolo quindi a ogni byte dei dati dei file. Ai dati del dispositivo di archiviazione interno (compresi i metadati del file system) viene applicato un hash crittografico nel percorso di lettura e l’hash viene quindi confrontato con un valore atteso nei metadati del file system. In caso di mancata corrispondenza, il sistema presume che i dati siano stati manomessi e non li restituirà al software che li richiede.
Ciascun hash SHA256 del volume di sistema firmato viene archiviato nell’albero principale dei metadati del file system, a cui, a sua volta, viene applicato un hash. E dato che ogni nodo dell’albero verifica in maniera ricorsiva l’integrità degli hash dei nodi inferiori, in maniera simile a un albero di hash binario (Merkle), il valore hash del nodo radice, chiamato sigillo, raccoglie ogni byte di dati nel volume di sistema firmato, il che significa che la firma crittografica copre l’intero volume di sistema.
Durante l’installazione e l’aggiornamento di macOS, il sigillo viene ricalcolato dal file system sul dispositivo e tale misurazione viene confrontata con quella firmata da Apple. Sui Mac dotati di chip Apple, il bootloader verifica il sigillo prima di trasferire il controllo al kernel. Sui Mac dotati di processore Intel con chip di sicurezza Apple T2, il bootloader inoltra la misurazione e la firma al kernel, che quindi verifica il sigillo direttamente, prima di attivare il file system root. In entrambi i casi, se la verifica non va a buon fine, il processo di avvio si interrompe e all’utente verrà richiesto di reinstallare macOS. Questa procedura viene ripetuta a ogni avvio, a meno che l’utente non abbia scelto di usare una modalità di sicurezza inferiore e abbia separatamente scelto di disabilitare il volume di sistema firmato.
Durante gli aggiornamenti software di iOS e iPadOS, il volume di sistema viene preparato e ricalcolato in modo simile. I bootloader di iOS e iPadOS verificano che il sigillo sia intatto e che corrisponda al valore firmato da Apple prima di consentire al dispositivo di avviare il kernel. Se durante l’avvio non viene rilevata una corrispondenza, all’utente viene richiesto di aggiornare il software di sistema sul dispositivo. Gli utenti non sono autorizzati a disabilitare la protezione di un volume di sistema firmato su iOS e iPadOS.
Volume di sistema firmato e firma del codice
La firma del codice è ancora presente e implementata dal kernel. Il volume di sistema firmato fornisce protezione per ogni singolo byte letto dal dispositivo di archiviazione interno. La firma del codice, invece, fornisce protezione quando gli oggetti Mach sono mappati nella memoria come eseguibili. Sia il volume di sistema firmato che la firma del codice proteggono il codice eseguibile in tutti i percorsi di lettura ed esecuzione.
Volume di sistema firmato e FileVault
In macOS 11 o versioni successive, una protezione equivalente dei contenuti di sistema a riposo è fornita dal volume di sistema firmato, quindi non è più necessario che il volume di sistema sia codificato. Qualsiasi modifica effettuata al file system a riposo viene rilevata dal file system stesso quando viene letta. Se l’utente ha attivato FileVault, i suoi contenuti sul volume di dati sono comunque codificati con un segreto fornito dall’utente.
Se l’utente sceglie di disabilitare il volume di sistema firmato, quando il sistema si trova a riposo esso diviene vulnerabile e una possibile manomissione potrebbe consentire a un hacker di estrarre dati utente codificati al prossimo avvio del sistema. Dunque il sistema non permette all’utente di disabilitare il volume di sistema firmato se FileVault è attivato. La protezione a riposo deve essere abilitata o disabilitata per entrambi i volumi in modo coerente.
In macOS 10.15 o versioni precedenti, FileVault protegge il software del sistema operativo a riposo codificando i contenuti dell’utente e del sistema con una chiave protetta da un segreto fornito dall’utente. Ciò impedisce a un hacker che ha accesso fisico al dispositivo di accedere al file system contenente il software di sistema o di modificarlo.
Volume di sistema firmato e Mac con chip di sicurezza Apple T2
Sui Mac con chip di sicurezza Apple T2, solo macOS stesso è protetto dal volume di sistema firmato. Il software in esecuzione sul chip T2 e che verifica macOS non è protetto dall’avvio protetto.