Spook.js, una spaventosa storia della buonanotte

Come funziona Spook.js, il primo attacco pratico basato su Spectre.

In confronto, un attacco di phishing ha senso: si clicca su un link, si arriva su una pagina dannosa, si inseriscono alcuni dettagli e un criminale informatico li ruba. Qui, invece, funziona diversamente: fate clic su un link e un cyber criminale ruba i vostri dati. Proprio così, oggi parliamo di pagine dannose che sfruttano una caratteristica fondamentale della CPU per rubare dati senza che la vittima inserisca nulla. La vulnerabilità in questione è molto difficile, se non impossibile, da risolvere.

Nel 2018, i ricercatori hanno dimostrato che il tutto era teoricamente possibile, svelando le prime due varianti della vulnerabilità Spectre. Tre anni dopo, a settembre 2021, si è verificato il primo attacco in condizioni reali utilizzando Spectre v1: conosciuto come Spook.js. Il concetto di attacco è complicato, ma cercheremo di renderlo comprensibile.

I precedenti di Spectre v1

La notizia dei primi due attacchi di questa famiglia, Spectre e Meltdown, è scoppiata nel 2018. Gli attacchi hanno sfruttato il meccanismo della predizione delle diramazioni, progettato per accelerare l’esecuzione dei comandi, presente in tutte le moderne CPU.

Logo della vulnerabilità Spectre

Quando un utente inserisce una password per accedere a un sito web, se la password è corretta, si dovranno seguire delle istruzioni. In caso contrario, si esegue un’alternativa. Tuttavia, ed è qui che entra in gioco la previsione delle diramazioni, prima di ricevere la risposta, la CPU inizia ad eseguire il set di istruzioni che considera più necessario.

Nel nostro esempio, se la password è stata inserita correttamente un centinaio di volte prima, la CPU assumerà che questa volta non sarà diversa. Se indovina correttamente, l’utente ottiene un aumento delle prestazioni. In caso contrario, la CPU scarta le istruzioni eseguite speculativamente ed esegue l’alternativa.

In un attacco di vulnerabilità Spectre, viene fatto un tentativo di leggere un’area dati a cui il programma non ha accesso. Nella prima fase dell’attacco, vengono effettuate più chiamate ad aree di dati ad accesso aperto, per cui il sistema di predizione delle diramazioni viene “preparato” ad eseguire anche l’operazione di lettura proibita. Usando la predizione delle diramazioni, la CPU esegue l’operazione in anticipo perché è abituata al programma che richiede la lettura di dati che, in realtà, può effettuare. Ma un controllo rivela che al programma è proibito l’accesso ai dati, quindi i calcoli eseguiti speculativamente vengono scartati. Fin qui tutto bene, ma i dati letti dalla CPU sono conservati per un certo tempo nella cache, la memoria propria della CPU.

Poi arriva la parte più interessante: non avendo modo di leggere direttamente i dati confidenziali dalla cache della CPU, il processo dannoso mette in atto un cosiddetto attacco side-channel per rubarli. Questo comporta la misurazione della velocità di accesso a certe informazioni. Se è relativamente basso, significa che i dati si trovano nella cache. Se non lo è, viene caricato dalla normale RAM. Una sequenza impostata di tentativi di lettura si traduce in una fuga di informazioni segrete.

Il risultato è un difetto fondamentale della CPU la cui unica soluzione è disabilitare completamente la predizione delle diramazioni, influenzando così seriamente le prestazioni. Detto questo, gli attacchi Specter hanno molte limitazioni:

  • Il criminale informatico deve essere in grado di eseguire il codice del programma sul computer o sul dispositivo mobile bersaglio;
  • L’attacco richiede uno specifico programma di destinazione codificato in modo da creare le condizioni per un attacco di successo;
  • Anche se l’attacco ha successo, l’estrazione dei dati è estremamente lenta, decine o centinaia di byte al secondo, e gli errori di lettura sono tutt’altro che impossibili;
  • In generale, rubare i dati segreti previsti, come password, chiavi di cifratura e così via, richiede una serie di condizioni.

Spook.js, applicazione reale di Spectre v1

Potremmo concludere che Spectre non è poi così pericoloso. Dopo tutto, se un cyber criminale potesse eseguire il codice su un computer in particolare, sfruttare una delle tante vulnerabilità del sistema operativo o dei programmi installati per aumentare i privilegi e rubare dati sarebbe molto più semplice.

Tuttavia, le moderne pagine web contengono anche grandi quantità di codice di programma che viene eseguito sul computer dell’utente, nel browser. Ed è proprio come gli attacchi Spook.js sfruttano la vulnerabilità Spectre v1: si carica una pagina infetta, il browser esegue il codice e il criminale informatico ruba dati riservati.

Gli autori del report hanno dimostrato alcuni attacchi pratici. In primo luogo, hanno rubato una password utente da Tumblr. In secondo luogo, hanno rubato dati da Lastpass. Infine, hanno intercettato un’immagine caricata dall’utente dallo storage privato su un server di Google.

Una caratteristica del browser Google Chrome ha reso tutto questo possibile. Dal rilascio delle informazioni su Spectre, gli sviluppatori di Chrome hanno preso misure per scongiurare potenziali attacchi costringendo i siti web a caricare in isolamento. Poiché ogni sito web crea il proprio processo, il codice dannoso su una pagina non può essere usato per rubare dati da un’altra risorsa. Ma c’è un’eccezione: più pagine dello stesso sito o dominio sono raggruppate in un processo comune del browser. Se il codice dannoso (scritto in JavaScript, da cui il .js nel nome dell’attacco) viene eseguito su una di esse, i dati sulle altre pagine possono essere rubati.

