Integrità del sistema operativo
Il software dei sistemi operativi Apple è progettato fin dalle basi in maniera tale da garantire la sicurezza. Esso include una catena di attendibilità hardware (sfruttata per consentire l’avvio protetto) e un processo di aggiornamento del software al tempo stesso rapido e sicuro. I sistemi operativi Apple fanno anche uso di chip appositamente creati per fornire funzionalità hardware che aiutano a impedire attacchi durante l’esecuzione del sistema. Queste funzionalità proteggono l’integrità del codice attendibile mentre si trova in esecuzione. In breve, il software dei sistemi operativi Apple aiuta a contrastare gli attacchi a prescindere dal fatto che provengano da app dannose, dal web o da qualsiasi altro canale. Le protezioni elencate di seguito sono disponibili sui dispositivi con i SoC Apple supportati, come iOS, iPadOS, tvOS, watchOS e adesso anche macOS sui Mac dotati di chip Apple.
Funzionalità | A10 | A11, S3 | A12, A13, A14 S4 - S9 | A15, A16, A17 | M1, M2, M3 |
Vedi la nota 1 sotto. | |||||
Vedi la nota 2 sotto. |
Nota 1: il Page Protection Layer (PPL) richiede che la piattaforma esegua solo codice firmato e attendibile. Si tratta di un modello di sicurezza che non è applicabile a macOS.
Nota 2: il Secure Page Table Monitor (SPTM) è supportato su A15, A16 e A17 e sostituisce il Page Protection Layer sulle piattaforme supportate.
Protezione dell’integrità del kernel
Una volta terminata l’inizializzazione del kernel del sistema operativo, viene abilitata la protezione dell’integrità del kernel (KIP, Kernel Integrity Protection) per aiutare a impedire modifiche al codice del kernel e dei driver. Il controller della memoria fornisce un’area di memoria fisica protetta usata da iBoot per caricare il kernel e le estensioni del kernel. Una volta completato l’avvio, il controller della memoria nega la scrittura sulla regione di memoria fisica protetta. L’unità di gestione della memoria del processore per le applicazioni è configurata in modo tale da aiutare a impedire la mappatura di codice con privilegi dalla memoria fisica al di fuori dalla regione di memoria protetta e in modo tale da aiutare a impedire mappature scrivibili della memoria fisica all’interno della regione di memoria del kernel.
Per impedire la riconfigurazione, l’hardware utilizzato per abilitare la protezione dell’integrità del kernel viene bloccato dopo il completamento della procedura di avvio.
Restrizioni rapide dei permessi
A partire dai SoC Apple A11 Bionic e S3, è stato introdotto un nuovo primitivo hardware, le restrizioni rapide dei permessi, che includono un registro CPU che limita velocemente i permessi per thread. Grazie a queste restrizioni rapide dei permessi (conosciute anche come registri APRR), i sistemi operativi supportati possono rimuovere i permessi di esecuzione dalla memoria senza il sovraccarico di una chiamata di sistema e di uno svuotamento o un’analisi della tabella della pagina. Questi registri forniscono un ulteriore livello di protezione dagli attacchi dal web, in particolare per il codice compilato durante il runtime (compilazione “just in time”), perché la memoria non può essere eseguita nello stesso momento in cui è in corso la lettura e la scrittura.
Protezione dell’integrità dei coprocessori di sistema
Il firmware dei coprocessori gestisce molte attività fondamentali del sistema, per esempio Secure Enclave, il processore del sensore di immagini e il coprocessore di movimento. La sua sicurezza è quindi una parte fondamentale della sicurezza del sistema globale. Per impedire la modifica al firmware dei coprocessori, Apple utilizza un meccanismo chiamato protezione dell’integrità dei coprocessori di sistema (SCIP).
Il SCIP funziona in modo simile alla protezione dell’integrità del kernel (KIP): durante l’avvio, iBoot carica il firmware di ciascun coprocessore in una regione di memoria protetta, riservata e separata dalla regione per la protezione dell’integrità del kernel. iBoot configura ciascuna unità di memoria dei coprocessori per aiutare a impedire quanto segue:
Mappature eseguibili al di fuori della parte di regione di memoria protetta.
Mappature scrivibili all’interno della parte di regione di memoria protetta.
Inoltre al momento dell’avvio, viene usato il sistema operativo Secure Enclave per configurare il SCIP per Secure Enclave. Una volta completato il processo di avvio, l’hardware utilizzato per abilitare il SCIP viene bloccato. Questo meccanismo è progettato per impedire la riconfigurazione.
Codici di autenticazione dei puntatori
I codici di autenticazione dei puntatori (PAC) sono utilizzati per proteggere contro gli attacchi mirati ai bug di corruzione della memoria. Il software di sistema e le app integrate utilizzano i codici di autenticazione dei puntatori per aiutare a impedire la modifica dei puntatori alle funzioni e degli indirizzi di restituzione (puntatori al codice). Un PAC usa cinque valori segreti a 128 bit per firmare i dati e le istruzioni del kernel, e ogni processo nello spazio utente ha le proprie chiavi B. Agli elementi vengono aggiunti salt e firme come indicato di seguito.
Elemento | Chiave | Salt |
---|---|---|
Indirizzo di ritorno della funzione | IB | Indirizzo archiviazione |
Puntatori funzione | IA | 0 |
Funzione di richiamo del blocco | IA | Indirizzo archiviazione |
Cache metodo Objective-C | IB | Indirizzo archiviazione + Classe + Selettore |
Voci V-Table C++ | IA | Indirizzo archiviazione + Hash (nome metodo mangled) |
Etichetta Goto calcolata | IA | Hash (nome funzione) |
Stato thread del kernel | GA | • |
Registri stato thread dell’utente | IA | Indirizzo archiviazione |
Puntatori V-Table C++ | DA | 0 |
Il valore della firma è archiviato nei bit di inserimento inutilizzati all’inizio del puntatore a 64 bit. La firma viene verificata prima dell’uso e l’inserimento viene ripristinato per aiutare a garantire il funzionamento dell’indirizzo del puntatore. Se la verifica non va a buon fine, l’operazione viene interrotta. Questa verifica aumenta la difficoltà di molti attacchi come ad esempio un attacco basato sul return oriented programming, che tenta di ingannare il dispositivo in modo tale che esegua del codice in maniera dannosa manipolando gli indirizzi di ritorno delle funzioni archiviati sullo stack.
Page Protection Layer (PPL)
Il Page Protection Layer (PPL) in iOS, iPadOS e watchOS è progettato per proteggere il codice dello spazio utente dalle modifiche una volta che è stato completato il processo di verifica della firma. Basandosi sulla protezione dell’integrità del kernel e sulle restrizioni veloci alle autorizzazioni, il PPL gestisce gli override dei permessi della tabella della pagina per garantire che le pagine protette contenenti codice utente e le tabelle delle pagine possano essere modificate unicamente dal PPL. Il sistema fornisce una riduzione massiva della superficie di attacco supportando l’applicazione dell’integrità del codice su tutto il sistema, anche di fronte a un kernel compromesso. Il PPL non è offerto in macOS perché è applicabile solo ai sistemi in cui tutto il codice deve essere firmato.
Secure Page Table Monitor e Trusted Execution Monitor
Secure Page Table Monitor (SPTM) e Trusted Execution Monitor (TXM) sono concepiti per funzionare insieme poiché contribuiscono a proteggere da modifica le page table per i processi sia utente che per il kernel, anche quando gli hacker dispongono di capacità di scrittura a livello di kernel e sono in grado di aggirare le protezioni del flusso di controllo. STPM usufruisce di un livello di privilegi superiore rispetto al kernel e utilizza il TXM con privilegi inferiori per applicare le politiche che governano l’esecuzione del codice. Questo sistema è concepito in modo da evitare che la manomissione del TXM comporti automaticamente l’aggiramento dell’SPM, grazie alla separazione dei privilegi e alla gestione dell’affidabilità tra di loro. Nei SOC di A15, A16, e A17, SPTM (insieme a TXM) sostituisce PPL, poiché offre una superficie di attacco più piccola, che non si basa sull’attendibilità del kernel, anche durante le prime fasi dell’avvio. Inoltre, SPTM si basa su nuovi primitivi del chip che rappresentano un’evoluzione delle restrizioni rapide dei permessi utilizzate da PPL.