Ranjivost klase Meltdown otkrivena je u AMD procesorima baziranim na Zen+ i Zen 2 mikroarhitekturama

Grupa istraživača sa Tehničkog univerziteta u Drezdenu identifikovala je ranjivost (CVE-2020-12965) u AMD procesorima baziranim na Zen+ i Zen 2 mikroarhitekturama, što omogućava napad klase Meltdown. Prvobitno se pretpostavljalo da AMD Zen+ i Zen 2 procesori nisu podložni ranjivosti Meltdown-a, ali istraživači su identifikovali karakteristiku koja vodi spekulativnom pristupu zaštićenim memorijskim područjima kada se koriste nekanonske virtuelne adrese.

Arhitektura AMD64 koristi samo prvih 48 bita virtuelne adrese i zanemaruje preostalih 16 bita. Specificirano je da bitovi od 48 do 63 uvijek moraju kopirati vrijednost bita 47 (proširenje bita znaka). Ako se ovaj uvjet prekrši i pokuša se pristupiti adresi s proizvoljnim vrijednostima gornjih bitova, procesor generiše izuzetak. Uzastopno popunjavanje gornjih bitova dovodi do toga da se raspoloživi adresni prostor podijeli na dva bloka - donji (od 0 do 00007FFFFFFFFFFFFFFF), u kojem su gornji bitovi postavljeni na 800000000000, i gornji (od FFFF1 do FFFFFFFFFFFFFFFF), u svi gornji bitovi su postavljeni na XNUMX.

Adrese koje spadaju u navedene blokove nazivaju se kanonskim, a netačne adrese sa proizvoljnim sadržajem gornjih bitova nazivaju se nekanonskim. Donji opseg kanonskih adresa se obično dodeljuje za podatke procesa, a gornji opseg se koristi za podatke kernela (pristup ovim adresama iz korisničkog prostora je blokiran na nivou odvajanja privilegija).

Klasična ranjivost Meltdowna zasniva se na činjenici da tokom spekulativnog izvršavanja instrukcija, procesor može pristupiti privatnom području podataka i potom odbaciti rezultat jer postavljene privilegije zabranjuju takav pristup korisničkom procesu. U programu, spekulativno izvršeni blok je odvojen od glavnog koda uslovnom granom, koja se u realnim uslovima uvek aktivira, ali zbog činjenice da uslovni izraz koristi izračunatu vrednost koju procesor ne zna tokom preventivnog izvršavanja koda, sve opcije grananja se spekulativno izvršavaju.

Budući da spekulativno izvršene operacije koriste istu keš memoriju kao i normalno izvršavane instrukcije, moguće je tokom spekulativnog izvršenja postaviti markere u keš koji odražavaju sadržaj pojedinačnih bitova u privatnom memorijskom području, a zatim u normalno izvršavanom kodu odrediti njihovu vrijednost kroz vrijeme analiza pristupa keširanim i ne-keširanim podacima.

Karakteristika nove ranjivosti koja utiče na AMD Zen+ i Zen 2 procesore je da CPU dozvoljavaju spekulativne operacije čitanja i pisanja koje pristupaju memoriji koristeći nevažeće nekanonske adrese, jednostavno zanemarujući gornjih 16 bitova. Dakle, tokom spekulativnog izvršavanja koda, procesor uvijek koristi samo nižih 48 bita, a validnost adrese se provjerava posebno. Ako se prilikom prevođenja nekanonske virtualne adrese na fizičku adresu u asocijativnom međuspremniku prijevoda (TLB) otkrije podudaranje u kanonskom dijelu adrese, tada će operacija spekulativnog učitavanja vratiti vrijednost bez uzimanja u obzir sadržaja gornjih 16 bitova, što omogućava zaobilaženje dijeljenja memorije između niti. Nakon toga, operacija će se smatrati nevažećom i odbačena, ali će pristup memoriji biti završen i podaci će završiti u kešu.

Tokom eksperimenta, koristeći tehniku ​​određivanja sadržaja FLUSH+RELOAD keš memorije, istraživači su uspeli da organizuju kanal za skriveni prenos podataka brzinom od 125 bajtova u sekundi. Pored AMD čipova, problem pogađa i sve Intel procesore, koji su podložni klasičnoj Meltdown ranjivosti. Iste tehnike koje pomažu u blokiranju Meltdown napada, kao što je korištenje LFENCE instrukcija, mogu se koristiti za zaštitu od ove nove vrste napada. Na primjer, ako Intelov procesor uključuje hardversku zaštitu od Meltdown-a ili sistem ima omogućenu softversku zaštitu, tada takve konfiguracije nisu podložne novoj varijanti napada.

Istovremeno, istraživači napominju da, u poređenju sa Intelovim procesorima, arhitektura AMD procesora ograničava mogućnost izvođenja stvarnih napada, ali ne isključuje upotrebu nove metode u kombinaciji sa drugim mikroarhitektonskim napadima radi povećanja njihove efikasnosti. Konkretno, predloženi napad ne dozvoljava određivanje sadržaja memorijskih područja kernela i drugih procesa, već je ograničen na mogućnost pristupa drugim nitima istog programa koji se izvodi u istom virtuelnom memorijskom prostoru.

Budući da program bez ranjivosti ima mogućnost da dobije pristup svojim nitima, s praktične tačke gledišta, metoda je od interesa za zaobilaženje izolacije sandbox-a i organiziranje smetnji u radu drugih niti u programima koji dozvoljavaju izvršavanje trećih strana. koda, kao što su web pretraživači i JIT motori. Istraživači su ispitali ranjivost SpiderMonkey JavaScript motora i Linux kernela na napade, ali nisu pronašli ranjive sekvence koda koje bi se mogle koristiti za izvođenje napada. Pored napada na aplikacije, metoda se također može koristiti za prisiljavanje neprihvatljivih tokova podataka između mikroarhitektonskih elemenata procesora uz iskorištavanje drugih mikroarhitektonskih ranjivosti.

izvor: opennet.ru

Dodajte komentar