Retbleed je novi napad na spekulativni mehanizam izvršenja Intel i AMD CPU-a

Grupa istraživača sa ETH u Cirihu identifikovala je novi napad na mehanizam spekulativnog izvršavanja indirektnih skokova u CPU-u, koji vam omogućava da izvučete informacije iz memorije kernela ili organizujete napad na host sistem sa virtuelnih mašina. Ranjivosti su pod kodnim nazivom Retbleed (CVE-2022-29900, CVE-2022-29901) i slične su po prirodi napadima Spectre-v2. Razlika se svodi na organizaciju spekulativnog izvršavanja proizvoljnog koda prilikom obrade “ret” (return) instrukcije, koja dohvaća adresu za skok sa steka, umjesto da indirektno skače korištenjem “jmp” instrukcije, učitavajući adresu iz memorije ili CPU registar.

Napadač može stvoriti uslove za netačno predviđanje skoka i organizirati svrsishodan spekulativni skok na blok koda koji nije predviđen logikom izvršavanja programa. Na kraju, procesor će utvrditi da predviđanje grananja nije bilo opravdano i vratiti operaciju u prvobitno stanje, ali će se podaci obrađeni tokom spekulativnog izvršavanja smjestiti u keš i mikroarhitektonske bafere. Ako pogrešno izvršeni blok izvrši pristup memoriji, tada će njegovo spekulativno izvršenje dovesti do naseljavanja u opštu keš memoriju i podataka koji se čitaju iz memorije.

Da bi odredio podatke koji su ostali u kešu nakon spekulativnog izvršenja operacija, napadač može koristiti metode za određivanje preostalih podataka putem kanala treće strane, na primjer, analizirati promjene u vremenu pristupa keširanim i ne keširanim podacima. Za svrsishodno vađenje informacija iz područja sa različitim nivoom privilegija (na primjer, iz memorije kernela), koriste se "spravici" - nizovi naredbi prisutnih u kernelu, pogodni za spekulativno čitanje podataka iz memorije, ovisno o vanjskim uvjetima koji mogu biti pod uticajem napadača.

Da bi se zaštitili od klasičnih napada klase Spectre, koji koriste uslovne i indirektne instrukcije grananja, većina operativnih sistema koristi tehniku ​​"retpoline", zasnovanu na zamjeni indirektnih operacija grananja sa "ret" instrukcijom, za koju je poseban blok za predviđanje stanja steka. koji se koristi u procesorima, ne koristi blok predviđanja grananja. Prilikom uvođenja retpoline-a 2018. godine, vjerovalo se da manipulacije adresama slične Spectre-u nisu praktične za spekulativno grananje korištenjem "ret" instrukcije.

Istraživači koji su razvili metodu Retbleed napada demonstrirali su mogućnost stvaranja mikroarhitektonskih uslova za pokretanje spekulativne tranzicije pomoću instrukcije “ret” i objavili gotov komplet alata za identifikaciju sekvenci instrukcija (gadžeta) pogodnih za iskorištavanje ranjivosti u Linux kernelu, u kojima se pojavljuju takvi uslovi.

U toku studije pripremljen je radni exploit koji omogućava, na sistemima sa Intel CPU-ima, iz neprivilegovanog procesa u korisničkom prostoru da izvuče proizvoljne podatke iz memorije kernela brzinom od 219 bajtova u sekundi i 98% tačnosti. Na AMD procesorima, efikasnost eksploatacije je mnogo veća - stopa curenja je 3.9 KB u sekundi. Kao praktičan primjer, pokazuje kako koristiti predloženi exploit za određivanje sadržaja /etc/shadow datoteke. Na sistemima sa Intel CPU-ima, napad za određivanje heša root lozinke izveden je za 28 minuta, a na sistemima sa AMD CPU-ima za 6 minuta.

Napad je potvrđen za 6-8 generacija Intelovih procesora koji su objavljeni prije trećeg kvartala 3. (uključujući Skylake) i AMD procesora baziranih na Zen 2019, Zen 1+ i Zen 1 mikroarhitekturama koji su objavljeni prije Q2 2021. Kod novijih modela procesora, kao što su AMD Zen3 i Intel Alder Lake, kao i kod ARM procesora, problem je blokiran postojećim zaštitnim mehanizmima. Na primjer, korištenje IBRS (Indirect Branch Restricted Speculation) instrukcija pomaže u zaštiti od napada.

Pripremljen je set izmjena za Linux kernel i Xen hipervizor, koje programski blokiraju problem na starijim procesorima. Predložena zakrpa za Linux kernel mijenja 68 datoteka, dodaje 1783 reda i uklanja 387 linija. Nažalost, zaštita dovodi do značajnih režijskih troškova – u tekstovima koji su rađeni na AMD i Intel procesorima, degradacija performansi se procjenjuje sa 14% na 39%. Poželjnije je koristiti zaštitu zasnovanu na IBRS uputstvima, dostupnu u novim generacijama Intelovih procesora i podržanu od Linux 4.19 kernela.

Na Intel procesorima, zamjena adrese za spekulativnu indirektnu granu se izvodi zbog funkcije koja se javlja kada dođe do podtoka u baferu povratnog steka. Kada se takvi uslovi pojave, instrukcija ret počinje da primenjuje logiku odabira adrese sličnu onoj koja se koristi u konvencionalnim indirektnim skokovima. U Linux kernelu je pronađeno više od hiljadu mjesta koja stvaraju uslove za pokretanje takvog povratnog toka i dostupna su putem sistemskih poziva.

Na AMD procesorima, spekulativno izvršenje instrukcije „ret“ se izvodi bez upućivanja na bafer specifičan za stek (Return Address Stack), a blok predviđanja grananja ne smatra „ret“ instrukciju kao vraćanje kontrole, već kao indirektnu granu, te, shodno tome, koristi podatke za predviđanje kada predviđa indirektne tranzicije. Pod ovim uslovima, praktično svaka "ret" operacija koja je dostupna putem sistemskog poziva može se iskoristiti.

Dodatno, AMD CPU-ovi takođe imaju još jedan problem (CVE-2022-23825, Branch Type Confusion) koji se odnosi na implementaciju lažnih grananja - uslovi za predviđanje grananja mogu se pojaviti čak i bez neophodnih instrukcija grananja, što vam omogućava da utičete na bafer predviđanja grananja bez instrukcija "ret". Ova karakteristika značajno komplikuje implementaciju zaštite i zahteva aktivnije brisanje bafera predviđanja grananja. Očekuje se da će dodavanje potpune zaštite jezgri rezultirati povećanjem troškova za 209%.

izvor: opennet.ru

Dodajte komentar