Attacco Spectre.js su Tumblr

Come blog collettivo, Tumblr può ospitare codice dannoso, almeno in teoria. In questo modo, con una pagina dannosa aperta in una scheda, se un utente cerca di accedere al proprio account sul servizio in un’altra scheda, il browser salva e compila automaticamente il nome utente e la password, che il codice malevolo può quindi rubare.

Sfruttando la vulnerabilità Spectre, un attacco può interagire indirettamente con un’altra scheda dello stesso sito e rubare dati con mezzi indiretti. Un attacco riuscito con questo approccio non lascia quasi nessuna traccia.

Attacco Specter.js a LastPass

L’attacco al gestore di password LastPass era diverso in quanto il codice per rubare i dati utilizzando Spectre v1 era incorporato in un’estensione dannosa per Google Chrome. L’estensione LastPass era anche in esecuzione nel browser. In alcuni casi, le estensioni sono anche eseguite in un processo comune del browser, rendendo possibile il furto di dati.

 

Attacco Specter.js sullo spazio di archiviazione Google Cloud

Un altro esempio riguarda gli attacchi allo spazio di archiviazione cloud di Google: una scheda del browser contiene una pagina dannosa ospitata su sites.google.com; un’altra permette agli utenti di caricare immagini sul loro archivio privato nel servizio G Suite. In questo scenario, un attaccante può utilizzare un codice dannoso per ottenere l’accesso alle immagini.

Confronto dell'immagine originale con quella rubata dallo spazio di archiviazione cloud di Google usando un attacco Spook.js

Immagine originale (a sinistra) e quella rubata dallo spazio di archiviazione di Google utilizzando un attacco Spook.js. Fonte

Limiti del metodo

I ricercatori hanno mostrato come l’attacco può essere effettuato su diverse CPU, tra cui diverse moderne di Intel e anche il nuovo Apple M1 basato su ARM. In tutti i casi, l’attacco è stato compiuto utilizzando Google Chrome. In linea di principio, diverse caratteristiche uniche del browser rendono Spook.js possibile. Anche altri browser basati su Chromium, come Microsoft Edge, sono vulnerabili a questo attacco.

Tuttavia, ci sono alcune limitazioni. Il primo è la bassa velocità del furto di dati (400-600 byte al secondo, a seconda della CPU), motivo per cui il file di destinazione nell’ultima demo è molto piccolo. Il secondo è il gran numero di errori quando si rubano dati dalla cache della CPU. Fino al 4% dei dati è errato; da qui gli artefatti nella copia rubata dell’immagine.

L’attacco non funziona sui processori AMD o Mozilla Firefox, il cui motore JavaScript funziona in modo diverso. I ricercatori non escludono la possibilità di un attacco riuscito sui chip AMD e sul browser Firefox, ma la verifica di ciò richiederà ulteriori studi.

Infine, un attacco richiede il caricamento di codice dannoso su una pagina con lo stesso nome di dominio, come nel caso di blog collettivi o hosting. Applicare questo metodo, per esempio, al sito web di una banca probabilmente non funzionerà.

Non andate nel panico

Lo studio di Spook.js è importante perché i ricercatori, per la prima volta, sono stati in grado di dimostrare uno scenario abbastanza realistico per lo sfruttamento di una delle vulnerabilità Spectre. Tuttavia, le possibilità di un attacco nel mondo reale sono basse. In primo luogo, gli sviluppatori di Google Chrome, sulla base di questa ricerca, hanno rafforzato il meccanismo di isolamento dei siti caricati tra loro. In secondo luogo, i criminali informatici hanno molti modi più semplici per rubare i dati degli utenti, dal malware tradizionale all’ingegneria sociale, e questo richiede una seria conoscenza del funzionamento di basso livello delle moderne CPU.

Come lavoro scientifico, Spook.js è destinato a modificare il panorama del software attraverso l’introduzione di nuove raccomandazioni per la sicurezza dei siti web (per esempio, gli autori propongono di spostare le pagine di autorizzazione in un nome di dominio separato). Gli studi successivi potrebbero trovare modi per rendere gli attacchi un po’ più facili, ma molto probabilmente porteranno a più cicli di miglioramenti della sicurezza. Anche se le vulnerabilità di tipo Spectre possono essere sfruttate in massa, i mezzi di protezione saranno gli stessi di qualsiasi malware. I fornitori di sicurezza aggiungeranno semplicemente i nuovi tipi di attacchi alla lista di quelli da monitorare e bloccare prima dell’esecuzione.

È anche possibile che un giorno i ricercatori si imbattano in una caratteristica di vulnerabilità simile a quella di Spectre che richiede una grande rielaborazione dell’intero ecosistema IT moderno. Questo, tuttavia, rimane improbabile. Non dimentichiamo che ci sono voluti tre anni per passare da una vulnerabilità teorica al primo attacco pratico (e anche allora, è un attacco con molti limiti).

Spectre può anche essere usato per attacchi mirati in cui il potenziale beneficio dei dati rubati supera i costi dell’operazione. Anche se questo scenario è rilevante per la vostra organizzazione, potete facilmente rendere gli attacchi più difficili utilizzando browser diversi per contenuti diversi. Per esempio, non aprite pagine e servizi web con informazioni sensibili nello stesso browser dove ottenete il vostro intrattenimento online. Idealmente, gestite le informazioni riservate in un ambiente isolato, in una macchina virtuale, o semplicemente su un dispositivo separato.

Consigli