AMD SEV (Secure Encrypted Virtualization) sono estensioni della CPU progettate per assicurare una separazione netta tra le macchine virtuali e l’hypervisor sottostante. L’obiettivo è quello di proteggere il contenuto delle macchine virtuali dalle potenziali minacce esterne, hypervisor incluso. Tutti i dati conservati nella memoria delle macchine virtuali sono crittografati così da impedire che un hypervisor malevolo o compromesso possa accedere direttamente ai dati riservati contenuti nei sistemi guest. Si pensi ad esempio ad eventuali attacchi sferrati nei confronti dell’hypervisor utilizzato dai provider cloud.
CacheWarp: cos’è e come funziona l’attacco ai processori AMD
L’attacco CacheWarp, appena descritto da un team di ricercatori composto da membri del CISPA Helmholtz Center for Information Security e dell’Università di Graz, affonda le sue radici in un problema hardware di cui soffrono i processori AMD. Come confermato dall’azienda di Sunnyvale, CacheWarp interessera le CPU EPYC più vecchie, fino alla terza generazione, quindi Naples, Rome e Milan. Al momento, tuttavia, soltanto i processori AMD Milan sono destinatari di un aggiornamento correttivo a livello di microcodice.
Paradossalmente, è proprio la funzione di sicurezza SEV a rendere possibile l’attacco CacheWarp. L’exploit funziona cancellando la cache con l’istruzione INVD, che lascia la CPU con dati obsoleti archiviati nella memoria di sistema o nella RAM. La CPU legge i dati memorizzati presumendo che siano nuovi di zecca quando in realtà non lo sono.
Supponiamo di avere una variabile che determina se un utente è autenticato con successo. Sfruttando CacheWarp, un aggressore può ripristinare la variabile a uno stato precedente e prendere il controllo di una sessione già autenticata. Inoltre, l’attaccante può ripristinare gli indirizzi di ritorno memorizzati nello stack e cambiare il flusso di controllo di un programma.
Lo stack è una regione di memoria utilizzata per la gestione delle chiamate di funzioni. Ogni volta che viene chiamata una funzione, l’indirizzo di ritorno viene inserito nello stack. Quando la funzione termina, l’indirizzo di ritorno viene recuperato dallo stack per riprendere l’esecuzione dal punto in cui la funzione è stata chiamata. L’indirizzo di ritorno è l’indirizzo di memoria in corrispondenza del quale l’esecuzione del programma dovrebbe ritornare dopo il completamento di una funzione invocata in precedenza.
Ecco perché CacheWarp è così pericoloso: perché consente ad eventuali malintenzionati di effettuare veri e propri viaggi nel tempo, accedendo a dati che non dovrebbero essere in alcun modo esposti.
Impatto pratico e implicazioni sulla sicurezza
CacheWarp consente agli aggressori di usare le estensioni AMD SEV per acquisire privilegi elevati sul sistema-vittima nonché per eseguire codice arbitrario. In questo video si utilizza codice exploit che permette di superare agevolmente una procedura di autenticazione SSH. Un altro video mostra CacheWarp in azione: questa volta la vulnerabilità è sfruttata per acquisire i diritti root sul sistema della vittima.
Ovviamente, chi non facesse affidamento sulla distribuzione di macchine virtuali sicure utilizzando AMD SEV, non è di fatto vulnerabile. Allo stesso modo, secondo i tecnici di AMD, le patch per i processori Naples e Rome non sono necessarie in quanto le estensioni SEV non sono effettivamente abilitate e utilizzate.
Il bug in questione, inoltre, non rientra nel novero degli attacchi side-channel che interessano i processori da diversi anni a questa parte. Si tratta infatti di un problema architetturale.
La falla che può portare all’attacco CacheWarp è nota con l’identificativo CVE-2023-20592 ed è documentata nel bollettino pubblicato da AMD.