
Esempio di utilizzo dell'exploit "Spectre" rivelato (CVE-2017-5753 e CVE-2017-5715)
Esempio di utilizzo dell'exploit "Spectre" rivelato il 2 gennaio 2018 (CVE-2017-5753 e CVE-2017-5715)
Spectre rompe l'isolamento tra diverse applicazioni. Permette a un attaccante di indurre programmi senza errori, che seguono le buone pratiche, a rivelare i propri segreti. In effetti, i controlli di sicurezza di tali buone pratiche aumentano la superficie di attacco e possono rendere le applicazioni più suscettibili a Spectre.
C, usa le librerie:
Mettiamo in memoria il testo "The Magic Words are Squeamish Ossifrage." e poi proviamo a leggerlo usando l'exploit. Se il sistema è vulnerabile, vedrai lo stesso testo nell'output, letto dalla memoria.
In questo codice, se le istruzioni compilate in victim_function() fossero eseguite in rigoroso ordine di programma, la funzione leggerebbe solo da array1[0..15] poiché array1 ha dimensione 16. Tuttavia, se eseguita in modo speculativo, sono possibili letture fuori dai limiti. La funzione readMemoryByte() effettua diverse chiamate di addestramento a per far sì che il predittore di salto si aspetti valori validi per x, quindi chiama con una x fuori dai limiti. Il salto condizionale viene previsto in modo errato e l'esecuzione speculativa che ne consegue legge un byte segreto usando la x fuori dai limiti. Il codice speculativo legge quindi da , divulgando il valore di nello stato della cache. Per completare l'attacco, viene utilizzato un semplice flush+probe per identificare quale linea della cache in è stata caricata, rivelando il contenuto della memoria. L'attacco viene ripetuto più volte, così anche se il byte target inizialmente non è in cache, la prima iterazione lo porterà nella cache.
victim_function()array2[array1[x] * 512]array1[x]array2Il codice non ottimizzato legge circa 10KB/secondo su un i7 Surface Pro 3.