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

I ricercatori della società Bitdefender hanno identificato una nuova vulnerabilità (CVE-2019-1125) nel meccanismo di esecuzione speculativa delle istruzioni delle moderne CPU, che ha preso il nome di SWAPGS, corrispondente al nome dell'istruzione del processore che causa il problema. La vulnerabilità consente permette a un attaccante non privilegiato di determinare il contenuto delle aree di memoria del kernel o delle macchine virtuali in esecuzione. Il problema è confermato nei processori Intel (x86_64) e parzialmente i processori AMD, per i quali non si manifesta il vettore di attacco principale. I metodi di mitigazione già implementati contro le vulnerabilità Spectre e Meltdown non proteggono dall'attacco SWAPGS utilizzando processori Intel, ma sono già state proposte delle patch per Linux, ChromeOS, Android e Windows. i processori AMD, per i quali non si manifesta il vettore d'attacco principale. I metodi di mitigazione implementati per le vulnerabilità Spectre e Meltdown non proteggono dall'attacco SWAPGS quando si utilizzano processori Intel, ma per Linux, ChromeOS, Android e Windows sono già state proposte delle patch.

La vulnerabilità appartiene alla classe Spectre v1 e si basa sull'idea di recuperare dati dalla cache del processore, rimasti dopo l'esecuzione speculativa delle istruzioni. I blocchi di predizione delle ramificazioni delle moderne CPU, per migliorare le performance, applicano l'esecuzione anticipata di alcune istruzioni che è probabile vengano eseguite, senza attendere il calcolo di tutti i fattori che ne determinano l'esecuzione (ad esempio, quando le condizioni di transizione o i parametri di accesso non sono ancora stati calcolati). Se la previsione non si conferma, il processore scarta il risultato dell'esecuzione speculativa, ma i dati elaborati durante di essa rimangono nella cache del processore e possono essere recuperati mediante metodi di identificazione del contenuto della cache attraverso canali laterali, che analizzano le variazioni nel tempo di accesso ai dati in cache e non in cache.

La particolarità del nuovo attacco è nell'utilizzo della perdita di informazioni che si verifica durante l'esecuzione speculativa dell'istruzione SWAPGS, che è utilizzata nei sistemi operativi per sostituire il valore del registro GS durante il passaggio dal livello utente al kernel del sistema operativo (il valore GS utilizzato nell'area utente viene sostituito con un valore utilizzato nelle operazioni nel kernel). Nel kernel Linux, il GS memorizza un puntatore per_cpu, utilizzato per accedere ai dati del kernel, mentre nello spazio utente si trovano i puntatori TLS (Thread Local Storage).

Per escludere la chiamata doppia all'istruzione SWAPGS quando si accede nuovamente al kernel dallo spazio del kernel o quando viene eseguito il codice che non richiede la sostituzione del registro GS, prima dell'istruzione viene effettuato un controllo e un salto condizionale. Il meccanismo di esecuzione speculativa inizia in anticipo l'esecuzione del codice con l'istruzione SWAPGS, senza attendere il risultato del controllo, e se il ramo selezionato non è confermato, scarta il risultato. In questo modo, può verificarsi una situazione in cui viene scelto in modo speculativo un ramo che non prevede l'esecuzione di SWAPGS, ma nel processo di esecuzione speculativa il valore del registro GS viene modificato dall'istruzione SWAPGS e utilizzato in operazioni di memorizzazione dipendenti che si accumulano nella cache della CPU.

I ricercatori hanno proposto due scenari d'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, pur essendo utilizzata nell'esecuzione reale, e il secondo — al contrario, quando l'istruzione SWAPGS viene eseguita in modo speculativo, anche se in realtà non dovrebbe. Per ciascuno scenario sono state previste due modalità di sfruttamento: l'attaccante può determinare un valore a un determinato indirizzo nella zona del kernel e l'attaccante può cercare un determinato valore in indirizzi casuali nel kernel. Condurre l'attacco richiede molto tempo e per organizzare una fuga di dati potrebbe essere necessario eseguire l'exploit per ore.

Guarda il video

Nel kernel di Linux c'è un problema è stato risolto attraverso la modifica della logica di chiamata dell'istruzione SWAPGS (blocco dell'esecuzione speculativa), analogamente alla correzione di altre vulnerabilità della classe Spectre v1. Si prevede che la protezione aggiunta influenzi minimamente le prestazioni dei carichi di lavoro tipici. Si verifica un ritardo nella fase di commutazione tra lo spazio utente e il kernel, il che potrebbe comportare una riduzione delle prestazioni, ad esempio, durante l'esecuzione intensiva di chiamate di sistema da un'applicazione o generando frequentemente NMI e interruzioni.

La correzione richiede l'installazione di un aggiornamento del kernel sia nel sistema principale che negli ambienti virtuali, con successivo riavvio del sistema. Per disattivare la protezione in Linux, si può utilizzare l'opzione «nospectre_v1», che disabilita anche le misure di blocco della vulnerabilità SWAPGS. La correzione è disponibile sotto forma di patch per il kernel Linux, già inclusa nelle versioni 4.19.65, 5.2.7, 4.14.137, 4.9.188 e 4.4.188. Gli aggiornamenti per le distribuzioni Linux non sono stati ancora rilasciati (Debian, RHEL, Fedora, Arch Linux, SUSE/openSUSE, Ubuntu). In Windows, il problema è stato risolto senza eccessiva pubblicità nell' aggiornamento di luglio. Google ha preparato una correzione per il kernel 4.19, fornita in ChromeOS e Android.

Secondo i ricercatori di Bitdefender, Intel è stata informata del problema già nell'agosto dello scorso anno. La decisione è stata di risolvere il problema tramite software, per cui gli sviluppatori di Microsoft, Google e del kernel Linux sono stati coinvolti nella coordinazione della correzione. I vecchi processori Intel, fino a 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 soggetti al problema, in quanto non supportano l'istruzione SWAPGS.

Il problema rappresenta una minaccia principalmente per i possessori di processori Intel—
sui sistemi AMD è riuscito a riprodurre solo il secondo scenario d'attacco, limitato all'esecuzione speculativa del valore di base del registro GS, che può essere utilizzato per cercare valori specifici in aree casuali della memoria. Per bloccare questo tipo di attacco ha bisogno di esistono metodi di protezione dalle vulnerabilità Spectre v1.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster