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

Grupa istraživača s Tehničkog sveučilišta u Dresdenu identificirala je ranjivost (CVE-2020-12965) u AMD procesorima temeljenim na mikroarhitekturama Zen+ i Zen 2, koja omogućuje napad klase Meltdown. U početku se pretpostavljalo da procesori AMD Zen+ i Zen 2 nisu osjetljivi na ranjivost Meltdown, ali istraživači su identificirali značajku koja dovodi do spekulativnog pristupa zaštićenim memorijskim područjima kada se koriste nekanonske virtualne adrese.

Arhitektura AMD64 koristi samo prvih 48 bitova virtualne adrese i zanemaruje preostalih 16 bitova. Specificirano je da bitovi 48 do 63 moraju uvijek 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 generira iznimku. Uzastopno popunjavanje gornjih bitova uzrokuje podjelu dostupnog adresnog prostora u dva bloka - donji (od 0 do 00007FFFFFFFFFFFFF), u kojem su gornji bitovi postavljeni na 800000000000, i gornji (od FFFF1 do FFFFFFFFFFFFFFFFFF), u kojem svi gornji bitovi postavljeni su na XNUMX.

Adrese koje spadaju unutar navedenih blokova nazivaju se kanonskim, a netočne adrese s proizvoljnim sadržajem gornjih bitova nazivaju se nekanonskima. Donji raspon kanonskih adresa obično se dodjeljuje za procesne podatke, a gornji raspon se koristi za podatke jezgre (pristup tim adresama iz korisničkog prostora blokiran je na razini odvajanja privilegija).

Klasična Meltdown ranjivost temelji se na činjenici da tijekom spekulativnog izvršavanja instrukcija procesor može pristupiti privatnom području podataka i zatim odbaciti rezultat jer postavljene privilegije zabranjuju takav pristup korisničkom procesu. U programu je spekulativno izvedeni blok odvojen od glavnog koda uvjetnom granom, koja se u stvarnim uvjetima uvijek aktivira, ali zbog činjenice da uvjetna naredba koristi izračunatu vrijednost koju procesor ne zna tijekom preventivnog izvođenja koda, sve opcije grana provode se spekulativno.

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

Značajka nove ranjivosti koja utječe na AMD Zen+ i Zen 2 procesore je da CPU-i dopuštaju spekulativne operacije čitanja i pisanja koje pristupaju memoriji koristeći nevažeće nekanonske adrese, jednostavno ignorirajući gornjih 16 bitova. Dakle, tijekom izvođenja spekulativnog koda, procesor uvijek koristi samo nižih 48 bitova, a valjanost adrese se posebno provjerava. Ako se, prilikom prevođenja nekanonske virtualne adrese u fizičku adresu u međuspremniku asocijativnog prevođenja (TLB), otkrije podudaranje u kanonskom dijelu adrese, tada će operacija spekulativnog učitavanja vratiti vrijednost bez uzimanja u obzir sadržaja od gornjih 16 bitova, što omogućuje zaobilaženje dijeljenja memorije između niti. Naknadno će se operacija smatrati nevažećom i odbaciti, ali će pristup memoriji biti dovršen i podaci će završiti u predmemoriji.

Tijekom eksperimenta, koristeći tehniku ​​određivanja sadržaja predmemorije FLUSH+RELOAD, istraživači su uspjeli organizirati kanal za skriveni prijenos podataka brzinom od 125 bajtova u sekundi. Osim AMD čipova, problem pogađa i sve Intelove procesore koji su podložni klasičnoj Meltdown ranjivosti. Iste tehnike koje pomažu blokirati Meltdown napade, kao što je korištenje LFENCE uputa, mogu se koristiti za zaštitu od ove nove vrste napada. Na primjer, ako Intelov procesor uključuje hardversku zaštitu od Meltdown ili sustav ima uključenu softversku zaštitu, tada takve konfiguracije nisu osjetljive na novu varijantu napada.

Istodobno, istraživači napominju da, u usporedbi s Intelovim procesorima, arhitektura AMD procesora ograničava mogućnost izvođenja pravih napada, ali ne isključuje korištenje nove metode u kombinaciji s drugim mikroarhitektonskim napadima kako bi se povećala njihova učinkovitost. Konkretno, predloženi napad ne dopušta određivanje sadržaja memorijskih područja jezgre i drugih procesa, već je ograničen na mogućnost pristupa drugim nitima istog programa koji se izvode u istom prostoru virtualne memorije.

Budući da program bez ranjivosti ima mogućnost dobiti pristup svojim nitima, s praktičnog gledišta metoda je od interesa za zaobilaženje izolacije sandboxa i organiziranje ometanja rada drugih niti u programima koji dopuštaju izvršavanje trećih strana koda, kao što su web preglednici i JIT motori. Istraživači su ispitali ranjivost SpiderMonkey JavaScript mehanizma i Linux kernela za napad, ali nisu pronašli ranjive sekvence koda koje bi se mogle koristiti za izvođenje napada. Osim napada na aplikacije, metoda se također može koristiti za forsiranje neprihvatljivih protoka podataka između mikroarhitektonskih elemenata procesora dok se iskorištavaju druge mikroarhitektonske ranjivosti.

Izvor: opennet.ru

Dodajte komentar