Google je nedavno objavio nekoliko prototipova exploita koji pokazuju mogućnost iskorištavanja ranjivosti klase Spectre izvršavanjem JavaScript koda u pregledniku, bez prolaska kroz prethodno dodane sigurnosne mjere.
Exploiti se mogu koristiti za pristup memoriji procesa koji obrađuje web sadržaj u trenutnoj kartici. Kako bi se testirala funkcionalnost exploita, pokrenuta je web stranica procurile stranice, a kod koji opisuje logiku operacije objavljen je na GitHubu.
Predloženi prototip dizajniran je za napad na sustave s Intel Core i7-6500U procesorima u okruženju s Linuxom i Chromeom 88, iako to ne isključuje mogućnost promjena kako bi se iskorištavanje iskoristilo u drugim okruženjima.
Način rada nije specifičan za Intel procesore : nakon odgovarajuće prilagodbe, potvrđeno je da exploit radi na sustavima s CPU-ima drugih proizvođača, uključujući Apple M1 temeljen na ARM arhitekturi. Nakon manjih prilagodbi, exploit radi i na drugim operativnim sustavima i drugim preglednicima temeljenim na Chromium engineu.
U okruženju koje se temelji na standardnim procesorima Chrome 88 i Intel Skylake, postigli smo curenje podataka iz procesa odgovornog za prikazivanje web sadržaja na trenutnoj kartici Chrome (postupak prikazivanja) brzinom od 1 kilobajta u sekundi. Uz to su razvijeni alternativni prototipi, na primjer, exploit koji omogućava, po cijenu smanjene stabilnosti, povećati brzinu curenja na 8 kB / s kada se koristi timer performance.now () s preciznošću od 5 mikrosekundi (0.005 milisekundi) ). Također je razvijena varijanta koja je radila s vremenskom preciznošću od jedne milisekunde, koja se mogla koristiti za organiziranje pristupa memoriji drugog procesa brzinom od oko 60 bajta u sekundi.
Objavljeni demo kod sastoji se od tri dijela:
- Prvi dio kalibrirajte timer za procjenu vremena rada operacija potrebnih za dohvaćanje podataka koji ostaju u predmemoriji procesora kao rezultat špekulativnog izvršavanja CPU uputa.
- Drugi dio Definira raspored memorije koji se koristi pri dodjeljivanju JavaScript niza.
- Treći dio izravno iskorištava ranjivost Spectre kako bi odredio sadržaj memorije trenutnog procesa kao rezultat stvaranja uvjeta za spekulativno izvršavanje određenih operacija, čiji rezultat procesor odbacuje nakon utvrđivanja neuspjele prognoze, ali se tragovi izvršenja podmiruju u zajedničkoj predmemoriji i mogu se vratiti pomoću metode za određivanje sadržaja predmemorije pomoću kanala nezavisnih proizvođača koji analiziraju promjenu vremena pristupa predmemoriranim i ne-predmemoriranim podacima.
Predložena tehnika iskorištavanja omogućuje napuštanje visokopreciznih timera dostupnih putem performance.now() API-ja i bez podrške za tip SharedArrayBuffer, koji omogućuje stvaranje nizova u dijeljenoj memoriji.
Ekploit uključuje uređaj Spectre, koji uzrokuje kontrolirano izvršavanje špekulativnog koda, i analizator propuštanja bočnog kanala, koji određuje koji su podaci predmemorirani tijekom spekulativnog izvršavanja.
Gadget je implementiran pomoću JavaScript polja, u kojem se pokušava pristupiti području izvan granica međuspremnika , što utječe na stanje bloka predviđanja grananja zbog prisutnosti provjere veličine međuspremnika koju je dodao kompajler (procesor spekulativno izvodi rani pristup, ali vraća stanje nakon provjere).
Za analizu sadržaja predmemorije u uvjetima nedovoljne preciznosti tajmera predložena je metoda koja zavara strategiju izbacivanja podataka predmemorije Tree-PLRU koja se koristi u procesorima i omogućava, povećanjem broja ciklusa, da značajno poveća vrijeme razlike kada se vrijednost vrati iz predmemorije i u nedostatku vrijednosti u predmemoriji.
Google je objavio prototip exploita kako bi demonstrirao izvedivost napada korištenjem ranjivosti klase Spectre i potaknuo web developere na korištenje tehnika koje minimiziraju rizike takvih napada.
Google istodobno vjeruje da je bez značajne revizije predloženog prototipa nemoguće stvoriti univerzalni exploit koji je spreman ne samo za demonstraciju, već i za široku upotrebu.
Izvor: https://security.googleblog.com