Sårbarheter i eBPF som gjør at Spectre 4-angrepsbeskyttelse kan omgås

To sårbarheter er identifisert i Linux-kjernen som gjør at eBPF-delsystemet kan brukes til å omgå beskyttelse mot Spectre v4-angrepet (SSB, Speculative Store Bypass). Ved å bruke et uprivilegert BPF-program kan en angriper skape forhold for spekulativ utførelse av visse operasjoner og bestemme innholdet i vilkårlige områder av kjerneminnet. eBPF-undersystemets vedlikeholdere i kjernen fikk tilgang til en prototypeutnyttelse som demonstrerer evnen til å utføre angrep i praksis. Problemene er løst i form av patcher (1, 2), som vil bli inkludert i neste Linux-kjerneoppdatering. Oppdateringer i distribusjonssett er ennå ikke opprettet (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

Spectre 4-angrepsmetoden er basert på å gjenopprette data som er lagret i prosessorbufferen etter å ha forkastet resultatet av spekulativ utførelse av operasjoner ved behandling av alternerende skrive- og leseoperasjoner ved bruk av indirekte adressering. Når en leseoperasjon følger en skriveoperasjon (f.eks. mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), kan forskyvningen av leseadressen allerede være kjent på grunn av lignende operasjoner som utføres (leseoperasjoner er utføres mye oftere og lesninger kan utføres fra hurtigbufferen) og prosessoren kan spekulativt utføre lesinger før skrivinger uten å vente på at skrivenes indirekte offset skal beregnes.

Hvis, etter å ha beregnet forskyvningen, et skjæringspunkt mellom minneområder for skriving og lesing oppdages, vil prosessoren ganske enkelt forkaste det allerede spekulativt oppnådde leseresultatet og gjenta denne operasjonen. Denne funksjonen lar en leseinstruksjon få tilgang til en gammel verdi på en adresse mens butikkoperasjonen ikke er fullført ennå. Etter å ha forkastet en mislykket spekulativ operasjon, forblir spor av dens utførelse i hurtigbufferen, hvoretter en av metodene for å bestemme innholdet i hurtigbufferen kan brukes til å hente den basert på en analyse av endringer i tilgangstid til hurtigbufrede og ubufrede data.

Den første sårbarheten (CVE-2021-35477) er forårsaket av en feil i BPF-programverifiseringsmekanismen. For å beskytte mot et Spectre 4-angrep, legger verifikatoren til en ekstra instruksjon etter potensielt problematiske lagre til minnet som lagrer en nullverdi for å fortrenge spor fra forrige operasjon. Skrive null-operasjonen ble forventet å være veldig rask og blokkere spekulativ utførelse fordi den bare avhenger av en peker til BPF-stabelrammen. Men faktisk viste det seg å være mulig å skape forhold der en instruks som fører til spekulativ utførelse klarer å bli utført før den forebyggende butikkdriften.

Den andre sårbarheten (CVE-2021-3455) skyldes det faktum at når BPF-verifikatoren identifiserer potensielt farlige minnelagringsoperasjoner, tar den ikke hensyn til uinitialiserte områder av BPF-stakken, den første skriveoperasjonen som ikke er beskyttet. Denne funksjonen fører til muligheten for å utføre en spekulativ leseoperasjon, avhengig av et uinitialisert minneområde, før lagringsinstruksjonen utføres. Nytt minne for BPF-stakken tildeles uten å sjekke innholdet som allerede er i det tildelte minnet, og det er en måte før BPF-programmet kjører for å manipulere innholdet i minneregionen som da vil bli tildelt for BPF-stakken.

Kilde: opennet.ru

Legg til en kommentar