AMD ha incluso i processori basati sull'architettura Zen 5 nell'elenco dei prodotti soggetti alla vulnerabilità EntrySign, che consente di eludere il meccanismo di verifica della firma digitale durante l'aggiornamento del microcodice. Inizialmente si pensava che la vulnerabilità riguardasse solo le CPU AMD basate sulle architetture Zen delle generazioni 1-4. Pertanto, la vulnerabilità si applica a processori come Ryzen 9000 (Granite Ridge), EPYC 9005 (Turin), Ryzen AI 300 (Strix Halo, Strix Point, Krackan Point) e Ryzen 9000HX (Fire Range).
Oltre all'aggiornamento del microcodice, per risolvere la vulnerabilità sui sistemi che utilizzano l'attestazione SEV-SNP è necessario anche aggiornare il firmware AMD SEV, fornito all'interno degli aggiornamenti del BIOS. AMD ha dichiarato di aver fornito ai produttori di hardware un firmware modificato (ComboAM5PI 1.2.0.3c AGESA) necessario per risolvere il problema, ma gli aggiornamenti finali del BIOS disponibili per i consumatori potrebbero essere rilasciati dai produttori dopo settimane o mesi.
I dipendenti di AMD hanno anche proposto di includere nel kernel Linux una patch che blocchi il caricamento di aggiornamenti del microcodice non ufficiali (si segnala che è necessario installare aggiornamenti del microcodice corretti insieme al BIOS fornito dal produttore di hardware, ma sono già emerse tentativi da parte di appassionati di creare correzioni non ufficiali basate su frammenti di microcodice estratti dal BIOS). Gli utenti sono invitati ad attendere gli aggiornamenti ufficiali del BIOS.
La vulnerabilità offerta da EntrySign, che consente la modifica del microcodice, può compromettere il meccanismo AMD SEV (Secure Encrypted Virtualization), usato nei sistemi di virtualizzazione per la protezione di macchine virtuali da interferenze da parte di ipervisori o amministratori del sistema host. Durante un attacco, è possibile infiltrarsi nel funzionamento dei sistemi guest protetti tramite le estensioni AMD SEV (Secure Encrypted Virtualization) e SEV-SNP (Secure Nested Paging), che forniscono garanzie di integrità della memoria delle macchine virtuali, isolano i registri del processore e assicurano un funzionamento sicuro con le tabelle di pagine di memoria nidificate.
La vulnerabilità è causata dall'uso di un algoritmo di autenticazione basato su CMAC nel processo di verifica del microcodice, invece di una funzionalità di hash sicura. AMD utilizza una chiave RSA privata per firmare digitalmente il microcodice caricato nella CPU e distribuisce una chiave pubblica con la patch del microcodice. Per verificare che la chiave pubblica corrisponda alla coppia originale di chiavi RSA, la CPU esegue un confronto dell'hash della chiave pubblica AMD, incorporata durante la produzione nella CPU, con l'hash della chiave pubblica indicata nella patch.
L'autenticazione del microcodice nella patch avviene confrontando l'hash fornito con la patch, firmato digitalmente (RSASSA-PKCS1-v1_5), e l'hash calcolato sulla base del microcodice effettivamente fornito nella patch. Se gli hash di riferimento e calcolati coincidono, la patch viene caricata nella memoria interna della CPU. Il problema è che, invece di utilizzare funzioni di hash crittograficamente sicure, è stato applicato l'algoritmo CMAC, non progettato per tali operazioni e suscettibile a collisioni.
CMAC non è una funzione di hash, ma implementa un codice di autenticazione del messaggio (Message Authentication Code) che dipende dalla chiave di cifratura. Il funzionamento di AES-CMAC si riduce all'uso dell'algoritmo crittografico AES e alla combinazione del risultato applicato con il successivo blocco di dati tramite un'operazione XOR. Tale schema garantisce che una modifica dei dati di input comporti una modifica imprevedibile dei dati di output. Tuttavia, CMAC non deve essere utilizzato come funzione di hash, poiché chiunque conosca la chiave di cifratura può scoprire gli stati intermedi della cifratura e calcolare valori che possono compensare le modifiche nei dati di input in modo che il risultato dell'applicazione di CMAC rimanga invariato.
AMD utilizza una singola chiave di cifratura per AES-CMAC, fornita su tutte le CPU a partire da Zen 1. Pertanto, è sufficiente estrarre questa chiave da qualsiasi CPU AMD e sarà applicabile a tutte le altre CPU. I ricercatori hanno scoperto che per la cifratura AES-CMAC AMD ha utilizzato una chiave nota, presa da un esempio menzionato nelle raccomandazioni sull'uso dei cifrari a blocchi NIST SP 800-38B. Poiché AES-CMAC è usato per l'hashing della chiave RSA incorporata nella patch e del contenuto del microcodice, determinando la chiave di cifratura AES-CMAC, è possibile sostituire nella patch un'altra chiave RSA pubblica e modificare il contenuto del microcodice.
Per creare una patch fittizia, è sufficiente generare una nuova chiave pubblica che produca lo stesso hash di quella generata dalla chiave pubblica originale AMD, e anche trovare collisioni per la firma digitale. Le collisioni si formano attaccando un blocco di microcodice che appare come un insieme di dati casuali. In questo modo, è possibile preparare una patch modificata con microcodice, corrispondente alla firma digitale con cui è stata convalidata la patch originale di AMD. Lo strumento Zentool, che include utilità per l'analisi del microcodice e la creazione di patch per modificarlo, è disponibile sotto licenza Apache 2.0. Per sostituire il microcodice è necessaria l'autorizzazione per eseguire codice a livello di Ring 0 (le tecnologie VT-x e AMD-V consentono al sistema guest di eseguire con diritti Ring 0).
Fonte: opennet.ru
