Wat is Speculatieve uitvoering?

CPU-mechanisme dat vooruit instructies uitvoert op basis van voorspellingen voordat bijvoorbeeld de uitkomst van een sprong bekend is. Bij een foute voorspelling wordt het resultaat ongedaan gemaakt, maar sporen zoals in de cache kunnen achterblijven.

Japanse benaming: 投機的実行

“Speculatieve uitvoering” komt voor in 4 oefenvragen uit 2 onderwerpen, bijv. Hardwarebeveiliging, CPU en architectuur.

Vakgebied: Hardwarebeveiliging

Waarom CPU's vooruit uitvoeren

Een krachtige CPU heeft een diepe pipeline en voert instructies out-of-order uit, dus wachten tot elke sprong is opgelost zou hem vele cycli stil laten staan. In plaats daarvan raadt een branch predictor de uitkomst en blijft de core instructies ophalen en uitvoeren langs het voorspelde pad. Deze speculatieve resultaten worden in interne buffers bewaard en pas doorgevoerd (commit, ook wel retire) als de gok is bevestigd. Was de voorspelling fout, dan gooit de core het speculatieve werk weg en begint hij opnieuw op het juiste pad, zodat de zichtbare resultaten van het programma altijd correct zijn.

Architecturale vs. microarchitecturale toestand

Het terugdraaien van een foute voorspelling herstelt de architecturale toestand, dat wil zeggen de registers en het geheugen die een programma rechtstreeks kan waarnemen. Het maakt geen wijzigingen ongedaan in de microarchitecturale toestand, zoals welke lines in de cache staan, de inhoud van de TLB of de geschiedenis van de predictor. Die wijzigingen zijn normaal onschadelijk omdat programma's ze niet rechtstreeks kunnen lezen, maar timing kan ze verraden: een toegang tot een gecachete line is meetbaar sneller dan een toegang tot het hoofdgeheugen. Dit verschil tussen wat wel en niet wordt teruggedraaid, is de oorzaak van kwetsbaarheden door speculatieve uitvoering.

Hoe Spectre en Meltdown het misbruiken

Bij Spectre, in 2018 samen met Meltdown openbaar gemaakt, traint een aanvaller de branch predictor zo dat een pad dat nooit zou mogen draaien, zoals code voorbij een grenscontrole, speculatief wordt uitgevoerd, een geheim leest en de waarde ervan gebruikt om een bepaalde cacheline aan te raken. De resultaten worden weggegooid, maar door te timen welke line in de cache staat, wordt het geheim via een cache-side-channel onthuld. Meltdown misbruikte CPU's waarbij een speculatieve load data uit kernelgeheugen kon teruggeven voordat de rechtencontrole effect had. Vrijwel alle krachtige CPU's waren kwetsbaar voor minstens één variant.

Tegenmaatregelen en hun kosten

De mitigaties beslaan elke laag: besturingssystemen scheidden de paginatabellen van kernel en gebruiker, compilers voegen speculatiebarrières in of gebruiken reeksen voor indirecte sprongen die vergiftigde voorspellingen vermijden, microcode-updates voegen besturingsmogelijkheden voor het gedrag van de predictor toe, en nieuwere CPU's hebben ingebouwde hardwarefixes. Elke beperking op speculatie, voorspelling of gedeelde caches vermindert het lekken, maar kan prestaties kosten, dus ontwerpers bepalen hoe ver ze gaan op basis van welke data op het spel staat. De episode liet zien dat prestatievoorzieningen beveiligingszwakheden kunnen worden, ook als de software foutloos is.

Nu oefenen: vragen over Speculatieve uitvoering

Welk voorbeeld van een kwetsbaarheid betreft een aanval die misbruikt maakt dat sporen van speculatieve uitvoering in de cache achterblijven, om gegevens af te leiden waartoe eigenlijk geen toegang bestaat?

  1. ARowhammer
  2. BSpectre en Meltdown
  3. CLatch-up
Antwoord en toelichting tonen

Antwoord: B. Spectre en Meltdown

Spectre en Meltdown, in 2018 bekendgemaakt, misbruiken dat gegevens die zijn ingelezen bij speculatief uitgevoerde instructies in de cache achterblijven, ook als het resultaat wordt teruggedraaid, en leiden via verschillen in toegangstijd (zijkanaal, side channel) geheime gegevens af die eigenlijk niet gelezen kunnen worden. Vrijwel alle krachtige CPU's werden getroffen en er volgden aanpassingen in het besturingssysteem en wijzigingen in het CPU-ontwerp. Het is een voorbeeld dat laat zien dat een mechanisme voor hogere prestaties een beveiligingszwakte kan worden.

Veelgestelde vragen

Is speculatieve uitvoering hetzelfde als out-of-order-uitvoering?

Ze zijn verwant, maar verschillend. Out-of-order-uitvoering herordent instructies waarvan de invoer klaarstaat, terwijl speculatieve uitvoering instructies uitvoert voordat bekend is of ze überhaupt moeten worden uitgevoerd, zoals instructies na een nog niet opgeloste sprong; moderne cores doen beide.

Wat is het verschil tussen Spectre en Meltdown?

Spectre misleidt de branch predictor om speculatief legitieme codepaden uit te voeren die data lekken waartoe het slachtofferprogramma toegang heeft. Meltdown misbruikte CPU's waarvan speculatieve loads kernelgeheugen konden lezen voordat de rechtencontrole effect had, en werd grotendeels verholpen met isolatie van kernelpaginatabellen en latere hardwarewijzigingen.

Waarom kunnen weggegooide speculatieve resultaten toch data lekken?

De CPU gooit de registerresultaten weg, maar herstelt de cache niet, dus data die tijdens speculatie is geladen laat een spoor na dat kan worden gedetecteerd door toegangstijden te meten.

“Speculatieve uitvoering” in de toelichting

Vragen met “Speculatieve uitvoering” (4)

  1. Welk voorbeeld van een kwetsbaarheid betreft een aanval die misbruikt maakt dat sporen van speculatieve uitvoering in de cache achterblijven, om gegevens af te leiden waartoe eigenlijk geen toegang bestaat?
  2. Welke uitspraak over de problemen die onder hardwarebeveiliging vallen is het meest passend?
  3. Welke van de volgende is geen maatregel die wordt gebruikt tegen speculatieve-uitvoeringskwetsbaarheden zoals Spectre?
  4. Welke uitspraak is in het algemeen juist over maatregelen tegen speculatieve-uitvoeringskwetsbaarheden?

Verwante termen

Spectre Meltdown Via Numerieke apertuur (NA) Sprongvoorspelling (branch prediction) Cold-bootaanval Constante-tijdimplementatie Echte-toevalsgetalgenerator (TRNG) eFuse Enclave

Naar de woordenlijst