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

I ricercatori di Bitdefender hanno identificato una nuova vulnerabilità (CVE-2019-1125) nel meccanismo di esecuzione speculativa delle istruzioni nei moderni CPU, che ha ricevuto il nome di SWAPGS, corrispondente al nome dell'istruzione della CPU che causa il problema. La vulnerabilità permette permette ad un attaccante non privilegiato di determinare il contenuto delle aree di memoria del kernel o delle macchine virtuali in esecuzione. Il problema è confermata si presenta nei processori Intel (x86_64) e parzialmente la nei processori AMD, per i quali non si manifesta il vettore di attacco principale. I metodi di mitigazione precedentemente implementati per 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 recuperare dati dalla cache della CPU, rimasti dopo l'esecuzione speculativa delle istruzioni. I blocchi di previsione dei salti delle moderne CPU, per migliorare le prestazioni, utilizzano l'esecuzione anticipata di alcune istruzioni che è probabile vengano eseguite, ma senza attendere il calcolo di tutti i fattori che ne determinano l'esecuzione (ad esempio, quando non sono ancora stati calcolati le condizioni di salto o i parametri di accesso). Se la previsione non viene confermata, la CPU scarta il risultato dell'esecuzione speculativa, ma i dati elaborati durante questo processo rimangono nella cache della CPU e possono essere recuperati tramite metodi di determinazione del contenuto della cache tramite canali esterni, analizzando la variazione dei tempi di accesso ai dati memorizzati nella cache e a quelli non memorizzati.

La particolare caratteristica del nuovo attacco è l'uso di perdite che si verificano durante l'esecuzione speculativa dell'istruzione SWAPGS, utilizzata nei sistemi operativi per sostituire il valore del registro GS durante il passaggio di controllo dallo spazio utente al kernel del sistema operativo (il valore GS utilizzato nello spazio utente viene sostituito con quello utilizzato nelle operazioni del kernel). Nel kernel di Linux, GS memorizza un puntatore per_cpu, utilizzato per accedere ai dati del kernel, mentre nello spazio utente memorizza i puntatori per il TLS (Thread Local Storage).

Per evitare la chiamata doppia dell'istruzione SWAPGS quando si accede nuovamente al kernel dallo spazio del kernel o quando viene eseguito codice che non richiede la sostituzione del registro GS, è necessario eseguire un controllo e un salto condizionale prima dell'istruzione. Il meccanismo di esecuzione speculativa anticipa l'esecuzione del codice con l'istruzione SWAPGS, senza attendere il risultato del controllo, e se il ramo selezionato non viene convalidato, scarta il risultato. Pertanto, può verificarsi una situazione in cui viene selezionato speculativamente un ramo che non prevede l'esecuzione di SWAPGS, ma durante l'esecuzione speculativa il valore del registro GS potrebbe essere modificato dall'istruzione SWAPGS e utilizzato in operazioni di memoria dipendenti, che si accumulano 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, anche se viene utilizzata durante l'esecuzione effettiva, mentre il secondo scenario è contrario, ovvero l'istruzione SWAPGS viene eseguita in modo speculativo, anche se non dovrebbe effettivamente farlo. Per ciascuno scenario sono previsti due tipi di sfruttamento: l'attaccante può determinare un valore a un indirizzo specifico nell'area del kernel e l'attaccante può cercare un valore specifico in indirizzi casuali nel kernel. L'esecuzione dell'attacco richiede molto tempo e per organizzare una perdita potrebbero essere necessarie ore di esecuzione dell'exploit.

Riproduci video

Nel kernel Linux c'è un problema risolto attraverso una 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 abbia un impatto minimo sulle prestazioni delle normali operazioni. Il ritardo si verifica durante il passaggio tra spazio utente e kernel, il che può portare a una riduzione delle prestazioni, ad esempio, durante l'esecuzione intensa di chiamate di sistema da un'applicazione o nella generazione frequente di NMI e interruzioni.

La correzione richiede di installare l'aggiornamento del kernel sia nel sistema host che negli ambienti guest, seguita da un riavvio del sistema. Per disattivare la protezione in Linux, è possibile utilizzare l'opzione «nospectre_v1», che disabilita anche le misure di blocco della vulnerabilità SWAPGS. La correzione è disponibile come patch per il kernel Linux, già incluso 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 ancora stati rilasciati (Debian, RHEL, Fedora, Arch Linux, SUSE/openSUSE, Ubuntu). In Windows, il problema è stato risolto senza ulteriore pubblicità nel giugno aggiornamento. Google preparato correzione per il kernel 4.19, fornito in ChromeOS e Android.

Secondo quanto dichiarato dai ricercatori di Bitdefender, Intel è stata informata del problema già nell'agosto dello scorso anno. Il problema è stato risolto a livello software, con la collaborazione degli sviluppatori di Microsoft, Google e del kernel Linux per la coordinazione dell'elaborazione della patch. I vecchi processori Intel, fino a Ivy Bridge, sono molto più difficili da attaccare a causa della mancanza del supporto per l'istruzione WRGSBASE, utilizzata nell'exploit. I sistemi ARM, POWER, SPARC, MIPS e RISC-V non sono soggetti al problema, poiché non supportano l'istruzione SWAPGS.

Il problema minaccia principalmente i possessori di processori Intel —
su sistemi AMD è stato possibile riprodurre solo il secondo scenario di attacco, limitato all'elaborazione speculativa del valore base del registro GS, che può essere utilizzato per cercare valori specifici in aree casuali della memoria. Per bloccare questa variante di attacco basta esistono metodi di protezione contro le vulnerabilità Spectre v1.

Fonte: opennet.ru

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