Google dimostra lo sfruttamento delle vulnerabilità di Spectre eseguendo JavaScript nel browser

Google ha pubblicato diversi prototipi di exploit che mostrano la possibilità di sfruttare le vulnerabilità della classe Spectre durante l'esecuzione di codice JavaScript nel browser, aggirando i metodi di protezione precedentemente aggiunti. È possibile utilizzare gli exploit per accedere alla memoria del processo di elaborazione del contenuto Web nella scheda corrente. Per testare il funzionamento dell'exploit è stato lanciato il sito leaky.page e su GitHub è stato pubblicato il codice che descrive la logica dell'operazione.

Il prototipo proposto è progettato per attaccare sistemi con processori Intel Core i7-6500U in un ambiente con Linux e Chrome 88. Per utilizzare l'exploit per altri ambienti, sono necessarie modifiche. Il metodo di sfruttamento non è specifico per i 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 piccoli aggiustamenti l'exploit è realizzabile anche su altri sistemi operativi e su altri browser basati sul motore Chromium.

In un ambiente basato sui processori standard Chrome 88 e Intel Skylake, era possibile che i dati del processo responsabile dell'elaborazione dei contenuti web nell'attuale scheda Chrome (processo di rendering) venissero divulgati alla velocità di 1 kilobyte al secondo. Inoltre, sono stati sviluppati prototipi alternativi, ad esempio un exploit che consente, a scapito della stabilità, di aumentare la velocità di perdita a 8 kB/s quando si utilizza il timer performance.now() con una precisione di 5 microsecondi (0.005 millisecondi ). È stata preparata anche una versione che funzionava con una precisione del timer di un millisecondo, con la quale poteva essere utilizzata per organizzare l'accesso alla memoria di un altro processo ad una velocità di circa 60 byte al secondo.

Il codice demo pubblicato è composto da tre parti. La prima parte calibra il timer per stimare il tempo di esecuzione delle operazioni necessarie per ripristinare i dati rimasti nella cache del processore a seguito dell'esecuzione speculativa delle istruzioni della CPU. La seconda parte determina il layout della 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 creando le condizioni per l'esecuzione speculativa di determinate operazioni, il cui risultato viene scartato dal processore dopo aver determinato una previsione non riuscita, ma rimangono tracce esecuzioni vengono depositate nella cache generale e possono essere ripristinate utilizzando metodi per determinare il contenuto della cache da canali di terze parti che analizzano le modifiche nel 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 del supporto per il tipo SharedArrayBuffer, che consente di creare array nella memoria condivisa. L'exploit include il gadget Spectre, che provoca l'esecuzione speculativa controllata del codice, e un analizzatore di perdite di canale laterale, che rileva i dati memorizzati nella cache ottenuti durante l'esecuzione speculativa.

Il gadget è implementato utilizzando un array JavaScript in cui viene effettuato un tentativo di accesso ad un'area esterna ai confini del buffer, influenzando lo stato del blocco di previsione del ramo a causa della presenza di un controllo della dimensione del buffer aggiunto dal compilatore (il processore, guardando avanti, esegue speculativamente l'accesso, 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 eviction della cache Tree-PLRU utilizzata nei processori e consente, aumentando il numero di cicli, di aumentare significativamente la differenza di tempo al momento del ritorno un valore dalla cache e quando non è presente alcun valore nella cache.

Va osservato che Google ha pubblicato un prototipo dell'exploit per dimostrare la fattibilità degli attacchi che sfruttano le vulnerabilità della classe Spectre e per incoraggiare gli sviluppatori web a utilizzare tecniche che riducano al minimo i rischi derivanti da tali attacchi. Allo stesso tempo, Google ritiene che senza una rielaborazione significativa del prototipo proposto sia impossibile creare exploit universali pronti non solo per la dimostrazione, ma anche per un uso diffuso.

Per ridurre il rischio, i proprietari dei siti sono incoraggiati a utilizzare le intestazioni recentemente implementate Cross-Origin Opener Policy (COOP), Cross-Origin Embedder Policy (COEP), Cross-Origin Resource Policy (CORP), Fetch Metadata Request, X-Frame- Opzioni, X -Opzioni-Tipo-Contenuto e Cookie StessoSito. Questi meccanismi non proteggono direttamente dagli attacchi, ma consentono di isolare i dati del sito dalla fuga nei processi in cui può essere eseguito il codice JavaScript dell'aggressore (la fuga avviene dalla memoria del processo corrente, che, oltre al codice dell'aggressore , può trattare dati anche da un altro sito aperto nella stessa scheda). L'idea principale è separare l'esecuzione del codice del sito in diversi processi dal codice di terze parti ricevuto da fonti inaffidabili, ad esempio incluso tramite un iframe.



Fonte: opennet.ru

Aggiungi un commento