SWAPGS - uusi haavoittuvuus suorittimen spekulatiivisessa suoritusmekanismissa

Bitdefenderin tutkijat paljastettiin uusi haavoittuvuus (CVE-2019-1125) nykyaikaisten suorittimien spekulatiivisessa käskyn suoritusmekanismissa, jonka nimi on SWAPGS, joka vastaa ongelman aiheuttavan prosessorikäskyn nimeä. Haavoittuvuus sen avulla antaa etuoikeutettoman hyökkääjän määrittää ytimen muistialueiden tai käynnissä olevien virtuaalikoneiden sisällön. Ongelma vahvistettu Intel-suorittimissa (x86_64) ja osittain vaikuttaa AMD-prosessorit, joiden päähyökkäysvektoria ei näy. Aiemmin käyttöönotetut menetelmät Spectre- ja Meltdown-haavoittuvuuksien torjumiseksi eivät suojaa SWAPGS-hyökkäykseltä Intel-suorittimia käytettäessä, mutta korjauksia on jo ehdotettu Linuxille, ChromeOS:lle, Androidille ja Windowsille.

Haavoittuvuus kuuluu Spectre v1 -luokkaan ja perustuu ajatukseen palauttaa käskyjen spekulatiivisen suorittamisen jälkeen jäljelle jääneet tiedot prosessorin välimuistista. Suorituskyvyn parantamiseksi nykyaikaisten suorittimien haaraennustusyksiköt käyttävät joidenkin todennäköisimmin suoritettavien käskyjen ennaltaehkäisevää suorittamista, mutta odottamatta kaikkien niiden suorittamisen määräävien tekijöiden laskemista (esimerkiksi kun haaraehdot tai pääsyparametrit eivät ole vielä laskettu). Jos ennustetta ei vahvisteta, prosessori hylkää spekulatiivisen suorituksen tuloksen, mutta sen aikana käsitellyt tiedot jäävät prosessorin välimuistiin ja voidaan palauttaa menetelmillä, joilla määritetään välimuistin sisältö sivukanavien kautta, analysoidaan pääsyn muutos. aikaa välimuistiin tallennettuihin ja välimuistiin tallentamattomiin tietoihin.

Uuden hyökkäyksen erikoisuus on SWAPGS-käskyn spekulatiivisen suorituksen aikana tapahtuvan vuodon käyttö, jota käytetään käyttöjärjestelmissä korvaamaan GS-rekisterin arvo, kun ohjaus siirtyy käyttäjätilasta käyttöjärjestelmän ytimeen (GS käyttäjätilassa käytetty arvo korvataan arvolla, jota käytetään ytimen toimintojen aikana). Linux-ytimessä GS tallentaa per_cpu-osoittimen, jota käytetään ytimen tietojen käyttämiseen, ja käyttäjätila tallentaa osoittimet TLS:ään (Thread Local Storage).

Jotta SWAPGS-käskyä ei kutsuttaisi kahdesti, kun ytimeen päästään uudelleen ydintilasta tai kun suoritetaan koodia, joka ei vaadi GS-rekisterin muutosta, ennen käskyä suoritetaan tarkistus ja ehdollinen haara. Spekulatiivinen suoritusmoottori etenee ennakoivasti koodin suorittamiseen SWAPGS-käskyllä ​​odottamatta tarkistuksen tulosta, ja jos valittua haaraa ei vahvisteta, se hylkää tuloksen. Siten voi syntyä tilanne, kun spekulatiivisesti valitaan haara, joka ei sisällä SWAPGS-suoritusta, mutta spekulatiivisen suorituksen aikana GS-rekisterin arvo muuttuu SWAPGS-käskyn vaikutuksesta ja sitä käytetään riippuvaisissa muistitoiminnoissa, jotka päätyvät CPU-välimuistiin.

Tutkijat ovat ehdottaneet kahta hyökkäysskenaariota, joita varten on valmistettu hyväksikäyttöprototyyppejä. Ensimmäinen skenaario perustuu tilanteeseen, jossa SWAPGS-käskyä ei suoriteta spekulatiivisesti, vaikka sitä todella käytetään suorituksessa, ja toinen on päinvastoin, kun SWAPGS-käsky suoritetaan spekulatiivisesti, vaikka sitä ei todellisuudessa pitäisi suorittaa. Jokaisessa skenaariossa on kaksi hyväksikäyttövaihtoehtoa: hyökkääjä voi määrittää arvon tietystä osoitteesta ytimen alueella ja hyökkääjä voi etsiä tiettyä arvoa satunnaisista osoitteista ytimessä. Hyökkäyksen toteuttaminen kestää kauan ja hyväksikäyttö voi kestää useita tunteja vuodon loppuun saattamiseksi.

Linux-ytimessä on ongelma eliminoitu muuttamalla SWAPGS-käskyn kutsumisen logiikkaa (estää spekulatiivisen suorituksen) samalla tavalla kuin muiden Spectre v1 -luokan haavoittuvuuksien korjaaminen. Lisätyn suojauksen odotetaan vaikuttavan vain vähän tyypillisten työkuormien suorituskykyyn. Latenssia esiintyy käyttäjän ja ydintilan välisen vaihtovaiheen aikana, mikä voi heikentää suorituskykyä esimerkiksi silloin, kun sovelluksesta tulee raskas järjestelmäkutsu tai NMI:itä ja keskeytyksiä syntyy usein.

Korjaus edellyttää ytimen päivityksen asentamista sekä isäntäjärjestelmään että vierasympäristöihin, minkä jälkeen järjestelmä käynnistetään uudelleen. Suojauksen poistamiseen Linuxissa voidaan käyttää "nospectre_v1" -vaihtoehtoa, joka myös poistaa käytöstä toimenpiteet SWAPGS-haavoittuvuuden estämiseksi. Korjaus on saatavilla muodossa laastari Linux-ytimelle, joka sisältyy jo julkaisuihin 4.19.65, 5.2.7, 4.14.137, 4.9.188 ja 4.4.188. Päivityksiä Linux-jakeluille ei ole vielä julkaistu (Debian, RHEL, Fedora, Arch Linux, SUSE / openSUSE, Ubuntu). Windowsissa ongelma korjaantui hiljaa Heinäkuun päivitys. Google-yritys valmis korjaus kernel 4.19:lle, joka toimitetaan ChromeOS:n ja Android.

Bitdefenderin tutkijoiden mukaan Intel sai tiedon ongelmasta viime vuoden elokuussa. Ongelma päätettiin korjata ohjelmallisesti, johon Microsoftin, Googlen ja Linux-ytimen kehittäjät olivat mukana koordinoidussa korjauksen kehittämisessä. Vanhemmat Intel-prosessorit, Ivy Bridgeä edeltävät prosessorit, on paljon vaikeampi hyökätä, koska hyväksikäytössä käytettyä WRGSBASE-ohjetta ei tueta. Ongelma ei vaikuta ARM-, POWER-, SPARC-, MIPS- ja RISC-V-järjestelmiin, koska ne eivät tue SWAPGS-ohjetta.

Ongelma koskee lähinnä Intel-prosessorien omistajia -
AMD-järjestelmissä pystyttiin toistamaan vain toinen hyökkäysskenaario, joka rajoittuu GS-rekisterin perusarvon spekulatiiviseen käsittelyyn, jota voidaan käyttää tiettyjen arvojen etsimiseen satunnaisilta muistialueilta. Voit estää tämän hyökkäysvaihtoehdon riittää olemassa olevat suojausmenetelmät Spectre v1:tä vastaan.

Lähde: opennet.ru

Lisää kommentti