Nuova tecnica per sfruttare le vulnerabilità di Spectre in Chrome

Un gruppo di ricercatori di università americane, australiane e israeliane ha proposto una nuova tecnica di attacco side-channel per sfruttare le vulnerabilità di classe Spectre nei browser basati sul motore Chromium. L'attacco, nome in codice Spook.js, consente di aggirare il meccanismo di isolamento del sito eseguendo il codice JavaScript e leggere il contenuto dell'intero spazio degli indirizzi del processo corrente, ovvero accedere ai dati da pagine in esecuzione in altre schede, ma elaborati nello stesso processo.

Poiché Chrome esegue siti diversi in processi diversi, la possibilità di effettuare attacchi pratici è limitata ai servizi che consentono a diversi utenti di ospitare le loro pagine. Il metodo consente, da una pagina in cui l'aggressore ha la possibilità di incorporare il proprio codice JavaScript, di determinare la presenza di altre pagine aperte dall'utente dello stesso sito ed estrarre da esse informazioni riservate, ad esempio credenziali o coordinate bancarie sostituite dal sistema di compilazione automatica dei campi nei moduli web. A titolo dimostrativo, viene mostrato come è possibile attaccare il blog di qualcun altro sul servizio Tumblr se il suo proprietario apre in un'altra scheda il blog degli aggressori ospitato sullo stesso servizio.

Un'altra opzione per utilizzare questo metodo è l'attacco ai componenti aggiuntivi del browser, che consente, durante l'installazione di un componente aggiuntivo controllato dall'aggressore, di estrarre dati da altri componenti aggiuntivi. Ad esempio, mostriamo come installando un componente aggiuntivo dannoso è possibile estrarre informazioni riservate dal gestore password LastPass.

I ricercatori hanno pubblicato un prototipo di un exploit che funziona in Chrome 89 su sistemi con CPUIntel i7-6700K e i7-7600U. Durante la creazione dell'exploit sono stati utilizzati prototipi del codice JavaScript precedentemente pubblicati da Google per sferrare attacchi di classe Spectre. Va notato che i ricercatori sono stati in grado di preparare exploit funzionanti per sistemi basati su processori Intel e Apple M1, che consentono di organizzare la lettura della memoria ad una velocità di 500 byte al secondo e una precisione del 96%. Si presume che il metodo sia applicabile anche ai processori AMD, ma non è stato possibile preparare un exploit completamente funzionante.

L'attacco è applicabile a qualsiasi browser basato sul motore Chromium, inclusi Google Chrome, Microsoft Edge e Brave. I ricercatori ritengono inoltre che il metodo possa essere adattato per funzionare con Firefox, ma poiché il motore di Firefox è molto diverso da Chrome, il lavoro sulla creazione di un simile exploit è riservato al futuro.

Per proteggersi dagli attacchi basati su browser relativi all'esecuzione speculativa di istruzioni, Chrome implementa la segmentazione dello spazio degli indirizzi: l'isolamento sandbox consente a JavaScript di funzionare solo con puntatori a 32 bit e condivide la memoria dei gestori in heap disgiunti da 4 GB. Per fornire accesso all'intero spazio degli indirizzi del processo e aggirare la limitazione a 32 bit, i ricercatori hanno utilizzato una tecnica chiamata Type Confusion, che forza il motore JavaScript a elaborare un oggetto con un tipo errato, il che rende possibile formare un file a 64 bit puntatore basato su una combinazione di due valori a 32 bit.

L'essenza dell'attacco è che durante l'elaborazione di un oggetto dannoso appositamente progettato nel motore JavaScript, si creano le condizioni che portano all'esecuzione speculativa delle istruzioni che accedono all'array. L'oggetto viene selezionato in modo tale che i campi controllati dall'aggressore si trovino nell'area in cui viene utilizzato il puntatore a 64 bit. Poiché il tipo dell'oggetto dannoso non corrisponde al tipo dell'array elaborato, in condizioni normali tali azioni vengono bloccate in Chrome da un meccanismo di deottimizzazione del codice utilizzato per accedere agli array. Per risolvere questo problema, il codice dell’attacco Type Confusion viene inserito in un blocco condizionale “if”, che in condizioni normali non viene attivato, ma viene eseguito in modalità speculativa, se il processore prevede erroneamente ulteriori ramificazioni.

Di conseguenza, il processore accede speculativamente al puntatore a 64 bit generato e ripristina lo stato dopo aver determinato una previsione fallita, ma tracce dell'esecuzione rimangono nella cache condivisa e possono essere ripristinate utilizzando metodi di rilevamento della cache a canale laterale che analizzano i cambiamenti in tempi di accesso ai dati memorizzati nella cache e non nella cache. Per analizzare il contenuto della cache in condizioni di insufficiente precisione del timer disponibile in JavaScript, viene utilizzato un metodo proposto da Google, che inganna la strategia di eliminazione della cache Tree-PLRU utilizzata nei processori e consente, aumentando il numero di cicli, di aumentare significativamente la differenza di tempo in cui un valore è presente e assente nella cache. .

Fonte: opennet.ru

Aggiungi un commento