Spectre è una vulnerabilità hardware nell'implementazione della predizione delle diramazioni nei moderni microprocessori con esecuzione speculativa, che consente ai processi dannosi di accedere al contenuto della memoria mappata di altri programmi. Sono stati pubblicati due ID CVE relativi a Spectre: CVE-2017-5753 e CVE-2017-5715.
Storia Spectre è stato scoperto indipendentemente dai ricercatori di Project Zero di Google e da altri ricercatori che hanno collaborato con Paul Kocher. Spectre è stato reso pubblico insieme a un'altra vulnerabilità, Meltdown, il 3 gennaio 2018.
Successivamente, sono venute alla luce altre vulnerabilità strettamente legate ad esso, quali SpectreNG, SpectreRSB e Spectre Prime.
Pur a distanza di anni, si continua a scoprire nuove versioni di tale falla, basate sulla cache micro-op, che continua a colpire tutti i principali produttori e architetture. L'ultima variante è stata scoperta nel 2024
Impatto Nel 2018, quasi tutti i computer sono stati colpiti da Spectre, inclusi desktop, laptop e dispositivi mobili. Spectre è presente, infatti, sia in processori Intel che AMD e ARM. Intel ha risposto alle segnalazioni delle vulnerabilità con un comunicato ufficiale. Secondo un comunicato di AMD, la vulnerabilità di una variante di Spectre non affligge i processori AMD e porrebbe un rischio quasi nullo a causa delle differenze architetturali dei suoi processori.
Sebbene più difficile da sfruttare di Meltdown, Spectre potrebbe essere più difficile da correggere. L'analisi originale ipotizza che potrebbero essere richieste modifiche significative nell'architettura dei processori per risolvere il problema in maniera definitiva.
Inoltre, l'impatto di Spectre nel cloud computing potrebbe essere maggiore di Meltdown. Mentre Meltdown permette ad applicazioni non autorizzate di leggere da memoria privilegiata risiedente nello stesso server, Spectre può servirsi di un hypervisor per trasmettere i dati al sistema in esecuzione su di esso.
Funzionamento Spectre è una vulnerabilità che permette a un programma di accedere in modo speculativo a dati normalmente non accessibili e di estrarli attraverso attacchi side-channel. I moderni processori, per garantire elevate prestazioni, sono dotati di molteplici unità di calcolo che operano in parallelo. Per sfruttarle al meglio, utilizzano tecniche di esecuzione speculativa, basate anche sulla predizione dei salti e di altre dipendenze, con l’obiettivo di anticipare le operazioni che potrebbero essere necessarie in base ai comportamenti osservati in precedenza. Quando le previsioni risultano corrette, il processore ha già eseguito parte del lavoro richiesto, aumentando la velocità di esecuzione dei programmi. Se invece le ipotesi si rivelano errate, il processore annulla gli effetti architetturali delle istruzioni eseguite speculativamente, riportando il programma a uno stato coerente. Tuttavia, queste operazioni speculative modificano una serie di stati interni del processore a livello microarchitetturale e, durante l’annullamento, tali modifiche non vengono completamente ripristinate, ma vengono corretti soltanto gli effetti che possono influire direttamente sull’esecuzione del programma.Spectre sfrutta proprio questi stati microarchitetturali residui per dedurre informazioni riservate presenti nella memoria, utilizzando canali laterali (side-channel) che consentono di ricavare dati non direttamente accessibili dal programma. Invece di essere una singola vulnerabilità, l'articolo che descrive Spectre discute di un'intera classe di possibili vulnerabilità.
Tutte queste vulnerabilità sono basate sull'utilizzo di un effetto collaterale dell'esecuzione speculativa, tecnica utilizzata dai processori per ridurre o mascherare la latenza della memoria del computer e quindi fornire prestazioni migliori. In particolare Spectre si concentra sulla predizione delle diramazioni, una tecnica di esecuzione speculativa. A differenza della vulnerabilità Meltdown, Spectre non si basa su una caratteristica tecnica di un singolo processore o di una famiglia di processori ma è un'idea generale applicata a un ambito molto ampio e che potenzialmente può essere utilizzata in diversi modi.
Il punto di partenza dell'articolo è l'attacco laterale basato sui tempi di accesso alla memoria applicato alla predizione delle diramazioni dei moderni processori che implementano l'esecuzione fuori ordine delle istruzioni. A livello architetturale, i processori implementano meccanismi che eliminano i dati elaborati per errore quando i processori eseguono predizioni sulle diramazioni errate. Queste predizioni errate però hanno effetti collaterali non funzionali (come il caricamento nella memoria cache della CPU di dati non necessari) che comunque alterano lo stato interno del processore. Queste alterazioni possono in seguito modificare l'esecuzione delle istruzioni successive in modo non funzionale (quindi la correttezza dei risultati delle operazioni non è influenzata, ma aspetti non funzionali come per esempio i tempi di esecuzione delle operazioni possono variare). Se le modifiche non funzionali sono visibili da programmi potenzialmente malevoli, potremmo utilizzare queste alterazioni non funzionali per desumere dati riservati, dati che il programma malevolo non dovrebbe poter determinare, nonostante i meccanismi di protezioni dei dati e di compartimentazione della memoria funzionino come da specifica.
L'articolo Spectre è suddiviso in 4 fasi:
La prima fase discute come funziona il meccanismo di predizione delle diramazioni nei moderni processori e come un programma opportunamente progettato può addestrare l'unità di predizione delle diramazioni a individuare in modo corretto o no una certa diramazione. In questo modo si può indurre a comando un successo o fallimento della predizione. La seconda fase descrive come sia possibile definire in modo affidabile se uno specifico dato è presente o no all'interno della cache del processore. In questo modo una caratteristica non funzionale (la cache è un componente che dovrebbe essere trasparente al funzionamento dei programmi) diviene una caratteristica che può essere utilizzata da un programma per estrarre dalla CPU delle informazioni interne, informazioni che un programma non dovrebbe poter desumere. La terza fase, utilizzando degli esempi di codice JavaScript, mostra come sia possibile scrivere un programma che eseguito all'interno della sandbox del browser riesca a leggere dei dati esterni alla sandbox e che in teoria non dovrebbero essere accessibili. Il codice sfrutta l'esecuzione speculativa e la capacità di definire se i dati sono memorizzati nella cache della CPU oppure no. L'idea generale è che il programma malevolo, tramite un ciclo o un altro frammento di codice, sia in grado di indurre una predizione delle diramazioni errata e che questa forzi il processore ad accedere ad aree di memoria che in teoria non dovrebbero essere accessibili. In un certo momento, il processore individuerà la predizione errata e provvederà ad annullare le istruzioni eseguite, ma comunque il processore avrà già letto i dati riservati e avrà provveduto a salvare questi nella cache. In seguito, i dati (presenti nella cache del processore) vengono estratti con opportuni attacchi, come quello descritto dalla vulnerabilità Meltdown. L'ultima parte dell'articolo generalizza il concetto mostrando come sia possibile utilizzare anche altri stati non funzionali del processore e descrive esempi, non ovvi, come i tempi di arbitraggio dei bus.
La differenza principale tra Meltdown e Spectre è che Meltdown sfrutta una specificità architetturale dei processori Intel mentre Spectre è molto più generico e quindi può potenzialmente colpire qualsiasi processore. Meltdown sfrutta il fatto che le CPU Intel esegua controlli a posteriori sui privilegi di accesso delle istruzioni alla memoria e che quindi la CPU può essere forzata ad accedere a locazioni non consentite. Durante l'esecuzione di istruzioni che richiedono dati in memoria, il processore avvia la verifica sui privilegi di accesso e in parallelo legge il dato dalla memoria. Se l'istruzione non ha i privilegi corretti per accedere alla memoria, il processore blocca l'istruzione ma comunque l'accesso alla memoria è stato già eseguito e i dati sono stati salvati nella cache. Una volta presenti nella cache, questi possono essere estratti tramite un altro attacco. Spectre invece mostra come, utilizzando la predizione delle diramazioni, si può forzare il processore ad accedere ad aree di memoria riservate che, una volta copiate in cache, possono essere estratte tramite lo stesso attacco utilizzato da Meltdown. L'attacco Spectre richiede solo che il processore abbia una cache e una unità di predizione delle diramazioni, due condizioni molto comuni nelle CPU moderne; inoltre mentre l'attacco Meltdown può essere bloccato utilizzando la tecnica KAISER, l'attacco Spectre non ha una soluzione singola che consenta di eliminare il problema.
Patch
Le mitigazioni studiate, pur riducendo il problema, non possono risolvere completamente la questione oltre ad avere un impatto più o meno importante in base al tipo del contesto di utilizzo.
PC, MacOS e Linux Dato che Spectre copre una vasta serie di vulnerabilità con buona probabilità non potrà essere corretto con una singola patch. Sebbene si stia già lavorando per correggere alcuni specifici casi della vulnerabilità, il sito originale dedicato a Spectre e Meltdown dichiara che Spectre non è facile da correggere e che dovremo averci a che fare per molto tempo.
Una soluzione di rilievo è stata studiata da Google e prende il nome di Reptoline in quanto impatta meno sulle prestazioni. Inizialmente utilizzata solo in ambito Linux, è stata poi utilizzata anche nei sistemi Windows
Smartphones Mentre Apple ha pubblicato aggiornamenti che mitigano il problema su tutti i modelli dall’iPhone 5S e successivi, vari produttori di dispositivi che montano Android non pubblicheranno update per modelli più vecchi di 24 mesi.
Impatto prestazionale La prestazione della CPU può subire una riduzione più o meno marcata in base al livello di sicurezza richiesto e al tipo di carico di lavoro, nei casi più gravi si perdono in media fino al 25% delle prestazioni, come nel caso di alcuni server
Note
Voci correlate Meltdown – una vulnerabilità hardware nei microprocessori Intel che permette a processi non autorizzati l'accesso a memoria privilegiata.
Collegamenti esterni
Categoria:Sicurezza informatica Categoria:Architettura x86