EntrySign: zraniteľnosť ovplyvňujúca procesory AMD Zen

Logo chyby zabezpečenia EntrySign

Nedávno, Inžinieri Google oznámili podrobnosti o kritickej zraniteľnosti identifikovanej ako CVE-2024-56161. Pokrstený pod menom EntrySign, toto zlyhanie umožňuje vyhnúť sa mechanizmu overovania digitálneho podpisu počas aktualizácie mikrokódu na procesoroch AMD s použitím prvých štyroch generácií mikroarchitektúry Zen.

EntrySign ovplyvňuje široké spektrum procesorov, umožňuje útočníkovi obísť bezpečnostné kontroly, ktoré zaisťujú integritu mikrokódu, čo potenciálne otvára dvere škodlivým modifikáciám správania hardvéru.

O zraniteľnosti

Pôvod tejto zraniteľnosti spočíva v použití algoritmu AES-CMAC počas overovania digitálneho podpisu namiesto dôveryhodnej hašovacej funkcie. AMD použila tento algoritmus na podpísanie mikrokódu pomocou súkromného kľúča RSA a pridania verejného kľúča do opravy.

Proces overovania zahŕňa procesor, ktorý porovnáva hodnotu hash verejného kľúča vloženého počas výroby s hodnotou hash kľúča špecifikovaného v záplate. však pretože bol použitý CMAC, čo v skutočnosti nie je hašovacia funkcia, ale autentifikačný kód prenos správ, došlo k narušeniu bezpečnosti.

CMAC je založený na algoritme AES a používa operácie XOR na kombinovanie blokov údajov, ale pretože nie je navrhnutý tak, aby bol odolný voči kolíziám, umožňuje útočníkovi, ktorý pozná šifrovací kľúč, vypočítať medzihodnoty, ktoré kompenzujú zmeny vo vstupe, pričom výsledok operácie zostane nezmenený.

Intel aj AMD navrhli jedinečné inštrukčné sady mikrokódov založené na RISC, obe nezdokumentované, ale koncepčne podobné iným inštrukčným súborom RISC, ako sú ARM alebo RISC-V. Rovnako ako softvér, správna implementácia zložitého hardvéru je výzvou; Historicky to viedlo k viacerým známym chybám, ako napríklad chyba FDIV od Intelu v Pentiu v roku 1994.

AMD dodáva jeden šifrovací kľúč pre AES-CMAC vo všetkých svojich procesoroch od Zen 1 po Zen 4, čo znamená, že ak niekto vytiahne tento kľúč z jedného CPU, môže ho použiť na všetky ostatné. V skutočnosti vedci zistili, že tieto procesory používajú známy kľúč, prevzatý z príkladu v smerniciach NIST SP 800-38B.

To teoreticky umožnilo generovať falošné záplaty nahradením verejného kľúča opravy kľúčom, ktorý vytvára rovnaký hash, a vyberte kolízie pre digitálny podpis. Takéto kolízie sa dosahujú pridaním ďalšieho bloku zdanlivo náhodných údajov do mikrokódu, takže upravená oprava si zachová pôvodný digitálny podpis AMD.

EntrySign, chyba zabezpečenia CVE-2024-56161, ktorá umožňuje útočníkom obísť bezpečnostné kontroly

Na vyriešenie tohto problémuInžinieri Google, aby preskúmali nové spôsoby manipulácie s mikrokódom v procesoroch AMD Vyvinuli Zentool, zbierka kombinovaných nástrojov na skúmanie záplat mikrokódu, vrátane obmedzeného rozoberania, vytvárania záplat mikrokódu pomocou obmedzeného množstva zostavy reverzného inžinierstva.

Zentool bol navrhnutý tak, aby uľahčil analýzu a úpravu mikrokódu, ktorý ponúka sériu príkazov, ktoré umožňujú od úpravy parametrov a nahradenia inštrukcií až po načítanie upraveného mikrokódu do CPU a opravu digitálneho podpisu záplaty.

Napríklad príkaz „zentool edit“ umožňuje úpravu parametrov v súboroch mikrokódu, zatiaľ čo „zentool print“ zobrazuje podrobné informácie o vnútorných štruktúrach mikrokódu. Tiež «zentool load» načíta mikrokód do CPU a «zentool resign» prepočíta digitálny podpis, pričom zohľadní vykonané zmeny. Okrem toho balík obsahuje nástroje ako mcas a mcop, ktoré poskytujú funkcie assembleru a disassemblera na priamu prácu s mikrokódom.

Schopnosti Zentool umožňuje vývojárom pripraviť a aplikovať ich vlastné záplaty na procesoroch AMD Zen Ako názorný príklad bol pripravený patch, ktorý upravuje logiku inštrukcie RDRAND. Po aplikácii tejto záplaty inštrukcia RDRAND prestane generovať pseudonáhodné sekvencie a začne konzistentne vracať číslo 4, čím demonštruje silu modifikácie mikrokódu a zmeny očakávaného správania procesora.

Za zmienku stojí to Zentool prichádza s podrobným sprievodcom o mikroarchitektúre RISC86 používanej v mikrokóde AMD, ako aj inštruktážna poznámka vysvetľujúca, ako vytvoriť vlastný mikrokód. Sprievodca okrem iného ukazuje, ako navrhnúť nové inštrukcie procesora, upraviť správanie existujúcich inštrukcií a načítať tieto zmeny priamo do CPU.

Nakoniec, ak máte záujem dozvedieť sa viac o tom, môžete si prečítať podrobnosti v nasledujúci odkaz.