Meltdown-luokan haavoittuvuus on löydetty Zen+- ja Zen 2 -mikroarkkitehtuureihin perustuvista AMD-prosessoreista

Dresdenin teknisen yliopiston tutkijaryhmä on tunnistanut Zen+- ja Zen 2020 -mikroarkkitehtuureihin perustuvissa AMD-prosessoreissa haavoittuvuuden (CVE-12965-2), joka mahdollistaa Meltdown-luokan hyökkäyksen. Aluksi oletettiin, että AMD Zen+- ja Zen 2 -prosessorit eivät ole alttiita Meltdown-haavoittuvuudelle, mutta tutkijat havaitsivat ominaisuuden, joka johtaa spekulatiiviseen pääsyyn suojatuille muistialueille käytettäessä ei-kanonisia virtuaaliosoitteita.

AMD64-arkkitehtuuri käyttää vain virtuaaliosoitteen 48 ensimmäistä bittiä ja jättää huomioimatta loput 16 bittiä. On määritelty, että bittien 48 - 63 on aina kopioitava bitin 47 arvo (merkkibitin laajennus). Jos tätä ehtoa rikotaan ja osoitetta yritetään käyttää mielivaltaisilla ylempien bittien arvoilla, prosessori luo poikkeuksen. Ylempien bittien toistuva täyttäminen jakaa käytettävissä olevan osoiteavaruuden kahteen lohkoon - alempaan (0 - 00007FFFFFFFFFFFFFF), jossa ylemmät bitit on asetettu 800000000000:ksi ja ylempään (FFFF1 - FFFFFFFFFFFFFFFFFF). kaikki ylemmät bitit on asetettu arvoon XNUMX.

Määritettyihin lohkoihin kuuluvia osoitteita kutsutaan kanonisiksi, ja virheellisiä osoitteita, joiden ylempien bittien sisältö on mielivaltainen, kutsutaan ei-kanoniseksi. Kanonisten osoitteiden alempi alue on tyypillisesti varattu prosessidatalle ja ylempää aluetta käytetään ytimen datalle (pääsy näihin osoitteisiin käyttäjätilasta on estetty etuoikeuserottelutasolla).

Klassinen Meltdown-haavoittuvuus perustuu siihen, että käskyjen spekulatiivisen suorittamisen aikana prosessori voi päästä yksityiselle tietoalueelle ja sitten hylätä tuloksen, koska asetetut oikeudet estävät tällaisen pääsyn käyttäjän prosessista. Ohjelmassa spekulatiivisesti suoritettu lohko erotetaan pääkoodista ehdollisen haaran avulla, joka todellisissa olosuhteissa laukeaa aina, mutta johtuen siitä, että ehdollinen lauseke käyttää laskettua arvoa, jota prosessori ei tiedä ennaltaehkäisevän suorituksen aikana. koodi, kaikki haaravaihtoehdot suoritetaan spekulatiivisesti.

Koska spekulatiivisesti suoritetut toiminnot käyttävät samaa välimuistia kuin normaalisti suoritettavat käskyt, on spekulatiivisen suorituksen aikana mahdollista asettaa välimuistiin merkkejä, jotka heijastavat yksittäisten bittien sisältöä yksityisellä muistialueella, ja sitten normaalisti suoritettavassa koodissa niiden arvon määrittämiseksi ajoituksen avulla. välimuistissa olevien ja ei-välimuistin tietojen analysointi.

Uuden AMD Zen+- ja Zen 2 -prosessoreihin vaikuttavan haavoittuvuuden ominaisuus on, että prosessorit sallivat spekulatiivisia luku- ja kirjoitustoimintoja, jotka käyttävät muistia virheellisten ei-kanonisten osoitteiden avulla jättäen yksinkertaisesti huomioimatta ylemmän 16 bittiä. Näin ollen spekulatiivisen koodin suorituksen aikana prosessori käyttää aina vain alempaa 48 bittiä ja osoitteen kelpoisuus tarkistetaan erikseen. Jos käännettäessä ei-kanonista virtuaaliosoitetta fyysiseksi osoitteeksi assosiatiivisessa käännöspuskurissa (TLB), osoitteen kanonisessa osassa havaitaan vastaavuus, niin spekulatiivinen lataustoiminto palauttaa arvon ottamatta huomioon sisältöä. ylemmästä 16 bitistä, mikä mahdollistaa muistin jakamisen ohituksen säikeiden välillä. Myöhemmin toiminto katsotaan virheelliseksi ja hylätyksi, mutta muistin käyttö suoritetaan loppuun ja tiedot päätyvät välimuistiin.

Kokeen aikana tutkijat pystyivät FLUSH+RELOAD-välimuistin sisällön määrittämistekniikalla järjestämään kanavan piilotiedonsiirtoon nopeudella 125 tavua sekunnissa. AMD-sirujen lisäksi ongelma koskee myös kaikkia Intel-prosessoreja, jotka ovat herkkiä klassiselle Meltdown-haavoittuvuudelle. Samoja tekniikoita, jotka auttavat estämään Meltdown-hyökkäykset, kuten käyttämällä LFENCE-ohjeita, voidaan käyttää suojaamaan tätä uudentyyppistä hyökkäystä vastaan. Esimerkiksi jos Intel-prosessori sisältää laitteistosuojauksen Meltdownia vastaan ​​tai järjestelmässä on ohjelmistosuojaus käytössä, tällaiset kokoonpanot eivät ole alttiita uudelle hyökkäysversiolle.

Samalla tutkijat huomauttavat, että Intel-prosessoreihin verrattuna AMD-prosessorien arkkitehtuuri rajoittaa mahdollisuutta suorittaa todellisia hyökkäyksiä, mutta ei sulje pois uuden menetelmän käyttöä yhdessä muiden mikroarkkitehtonisten hyökkäysten kanssa niiden tehokkuuden lisäämiseksi. Erityisesti ehdotettu hyökkäys ei salli ytimen ja muiden prosessien muistialueiden sisällön määrittämistä, vaan rajoittuu mahdollisuuteen päästä käsiksi muihin samassa virtuaalimuistitilassa käynnissä oleviin saman ohjelman säikeisiin.

Koska ohjelmalla, jolla ei ole haavoittuvuutta, on mahdollisuus päästä käsiksi sen säikeisiin, menetelmä on käytännön näkökulmasta kiinnostava ohittaakseen hiekkalaatikon eristyksen ja järjestämällä häiriöitä muiden säikeiden työhön ohjelmissa, jotka mahdollistavat kolmannen osapuolen suorittamisen. koodia, kuten verkkoselaimet ja JIT-moottorit . Tutkijat tutkivat SpiderMonkey JavaScript-moottorin ja Linux-ytimen haavoittuvuutta hyökkäyksille, mutta eivät löytäneet haavoittuvia koodisekvenssejä, joita voitaisiin käyttää hyökkäykseen. Sovellusten hyökkäämisen lisäksi menetelmää voidaan käyttää myös pakottamaan ei-hyväksyttäviin tietovirtoihin prosessorin mikroarkkitehtuurielementtien välillä samalla kun hyödynnetään muita mikroarkkitehtonisia haavoittuvuuksia.

Lähde: opennet.ru

Lisää kommentti