Google je pokazal izkoriščanje ranljivosti Spectre z izvajanjem JavaScript v brskalniku

Google je objavil več prototipov izkoriščanja, ki prikazujejo možnost izkoriščanja ranljivosti razreda Spectre pri izvajanju kode JavaScript v brskalniku, mimo predhodno dodanih metod zaščite. Izkoriščanja lahko uporabite za dostop do pomnilnika procesa, ki obdeluje spletno vsebino v trenutnem zavihku. Za preizkus delovanja izkoriščanja je bilo zagnano spletno mesto leaky.page, koda, ki opisuje logiko dela, pa je bila objavljena na GitHubu.

Predlagani prototip je zasnovan za napad na sisteme s procesorji Intel Core i7-6500U v okolju z Linuxom in Chrome 88. Za uporabo izkoriščanja za druga okolja so potrebne spremembe. Metoda izkoriščanja ni specifična za procesorje Intel – po ustrezni prilagoditvi je bilo potrjeno, da izkoriščanje deluje na sistemih s procesorji drugih proizvajalcev, vključno z Apple M1, ki temelji na arhitekturi ARM. Po manjših prilagoditvah je izkoriščanje uporabno tudi v drugih operacijskih sistemih in v drugih brskalnikih, ki temeljijo na motorju Chromium.

V okolju, ki temelji na standardnih procesorjih Chrome 88 in Intel Skylake, je bilo možno uhajanje podatkov iz procesa, odgovornega za obdelavo spletne vsebine v trenutnem zavihku Chrome (proces upodabljanja) s hitrostjo 1 kilobajt na sekundo. Poleg tega so bili razviti alternativni prototipi, na primer izkoriščanje, ki omogoča, za ceno zmanjšanja stabilnosti, povečanje stopnje uhajanja na 8kB/s pri uporabi časovnika performance.now() z natančnostjo 5 mikrosekund (0.005 milisekunde ). Pripravljena je bila tudi različica, ki je delovala z natančnostjo časovnika ene milisekunde, s katero je bilo mogoče organizirati dostop do pomnilnika drugega procesa s hitrostjo približno 60 bajtov na sekundo.

Objavljena demo koda je sestavljena iz treh delov. Prvi del kalibrira časovnik za oceno časa izvajanja operacij, potrebnih za obnovitev podatkov, ki ostanejo v predpomnilniku procesorja kot posledica špekulativnega izvajanja ukazov CPU. Drugi del določa postavitev pomnilnika, ki se uporablja pri dodeljevanju matrike JavaScript.

Tretji del neposredno izkorišča ranljivost Spectre za določanje vsebine pomnilnika trenutnega procesa kot rezultat ustvarjanja pogojev za špekulativno izvajanje določenih operacij, katerih rezultat zavrže procesor po ugotovitvi neuspešne napovedi, vendar sledovi izvajanja so shranjeni v splošnem predpomnilniku in jih je mogoče obnoviti z metodami za določanje vsebine predpomnilnika s kanali tretjih oseb, ki analizirajo spremembe v času dostopa do predpomnjenih in nepredpomnjenih podatkov.

Predlagana tehnika izkoriščanja omogoča brez visoko natančnih časovnikov, ki so na voljo prek API-ja performance.now(), in brez podpore za tip SharedArrayBuffer, ki omogoča ustvarjanje nizov v skupnem pomnilniku. Izkoriščanje vključuje pripomoček Spectre, ki povzroči nadzorovano špekulativno izvajanje kode, in analizator uhajanja stranskega kanala, ki zazna predpomnjene podatke, pridobljene med špekulativnim izvajanjem.

Pripomoček je implementiran z uporabo matrike JavaScript, v kateri se poskuša dostopati do območja zunaj meja medpomnilnika, kar vpliva na stanje bloka predvidevanja veje zaradi prisotnosti preverjanja velikosti medpomnilnika, ki ga je dodal prevajalnik (procesor, gleda naprej, špekulativno izvede dostop, vendar vrne stanje po preverjanju). Za analizo vsebine predpomnilnika v pogojih nezadostne natančnosti časovnika je bila predlagana metoda, ki prevara strategijo izločitve predpomnilnika Tree-PLRU, ki se uporablja v procesorjih, in omogoča, da s povečanjem števila ciklov znatno poveča razliko v času pri vračanju vrednost iz predpomnilnika in ko v predpomnilniku ni vrednosti.

Opozoriti je treba, da je Google objavil prototip izkoriščanja, da bi prikazal izvedljivost napadov z uporabo ranljivosti razreda Spectre in spodbudil spletne razvijalce k uporabi tehnik, ki zmanjšujejo tveganja takšnih napadov. Hkrati Google verjame, da brez pomembne predelave predlaganega prototipa ni mogoče ustvariti univerzalnih podvigov, ki so pripravljeni ne le za predstavitev, ampak tudi za široko uporabo.

Da bi zmanjšali tveganje, lastnike spletnih mest spodbujamo k uporabi nedavno implementiranih glav Pravilnik o odpiranju navzkrižnega izvora (COOP), Pravilnik o vdelavi navzkrižnega izvora (COEP), Pravilnik o virih navzkrižnega izvora (CORP), Zahteva za pridobivanje metapodatkov, X-Frame- Možnosti, X -Content-Type-Options in SameSite Cookie. Ti mehanizmi ne ščitijo neposredno pred napadi, vendar vam omogočajo, da izolirate podatke spletnega mesta od uhajanja v procese, v katerih se lahko izvede napadalčeva koda JavaScript (puščanje se zgodi iz pomnilnika trenutnega procesa, ki poleg napadalčeve kode , lahko obdeluje tudi podatke z drugega mesta, odprtega na istem zavihku). Glavna ideja je ločiti izvajanje kode spletnega mesta v različnih procesih od kode tretjih oseb, prejete iz nezanesljivih virov, na primer vključene prek okvirja iframe.



Vir: opennet.ru

Dodaj komentar