CPU

Come sfruttare le vulnerabilità

Pagina 2: Come sfruttare le vulnerabilità

Meltdown e Spectre sono vulnerabilità che si sfruttano tramite attacchi side-channel, che sono incredibilmente difficili da bloccare. Questi avvengono quando un malintenzionato osserva le caratteristiche di un computer, che siano le tempistiche di determinate operazioni o persino i modelli di rumorosità e illuminazione, e usa tale informazione per compromettere la sicurezza.

Tutto parte con i dati, ovviamente. Una CPU carica l'informazione dalla memoria principale nei propri registri richiedendo i contenuti di un indirizzo virtuale, che è a sua volta mappato in un indirizzo fisico. Mentre esaudisce tale richiesta, la CPU verifica i permessi, che indicano se il processo può accedere all'indirizzo di memoria o se solo il kernel può farlo.

Di conseguenza il sistema approva o nega l'accesso. L'industria ha dato per scontato che questa tecnica biforcasse la memoria in modo sicuro in regioni protette, cioè che i sistemi operativi mappassero automaticamente l'intero kernel nello spazio d'indirizzo virtuale della mappa dello spazio di memoria utente. Ciò significa che la CPU può tentare di accedere a tutti gli indirizzi virtuali se necessario, ma anche che espone l'intera mappa d'indirizzo virtuale allo spazio utente.

Il problema ha a che fare con l'esecuzione speculativa, che è parte del processo out of order. I core delle CPU con pipeline processano le istruzioni in stadi, ad esempio instruction fetch, instruction decode, execute, memory access e register write-back. I processori odierni suddividono ognuno di questi stadi fondamentali ulteriormente, a volte in 20 o più stadi. Questo aiuta ad avere frequenze più alte.

Le CPU usano pipeline multiple per permettere il processo parallelo delle istruzioni. Questo è il motivo per cui, nell'immagine sotto, vedete quattro colori differenti passare simultaneamente attraverso i quattro stadi.

Il branch (diramazione) dell'istruzione può portare la pipeline a passare a un'altra sequenza di istruzione, creando uno stallo. Ciò significa che la pipeline non processa il dato per diversi cicli di clock mentre attende degli input dalla memoria.

02

Per evitare che ciò avvenga, quando un processore incontra un branch, la sua unità di predizione prova a indovinare la sequenza di istruzione di cui il processore avrà bisogno successivamente. Compie tale determinazione prima di processare l'istruzione. Il processore poi pesca l'istruzione predetta dal branch e la esegue speculativamente. Questo evita la latenza che normalmente incorre se la pipeline stalla – a causa del branch – e poi pesca la prossima istruzione dalla memoria.

A seconda dell'ubicazione dell'indirizzo (L1, L2, L3, RAM), ripescare il dato dalla memoria può richiedere da decine a centinaia di nanosecondi. È troppo rispetto alla latenza inferiore al nanosecondo dei cicli del processore, quindi avere l'istruzione già pronta velocizza tremendamente le operazioni. La maggior parte delle operazioni avvengono con successo perché i branch predictor spesso ci azzeccano con un tasso superiore al 90%. Il processore scarta semplicemente l'istruzione e svuota la sua pipeline quando l'istruzione non è necessaria (misprediction).

I ricercatori di Google hanno trovato un'opportunità nel modo in cui il sistema gestisce l'accesso alla memoria cache durante le esecuzioni speculative. I normali controlli di sicurezza che mantengono separati lo spazio utente e la memoria kernel non avvengono con la sufficiente rapidità durante le esecuzioni speculative che accedono alla memoria in cache. Di conseguenza il processore può momentaneamente recuperare ed eseguire i dati dalla memoria cache a cui non dovrebbe avere accesso. Il sistema alla fine nega l'accesso e il dato viene scartato ma poiché ciò non avviene con sufficiente velocità, c'è una finestra di opportunità per l'exploit. Meltdown sfrutta il branch predictor per eseguire il codice contro la cache, per tutto il tempo di questo processo. Questo gli permette di determinare quale dato è presente nella memoria, come potete vedere nel breve video sotto.

Ricostruire una foto con Meltdown

