Rebleed er et nytt angrep på den spekulative utførelsesmekanismen til Intel og AMD CPUer

En gruppe forskere fra ETH Zürich har identifisert et nytt angrep på mekanismen for spekulativ utførelse av indirekte overganger i CPU, som gjør det mulig å trekke ut informasjon fra kjerneminne eller organisere et angrep på vertssystemet fra virtuelle maskiner. Sårbarhetene er kodenavnet Retbleed (CVE-2022-29900, CVE-2022-29901) og er i naturen nær Spectre-v2-angrep. Forskjellen kommer ned til organiseringen av spekulativ utførelse av vilkårlig kode ved behandling av "retur" (retur)-instruksjonen, som henter adressen for å hoppe fra stabelen, i stedet for et indirekte hopp ved å bruke "jmp"-instruksjonen, laster adressen fra minne eller et CPU-register.

En angriper kan skape betingelser for feil overgangsprediksjon og organisere en målrettet, spekulativ overgang til en kodeblokk som ikke er gitt av programutførelseslogikken. Til syvende og sist vil prosessoren fastslå at grenprediksjonen ikke var berettiget og vil rulle tilbake operasjonen til sin opprinnelige tilstand, men dataene som behandles under spekulativ utførelse vil ende opp i hurtigbufferen og mikroarkitektoniske buffere. Hvis en feilaktig utført blokk får tilgang til minnet, vil dens spekulative utførelse føre til at data som leses fra minnet blir deponert i den delte hurtigbufferen.

For å finne ut hvilke data som er igjen i hurtigbufferen etter spekulative operasjoner, kan en angriper bruke sidekanalteknikker for å bestemme gjenværende data, for eksempel å analysere endringer i tilgangstider til hurtigbufrede og ubufrede data. For målrettet å trekke ut informasjon fra områder på et annet privilegienivå (for eksempel fra kjerneminne), brukes "gadgets" - sekvenser av kommandoer som finnes i kjernen som er egnet for spekulativt å lese data fra minnet avhengig av ytre forhold som kan påvirkes av angriperen.

For å beskytte mot klassiske Spectre-klasseangrep som bruker betingede og indirekte hoppinstruksjoner, bruker de fleste operativsystemer "retpoline"-teknikken, som er basert på å erstatte indirekte hoppoperasjoner med "ret"-instruksjonen, som prosessorer bruker en separat stack state prediksjonsenhet for. . ikke bruker en grenprediksjonsblokk. Da retpoline ble introdusert i 2018, ble det antatt at Specter-lignende adressemanipulasjoner ikke var praktiske for spekulativ forgrening ved å bruke "ret"-instruksjonen.

Forskerne som utviklet Retbleed-angrepsmetoden demonstrerte muligheten for å skape mikroarkitektoniske forhold for å sette i gang en spekulativ overgang ved å bruke "ret"-instruksjonen og publiserte ferdige verktøy for å identifisere sekvenser av instruksjoner (dingser) som er egnet for å utnytte sårbarheten i Linux-kjernen, der slike forhold viser seg.

Under forskningen ble det utarbeidet en fungerende utnyttelse som gjør det mulig, på systemer med Intel CPUer, å trekke ut vilkårlige data fra kjerneminnet fra en uprivilegert prosess i brukerområdet med en hastighet på 219 byte per sekund og 98 % nøyaktighet. På AMD-prosessorer er utnyttelsens effektivitet mye høyere – lekkasjehastigheten er 3.9 KB per sekund. Som et praktisk eksempel viser vi hvordan du bruker den foreslåtte utnyttelsen for å bestemme innholdet i filen /etc/shadow. På systemer med Intel-prosessorer ble angrepet for å bestemme hash for root-brukerpassordet utført på 28 minutter, og på systemer med AMD-prosessorer - på 6 minutter.

Angrepet har blitt bekreftet for generasjoner 6-8 av Intel-prosessorer som ble utgitt før Q3 2019 (inkludert Skylake), og AMD-prosessorer basert på Zen 1, Zen 1+ og Zen 2 mikroarkitekturer som ble utgitt før Q2021 3. I nyere prosessormodeller som AMD ZenXNUMX og Intel Alder Lake, samt i ARM-prosessorer, blokkeres problemet av eksisterende beskyttelsesmekanismer. Bruk av IBRS-instruksjoner (Indirect Branch Restricted Speculation) bidrar for eksempel til å beskytte mot angrep.

Et sett med endringer er utarbeidet for Linux-kjernen og Xen-hypervisoren, som vil blokkere problemet i programvare på eldre CPUer. Den foreslåtte oppdateringen for Linux-kjernen endrer 68 filer, legger til 1783 linjer og sletter 387 linjer. Dessverre fører beskyttelsen til betydelige overheadkostnader - i tekstene utført på AMD- og Intel-prosessorer er ytelsesreduksjonen estimert fra 14 % til 39 %. Det er mer å foretrekke å bruke beskyttelse basert på IBRS-instruksjoner, tilgjengelig i nye generasjoner av Intel-prosessorer og støttet fra og med Linux-kjernen 4.19.

På Intel-prosessorer utføres adresseerstatning for et spekulativt indirekte hopp takket være en funksjon som vises når et overløp oppstår gjennom den nedre grensen (underflyten) i returstabelbufferen. Når slike forhold oppstår, begynner "ret"-instruksjonen å bruke adressevalgslogikk som ligner på den som brukes for normale indirekte hopp. Det er funnet mer enn tusen steder i Linux-kjernen som skaper forutsetninger for å sette i gang en slik tilbakeflyt og er tilgjengelige gjennom systemanrop.

På AMD-prosessorer utføres spekulativ utførelse av "ret"-instruksjonen uten referanse til en stabelspesifikk buffer (Return Address Stack) og grenprediksjonsenheten betrakter "ret"-instruksjonen ikke som en kontrollretur, men som en indirekte gren. , og bruker følgelig dataene for prediksjon av indirekte overganger. Under disse forholdene kan praktisk talt enhver "ret"-operasjon som kan nås via et systemanrop utnyttes.

I tillegg har et annet problem også blitt identifisert i AMD CPUer (CVE-2022-23825, Branch Type Confusion) relatert til implementeringen av fiktive grener - betingelser for grenprediksjon kan oppstå selv uten de nødvendige greninstruksjonene, noe som gjør det mulig å påvirke grenprediksjonsbufferen uten instruksjonen "ret". Denne funksjonen kompliserer implementeringen av beskyttelse betydelig og krever mer aktiv rengjøring av grenprediksjonsbufferen. Å legge til full beskyttelse til kjernen forventes å øke overheaden med 209 %.

Kilde: opennet.ru

Legg til en kommentar