AMD har inkluderat processorer baserade pÄ mikroarkitekturen Zen 5 pÄ listan över produkter som Àr sÄrbara för sÄrbarheten EntrySign, som möjliggör kringgÄelse av mekanismen för digital signaturkontroll vid uppdatering av mikrokod. Ursprungligen troddes det att sÄrbarheten endast pÄverkade AMD CPU:er baserade pÄ 1-4 generationer av mikroarkitekturen Zen. SÄrbarheten visar sig dÀrför Àven gÀlla processorer som Ryzen 9000 (Granite Ridge), EPYC 9005 (Turin), Ryzen AI 300 (Strix Halo, Strix Point, Krackan Point) och Ryzen 9000HX (Fire Range).
Förutom uppdatering av mikrokoden krÀvs Àven en uppdatering av AMD SEV-firmware, som medföljer BIOS-uppdateringar, för att ÄtgÀrda sÄrbarheten pÄ system som anvÀnder SEV-SNP-certifiering. Det pÄstÄs att AMD har överlÀmnat modifierad firmware (ComboAM5PI 1.2.0.3c AGESA) till hÄrdvarutillverkare som Àr nödvÀndig för att ÄtgÀrda problemet, men de slutgiltiga BIOS-uppdateringarna tillgÀngliga för konsumenter kan slÀppas av tillverkare flera veckor eller mÄnader senare.
AMD:s medarbetare har ocksÄ föreslagit att inkludera en patch i Linux-kÀrnan som blockerar laddning av oofficiella mikrokodsuppdateringar (det noteras att korrekta mikrokodsuppdateringar mÄste installeras tillsammans med BIOS frÄn hÄrdvarutillverkaren, men det har redan dykt upp försök av entusiaster att skapa oofficiella korrigeringar baserade pÄ delar av mikrokod utdragna frÄn BIOS). AnvÀndare rekommenderas att vÀnta pÄ officiella BIOS-uppdateringar.
SÄrbarheten som tillhandahÄlls av EntrySign möjliggör förÀndring av mikrokoden och kan kompromettera mekanismen AMD SEV (Secure Encrypted Virtualization), som anvÀnds i virtualiseringssystem för skydd virtuella maskiner mot inblandning frÄn hypervisorer eller administratörer av vÀrdsystemet. Under en attack kan man infiltrera arbetet hos gÀstdatorer skyddade med hjÀlp av AMD SEV (Secure Encrypted Virtualization) och SEV-SNP (Secure Nested Paging), vilka erbjuder garantier för minnesintegritet i virtuella maskiner, isolerar processorregister och sÀkerstÀller sÀker hantering av inbÀddade minnestabeller.
SÄrbarheten orsakas av anvÀndningen av CMAC-algoritmen för verifiering av mikrokod istÀllet för en sÀker hash-funktion. Företaget AMD anvÀnder en privat RSA-nyckel för att signera den mikrokod som laddas in i processorn med en digital signatur, och sprider den offentliga nyckeln som en del av patchen för mikrokoden. För att kontrollera att den offentliga nyckeln stÀmmer överens med det ursprungliga RSA-nyckelparet utför processorn en hash-jÀmförelse av den offentliga AMD-nyckeln, som Àr inbÀddad under tillverkningen av CPU:n, med hash-vÀrdet av den offentliga nyckeln som anges i patchen.
Verifieringen av mikrokoden i patchen utförs genom att jÀmföra den hash som levereras med patchen, signerad med en digital signatur (RSASSA-PKCS1-v1_5), och hashen som berÀknas pÄ basis av den faktiska mikrokoden som levereras i patchen. Om referens- och berÀknade hashvÀrden stÀmmer överens laddas patchen in i CPU:ns interna minne. Problemet Àr att istÀllet för att anvÀnda de rekommenderade kryptografiskt sÀkra hash-funktionerna har CMAC-algoritmen, som inte Àr avsedd för sÄdana operationer och inte Àr skyddad mot kollisioner, anvÀnts.
CMAC Àr inte en hash-funktion, utan implementerar en meddelandeautentisering (Message Authentication Code) som beror pÄ krypteringsnyckeln. AES-CMAC:s arbete innebÀr att anvÀnda den kryptografiska algoritmen AES och kombinera resultatet av dess anvÀndning med nÀsta datablok genom en XOR-operation. Denna struktur garanterar att en förÀndring av ingÄngsdata leder till en oförutsÀgbar förÀndring av utdata. Det Àr dock oacceptabelt att anvÀnda CMAC som en hash-funktion, eftersom vem som helst som kÀnner till den ursprungliga krypteringsnyckeln kan fÄ veta mellanliggande tillstÄnd av kryptering och berÀkna vÀrden som kan kompensera för förÀndringar i ingÄngsdata sÄ att resultatet frÄn CMAC förblir oförÀndrat.
AMD anvÀnder en gemensam krypteringsnyckel för AES-CMAC som tillhandahÄlls pÄ alla CPU:er, sedan Zen 1. DÀrför rÀcker det att extrahera denna nyckel frÄn vilken som helst AMD-CPU, sÄ Àr den tillÀmplig pÄ alla andra CPU:er. Forskarna har upptÀckt att en vÀlkÀnd nyckel frÄn ett exempel i rekommendationerna för blockchiffer NIST SP 800-38B har anvÀnts för AES-CMAC-kryptering i AMD. Eftersom AES-CMAC anvÀnds för att hashera den inbÀddade RSA-nyckeln och innehÄllet i mikrokoden, har möjligheten att ersÀtta en annan öppen RSA-nyckel och Àndra innehÄllet i mikrokoden uppstÄtt genom att bestÀmma AES-CMAC-krypteringsnyckeln.
För att skapa en falsk patch rÀcker det att generera en ny öppen nyckel som ger samma hash som den Àkta AMD-öppna nyckeln, samt att hitta kollisioner för den digitala signaturen. Kollisioner skapas genom att fÀsta ett tillÀggsblock till mikrokoden som ser ut som en uppsÀttning slumpmÀssiga data. PÄ detta sÀtt kan man förbereda en Àndrad patch med mikrokoden som motsvarar den digitala signatur som den ursprungliga patchen frÄn AMD var verifierad med. Verktyget Zentool, som inkluderar verktyg för att analysera mikrokoden och skapa patchar för att Àndra mikrokoden, finns tillgÀngligt under Apache 2.0-licensen. För att ersÀtta mikrokoden krÀvs behörighet att köra kod pÄ nivÄ 0 (VT-x och AMD-V-teknologier tillÄter gÀstsystemet att köra med Ring 0-privilegier).
KĂ€lla: opennet.ru