Nel caso di Meltdown, un malintenzionato può leggere password, chiavi di codifica o altri dati dalla memoria protetta. Quel dato può inoltre essere usato per prendere il controllo del sistema, rendendo inutili tutte le altre forme di protezione. La preoccupazione maggiore per i datacenter è che l'exploit permetta anche a un'applicazione residente su una macchina virtuale di accedere alla memoria di un'altra macchina virtuale. Questo significa che un malintenzionato potrebbe affittare un'istanza su un cloud pubblico e collezionare informazioni da altre VM sullo stesso server.

Gli attaccanti possono sfruttare questa vulnerabilità con JavaScript, quindi potreste esporre il vostro sistema semplicemente visitando un sito web ad hoc. Gli sviluppatori di browser hanno aggiornato i loro software, ma è possibile usare anche normale codice distribuito tramite malware o altre strade per sferrare un attacco.

Per ora la patch dei sistemi operativi di Meltdown contempla un layer aggiuntivo di controlli di sicurezza durante gli accessi agli indirizzi di memoria. Questo impatta sulla latenza delle chiamate al sistema e rallenta le prestazioni quando le applicazioni fanno chiamate al kernel. Le applicazioni che tendono a rimanere nello spazio utente risultano meno affette – prestazionalmente parlando. I processori post-Broadwell di Intel hanno una caratteristica chiamata PCID (Post-Context Identifiers) che velocizza il processo, quindi non sperimentano un rallentamento simile ai modelli vecchi.

L'exploit Spectre è molto più nefasto perché può sfruttare una gamma maggiore di capacità dell'engine per l'esecuzione speculativa per accedere alla memoria kernel o dati di altre applicazioni. Alcuni ricercatori ritengono che risolvere totalmente questo exploit potrebbe richiedere una fondamentale riprogettazione di tutte le architetture, quindi è possibile che ci convivremo per il prossimo futuro.

Fortunatamente l'exploit è tremendamente difficile da atturare e richiede un livello di conoscenza del processore e del software elevato. Intel e altri hanno sviluppato patch per le attuali varianti di Spectre, ma è possibile che nuove versioni arriveranno in futuro e ci troveremo a una sorta di gioco al gatto con il topo.

Configurazione di prova

La metodologia di test seguita per questo articolo è piuttosto semplice. Prima abbiamo fatto i test sui nostri sistemi Windows 10. Poi abbiamo applicato le patch e ripetuto i test. Anche se la patch della variante 2 di Spectre che usiamo è stata disattivata via Windows, dovrebbe rappresentare lo scenario prestazionale peggiore al momento. Non abbiamo usato un BIOS con mitigazioni per Spectre perché non era disponibile – i correttivi sono stati rimossi. Quando arriveranno firmware aggiornati faremo ulteriori test comparativi.

Abbiamo provato tutti i processori alle impostazioni stock, includendo chip Core i3, Ryzen 3, Core i5, Ryzen 5, Core i7, Ryzen 7 e Pentium. Naturalmente i sistemi overcloccati si comporteranno molto meglio e, come sempre, abbiamo disabilitato Enhanced Multi-Core Turbo sui nostri sistemi.

Al fine di evitare variabilità legate al GPU Boost con l'aumentare del calore della nostra GTX 1080, svolgiamo più sessioni di ogni test in rapida successione. Selezioniamo il valore medio dall'ultima registrazione, quindi in molti casi i risultati con patch e senza patch potrebbero apparire superiori o inferiori l'un l'altro a causa delle piccole variabilità che vedete oggi.

Sistema di test e configurazione
Hardware Intel LGA 1151 (Z370)
Intel Core i3-8350K 
Intel Core i5-8600K 
Intel Core i7-8700K 
MSI Z370 Gaming Pro Carbon AC 
G.Skill RipJaws V DDR4-3200 (2 x 8GB) @ 2666

AMD Socket AM4
AMD Ryzen 3 1300X 
AMD Ryzen 5 1600X 
AMD Ryzen 7 1800X 
MSI Z370 Xpower Gaming Titanium 
G.Skill RipJaws V DDR4-3200 (2 x 8GB) @ 2667 

Intel LGA 1151 (Z270)
Intel Core i3-7350K
Intel Core i5-7600K 
Intel Core i7-7700K 
Intel Pentium G4620 
MSI Z270 Gaming M7 
G.Skill RipJaws V DDR4-3200 (2 x 8GB) @ 2666 

Tutto
EVGA GeForce GTX 1080 FE 
Samsung PM863 (960GB) 1TB
SilverStone ST1500-TI 1500W
Corsair H115i
Windows 10 Creators Update Versione 1703, pre e post-patch