Compania AMD a inclus procesoarele bazate pe microarhitectura Zen 5 în lista produselor afectate de vulnerabilitatea EntrySign, care permite ocolirea mecanismului de verificare a semnăturii digitale în timpul actualizării microcodului. Inițial, se credea că vulnerabilitatea afectează doar CPU-urile AMD din prima până în a patra generație a microarhitecturii Zen. Astfel, vulnerabilitatea s-a dovedit a fi aplicabilă procesoarelor precum Ryzen 9000 (Granite Ridge), EPYC 9005 (Turin), Ryzen AI 300 (Strix Halo, Strix Point, Krackan Point) și Ryzen 9000HX (Fire Range).
Pe lângă actualizarea microcodului, pentru a remedia vulnerabilitatea în sistemele care utilizează certificarea SEV-SNP, este necesară și actualizarea firmware-ului AMD SEV, care este inclus în actualizările BIOS. Se afirmă că AMD a furnizat producătorilor de echipamente firmware-ul modificat (ComboAM5PI 1.2.0.3c AGESA) necesar pentru a rezolva problema, dar actualizările finale de BIOS disponibile consumatorilor ar putea fi lansate de producători după săptămâni sau luni.
Angajații AMD au propus, de asemenea, includerea unui patch în kernelul Linux care blochează încărcarea actualizărilor neoficiale de microcod (se subliniază că actualizările corecte de microcod trebuie instalate împreună cu BIOS-ul de la producătorul echipamentului, dar deja au apărut încercări de a crea corecții neoficiale de către entuziaști, bazate pe fragmente de microcod tăiate din BIOS). Utilizatorilor li se recomandă să aștepte actualizările oficiale de BIOS.
Vulnerabilitatea EntrySign oferă posibilitatea modificării microcodului, permițând compromiterea mecanismului AMD SEV (Virtualizare Encryptată Securizată), utilizat în sistemele de virtualizare pentru protecție. mașini virtuale de intervenția hipercontrollorului sau a administratorului sistemului gazdă. În cadrul atacului, se poate interfera cu funcționarea sistemelor gazdă, protejate prin extensiile AMD SEV (Virtualizare Encryptată Securizată) și SEV-SNP (Paging Imbricat Securizat), care oferă garanții de integritate a memoriei mașinilor virtuale, izolând registrele procesorului și asigurând o funcționare sigură cu tabelele de pagini de memorie înglobate.
Vulnerabilitatea este cauzată de utilizarea în procesul de verificare a microcodului a algoritmului de integrare CMAC în locul unei funcții hash de încredere. Compania AMD folosește o cheie privată RSA pentru a semna digital microcodul încărcat în procesor, iar în patch-ul cu microcodul distribuie cheia publică. Pentru a verifica că cheia publică corespunde perechii originale de chei RSA, procesorul compară hash-ul cheii publice AMD, încorporat în timpul producției în CPU, cu hash-ul cheii publice specificate în patch.
Verificarea autenticitații microcodului din patch se realizează prin compararea hash-ului furnizat cu patch-ul, semnat digital (RSASSA-PKCS1-v1_5), cu hash-ul calculat pe baza microcodului efectiv livrat în patch. Dacă hash-urile de referință și cele calculate coincid, patch-ul este încărcat în memoria internă a CPU-ului. Problema este că, în loc să utilizeze funcții hash criptografice recomandate, a fost folosit algoritmul CMAC, care nu este proiectat pentru astfel de operațiuni și nu este protejat împotriva coliziunilor.
CMAC nu este o funcție hash, ci realizează o integrare a mesajului (Message Authentication Code), care depinde de cheia de criptare. Funcționarea AES-CMAC constă în utilizarea algoritmului criptografic AES și combinarea rezultatului aplicării acestuia cu următorul bloc de date prin operația XOR. Această schemă garantează că modificarea datelor de intrare va conduce la o modificare imprevizibilă a datelor de ieșire. Totuși, CMAC nu trebuie folosit ca funcție hash, deoarece oricine cunoaște cheia de criptare inițială poate descoperi stările intermediare de criptare și poate calcula valori care pot compensa modificarea datelor de intrare, astfel încât rezultatul aplicării CMAC să rămână neschimbat.
AMD folosește o cheie de criptare unică pentru AES-CMAC, furnizată pe toate procesoarele CPU începând de la Zen 1. Prin urmare, este suficient să extragi această cheie din orice CPU AMD, iar aceasta va fi aplicabilă tuturor celorlalte CPU. Cercetătorii au descoperit că, pentru criptarea AES-CMAC, AMD a folosit o cheie cunoscută, extrasă dintr-un exemplu menționat în recomandările pentru utilizarea algoritmilor de criptare bloc NIST SP 800-38B. Deoarece AES-CMAC este utilizat pentru hashingul cheii RSA încorporate în patch și a conținutului microcodului, identificând cheia de criptare AES-CMAC, s-a deschis posibilitatea de a substitui un alt cheia RSA deschisă în patch-ul respectiv și de a modifica conținutul microcodului.
Pentru a crea un patch fals, este suficient să generezi o nouă cheie publică care să producă același hash ca cel generat de cheia publică autentică AMD și să se identifice coliziunile pentru semnătura digitală. Coliziunile sunt create prin atașarea unui bloc suplimentar la microcod, care arată ca un set de date aleatorii. În mod similar, se poate pregăti un patch modificat cu microcod care să corespundă semnăturii digitale cu care a fost certificat patch-ul original de la AMD. Uneltele Zentool, care includ utilitare pentru analiza microcodului și crearea de patch-uri pentru modificarea microcodului, sunt disponibile sub licența Apache 2.0. Pentru a schimba microcodul, este necesară obținerea dreptului de a executa cod la nivelul Ring 0 (tehnologiile VT-x și AMD-V permit sistemului gazdă să ruleze cu drepturi Ring 0).
Sursa: opennet.ro
