Durante il 35-esimo Chaos Communication Congress, circa un anno dopo la prima pubblicazione relativa alle vulnerabilità hardware delle CPU taggate Meltdown e Spectre, un gruppo di ricercatori del dipartimento di tecnologia dell’università austriaca di Graz, ha parlato dello stato attuale delle vulnerabilità dei processori fino ad oggi conosciute. Spoiler: lo scorso anno ne sono venute alla luce parecchie.
Meltdown e Spectre in breve
Innanzitutto, ricordiamo cosa sono Meltdown e Spectre e in cosa si differenziano.
La vulnerabilità Meltdown è apparsa in quanto i moderni processori possono eseguire istruzioni “non in ordine” (out-of-order). Si tratta di una funzione molto pratica che accelera l’elaborazione dei codici; tuttavia, in alcuni casi, può capitare che il processore elabori un codice incline all’errore, ossia un codice che non dovrebbe essere assolutamente eseguito. In altre parole, il codice viene eseguito dal processore e soltanto dopo l’esecuzione diventa palese che l’operazione non possa essere completata; ciò accade proprio perché le istruzioni sono eseguite out-of-order.
Naturalmente, i risultati di tali operazioni non saranno né trasmessi né utilizzati da nessuna parte; tuttavia, lasciano delle tracce a livello della microarchitettura, ossia nella memoria cache del processore. E da lì possono essere estratti. Con il risultato che la cache può essere utilizzata per arrivare a dati che altrimenti non sarebbero accessibili, come una password ad esempio. Ecco come funziona: un programma può richiedere l’accesso ai dati nello storage, ai quali il sistema giustamente risponderà che l’accesso è vietato in quanto manca l’autorizzazione. Tuttavia, a causa dell’esecuzione out-of-order delle operazioni, la password finirà comunque nella cache e da lì potrà essere facilmente recuperata.
La vulnerabilità Spectre è simile a Meltdown; tuttavia, sebbene sia anch’essa legata all’accelerazione di computing del processore, è originata dalla funzione di predizione di branch dei processori moderni. In sostanza, un processore è in grado di predire, con un certo grado di accuratezza, che, siccome l’azione B normalmente segue l’azione A, può eseguire l’azione B ancora prima di ricevere i risultati di A. Se l’ipotesi si è rivelata corretta e l’azione B ha effettivamente seguito A, non ci sono problemi. Se i risultati di A indicano che il processore avrebbe dovuto completare l’azione C invece della B, il processore abbandonerà il branch B per spostarsi verso un altro dove completerà l’azione C.
Dato che la funzione di predizione di salto può essere istruita, nella maggior parte dei casi si ricorderà i pattern della sequenza delle azioni, migliorando notevolmente le performance del processore (se B ha seguito A per molte volte, il processore parte dal presupposto che B dovrà seguire sempre A in una determinata situazione). Eppure, le previsioni talvolta sbagliano (a volte arriva C invece di B, sebbene la predizione di branch si ricordi molto bene che normalmente A è seguita da B).
Se istruite a lungo il sistema dimostrando che una certa scelta è quella corretta e viene sempre eseguita e successivamente modificate un parametro in modo tale che diventi errata, il processore la eseguirà comunque per prima, per poi richiamarla dopo aver scoperto che avrebbe dovuto eseguirne un’altra. Ma, analogamente a quanto accade con Meltdown, il risultato di tale azione resterà, per esempio, nella cache, da dove sarà nuovamente estraibile.
Le conseguenze sono circa le stesse: Spectre apre una porticina all’accesso non autorizzato ai dati. Tale accesso può avvenire solo nel caso in cui la predizione del branch sia errata ̶ ma il semplice calcolo delle probabilità ci insegna che ciò accadrà.
Un anno dopo: circa venti nuove varianti Spectre e Meltdown
Dopo la scoperta delle prime vulnerabilità Spectre e Meltdown, i ricercatori hanno iniziato a indagare in modo più approfondito, scoprendo problemi analoghi con differenze minime. Hanno verificato che gli sviluppatori di processori utilizzano, inoltre, diverse ottimizzazioni che portano a vulnerabilità simili a Meltdown e Spectre. Il team dell’università di Graz ha identificato 14 vulnerabilità simili a Meltdown e 13 simili a Spectre, per un totale di 27 vulnerabilità hardware contro le due originali già all’inizio del 2018.
Inoltre, sebbene AMD avesse affermato già in precedenza che i suoi processori non fossero esposti ad alcun tipo di vulnerabilità Meltdown, i ricercatori hanno scoperto una variante Meltdown (chiamata Meltdown-BR), perfettamente operativa con i processori di AMD. A questo punto, i processori di tre dei maggiori fornitori ̶ AMD, ARM e Intel ̶ sono soggetti sia a Meltdown che Spectre. O, comunque, ad alcune delle varianti di entrambi.
Fortunatamente, una buona parte di queste numerose varianti non funziona con nessuna delle tre ̶ o meglio, i tester non sono riusciti a farle funzionare. Tuttavia, la maggior parte riesce a funzionare altrove.
Le società hanno iniziato a rilasciare delle patch per i microcodici dei processori, per i sistemi operativi e per i programmi individuali già a partire da gennaio 2018, allo scopo di mettere fine a questo tipo di seccature. Sfortunatamente, Spectre e Meltdown sono delle vulnerabilità hardware: esistono a livello hardware e non possono quindi essere completamente risolte con delle patch software.
Una di queste patch è stata implementata nel core di Linux OS, ma rallentava talmente il sistema che dopo poco tempo è stata rimossa dal codice.
Spectre è piuttosto problematico in quanto ha come target diversi componenti della microarchitettura e pertanto deve essere sviluppata una patch diversa per ognuno di essi. E ognuna di queste patch necessita che determinate funzioni siano disattivate o che vengano effettuate azioni aggiuntive, riducendo ulteriormente la performance.
Infatti, in alcuni casi le patch influiscono in modo talmente rigido sulle performance da far sì che un sistema con patch funzioni molto più lentamente rispetto a uno in cui i componenti vulnerabili del processore vengano completamente disattivati.
Il futuro di Spectre e Meltdown
Nell’ottobre 2018, Intel ha annunciato che i suoi nuovi processori (la generazione che dovrebbe essere lanciata nel 2019) disporrà di funzioni di protezione hardware Spectre e Meltdown. Tuttavia, ciò è stato previsto solo per le due versioni “base”, delle quali però esistono molte più varianti, come abbiamo spiegato in precedenza. Anche AMD sta elaborando una patch per le varianti Spectre per i processori di nuova generazione dall’architettura Zen 2 che saranno rilasciati nel 2019. ARM, a sua volta, promette degli update dell’hardware, affermando che “tutti i futuri processori saranno resistenti agli attacchi in stile Spectre”.
Buone notizie, certamente, per tutti coloro che acquisteranno i nuovi dispositivi in un prossimo futuro. Invece, tutti coloro che hanno acquistato un computer, uno smartphone o un altro dispositivo costruito intorno a un processore Intel, AMD o ARM nel 2018 o anche prima, dovranno installare praticamente delle patch per ogni cosa, riducendo le performance in maniera consistente. Molti sicuramente non avranno il tempo di farlo:
I produttori di processori hanno ignorato le vulnerabilità hardware per troppo tempo, ottimizzando i processori solo a livello di performance. Ma tali ottimizzazioni presentano il rovescio della medaglia: se, da un lato, alcune cose sono state effettivamente migliorate, altre, invece, hanno creato ancora più problemi. Sarà una bella sfida liberarci di queste vulnerabilità, vista la loro capacità di starsene ben nascoste. Tuttavia, bisogna dirlo, non è poi così facile sfruttarle e trarne dei vantaggi e ciò è motivo di speranza ̶ quantomeno fino all’arrivo della nuova generazione di processori.