KPTI, la nuova funzionalitá del kernel che mitiga meltdown

Scritto da il
Redatto da

Una nuova serie di vulnerabilità è stata scovata di recente, si parla di meltdown. Come parte della risoluzione a questo problema, é stato introdotto nel kernel una nuova funzionalità chiamata Kernel Page Table Isolation (KPTI)

Questa nuova funzione fornisce maggior protezione con alcune penalizzazioni delle prestazioni. La nuova patch é giá disponibile nelle nuove release di Fedora, effettuando l'aggiornamento del kernel.

I moderni processori per computer desktop offrono diversi livelli di sicurezza per l'esecuzione del codice. Il kernel gira al livello più privilegiato (spazio del kernel) poiché ha bisogno di accedere a tutte le componenti dell'hardware. Quasi tutte le altre applicazioni funzionano a un livello di privilegio più basso (spazio utente) e fanno chiamate di sistema nel kernel per accedere ai dati privilegiati.

I processori moderni per computer desktop supportano anche la memoria virtuale. Il kernel imposta le tabelle delle pagine per controllare il mapping tra un indirizzo virtuale e un indirizzo fisico.

L'accesso tra kernel e userspace è controllato anche dalle tabelle di pagina. Una pagina mappata per il kernel non è accessibile da userspace sebbene il kernel in genere possa accedere allo spazio utente, si tratta di una misura di sicurezza.

La conversione di queste mappature può essere lunga, pertanto l'hardware dispone di un buffer di conversione lookaside (TLB) per memorizzarle.

A volte è necessario rimuovere le vecchie mappature (flush the TLB) ma questa é un'azione a volte molto pesante e il codice è scritto per minimizzare tali chiamate. Il trucco qui è di avere sempre le tabelle della pagina del kernel mappata quando i processi dell'utente sono in esecuzione.

Le autorizzazioni della tabella di paging impediscono allo userspace di accedere alle mappature del kernel ma il kernel stesso può accedere immediatamente alle mappature quando viene effettuata una chiamata di sistema.

L'exploit di Meltdown e il modo in cui KPTI lo mitiga

L'exploit di Meltdown ha dimostrato che avere la mappatura del kernel disponibile in userspace può essere rischioso. I processori moderni prelevano i dati da tutte le mappature per essere eseguiti il più velocemente possibile.

Quali dati verranno precaricati dipende dall'implementazione della CPU. Quando un programma in userspace in esecuzione accede a una mappatura del kernel, si verificherà un errore e in genere il programma si blocca.

Tuttavia, la CPU può precaricare i dati del kernel senza causare alcuna modifica al programma in esecuzione. Il precaricamento di solito non è un rischio per la sicurezza grazie a dei controlli di permessi sugli indirizzi in modo che i programmi in userpace non possano accedere ai dati del kernel.

Quello che i ricercatori di Meltdown hanno scoperto è che è stato possibile misurare per quanto tempo gli accessi ai dati hanno permesso di ottenere informazioni sul sistema. Questo è ciò che viene definito un attacco di canale laterale. Le patch KPTI hanno rielaborato il modo in cui le tabelle di paging sono impostate in modo che il kernel non sia più mappato nello userspace. Ciò significa che lo spazio utente non può precaricare alcun dato del kernel e quindi l'exploit è mitigato. In realtà, scrivere un attacco per raccogliere dati utili da questo exploit può richiedere settimane o mesi per svilupparsi in un singolo sistema. Tuttavia, nell'interesse della sicurezza, le patch KPTI sono state sviluppate per chiudere questo buco.

L'effetto collaterale di non avere sempre mappate le tabelle della pagina del kernel significa che i TLB devono essere svuotati più spesso, causando una penalizzazione delle prestazioni. Per impostazione predefinita, Fedora ha abilitato KPTI per fornire maggior sicurezza agli utenti. KPTI può essere disattivato passando l'istruzione nopti dalla riga di comando.

How Meltdown Workshttp://www.i-programmer.info/news/149-security/11437-how-meltdown-works.html
Fedora Meltdownhttps://fedoramagazine.org/protect-fedora-system-meltdown/
Canale lateralehttps://it.wikipedia.org/wiki/Canale_laterale
Meltdown and Spectre | https://meltdownattack.com/

history_edu Revisioni