Spectrologie: CPU-hardware kwetsbaarheden in 2019

januari 8, 2019

Op de 35e editie van het Chaos Communications Congres, bijna een jaar na de eerste publicatie over CPU-hardware kwetsbaarheden onder de tag Meltdown en Spectre, heeft een groep onderzoekers van Graz University of Technology in Oostenrijk zich uitgesproken over de stand van zaken wat betreft bekende CPU-hardware kwetsbaarheden. Spoiler: Afgelopen jaar zijn er nog meer aan het licht gebracht.

Spectre en Meltdown kwetsbaarheden in CPU's: Wat 2019 te bieden heeft

De essentie van Meltdown en Spectre in het kort

Allereerst, wat zijn Meltdown en Spectre ook alweer, en hoe verschillen ze van elkaar?

De Meltdown kwetsbaarheid dook op, omdat moderne CPU’s instructies kunnen uitvoeren terwijl ze buiten gebruik zijn. Dit is een functie die voordelen kan opleveren wat betreft codeverwerking, maar in sommige gevallen verwerkt de CPU foutgevoelige codes, die helemaal niet uitgevoerd zouden moeten worden. Dat betekent dat de code allereerst verwerkt wordt door de CPU, en pas dan wordt duidelijk dat de operatie niet afgerond kan worden – en dit soort situaties komen voor doordat instructies worden uitgevoerd terwijl ze buiten gebruik zijn.

Natuurlijk worden de resultaten van dergelijke operaties niet doorgespeeld of ergens anders gebruikt, maar toch laten ze een spoor achter op microarchitectuur niveau, namelijk in het cachegeheugen van de CPU. En van daaruit zijn de toegankelijk. Dat betekent dat het cachegeheugen kan worden gebruikt om informatie in handen te krijgen die normaalgesproken ontoegankelijk is, zoals een wachtwoord. Het werkt als volgt: Een programma kan om toegang vragen tot opgeslagen data – waarop het systeem antwoordt dat toegang niet verleend kan worden zonder de juiste toestemmingen. Maar door de buiten gebruik uitvoering zal het wachtwoord in het cachegeheugen belanden, en van daaruit is het eenvoudig te verkrijgen. Samengevat kan Meltdown plaatsvinden bij het uitvoeren van een ongerechtvaardigde handeling.

De Spectre kwetsbaarheid lijkt op die van Meltdown, maar hoewel het ook te maken heeft met een snelkoppeling binnen de CPU, komt voort uit de sprongvoorspellersfunctie in moderne CPU’s. In feite is een CPU in staat een bepaalde handeling (bijvoorbeeld B) te laten plaatsvinden op basis van een voorspelling, als normaalgesproken hieraan handeling A voorafgaat, zelfs voordat A volledig is afgerond. Als de voorspelling juist is en handeling B wordt uitgevoerd, dan is er niets aan de hand, en als het resultaat van A aangeeft dat de CPU-handeling C in plaats van B moet laten plaatsvinden, dan verlaat de CPU het B-spoor om vervolgens over te gaan naar een spoor waarbij handeling C uitgevoerd moet worden.

