Het bedrijf AMD heeft processors op basis van de Zen 5 microarchitectuur op de lijst van producten geplaatst die kwetsbaar zijn voor de EntrySign-kwetsbaarheid, waardoor het mogelijk is om het mechanisme voor digitale handtekeningverificatie te omzeilen bij het bijwerken van microcode. Aanvankelijk werd aangenomen dat de kwetsbaarheid alleen CPU's van AMD van de 1-4 generaties van de Zen microarchitectuur raakte. Daardoor bleek de kwetsbaarheid van toepassing op processors zoals de Ryzen 9000 (Granite Ridge), EPYC 9005 (Turin), Ryzen AI 300 (Strix Halo, Strix Point, Krackan Point) en Ryzen 9000HX (Fire Range).
Naast de microcode-update is ook een firmware-update van AMD SEV vereist om de kwetsbaarheid op systemen die SEV-SNP-verificatie gebruiken op te lossen. Deze firmware wordt geleverd als onderdeel van BIOS-updates. AMD zou de gewijzigde firmware (ComboAM5PI 1.2.0.3c AGESA), die nodig is om het probleem op te lossen, aan hardwarefabrikanten hebben geleverd, maar de beschikbare definitieve BIOS-updates voor consumenten kunnen weken of maanden op zich laten wachten.
Medewerkers van AMD hebben ook een patch voorgesteld voor opname in de Linux-kernel die de installatie van ongeauthoriseerde microcode-updates blokkeert (het is opgemerkt dat correcte microcode-updates samen met de BIOS van de hardwareproducent moeten worden geïnstalleerd, maar er zijn al pogingen gedaan door enthousiastelingen om ongeauthoriseerde correcties te maken op basis van microcodefragmenten uit de BIOS). Gebruikers wordt aangeraden te wachten op officiële BIOS-updates.
De EntrySign-kwetsbaarheid die de wijziging van microcode mogelijk maakt, stelt de werking van AMD SEV (Secure Encrypted Virtualization) in gevaar, die in virtualisatiesystemen wordt gebruikt ter bescherming virtuele machines tegen inmenging van de hypervisor of de beheerder van het host-systeem. Tijdens een aanval kan men zich infiltreren in de werking van gastsystemen die zijn beschermd met AMD SEV (Secure Encrypted Virtualization) en SEV-SNP (Secure Nested Paging), die garanties bieden voor de integriteit van het geheugen van virtuele machines, terwijl ze de processorregistres isoleren en een veilige werking met geneste pagina tabelen waarborgen.
De kwetsbaarheid wordt veroorzaakt door het gebruik van het CMAC-algoritme voor de verificatie van microcode in plaats van een betrouwbare hashfunctie. AMD gebruikt een gesloten RSA-sleutel om de microcode die in de processor wordt geladen digitaal te ondertekenen, en verspreidt de bijbehorende open sleutel in de patch met de microcode. Om te controleren of de open sleutel overeenkomt met het originele paar RSA-sleutels, voert de processor een vergelijking uit tussen de hash van de open AMD-sleutel, die tijdens de productie in de CPU is ingebouwd, en de hash van de open sleutel die in de patch is opgegeven.
De authenticatie van de microcode in de patch gebeurt door de bij de patch geleverde hash, die is ondertekend met een digitale handtekening (RSASSA-PKCS1-v1_5), te vergelijken met de hash die is berekend op basis van de daadwerkelijk geleverde microcode in de patch. Als de referentiehash en de berekende hash overeenkomen, wordt de patch geladen in het interne geheugen van de CPU. Het probleem is dat in plaats van de aanbevolen cryptografisch sterke hashfuncties, het CMAC-algoritme is gebruikt, dat niet voor dergelijke operaties is ontworpen en niet is beschermd tegen het genereren van botsingen.
CMAC is geen hashfunctie, maar implementeert een Message Authentication Code (MAC) die afhankelijk is van de encryptiesleutel. Het werkingsprincipe van AES-CMAC is gebaseerd op het gebruik van het cryptografische algoritme AES en het combineren van het resultaat van de toepassing ervan met het volgende gegevensblok door middel van de XOR-operatie. Deze aanpak garandeert dat een wijziging van de invoergegevens zal leiden tot een onvoorspelbare wijziging van de uitvoergegevens. CMAC mag echter niet worden gebruikt als hashfunctie, omdat iedereen die de oorspronkelijke encryptiesleutel kent, de tussenliggende encryptiestadia kan achterhalen en waarde kan berekenen die de wijziging van de invoergegevens kan compenseren, zodat het resultaat van de toepassing van CMAC onveranderd blijft.
AMD gebruikt voor AES-CMAC een enkele encryptiesleutel die wordt geleverd op alle CPU's, te beginnen met Zen 1. Het is dus voldoende om deze sleutel uit een willekeurige AMD CPU te extraheren en deze zal toepasbaar zijn op alle andere CPU's. Onderzoekers hebben ontdekt dat voor de encryptie van AES-CMAC in AMD een bekende sleutel is gebruikt, afkomstig uit een voorbeeld dat wordt vermeld in de aanbevelingen voor het gebruik van blokkeringen NIST SP 800-38B. Aangezien AES-CMAC wordt gebruikt voor het hashen van de ingebouwde RSA-sleutelpatch en de inhoud van de microcode, biedt het bepalen van de AES-CMAC encryptiesleutel de mogelijkheid om de patch te vervangen door een andere openbare RSA-sleutel en de inhoud van de microcode te wijzigen.
Voor het maken van een nep-patch is het voldoende om een nieuwe openbare sleutel te genereren die dezelfde hash produceert als de originele openbare sleutel van AMD, en ook om botsingen voor de digitale handtekening te vinden. Botsingen worden gecreƫerd door een extra blok aan de microcode toe te voegen dat eruitziet als een set willekeurige gegevens. Op deze manier kan een gewijzigde patch met microcode worden voorbereid die overeenkomt met de digitale handtekening waarmee de originele patch van AMD is ondertekend. De Zentool-toolset, die hulpmiddelen omvat voor de analyse van microcode en het maken van patches voor het wijzigen van microcode, is beschikbaar onder de Apache 2.0-licentie. Voor het vervangen van de microcode zijn rechten nodig om code op niveau ring 0 uit te voeren (VT-x en AMD-V technologieƫn stellen het gastbesturingssysteem in staat om met ring 0-rechten uit te voeren).
Bron: opennet.ru
