Zenbleed: alles wat u moet weten over deze AMD-beveiligingsbug

Zenbleed, de nieuwste in een lange reeks beveiligingsbugs voor CPU's, is nog iets dat moet worden gepatcht. Dit is wat je moet weten.

Nadat de Spectre en Meltdown CPU-exploits in 2018 werden gepubliceerd, is de computerwereld behoorlijk waakzaam geweest over het vinden van beveiligingsbugs en mazen in processors, en in de afgelopen vijf jaar hebben onderzoekers er een heleboel gevonden. Op 24 juli werd nog een andere exploit openbaar gemaakt nadat deze voor het eerst in mei was gemeld. Deze keer is het specifiek voor AMD-processors die zijn gebouwd op de Zen 2-architectuur, en heet het "Zenbleed". Hier is alles wat je moet weten over Zenbleed en wat het voor de wereld betekent.

Hoe werkt Zenbleed?

Zenbleed lijkt sterk op andere hardwaregebaseerde beveiligingsbugs zoals Spectre, omdat het de speculatieve mogelijkheden van CPU's exploiteert. Om de prestaties te verbeteren, CPU's speculeren of voorspellen wat het volgende is dat ze moeten doen, en sinds Spectre voor het eerst werd onthuld, heeft de wereld geleerd dat speculatie erg onzeker kan zijn als het wordt gedaan ten onrechte.

Bron: Tavis Ormandy

Registers in een CPU kunnen een kleine hoeveelheid gegevens bevatten, meestal een instructie, een opslagadres of een ander soort kleine gegevens. XMM-registers in een x86_64-architectuur (dus alle betrokken Zen 2-processors) kunnen alleen worden gebruikt voor het maken van berekeningen op gegevens, niet voor het adresseren van geheugen. Dit wordt uitgebreid tot 256 bits in het geval van YMM-registers, en 512 bits in ZMM-registers. In dit geval verwijst XMM naar de onderste 128 bits van de totaal 512 bits van de ZMM-registers.

Deze registers zijn ongelooflijk handig voor veel verschillende dingen, inclusief standaard C-functies. De kwetsbaarheid maakt misbruik van speculatieve uitvoering en verkeerde voorspellingen van vertakkingen om in wezen een willekeurig stukje gegevens uit het geheugen te spuwen, maar die gegevens kunnen afkomstig zijn van iets. Standaard C-bibliotheekfuncties zoals strlen, die de lengte van een string meet, kunnen deze registers gebruiken voor het verplaatsen van gegevens rond, en het is mogelijk dat een wachtwoord dat u gebruikt, per ongeluk in een van deze gevallen terecht is gekomen registreert.

Branchvoorspelling en speculatieve uitvoering verwijzen in grote lijnen naar wanneer uw computer bewerkingen uitvoert die nog niet nodig zijn, maar waarschijnlijk wel nodig zullen zijn in volgende cycli. Het wordt vaak gedaan in tijden dat uw systeem over vrije bronnen beschikt, omdat het de algehele verwerking versnelt wanneer instructies of gegevens anders nog niet klaar zouden zijn voor de CPU. Als het verrichte werk niet nodig is, wordt het doorgaans weggegooid en kan de processor terugspringen naar waar hij moet zijn om de volgende, correcte, instructie uit te voeren. Wanneer dit gebeurt, wordt dit een verkeerde voorspelling van een tak genoemd.

Waar zich een probleem voordoet, is de vzeroupper-instructie, die de bits op positie 128 en hoger van de YMM- en ZMM-registers op nul zet. Dit gebeurt met name bij de overgang tussen AVX en oudere SSE-code, omdat hierdoor de prestaties worden geëlimineerd boetes veroorzaakt door valse afhankelijkheden, terwijl tegelijkertijd een effect wordt vermeden dat vergelijkbaar is met promotie van gehele getallen C.

Als de processor speculatief een vzeroupper-instructie uitvoert, vindt er geen goede terugdraaiing plaats. De getroffen Ryzen-processors kunnen echter gedwongen worden hiervan te herstellen, zij het ten onrechte. Eenmaal in deze toestand kan het programma dat momenteel wordt uitgevoerd deze registers in realtime bespioneren en op elk gewenst moment de gegevens bekijken die door het systeem stromen.

Welke CPU's worden beïnvloed door Zenbleed en wanneer zullen patches beschikbaar zijn?

