Un gruppo di ricercatori dell'Università libera di Amsterdam ha presentato una nuova tecnica di attacco SLAM (Spectre Linear Address Masking), che offre un nuovo modo di sfruttare le vulnerabilità microarchitettoniche della classe Spectre, in cui la perdita di dati avviene durante la traduzione di indirizzi non canonici, e per aggirare i controlli di validità canonica vengono utilizzate le estensioni per mascherare gli indirizzi lineari fornite nei nuovi processori. I ricercatori hanno pubblicato un toolkit con un'implementazione del metodo e proposto una dimostrazione che mostra come estrarre dalla memoria del kernel i dati corrispondenti a una determinata maschera (dimostrato come, in pochi secondi, in Ubuntu si può estrarre dalla memoria del kernel una stringa con l'hash della password dell'utente root).

L'attacco può essere effettuato su sistemi con processori Intel che supportano l'estensione LAM (Linear Address Masking), processori AMD con l'estensione UAI (Upper Address Ignore) e processori ARM con l'estensione TBI (Top Byte Ignore). Le estensioni indicate consentono di utilizzare parte dei bit dei puntatori a 64 bit per memorizzare metadati non correlati all'indirizzamento (per le normali applicazioni non è richiesta tanta memoria da poter indirizzare puntatori a 64 bit, quindi i bit superiori possono essere utilizzati, ad esempio, per controlli relativi alla sicurezza). È interessante notare che i processori Intel, AMD e ARM che supportano LAM, UAI e TBI sono stati appena annunciati, ma non sono ancora prodotti su larga scala, il che rende SLAM il primo attacco speculativo sui futuri CPU. L'attacco può essere effettuato anche su vecchi CPU AMD Zen+ e Zen 2, vulnerabili all'attacco CVE-2020-12965.
Analogamente all'utilizzo delle vulnerabilità Spectre, l'attacco SLAM richiede la presenza nel kernel di determinate sequenze di istruzioni (gadget) che portano all'esecuzione speculativa delle istruzioni. Queste istruzioni portano alla lettura speculativa dei dati dalla memoria a seconda delle condizioni esterne, che possono essere influenzate da un attaccante. Dopo aver determinato una previsione errata, il risultato dell'esecuzione speculativa viene scartato, ma i dati elaborati rimangono nella cache e possono essere successivamente estratti tramite analisi su canali esterni. Per l'estrazione dei dati depositati nella cache, i ricercatori hanno utilizzato il metodo Evict+Reload, basato sulla creazione di condizioni per espellere i dati dalla cache (ad esempio, si crea un'attività che riempie uniformemente la cache con contenuti di tipo standard) e sull'esecuzione di operazioni il cui tempo di esecuzione permette di giudicare la presenza dei dati nella cache del processore.
Per compiere l'attacco SLAM vengono utilizzati gadget basati su codice in cui i dati controllati dall'attaccante (di seguito la variabile "secret") sono utilizzati come puntatore. Ad esempio: void unmasked_gadget(long **secret) { **secret; }
Si osserva che modelli di codice simili vengono spesso utilizzati nei programmi; ad esempio, nel kernel Linux sono stati identificati decine di migliaia di questi gadget, di cui almeno alcune centinaia sono idonee all'uso negli exploit. La perdita di dati può essere bloccata aggiungendo a tali gadget ulteriori istruzioni che bloccano l'esecuzione speculativa. La Intel intende fornire un metodo software per bloccare la perdita prima dell'inizio della fornitura di processori con supporto LAM. La AMD ha raccomandato di utilizzare i metodi esistenti per bloccare gli attacchi di tipo Spectre v2. Gli sviluppatori del kernel Linux hanno deciso di disabilitare di default il supporto per LAM fino alla pubblicazione delle raccomandazioni da parte di Intel sul blocco della vulnerabilità.
Fonte: opennet.ru
