Sårbarheter i eBPF-delsystemet som tillater å omgå beskyttelse mot Spectre-angrep

Det er identifisert en sårbarhet i Linux-kjernen (CVE-2021-33624) som gjør at eBPF-delsystemet kan brukes til å omgå beskyttelse mot Spectre-klassens sårbarheter, som gjør det mulig å bestemme innholdet i minnet som et resultat av å skape forhold for spekulativ utførelse av visse operasjoner. Spectre-angrepet krever tilstedeværelse av en viss sekvens av kommandoer i privilegert kode som fører til spekulativ utførelse av instruksjoner. Ved å manipulere BPF-programmer som sendes for kjøring, er det mulig å generere lignende instruksjoner i eBPF og lekke innholdet i kjerneminne og vilkårlige områder av fysisk minne gjennom sidekanaler.

Sårbarheten er forårsaket av feil i verifikatoren, som brukes til å oppdage feil og uakseptabel aktivitet i BPF-programmer. Verifikatoren oppregner mulige kodeutførelsesveier, men hopper over forgreningsalternativer som er uakseptable fra synspunktet til semantikken til instruksjonssettarkitekturen. Når du kjører et BPF-program, kan slike forgreningsalternativer som ikke tas i betraktning av verifikatoren, bli feilaktig forutsagt av prosessoren og utføres i spekulativ modus. For eksempel, når han analyserer "last"-operasjonen, forventer verifikatoren at instruksjonen bruker et register med en adresse hvis verdi alltid er innenfor de angitte grensene, men en angriper kan skape forhold der prosessoren vil prøve å spekulativt utføre en operasjon med en adresse som ikke oppfyller bekreftelsesvilkårene.

Problemet har dukket opp siden utgivelsen av kjerne 4.15 og har blitt fikset i form av patcher (1, 2, 3, 4). Sårbarheten forblir ufikset i distribusjoner (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).

I tillegg kan du merke deg merknaden om ytelseseffekten til verktøy for å beskytte mot Spectre-sårbarheter. Notatet oppsummerer resultatene av optimalisering av rr (Record and Replay) debugger, som en gang ble opprettet i Mozilla for å feilsøke vanskelige å gjenta feil i Firefox. Bufring av systemanropene som ble brukt for å sjekke eksistensen av kataloger reduserte "rr sources"-operasjonen for testprosjektet fra 3 minutter 19 sekunder til 36 sekunder.

Optimaliseringsforfatteren bestemte seg for å sjekke hvordan ytelsen ville endre seg etter å ha deaktivert Spectre-beskyttelse. Etter oppstart av systemet med "mitigations=off"-parameteren, var utførelsestiden for "rr-kilder" uten optimalisering 2 minutter 5 sekunder (1.6 ganger raskere), og med optimalisering var den 33 sekunder (9% raskere). Interessant nok reduserte deaktivering av Spectre-beskyttelse ikke bare utførelsestiden for kode på kjernenivå med 1.4 ganger (fra 2m9s til 1m32s), men også halvert utførelsestiden i brukerområdet (fra 1m9s til 0m33s), antagelig på grunn av redusert effektivitet CPU-hurtigbufferdrift og TLB tilbakestilles når Spectre-beskyttelse er aktivert.

Kilde: opennet.ru

Legg til en kommentar