eBPF-alijärjestelmän haavoittuvuudet, jotka mahdollistavat suojan ohituksen Spectre-hyökkäyksiä vastaan

Linux-ytimessä (CVE-2021-33624) on havaittu haavoittuvuus, jonka avulla eBPF-alijärjestelmää voidaan käyttää ohittamaan suojaus Spectre-luokan haavoittuvuuksia vastaan, mikä mahdollistaa muistin sisällön määrittämisen luomalla ehtoja tiettyjen operaatioiden spekulatiivinen toteuttaminen. Spectre-hyökkäys edellyttää tietyn komentosarjan läsnäoloa etuoikeutetussa koodissa, joka johtaa käskyjen spekulatiiviseen suorittamiseen. Manipuloimalla suoritettavaksi lähetettyjä BPF-ohjelmia on mahdollista luoda samanlaisia ​​ohjeita eBPF:ssä ja vuotaa ytimen muistin sisältö ja mielivaltaiset fyysisen muistin alueet sivukanavien kautta.

Haavoittuvuus johtuu virheistä todentajassa, jota käytetään havaitsemaan virheet ja kelpaamaton toiminta BPF-ohjelmissa. Todentaja luettelee mahdolliset koodin suorituspolut, mutta ohittaa haarautumisvaihtoehdot, jotka eivät ole hyväksyttäviä käskysarjaarkkitehtuurin semantiikan kannalta. BPF-ohjelmaa suoritettaessa sellaiset haarautumisvaihtoehdot, joita todentaja ei ota huomioon, prosessori voi ennustaa väärin ja suorittaa spekulatiivisessa tilassa. Esimerkiksi "lataus"-toimintoa analysoidessaan todentaja odottaa, että käsky käyttää rekisteriä, jonka osoite on aina määritettyjen rajojen sisällä, mutta hyökkääjä voi luoda olosuhteet, joissa prosessori yrittää spekulatiivisesti suorittaa toiminnon osoite, joka ei täytä vahvistusehtoja.

Ongelma on ilmennyt ytimen 4.15 julkaisusta lähtien ja se on korjattu korjaustiedostoina (1, 2, 3, 4). Haavoittuvuus pysyy korjaamattomana jakeluissa (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).

Lisäksi voit huomioida huomautuksen Spectre-haavoittuvuuksilta suojautuvien työkalujen tehokkuudesta. Muistiossa on yhteenveto rr (Record and Replay) -virheenkorjausohjelman optimoinnin tuloksista. Vianetsintä luotiin kerran Mozillassa korjaamaan Firefoxin vaikeasti toistuvia virheitä. Hakemistojen olemassaolon tarkistamiseen käytettyjen järjestelmäkutsujen tallentaminen välimuistiin pienensi testiprojektin "rr sources" -toimintoa 3 minuutista 19 sekunnista 36 sekuntiin.

Optimoinnin tekijä päätti tarkistaa, kuinka suorituskyky muuttuisi Spectre-suojauksen poistamisen jälkeen. Kun järjestelmä käynnistettiin "mitigations=off"-parametrilla, "rr sources" -ohjelman suoritusaika ilman optimointia oli 2 minuuttia 5 sekuntia (1.6 kertaa nopeampi) ja optimoinnin kanssa 33 sekuntia (9% nopeampi). Mielenkiintoista on, että Spectre-suojauksen poistaminen käytöstä ei vain lyhensi koodin suoritusaikaa ydintasolla 1.4 kertaa (2m9s:sta 1m32s:iin), vaan myös puolitti suoritusaikaa käyttäjätilassa (1m9s:sta 0m33s:een), oletettavasti heikentyneen suorittimen välimuistin toiminnan ja TLB:n takia. nollautuu, kun Spectre-suojaus on käytössä.

Lähde: opennet.ru

Lisää kommentti