Zoals eerder vermeld, is bekend dat alleen AMD CPU's gebaseerd op de Zen 2-architectuur kwetsbaar zijn voor de Zenbleed-beveiligingsbug, maar de Zen 2-architectuur heeft CPU's in drie series aangedreven, waardoor het lastig is om erachter te komen welke CPU's kwetsbaar zijn en welke zijn niet. Hier is een tabel die het allemaal duidelijk moet maken:

Getroffen CPU's

Ryzen 3000-serie

Alles behalve APU's (bijv. Ryzen 3 3200G)

Episch Rome

Alle

Ryzen 4000-serie

Alle

Ryzen 5000-serie

Alleen de 5300U, 5500U en 5700U

Ryzen 7000-serie

Alleen 7020 APU's (bijv. Ryzen 3 7320U)

Dit is een behoorlijk groot aantal AMD-processors, en dit zijn slechts degenen die tot nu toe zijn bevestigd. Zen 2 wordt ook gebruikt in de APU's die het Steam Deck, Xbox Series S en X en PS5 aandrijven. We hebben nog niet gehoord of deze CPU's ook getroffen zijn, maar afgaande op de manier waarop deze exploit werkt, zou het mij verbazen als ze niet ook getroffen zouden worden. Het lijkt onwaarschijnlijk dat AMD dit in de Xbox en PS5 heeft gepatcht, aangezien chips uit de 7020-serie, die nieuwer zijn, ook worden beïnvloed.

Op het moment van schrijven is microcode is verzonden naar de Linux-kernel waarmee dit beveiligingslek wordt verholpen, en uw besturingssysteem of BIOS heeft mogelijk al een update die dit probleem verhelpt.

Wat betekent dit voor computers die kwetsbare CPU's gebruiken?

Dit is lastig te beantwoorden, omdat niet alle computers gelijk zijn. Voor normale mensen die alleen gaming-desktops en -laptops gebruiken, hoeft u zich waarschijnlijk niet zoveel zorgen te maken. Dit is een behoorlijk geavanceerde exploit en hoewel het nu algemeen bekend is, zijn er nog geen voorbeelden bekend van een aanvaller die Zenbleed gebruikt om iets te hacken.

De inzet is echter veel groter voor datacentra en belangrijke mensen die gevoelige informatie op hun eigen computers verwerken. Er is een reden waarom AMD heel duidelijk is geweest dat Epyc Rome was gepatcht voordat de kwetsbaarheid openbaar werd gemaakt: veel gevoelige informatie wordt verwerkt door Epyc CPU's, en het zou een ramp zijn als CPU's die grootschalige servers aandrijven succesvol zouden zijn aangevallen. Linux-kernel 6.4.6 is al uitgebracht en lost dit beveiligingslek op door het officiële microcode-patch van AMD. Het lijkt waarschijnlijk dat Microsoft iets soortgelijks in Windows zal inbouwen.

Zorgwekkend, De officiële BIOS-patches van AMD worden mogelijk pas enkele maanden uitgerold, in welk geval er een "stukje kip" die u kunt instellen als u op een Linux- of FreeBSD-machine werkt. Op Linux-machines kunt u msr-tools gebruiken en de volgende opdracht uitvoeren.

wrmsr -a 0xc0011029 $(($(rdmsr -c 0xc0011029) | (1<<9)))

Op FreeBSD kunt u ook het volgende gebruiken.

cpucontrol(8)

Het uitschakelen van SMT is niet voldoende om de kwetsbaarheid te beperken.

Eén ding dat Zenbleed bijzonder slecht maakt, is dat Zen 2 een van AMD's populairste CPU-architecturen was. Het was het startsein voor de comeback van AMD in 2019 en 2020, en veel mensen, bedrijven en organisaties gebruiken in 2023 nog steeds computers met Zen 2-processors, vooral Epyc Rome CPU's. Dit is niet zo erg als Spectre (dat vrijwel alle CPU's van vóór 2019 treft) en Meltdown (wat vrijwel alle Intel CPU's van vóór 2019 treft), maar het is nog steeds redelijk wijd verspreid.

Beveiligingspatches voor dit soort kwetsbaarheden resulteren ook vaak in een prestatieverlies, maar AMD vertelde het Tom's hardware dat deze straf afhangt van de CPU en de werklast. Speculatie en voorspellingen zijn behoorlijk belangrijk geweest voor de CPU-prestaties, dus het is onduidelijk of een mogelijke oplossing een aanzienlijke prestatievermindering zal opleveren.