SWAPGS - una nuova vulnerabilità nel meccanismo di esecuzione speculativa della CPU

Ricercatori di Bitdefender identificato nuova vulnerabilità (CVE-2019-1125) nel meccanismo di esecuzione speculativa delle istruzioni delle moderne CPU, denominato SWAPGS, che corrisponde al nome dell'istruzione del processore che causa il problema. Vulnerabilità permette consentire a un utente malintenzionato senza privilegi di determinare il contenuto delle aree di memoria del kernel o di macchine virtuali in esecuzione. Problema confermato nei processori Intel (x86_64) e parzialmente colpisce Processori AMD per i quali non compare il vettore di attacco principale. I metodi precedentemente implementati per contrastare le vulnerabilità Spectre e Meltdown non proteggono dall'attacco SWAPGS quando si utilizzano processori Intel, ma sono già state proposte correzioni per Linux, ChromeOS, Android e Windows.

La vulnerabilità appartiene alla classe Spectre v1 e si basa sull'idea di ripristinare i dati rimasti dalla cache del processore dopo l'esecuzione speculativa delle istruzioni. Per migliorare le prestazioni, le unità di previsione dei salti delle moderne CPU utilizzano l'esecuzione preventiva di alcune istruzioni che hanno maggiori probabilità di essere eseguite, ma senza attendere il calcolo di tutti i fattori che ne determinano l'esecuzione (ad esempio, quando le condizioni di salto o i parametri di accesso non sono stati rispettati). ancora stato calcolato). Se la previsione non viene confermata, il processore scarta il risultato dell'esecuzione speculativa, ma i dati elaborati durante essa rimangono nella cache del processore e possono essere ripristinati utilizzando metodi per determinare il contenuto della cache attraverso canali laterali, analizzando il cambiamento nell'accesso tempo per i dati memorizzati nella cache e non nella cache.

La particolarità del nuovo attacco è l'utilizzo di un leak che avviene durante l'esecuzione speculativa dell'istruzione SWAPGS, che viene utilizzata nei sistemi operativi per sostituire il valore del registro GS quando il controllo passa dallo user space al kernel dell'OS (il GS il valore utilizzato nello spazio utente viene sostituito con il valore utilizzato durante le operazioni nel kernel). Nel kernel Linux, GS memorizza un puntatore per_cpu utilizzato per accedere ai dati del kernel e lo spazio utente memorizza i puntatori a TLS (Thread Local Storage).

Per evitare di chiamare l'istruzione SWAPGS due volte quando si accede nuovamente al kernel dallo spazio del kernel o quando si esegue codice che non richiede una modifica del registro GS, prima dell'istruzione vengono eseguiti un controllo e un salto condizionale. Il motore di esecuzione speculativa procede proattivamente all'esecuzione del codice con l'istruzione SWAPGS senza attendere l'esito del controllo e, se il ramo selezionato non viene confermato, scarta il risultato. Pertanto, potrebbe verificarsi una situazione in cui viene selezionato speculativamente un ramo che non coinvolge l'esecuzione di SWAPGS, ma durante l'esecuzione speculativa il valore del registro GS verrà modificato dall'istruzione SWAPGS e utilizzato nelle operazioni di memoria dipendenti che finiscono nella cache della CPU.

I ricercatori hanno proposto due scenari di attacco per i quali sono stati preparati prototipi di exploit. Il primo scenario si basa sulla situazione in cui l'istruzione SWAPGS non viene eseguita in modo speculativo, sebbene venga effettivamente utilizzata nell'esecuzione, e il secondo è l'opposto, quando l'istruzione SWAPGS viene eseguita in modo speculativo, sebbene non dovrebbe essere effettivamente eseguita. Per ogni scenario, ci sono due opzioni di sfruttamento: l'attaccante può determinare il valore in un indirizzo specifico nell'area del kernel e l'attaccante può cercare un valore specifico in indirizzi casuali nel kernel. L'esecuzione di un attacco richiede molto tempo e l'exploit può richiedere diverse ore per completare la fuga di notizie.

C'è un problema nel kernel Linux eliminato modificando la logica di chiamata dell'istruzione SWAPGS (bloccando l'esecuzione speculativa), simile alla correzione di altre vulnerabilità della classe Spectre v1. Si prevede che la protezione aggiuntiva avrà un impatto minimo sulle prestazioni dei carichi di lavoro tipici. La latenza si verifica durante la fase di passaggio tra lo spazio utente e quello del kernel, il che può comportare prestazioni scadenti quando, ad esempio, si verificano numerose chiamate di sistema dall'applicazione o una frequente generazione di NMI e interruzioni.

La correzione richiede l'installazione di un aggiornamento del kernel sia sul sistema host che sugli ambienti guest, seguito da un riavvio del sistema. Per disabilitare la protezione su Linux è possibile utilizzare l'opzione "nospectre_v1" che disabilita anche le misure per bloccare la vulnerabilità SWAPGS. La correzione è disponibile come toppa per il kernel Linux, che è già incluso nelle versioni 4.19.65, 5.2.7, 4.14.137, 4.9.188 e 4.4.188. Non sono ancora stati rilasciati aggiornamenti per le distribuzioni Linux (Debian, RHEL, Fedora, Arch Linux, SUSE / openSUSE, Ubuntu). Su Windows, il problema è stato risolto in silenzio Aggiornamento di luglio. Azienda Google preparato correzione per il kernel 4.19 fornito con ChromeOS e Android.

Secondo i ricercatori di Bitdefender, Intel è stata informata del problema già nell'agosto dello scorso anno. Si è deciso di risolvere il problema a livello di programmazione, per il quale gli sviluppatori di Microsoft, Google e del kernel Linux sono stati coinvolti nello sviluppo coordinato di una correzione. I processori Intel più vecchi, pre-Ivy Bridge, sono molto più difficili da attaccare a causa della mancanza di supporto per l'istruzione WRGSBASE utilizzata nell'exploit. I sistemi ARM, POWER, SPARC, MIPS e RISC-V non sono interessati dal problema poiché non supportano l'istruzione SWAPGS.

Il problema riguarda soprattutto i possessori di processori Intel -
Sui sistemi AMD è stato possibile riprodurre solo il secondo scenario di attacco, che si limita all'elaborazione speculativa del valore base del registro GS, che può essere utilizzato per cercare valori specifici in aree di memoria casuali. Per bloccare questa opzione di attacco abbastanza metodi esistenti di protezione contro Spectre v1.

Fonte: opennet.ru

Aggiungi un commento