Spectre & Meltdown, due vulnerabilità delle CPU.

Spectre & Meltdown, due vulnerabilità delle CPU.

Spectre e Meltdown, due vulnerabilità che affliggono i processori, l’una fa una cosa diversa dall’altra ma entrambe sfruttano i difetti hardware delle CPU moderne, la predizione delle diramazioni e l’esecuzione speculativa alterando la cache della CPU. Queste tre implementazioni, costruite sui processori degli ultimi 20 anni, servono a dare un boost alla CPU per renderla più performante, quindi più veloce.

La predizione delle diramazioni (branch prediction) è un’efficente tecnica dove algoritmi scelgono in anticipo la strada di esecuzione di un programma basandosi sullo storico di istruzioni eseguite in precedenza. Pensala come un bivio in una strada, la CPU deve scegliere solo uno dei due percorsi. Mentre pensa imbocca una delle due strade sperando nell’intuito. Se indovina ha evitato di fermarsi al bivio e perdere tempo; se non indovina, non deve tornare al bivio, ma è come se ripartisse istantaneamente dal bivio. L’esecuzione speculativa (speculative execution) è una tecnica dove la CPU pre-esegue in anticipo un set di istruzioni fuori ordine, basandosi sulla predizione del branch prediction. Elaborando i dati prima di sapere se è davvero necessario farlo può ridurre i ritardi che si avrebbero facendo il lavoro solo dopo aver saputo se è davvero necessario o no. Se ad un certo momento del flusso di esecuzione il lavoro svolto anticipatamente si dimostra inutile, allora i risultati ottenuti verranno semplicemente ignorati. La cache è una memoria temporanea tra RAM e CPU, e ci si può accedere in maniera molto più veloce e con meno cicli di clock dalla CPU. Quando la CPU è pronta per iniziare a eseguire parti di codice di programma, di solito tenta di recuperare le istruzioni e i dati dal programma e li memorizza nella cache. Una volta terminata l’esecuzione, rimettete in memoria i risultati o li scarta.

Meltdown

inganna la predizione del branch prediction causando un’esecuzione speculativa per leggere un indirizzo di memoria arbitraria nel kernel che punta al tuo programma malevolo, memorizzarlo nella cache della CPU, per poi pre-eseguire il programma con pieni privilegi prima che la CPU si accorga che il tuo programma malevolo non dovrebbe avere i privilegi. Sulle CPU intel non c’è nessun tipo di controllo sui privilegi per l’esecuzione speculativa, il controllo viene fatto solo dopo. AMD/ARM invece testano i privilegi prima che un’esecuzione speculativa venga avviata, quindi risulterebbero immuni.

Spectre

inganna la predizione del branch prediction a tal punto che causerà un’esecuzione speculativa per eseguire una funzione legittima in un programma e memorizzare il risultato nella cache della CPU, ma prima che la CPU si accorge di non aver bisogno di quel risultato e che quindi può eliminarlo dalla cache, si può entrare in quest’area a guardare i risultati della cache. Risulta meno “malvagio” di Meltdown perchè non puoi fare nulla con qui dati, resta comunque una grande vulnerabilità in quanto i risultati potrebbero essere qualcosa di simile alla memorizzazione temporanea della chiave privata decriptata di un utente utilizzata per la home banking (poiché la chiave dovrebbe essere caricata in cache per essere decriptata).