Omdat de spoorvoorspeller in staat is om te ‘leren’, zal deze zich in de meeste gevallen het handelingspatroon herinneren, waardoor de CPU-performance verbetert (als B in een aantal gevallen vooraf wordt gegaan door A, dan zal de CPU logischerwijs aannemen dat het in bepaalde situaties B moet uitvoeren als A heeft plaatsgevonden. En toch komen voorspellingsfouten voor (soms komt handeling C voor in plaats van B, terwijl de sprongvoorspeller onthouden heeft dat handeling B normaalgesproken vooraf wordt gegaan door A).

Als je het systeem lang genoeg traint dat een bepaald spoor het juiste is en altijd uitgevoerd wordt en daarna de parameter verandert, waardoor het spoor niet meer geldt, dan zal de CPU eerst de handeling uitvoeren en pas terugtrekken als blijkt dat er een andere plaats had moeten vinden. Maar vergelijkbaar met Meltdown, laat het resultaat van de handeling een spoor achter – in het cachegeheugen bijvoorbeeld, en van daaruit kan het verkregen worden.

De consequenties zijn dezelfde: Spectre opent een luik tot ontoegankelijke data. Die toegang kan in sommige gevallen alleen plaatsvinden als een sprongvoorspelling verkeerd gaat, maar een simpele kansberekening wijst erop dat het zal gebeuren.

Een jaar later: twee dozijn aan nieuwe Spectre en Meltdown variaties

Sinds de ontdekking van de eerste Meltdown en Spectre kwetsbaarheden, begonnen onderzoekers actiever op de zaak te gaan zitten, en al snel ontdekten ze vergelijkbare problemen die alleen in kleine details van elkaar verschilden. Zo vonden ze bijvoorbeeld dat CPU-ontwikkelaars ook andere optimalisatie gebruiken die resulteert in kwetsbaarheden die lijken op die van Meltdown en Spectre. Het team van de Graz Universiteit noemde 14 Meltdown-achtige en 13 Spectre-achtige kwetsbaarheden – een totaal van 27 CPU-hardware kwetsbaarheden versus 2 binnen dezelfde familie aan het begin van 2018.

Gedurende het jaar hebben onderzoekers 14 variaties van Meltdown en 13 van Spectre gevonden

Indeling van de vangst van Meltdown en Spectre-variaties

Daarnaast, ondanks de beweringen van AMD dat hun CPU’s geen Meltdown-kwetsbaarheden vertoonden, hebben onderzoekers een variatie op Meltdown (Meltdown-BR) ontdekt die perfect operationeel met AMD CPU’s. Dus op dit moment hebben de CPU’s van de drie grootste globale CPU-leveranciers – AMD, ARM en Intel – te maken met Meltdown en Spectre. In ieder geval met enkele variaties van beide families.

Gelukkig werkt een deel van de talloze versies niet op deze CPU’s – niet op ARM, AMD noch op Intel – of in ieder geval konden testers deze niet aan de praat krijgen. Toch werken de meeste wel, op zijn minst ergens.

Bedrijven zijn begonnen met het releasen van patches voor CPU-microcodes, besturingssystemen en individuele programma’s, sinds januari 2018, met als doel overlast te voorkomen. Helaas zijn Spectre en Meltdown hardware-kwetsbaarheden, en doen zich dus voor op hardware-niveau, waardoor een patch slechts een gedeeltelijke oplossing biedt.

Zodoende was een van deze patches geïmplementeerd in de kern van Linux OS, maar het systeem werd er te traag door, dus na een tijdje is het uit de code gehaald.

Spectre is problematisch, omdat het verschillende componenten treft op microarchitectuur niveau, waardoor voor ieder component een aparte patch moet worden ontworpen. En bij iedere patch zullen bepaalde functies uitgeschakeld of extra handelingen verricht moeten worden, wat de prestatie nog verder omlaaghaalt.

In feite tasten patches de prestaties zodanig aan, dat een systeem met patches trager is dan een systeem waarbij de kwetsbare CPU-componenten in zijn geheel uitgeschakeld zijn.

Grappige foto over de enige manier om van Meltdown/Spectre problemen af te komen

Radicale oplossing — het kwetsbare onderdeel van de CPU verwijderen met een boor (grapje, je weet toch)

De toekomst van Spectre en Meltdown

In oktober 2018 kondigde Intel aan dat zijn nieuwe CPU’s (de generatie die uitkomt in 2019) bescherming op hardware-niveau bevat tegen Spectre en Meltdown. Dit is echter voor beide ‘basisversies’ aangekondigd, maar er zijn er meer, zoals hierboven vermeld. AMD is ook van plan om een van de Spectre-variaties te patchen in de nieuwe generatie Zen 2 architectuurprocessors die in 2019 uitkomen. ARM belooft ook hardware-updates, en beweert dat ”al zijn toekomstige CPU’s Spectre-achtige aanvallen af kunnen weren.”

Dat is goed nieuws natuurlijk – voor diegenen die nieuwe apparaten zullen gaan kopen. En diegenen onder ons die toevallig een computer, smartphone of een ander apparaat met een Intel, AMD of ARM CPU hebben gekocht in 2018 of eerder, zullen patches moeten installeren voor vrijwel alles, waardoor de prestatie omlaaggaat. Sommige mensen kunnen hier waarschijnlijk niet omheen.

CPU-fabrikanten hebben kwetsbaarheden op hardware-niveau te lang ontkent, en de CPU’s voornamelijk geoptimaliseerd voor een betere prestatie. Maar al deze optimalisaties hebben een prijs: Sommige zaken werden inderdaad opgelost, maar anderen werden alleen maar erger. Het zal nu een flinke uitdaging worden om van deze kwetsbaarheden af te komen, omdat deze erg diep zitten. Er moet gezegd worden dat het niet zo gemakkelijk is om van deze kwetsbaarheden te profiteren, en dat is hoopvol – in ieder geval tot de nieuwe generatie CPU’s uitkomt.