Google ha recentemente rilasciato diversi prototipi di exploit che dimostrano la possibilità di sfruttare le vulnerabilità di classe Spectre eseguendo codice JavaScript in un browser, senza passare attraverso le misure di sicurezza precedentemente implementate.
È possibile utilizzare degli exploit per ottenere l'accesso alla memoria di un processo che elabora contenuti web nella scheda corrente. Per testare la funzionalità dell'exploit, è stato avviato il sito web della pagina compromessa e il codice che descrive la logica dell'operazione è stato pubblicato su GitHub.
Il prototipo proposto è progettato per attaccare sistemi con processori Intel Core i7-6500U in un ambiente con Linux e Chrome 88, sebbene ciò non escluda la possibilità di apportare modifiche per utilizzare l'exploit in altri ambienti.
Il metodo operativo non è specifico dei processori Intel : dopo opportuni adattamenti, è stato confermato che l'exploit funziona su sistemi con CPU di altri produttori, incluso l'Apple M1 basato sull'architettura ARM. Dopo piccole modifiche, l'exploit funziona anche su altri sistemi operativi e altri browser basati sul motore Chromium.
In un ambiente basato sui processori Chrome 88 e Intel Skylake standard, abbiamo ottenuto una perdita di dati dal processo responsabile del rendering dei contenuti web nella scheda Chrome corrente (processo di rendering) a una velocità di 1 kilobyte al secondo. Inoltre, sono stati sviluppati prototipi alternativi, ad esempio un exploit che consente, a costo di una ridotta stabilità, di aumentare la velocità di fuga a 8kB / s quando si utilizza il timer performance.now () con una precisione di 5 microsecondi (0.005 millisecondi ). È stata inoltre sviluppata una variante che funziona con una precisione del timer di un millisecondo, che potrebbe essere utilizzata per organizzare l'accesso alla memoria di un altro processo a una velocità di circa 60 byte al secondo.
Il codice demo pubblicato è composto da tre parti:
- La prima parte calibrare il timer per stimare il tempo di esecuzione delle operazioni necessarie per recuperare i dati che rimangono nella cache del processore a seguito dell'esecuzione speculativa delle istruzioni della CPU.
- La seconda parte Definisce il layout di memoria utilizzato durante l'allocazione dell'array JavaScript.
- La terza parte sfrutta direttamente la vulnerabilità Spectre per determinare il contenuto della memoria del processo corrente a seguito della creazione di condizioni per l'esecuzione speculativa di determinate operazioni, il cui risultato viene scartato dal processore dopo aver determinato una previsione fallita, ma le tracce di esecuzione vengono depositate nella cache condivisa e possono essere ripristinate utilizzando metodi per determinare il contenuto della cache utilizzando canali di terze parti che analizzano la modifica del tempo di accesso ai dati memorizzati nella cache e non memorizzati nella cache.
La tecnica di sfruttamento proposta consente di fare a meno dei timer ad alta precisione disponibili tramite l'API performance.now() e senza il supporto per il tipo SharedArrayBuffer, che permette di creare array in memoria condivisa.
L'exploit include il dispositivo Spectre, che provoca l'esecuzione di codice speculativo controllato, e un analizzatore di perdite di canale laterale, che determina quali dati sono stati memorizzati nella cache durante l'esecuzione speculativa.
Il gadget è implementato utilizzando un array JavaScript, in cui si tenta di accedere a un'area al di fuori dei limiti del buffer , il che influisce sullo stato del blocco di predizione dei salti a causa della presenza di un controllo sulla dimensione del buffer aggiunto dal compilatore (il processore esegue in modo speculativo un accesso anticipato, ma ripristina lo stato dopo il controllo).
Per analizzare il contenuto della cache in condizioni di insufficiente precisione del timer, è stato proposto un metodo che inganna la strategia di eliminazione dei dati dalla cache Tree-PLRU utilizzata nei processori e consente, aumentando il numero di cicli, di aumentare notevolmente la differenza di tempo quando viene restituito il valore dalla cache e in assenza di un valore nella cache.
Google ha rilasciato un prototipo dell'exploit per dimostrare la fattibilità degli attacchi che sfruttano le vulnerabilità di classe Spectre e per incoraggiare gli sviluppatori web ad adottare tecniche che minimizzino i rischi di tali attacchi.
Allo stesso tempo, Google ritiene che senza una revisione significativa del prototipo proposto, sia impossibile creare exploit universali pronti non solo per la dimostrazione, ma anche per un uso diffuso.
Fonte: https://security.googleblog.com