Nedávno, Inženýři Google oznámili podrobnosti o kritické zranitelnosti označené jako CVE-2024-56161. Pokřtěn pod jménem EntrySign, toto selhání umožňuje vyhnout se mechanismu ověřování digitálního podpisu během aktualizace mikrokódu na procesorech AMD využívajících první čtyři generace mikroarchitektury Zen.
EntrySign ovlivňuje širokou škálu procesorů, umožňuje útočníkovi obejít bezpečnostní kontroly, které zajišťují integritu mikrokódu, a potenciálně tak otevřít dveře škodlivým modifikacím chování hardwaru.
O zranitelnosti
Původ této chyby zabezpečení spočívá v použití algoritmu AES-CMAC při ověřování digitálního podpisu namísto důvěryhodné hashovací funkce. AMD použilo tento algoritmus k podepsání mikrokódu pomocí soukromého klíče RSA a přidání veřejného klíče do opravy.
Proces ověřování zahrnuje procesor, který porovnává hodnotu hash veřejného klíče vloženého během výroby s hodnotou hash klíče specifikovaného v patchi. Však, protože byl použit CMAC, což ve skutečnosti není hashovací funkce, ale ověřovací kód přenos zpráv, došlo k narušení bezpečnosti.
CMAC je založen na algoritmu AES a používá operace XOR ke kombinování bloků dat, ale protože není navržen tak, aby byl odolný proti kolizi, umožňuje útočníkovi, který zná šifrovací klíč, vypočítat mezihodnoty, které kompenzují změny ve vstupu, přičemž výsledek operace zůstane nezměněn.
Intel i AMD navrhly jedinečné instrukční sady mikrokódů založené na RISC, obě nezdokumentované, ale koncepčně podobné jiným instrukčním sadám RISC, jako je ARM nebo RISC-V. Stejně jako software je i správná implementace složitého hardwaru výzvou; Historicky to vedlo k několika dobře známým chybám, jako je chyba FDIV společnosti Intel v Pentiu v roce 1994.
AMD dodává jediný šifrovací klíč pro AES-CMAC ve všech svých procesorech od Zen 1 po Zen 4, což znamená, že pokud někdo extrahuje tento klíč z jednoho CPU, může jej použít na všechny ostatní. Ve skutečnosti výzkumníci zjistili, že tyto procesory používají známý klíč, převzatý z příkladu v pokynech NIST SP 800-38B.
To teoreticky umožnilo generovat falešné záplaty nahrazením veřejného klíče opravy klíčem, který vytváří stejný hash, a vyberte kolize pro digitální podpis. Takových kolizí je dosaženo přidáním dalšího bloku zdánlivě náhodných dat do mikrokódu, takže upravená oprava zachová původní digitální podpis AMD.
Chcete-li tento problém vyřešitAby prozkoumali nové způsoby manipulace s mikrokódem v procesorech AMD, inženýři společnosti Google Vyvinuli Zentool, sbírka kombinovaných nástrojů pro zkoumání záplat mikrokódu, včetně omezeného rozebírání, vytváření záplat mikrokódu pomocí omezeného množství sestavení zpětného inženýrství.
Zentool byl navržen tak, aby usnadnil analýzu a úpravu mikrokódu, který nabízí řadu příkazů, které umožňují od úpravy parametrů a nahrazení instrukcí až po načtení upraveného mikrokódu do CPU a opravu digitálního podpisu opravy.
Například příkaz „zentool edit“ umožňuje editaci parametrů v souborech mikrokódu, zatímco „zentool print“ zobrazuje podrobné informace o vnitřních strukturách mikrokódu. Také «zentool load» načte mikrokód do CPU a «zentool resign» přepočítá digitální podpis, přičemž vezme v úvahu provedené změny. Balíček navíc obsahuje nástroje jako mcas a mcop, které poskytují funkce assembleru a disassembleru pro přímou práci s mikrokódem.
Schopnosti Zentool umožňuje vývojářům připravovat a aplikovat vlastní opravy na procesorech AMD Zen Jako názorný příklad byl připraven patch, který upravuje logiku instrukce RDRAND. Po aplikaci této opravy přestane instrukce RDRAND generovat pseudonáhodné sekvence a začne konzistentně vracet číslo 4, čímž demonstruje sílu modifikace mikrokódu a změny očekávaného chování procesoru.
Za zmínku stojí Zentool je dodáván s podrobným průvodcem o mikroarchitektuře RISC86 používané v mikrokódu AMD a také instruktážní poznámku vysvětlující, jak vytvořit vlastní mikrokód. Průvodce mimo jiné ukazuje, jak navrhnout nové instrukce procesoru, upravit chování stávajících instrukcí a načíst tyto změny přímo do CPU.
A konečně, pokud máte zájem dozvědět se o tom více, můžete se podívat na podrobnosti v následující odkaz.