Google demonstreerib Spectre haavatavuste ärakasutamist, käivitades brauseris JavaScripti

Google on avaldanud mitu ärakasutamise prototüüpi, mis näitavad võimalust kasutada Spectre klassi haavatavusi brauseris JavaScripti koodi käivitamisel, jättes mööda varem lisatud kaitsemeetoditest. Exploite saab kasutada praegusel vahekaardil veebisisu töötleva protsessi mälule juurdepääsu saamiseks. Exploiti toimimise testimiseks käivitati sait leaky.page ning töö loogikat kirjeldav kood postitati GitHubi.

Kavandatav prototüüp on loodud Intel Core i7-6500U protsessoritega süsteemide ründamiseks Linuxi ja Chrome 88 keskkonnas. Kasutamiseks teistes keskkondades on vaja muudatusi. Kasutusmeetod ei ole Inteli protsessoritele spetsiifiline – pärast asjakohast kohandamist kinnitati, et ärakasutamine töötab süsteemides koos teiste tootjate protsessoritega, sealhulgas ARM-i arhitektuuril põhineva Apple M1-ga. Pärast väiksemaid muudatusi töötab funktsioon ka teistes Chromiumi mootoril põhinevates operatsioonisüsteemides ja brauserites.

Standardsetel Chrome 88 ja Intel Skylake protsessoritel põhinevas keskkonnas lekkis praegusel Chrome'i vahekaardil veebisisu töötlemise eest vastutavast protsessist (renderdusprotsess) andmeid kiirusega 1 kilobait sekundis. Lisaks töötati välja alternatiivsed prototüübid, näiteks funktsioon, mis võimaldab stabiilsuse vähendamise hinnaga suurendada lekkekiirust 8kB/s-ni, kasutades performance.now() taimerit 5 mikrosekundi (0.005 millisekundi) täpsusega. . Valmistati ka ühe millisekundilise taimeri täpsusega töötav variant, mille abil sai organiseerida ligipääsu mõne teise protsessi mälule kiirusega umbes 60 baiti sekundis.

Avaldatud demokood koosneb kolmest osast. Esimene osa kalibreerib taimeri, et hinnata protsessori vahemällu jäänud andmete taastamiseks vajalike toimingute täitmisaega protsessori käskude spekulatiivse täitmise tulemusena. Teine osa määrab JavaScripti massiivi eraldamisel kasutatava mälupaigutuse.

Kolmas osa kasutab otseselt Spectre haavatavust, et määrata praeguse protsessi mälu sisu, luues tingimused teatud toimingute spekulatiivseks täitmiseks, mille tulemusest protsessor pärast ebaõnnestunud ennustuse tuvastamist kõrvale heita, kuid täitmine jäljed hoiustatakse üldvahemällu ja neid saab taastada vahemälu sisu määramise meetodite abil kolmandate osapoolte kanalite poolt, mis analüüsivad vahemällu salvestatud ja vahemällu mitte salvestatud andmete juurdepääsuaja muutusi.

Kavandatav kasutustehnika välistab ülitäpsed taimerid, mis on saadaval API performance.now() kaudu ja ilma SharedArrayBuffer tüüpi toetamiseta, mis võimaldab ühismälus massiive luua. Exploit sisaldab Spectre vidinat, mis põhjustab kontrollitud spekulatiivse koodi täitmist, ja külgkanali lekkeanalüsaatorit, mis määrab vahemällu sattunud spekulatiivse täitmise käigus saadud andmed.

Vidin on realiseeritud JavaScripti massiivi abil, milles üritatakse pääseda puhvri piiridest väljapoole jäävale alale, mis mõjutab haru ennustusploki olekut kompilaatori (protsessor, tulevikku vaadates) lisatud puhvri suuruse kontrolli tõttu , teostab spekulatiivselt juurdepääsu, kuid keerab oleku pärast kontrollimist tagasi). Vahemälu sisu analüüsimiseks ebapiisava taimeri täpsuse tingimustes pakutakse välja meetod, mis petab protsessorites kasutatava Tree-PLRU vahemälu väljatõstmise strateegiat ja võimaldab tsüklite arvu suurendamisega oluliselt suurendada ajavahet väärtus vahemälust ja kui vahemälus väärtust pole.

Märgitakse, et Google avaldas prototüübi ärakasutamise, et näidata Spectre klassi haavatavusi kasutavate rünnakute realistlikkust ja julgustada veebiarendajaid kasutama tehnikaid, mis minimeerivad selliste rünnakute riske. Samal ajal usub Google, et ilma kavandatud prototüübi olulise läbivaatamiseta on võimatu luua universaalseid kasutusvõimalusi, mis oleksid valmis mitte ainult demonstreerimiseks, vaid ka laialdaseks kasutamiseks.

Riskide maandamiseks soovitatakse saidiomanikel kasutada hiljuti juurutatud ristpäritolu avamise poliitikat (COOP), päritoluülese manustamise poliitikat (COEP), ristpäritolu ressursipoliitikat (CORP), metaandmete toomise taotlust, X-Frame-Options, X -sisutüübi valikud ja sama saidi küpsised. Need mehhanismid ei kaitse otseselt rünnete eest, kuid võimaldavad isoleerida saidi andmed lekke eest protsessideks, mille käigus saab käivitada ründaja JavaScripti koodi (leke toimub jooksva protsessi mälust, milles lisaks ründaja koodile ka andmed teiselt samal vahekaardil avatud saidilt). Põhiidee on eri protsessides eraldada saidi koodi täitmine ebausaldusväärsetest allikatest hangitud kolmanda osapoole koodist, mis on kaasatud näiteks iframe'i kaudu.



Allikas: opennet.ru

Lisa kommentaar