Zen+ ja Zen 2 mikroarhitektuuridel põhinevates AMD protsessorites avastati Meltdown klassi haavatavus

Dresdeni tehnikaülikooli teadlaste rühm on tuvastanud Zen+ ja Zen 2020 mikroarhitektuuridel põhinevates AMD protsessorites haavatavuse (CVE-12965-2), mis võimaldab Meltdowni klassi rünnakut. Algselt eeldati, et AMD Zen+ ja Zen 2 protsessorid ei ole Meltdowni haavatavusele vastuvõtlikud, kuid teadlased tuvastasid funktsiooni, mis viib mittekanooniliste virtuaalaadresside kasutamisel spekulatiivse juurdepääsuni kaitstud mälupiirkondadele.

AMD64 arhitektuur kasutab ainult virtuaalaadressi esimest 48 bitti ja ignoreerib ülejäänud 16 bitti. Täpsustatud on, et bitid 48 kuni 63 peavad alati kopeerima biti 47 väärtuse (märgibiti laiendus). Kui seda tingimust rikutakse ja üritatakse juurde pääseda ülemiste bittide suvaliste väärtustega aadressile, genereerib protsessor erandi. Korduv ülemiste bittide täitmine põhjustab saadaoleva aadressiruumi jagamise kaheks plokiks – alumisse (0 kuni 00007FFFFFFFFFFFFFF), milles ülemised bitid on seatud 800000000000-ks ja ülemisse (FFFF1 kuni FFFFFFFFFFFFFFFFFF), milles kõik ülemised bitid on seatud väärtusele XNUMX.

Määratud plokkidesse kuuluvaid aadresse nimetatakse kanoonilisteks ja ülemiste bittide suvalise sisuga valesid aadresse nimetatakse mittekanoonilisteks. Alumine kanooniliste aadresside vahemik on tavaliselt eraldatud protsessiandmete jaoks ja ülemist vahemikku kasutatakse tuumaandmete jaoks (juurdepääs nendele aadressidele kasutajaruumist on blokeeritud privileegide eraldamise tasemel).

Klassikaline Meltdowni haavatavus põhineb asjaolul, et käskude spekulatiivsel täitmisel pääseb protsessor ligi privaatsele andmealale ja seejärel tulemusest loobuma, kuna seatud privileegid keelavad sellise juurdepääsu kasutaja protsessile. Spekulatiivselt täidetav plokk eraldatakse programmis põhikoodist tingimusliku haruga, mis reaalsetes tingimustes alati käivitub, kuid tänu sellele, et tingimuslause kasutab arvutatud väärtust, mida protsessor ei tea ennetava täitmise ajal. koodi, kõik haru valikud tehakse spekulatiivselt.

Kuna spekulatiivselt täidetavad toimingud kasutavad sama vahemälu kui tavaliselt täidetavad käsud, on spekulatiivse täitmise ajal võimalik seada vahemällu markereid, mis kajastavad üksikute bittide sisu privaatmälu piirkonnas ja seejärel tavapäraselt täidetavas koodis, et määrata nende väärtus ajastuse abil. analüüsijuurdepääs vahemällu salvestatud ja vahemällu salvestamata andmetele.

Uue haavatavuse tunnuseks, mis mõjutab AMD Zen+ ja Zen 2 protsessoreid, on see, et protsessorid võimaldavad spekulatiivseid lugemis- ja kirjutamisoperatsioone, mis pääsevad mälule, kasutades kehtetuid mittekanoonilisi aadresse, ignoreerides lihtsalt ülemist 16 bitti. Seega kasutab protsessor spekulatiivsel koodi täitmisel alati ainult alumist 48 bitti ning aadressi kehtivust kontrollitakse eraldi. Kui mittekanoonilise virtuaalaadressi tõlkimisel assotsiatiivses tõlkepuhvris (TLB) olevaks füüsiliseks aadressiks tuvastatakse aadressi kanoonilises osas sobivus, tagastab spekulatiivne laadimisoperatsioon väärtuse ilma sisu arvesse võtmata. ülemisest 16 bitist, mis võimaldab mälu jagamisest keermede vahel mööda minna. Seejärel loetakse toiming kehtetuks ja tühistatakse, kuid juurdepääs mälule lõpetatakse ja andmed jõuavad vahemällu.

Eksperimendi käigus suutsid teadlased FLUSH+RELOAD vahemälu sisu määramise tehnikat kasutades organiseerida kanali varjatud andmeedastuseks kiirusega 125 baiti sekundis. Lisaks AMD kiipidele mõjutab probleem ka kõiki Inteli protsessoreid, mis on vastuvõtlikud klassikalisele Meltdowni haavatavusele. Seda uut tüüpi rünnakute eest kaitsmiseks saab kasutada samu tehnikaid, mis aitavad blokeerida Meltdowni rünnakuid, näiteks kasutada LFENCE juhiseid. Näiteks kui Inteli protsessor sisaldab riistvarakaitset Meltdowni eest või kui süsteemis on tarkvarakaitse lubatud, ei ole sellised konfiguratsioonid uuele ründevariandile vastuvõtlikud.

Samas märgivad teadlased, et võrreldes Inteli protsessoritega piirab AMD protsessorite arhitektuur reaalsete rünnakute läbiviimise võimalust, kuid ei välista uue meetodi kasutamist koos teiste mikroarhitektuuriliste rünnakutega nende efektiivsuse tõstmiseks. Eelkõige ei võimalda kavandatav rünnak määrata tuuma ja muude protsesside mälualade sisu, vaid piirdub võimalusega pääseda juurde sama programmi teistele lõimedele, mis töötavad samas virtuaalses mäluruumis.

Kuna haavatavuseta programmil on võimalus pääseda ligi oma lõimedele, pakub see meetod praktilisest vaatenurgast huvi liivakasti isoleerimisest möödahiilimiseks ja teiste lõimede töö häirimise korraldamiseks programmides, mis võimaldavad käivitada kolmanda osapoole lõime. kood, näiteks veebibrauserid ja JIT-mootorid . Teadlased uurisid SpiderMonkey JavaScripti mootori ja Linuxi kerneli haavatavust rünnakute suhtes, kuid ei leidnud haavatavaid koodijadasid, mida saaks ründe läbiviimiseks kasutada. Lisaks rakenduste ründamisele saab meetodit kasutada ka vastuvõetamatute andmevoogude sundimiseks protsessori mikroarhitektuursete elementide vahel, kasutades samas ära muid mikroarhitektuurseid haavatavusi.

Allikas: opennet.ru

Lisa kommentaar