Společnost AMD zařadila procesory založené na mikroarchitektuře Zen 5 do seznamu produktů, které jsou náchylné k zranitelnosti EntrySign, umožňující obcházení mechanismu ověřování digitálního podpisu při aktualizaci mikro kódu. Původně se předpokládalo, že zranitelnost ovlivňuje pouze CPU AMD založené na 1-4 generacích mikroarchitektury Zen. Takže se zranitelnost ukázala jako použitelná pro procesory jako Ryzen 9000 (Granite Ridge), EPYC 9005 (Turin), Ryzen AI 300 (Strix Halo, Strix Point, Krackan Point) a Ryzen 9000HX (Fire Range).
Kromě aktualizace mikro kódu je pro odstranění zranitelnosti na systémech, které používají attestation SEV-SNP, také vyžadována aktualizace firmwaru AMD SEV, která je součástí aktualizací BIOSu. Tvrdí se, že společnost AMD předala výrobcům zařízení upravený firmware (ComboAM5PI 1.2.0.3c AGESA), který je nezbytný k odstranění problému, avšak konečné aktualizace BIOSu, které budou k dispozici spotřebitelům, mohou výrobci vydat až po týdnech nebo měsících.
Zaměstnanci AMD také navrhli přidání patche do jádra Linuxu, který blokuje načítání neoficiálních aktualizací mikro kódu (je zdůrazněno, že správné aktualizace mikro kódu by měly být nainstalovány spolu s BIOSem od výrobce zařízení, ale již se objevily pokusy enthusiastů vytvářet neoficiální opravy založené na fragmentech mikro kódu vystřižených z BIOSu). Uživatelům se doporučuje počkat na oficiální aktualizace BIOSu.
Zranitelnost EntrySign poskytuje možnost změny mikro kódu, což umožňuje ohrozit mechanismus AMD SEV (Secure Encrypted Virtualization), používaný v virtualizačních systémech k ochraně virtuálních strojů před zásahy hypervizora nebo administrátora hostitelského systému. Během útoku lze zasáhnout do práce hostitelských systémů chráněných pomocí rozšíření AMD SEV (Secure Encrypted Virtualization) a SEV-SNP (Secure Nested Paging), která poskytují záruky integrity paměti virtuálních strojů, izolují procesorové registry a zajišťují bezpečnou práci s vnořenými tabulkami stránek paměti.
Zranitelnost je způsobena použitím algoritmu CMAC pro ověření mikrokódu místo spolehlivé hashovací funkce. Společnost AMD používá soukromý klíč RSA k digitálnímu podepisování mikrokódu nahrávaného do procesoru, zatímco v rámci patche s mikrokódem distribuuje veřejný klíč. Aby procesor ověřil, že veřejný klíč odpovídá původnímu páru RSA klíčů, provádí porovnání hash z veřejného klíče AMD, který je vyroben během výroby CPU, s hashem veřejného klíče uvedeného v patchi.
Ověřování mikrokódu v patchi se provádí porovnáním hashe dodávaného s patchem, jehož podpis je digitálně podepsán (RSASSA-PKCS1-v1_5), a hashe, který je vypočten na základě skutečně dodávaného mikrokódu v patchi. Pokud se referenční a vypočtené hashe shodují, patch je nahrán do interní paměti CPU. Problém je, že místo doporučovaných kryptograficky bezpečných hashovacích funkcí byl použit algoritmus CMAC, který není určen pro takové operace a není chráněn proti kolizím.
CMAC není hashovací funkcí, ale realizuje kód pro autentizaci zprávy (Message Authentication Code), který závisí na šifrovacím klíči. Činnost AES-CMAC spočívá v použití kryptografického algoritmu AES a kombinaci výsledku jeho aplikace s následujícím blokem dat pomocí operace XOR. Tato schéma zaručuje, že změna vstupních dat povede k nepředvídatelným změnám dat na výstupu. CMAC však nelze použít jako hashovací funkci, protože kdokoli, kdo zná původní šifrovací klíč, může zjistit mezistavy šifrování a vypočítat hodnoty, které mohou kompenzovat změny ve vstupních datech tak, že výsledek aplikace CMAC zůstane nezměněn.
AMD používá pro AES-CMAC jediný klíč šifrování, dodávaný na všech CPU od Zen 1. Takže stačí vytáhnout tento klíč z jakéhokoliv CPU AMD a bude použitelný pro všechna ostatní CPU. Výzkumníci zjistili, že pro šifrování AES-CMAC byl v AMD použit známý klíč, uvedený v doporučeních pro použití blokových šifer NIST SP 800-38B. Protože se AES-CMAC používá pro hashování vloženého RSA klíče a obsahu mikrokódu, určením klíče šifrování AES-CMAC vznikla možnost nahradit v patchi jiný veřejný RSA klíč a změnit obsah mikrokódu.
Pro vytvoření falešného patchu stačí vygenerovat nový veřejný klíč, který generuje stejný hash jako původní veřejný klíč AMD, a také nalézt kolize pro digitální podpis. Kolize se vytvářejí připojením k mikrokódu doplňkového bloku, který vypadá jako soubor náhodných dat. Tímto způsobem lze připravit upravený patch s mikrokódem, odpovídající digitálnímu podpisu, kterým byl podepsán originální patch od AMD. Nástroj Zentool, zahrnující utilities pro analýzu mikrokódu a vytváření patchů pro změnu mikrokódu, je dostupný pod licencí Apache 2.0. Pro výměnu mikrokódu je nutné mít oprávnění k provádění kódu z úrovně nultého ochranného kruhu (technologie VT-x a AMD-V umožňují hostitelskému systému provozovat se právy Ring 0).
Zdroj: opennet.ru
