Retbleed är en ny attack mot den spekulativa exekveringsmekanismen hos Intel och AMD-processorer

En grupp forskare från ETH Zürich har identifierat en ny attack mot mekanismen för spekulativ exekvering av indirekta övergångar i CPU, vilket gör det möjligt att extrahera information från kärnminne eller organisera en attack mot värdsystemet från virtuella maskiner. Sårbarheterna har kodnamnet Retbleed (CVE-2022-29900, CVE-2022-29901) och är till sin natur nära Spectre-v2-attacker. Skillnaden beror på organisationen av spekulativ exekvering av godtycklig kod vid bearbetning av "retur" (retur)-instruktionen, som hämtar adressen för att hoppa från stacken, istället för ett indirekt hopp med hjälp av "jmp"-instruktionen, laddar adressen från minne eller ett CPU-register.

En angripare kan skapa förutsättningar för felaktig övergångsförutsägelse och organisera en riktad, spekulativ övergång till ett kodblock som inte tillhandahålls av programexekveringslogiken. I slutändan kommer processorn att avgöra att grenförutsägelsen inte var motiverad och kommer att rulla tillbaka operationen till dess ursprungliga tillstånd, men data som behandlas under spekulativ exekvering kommer att hamna i cache- och mikroarkitektoniska buffertar. Om ett felaktigt exekverat block kommer åt minnet, kommer dess spekulativa exekvering att leda till att data som läses från minnet deponeras i den delade cachen.

För att fastställa vilka data som finns kvar i cachen efter spekulativa operationer kan en angripare använda sidokanaltekniker för att bestämma restdata, till exempel att analysera ändringar i åtkomsttider till cachad och ocachad data. För att målmedvetet extrahera information från områden på en annan behörighetsnivå (till exempel från kärnminne) används "prylar" - sekvenser av kommandon som finns i kärnan som är lämpliga för att spekulativt läsa data från minnet beroende på yttre förhållanden som kan påverkas av angriparen.

För att skydda mot klassiska Spectre-klassattacker som använder villkorade och indirekta hoppinstruktioner, använder de flesta operativsystem "retpoline"-tekniken, som bygger på att ersätta indirekta hoppoperationer med "ret"-instruktionen, för vilken processorer använder en separat stack state prediction unit inte använder ett grenprediktionsblock. När retpolin introducerades 2018, trodde man att Spectre-liknande adressmanipulationer inte var praktiska för spekulativ förgrening med "ret"-instruktionen.

Forskarna som utvecklade Retbleed-attackmetoden visade möjligheten att skapa mikroarkitektoniska förutsättningar för att initiera en spekulativ övergång med hjälp av "ret"-instruktionen och publicerade färdiga verktyg för att identifiera sekvenser av instruktioner (prylar) lämpliga för att utnyttja sårbarheten i Linux-kärnan, under vilka sådana förhållanden visar sig.

Under forskningen förbereddes en fungerande exploatering som gör det möjligt att, på system med Intel-processorer, extrahera godtycklig data från kärnminnet från en oprivilegierad process i användarutrymmet med en hastighet av 219 byte per sekund och 98 % noggrannhet. På AMD-processorer är utnyttjandets effektivitet mycket högre – läckagehastigheten är 3.9 KB per sekund. Som ett praktiskt exempel visar vi hur man använder den föreslagna exploateringen för att bestämma innehållet i filen /etc/shadow. På system med Intel-processorer utfördes attacken för att fastställa hash för rootanvändarens lösenord på 28 minuter och på system med AMD-processorer - på 6 minuter.

Attacken har bekräftats för generationer 6-8 av Intel-processorer som släpptes före Q3 2019 (inklusive Skylake), och AMD-processorer baserade på Zen 1, Zen 1+ och Zen 2 mikroarkitekturer som släpptes före Q2021 3. I nyare processormodeller som AMD ZenXNUMX och Intel Alder Lake, samt i ARM-processorer, blockeras problemet av befintliga skyddsmekanismer. Att till exempel använda IBRS-instruktioner (Indirect Branch Restricted Speculation) hjälper till att skydda mot attacker.

En uppsättning ändringar har förberetts för Linux-kärnan och Xen-hypervisorn, som kommer att blockera problemet i mjukvara på äldre processorer. Den föreslagna patchen för Linuxkärnan ändrar 68 filer, lägger till 1783 rader och tar bort 387 rader. Tyvärr leder skyddet till betydande overheadkostnader - i texterna som utförs på AMD- och Intel-processorer uppskattas prestandaminskningen från 14% till 39%. Det är mer att föredra att använda skydd baserat på IBRS-instruktioner, tillgängligt i nya generationer av Intel-processorer och som stöds från och med Linux-kärnan 4.19.

På Intel-processorer utförs adressersättning för ett spekulativt indirekt hopp tack vare en funktion som visas när ett spill sker genom den nedre gränsen (underflow) i Return Stack Buffer. När sådana förhållanden inträffar börjar "ret"-instruktionen tillämpa adressvalslogik liknande den som används för normala indirekta hopp. Mer än tusen platser har hittats i Linux-kärnan som skapar förutsättningar för att initiera ett sådant tillbakaflöde och är tillgängliga genom systemanrop.

På AMD-processorer utförs spekulativ exekvering av "ret"-instruktionen utan hänvisning till en stackspecifik buffert (Return Address Stack) och grenprediktionsenheten betraktar "ret"-instruktionen inte som en kontrollretur, utan som en indirekt gren , och använder följaktligen data för förutsägelse av indirekta övergångar. Under dessa förhållanden kan praktiskt taget alla "retur"-operationer som kan nås via ett systemanrop utnyttjas.

Dessutom har ett annat problem också identifierats i AMD-processorer (CVE-2022-23825, Branch Type Confusion) relaterat till implementeringen av fiktiva grenar - villkor för grenprediktion kan uppstå även utan nödvändiga greninstruktioner, vilket gör det möjligt att påverka grenprediktionsbufferten utan instruktionen "ret". Denna funktion komplicerar avsevärt implementeringen av skydd och kräver mer aktiv rengöring av förgreningsförutsägelsebufferten. Att lägga till fullt skydd till kärnan förväntas öka omkostnaderna med 209 %.

Källa: opennet.ru

Lägg en kommentar