Retbleed is een nieuwe aanval op het speculatieve uitvoeringsmechanisme van Intel- en AMD-CPU's

Een groep onderzoekers van ETH Zürich heeft een nieuwe aanval op het mechanisme van speculatieve uitvoering van indirecte transities in de CPU geïdentificeerd, die het mogelijk maakt om informatie uit het kernelgeheugen te extraheren of een aanval op het hostsysteem vanaf virtuele machines te organiseren. De kwetsbaarheden hebben de codenaam Retbleed (CVE-2022-29900, CVE-2022-29901) en lijken qua aard op Spectre-v2-aanvallen. Het verschil komt neer op de organisatie van speculatieve uitvoering van willekeurige code bij het verwerken van de “ret” (return) instructie, die het adres ophaalt om van de stapel te springen, in plaats van een indirecte sprong met behulp van de “jmp” instructie, waarbij het adres wordt geladen van geheugen of een CPU-register.

Een aanvaller kan voorwaarden scheppen voor onjuiste transitievoorspellingen en een gerichte, speculatieve transitie naar een codeblok organiseren waarin de programma-uitvoeringslogica niet voorziet. Uiteindelijk zal de processor vaststellen dat de vertakkingsvoorspelling niet gerechtvaardigd was en de bewerking terugdraaien naar de oorspronkelijke staat, maar de gegevens die tijdens de speculatieve uitvoering worden verwerkt, zullen in de cache en microarchitectuurbuffers terechtkomen. Als een foutief uitgevoerd blok toegang krijgt tot het geheugen, zal de speculatieve uitvoering ervan ertoe leiden dat gegevens die uit het geheugen worden gelezen, in de gedeelde cache worden opgeslagen.

Om te bepalen welke gegevens na speculatieve bewerkingen in de cache achterblijven, kan een aanvaller side-channeltechnieken gebruiken om resterende gegevens te bepalen, zoals het analyseren van wijzigingen in de toegangstijden tot in de cache opgeslagen en niet in de cache opgeslagen gegevens. Om doelbewust informatie te extraheren uit gebieden met een ander privilegeniveau (bijvoorbeeld uit het kernelgeheugen), worden "gadgets" gebruikt - reeksen opdrachten die in de kernel aanwezig zijn en geschikt zijn voor het speculatief lezen van gegevens uit het geheugen, afhankelijk van externe omstandigheden die kunnen worden beïnvloed door de aanvaller.

Ter bescherming tegen klassieke Spectre-klasse-aanvallen waarbij gebruik wordt gemaakt van voorwaardelijke en indirecte spronginstructies, gebruiken de meeste besturingssystemen de ‘retpoline’-techniek, die is gebaseerd op het vervangen van indirecte sprongoperaties door de ‘ret’-instructie, waarvoor processors een afzonderlijke stapelstatusvoorspellingseenheid gebruiken. geen gebruik maken van een vertakkingsvoorspellingsblok. Toen retpoline in 2018 werd geïntroduceerd, werd aangenomen dat Spectre-achtige adresmanipulaties niet praktisch waren voor speculatieve vertakkingen met behulp van de ‘ret’-instructie.

De onderzoekers die de Retbleed-aanvalsmethode ontwikkelden, demonstreerden de mogelijkheid om microarchitecturale omstandigheden te creëren voor het initiëren van een speculatieve transitie met behulp van de ‘ret’-instructie en publiceerden kant-en-klare tools voor het identificeren van reeksen instructies (gadgets) die geschikt zijn om de kwetsbaarheid in de Linux-kernel te exploiteren. waarin dergelijke omstandigheden zich manifesteren.

Tijdens het onderzoek werd een werkende exploit voorbereid waarmee op systemen met Intel CPU's willekeurige gegevens uit het kernelgeheugen kunnen worden geëxtraheerd uit een onbevoegd proces in de gebruikersruimte met een snelheid van 219 bytes per seconde en een nauwkeurigheid van 98%. Op AMD-processors is de efficiëntie van de exploit veel hoger: de leksnelheid bedraagt ​​3.9 KB per seconde. Als praktisch voorbeeld laten we zien hoe je de voorgestelde exploit kunt gebruiken om de inhoud van het bestand /etc/shadow te bepalen. Op systemen met Intel CPU's werd de aanval om de hash van het rootgebruikerswachtwoord te bepalen binnen 28 minuten uitgevoerd, en op systemen met AMD CPU's in 6 minuten.

De aanval is bevestigd voor generaties 6-8 van Intel-processors die vóór het derde kwartaal van 3 zijn uitgebracht (inclusief Skylake), en voor AMD-processors op basis van Zen 2019-, Zen 1+- en Zen 1-microarchitecturen die vóór het tweede kwartaal van 2 zijn uitgebracht. Bij nieuwere processormodellen zoals AMD Zen2021 en Intel Alder Lake, maar ook bij ARM-processors, wordt het probleem geblokkeerd door bestaande beveiligingsmechanismen. Het gebruik van IBRS-instructies (Indirect Branch Restricted Speculation) helpt bijvoorbeeld bij de bescherming tegen aanvallen.

Er is een reeks wijzigingen voorbereid voor de Linux-kernel en de Xen-hypervisor, die het probleem in software op oudere CPU's zullen blokkeren. De voorgestelde patch voor de Linux-kernel wijzigt 68 bestanden, voegt 1783 regels toe en verwijdert 387 regels. Helaas leidt de bescherming tot aanzienlijke overheadkosten - in de teksten die zijn uitgevoerd op AMD- en Intel-processors wordt de prestatiedaling geschat van 14% tot 39%. Het heeft meer de voorkeur om bescherming te gebruiken op basis van IBRS-instructies, beschikbaar in nieuwe generaties Intel CPU's en ondersteund vanaf de Linux-kernel 4.19.

Op Intel-processors wordt adresvervanging voor een speculatieve indirecte sprong uitgevoerd dankzij een functie die verschijnt wanneer er een overflow optreedt via de ondergrens (underflow) in de Return Stack Buffer. Wanneer dergelijke omstandigheden zich voordoen, begint de "ret" -instructie adresselectielogica toe te passen die vergelijkbaar is met die gebruikt voor normale indirecte sprongen. Er zijn meer dan duizend plaatsen in de Linux-kernel gevonden die voorwaarden scheppen voor het initiëren van een dergelijke terugstroom en die toegankelijk zijn via systeemaanroepen.

Op AMD-processors wordt de speculatieve uitvoering van de “ret”-instructie uitgevoerd zonder verwijzing naar een stapelspecifieke buffer (Return Address Stack) en de branch-voorspellingseenheid beschouwt de “ret”-instructie niet als een controle-retour, maar als een indirecte branch. , en gebruikt de gegevens dienovereenkomstig voor het voorspellen van indirecte transities. Onder deze omstandigheden kan vrijwel elke "ret"-operatie die bereikbaar is via een systeemoproep worden benut.

Bovendien is er ook een ander probleem geïdentificeerd bij AMD CPU's (CVE-2022-23825, Branch Type Confusion) gerelateerd aan de implementatie van fictieve vertakkingen - voorwaarden voor vertakkingsvoorspelling kunnen zelfs optreden zonder de noodzakelijke vertakkingsinstructies, waardoor de vertakkingsvoorspellingsbuffer kan worden beïnvloed zonder de instructie "ret". Deze functie compliceert de implementatie van bescherming aanzienlijk en vereist een actievere opschoning van de vertakkingsvoorspellingsbuffer. Het toevoegen van volledige bescherming aan de kernel zal naar verwachting de overhead met 209% verhogen.

Bron: opennet.ru

Voeg een reactie