Ameerika, Australia ja Iisraeli ülikoolide teadlaste rühm on välja pakkunud uue külgkanalite rünnaku tehnika, et ära kasutada Spectre klassi haavatavusi Chromiumi põhistel brauseritel. Rünnak, mille koodinimi on Spook.js, võimaldab JavaScripti koodi käivitamise kaudu mööduda saidi isolatsiooni mehhanismist ja lugeda kogu praeguse protsessi aadressiruumi sisu, st pääseda juurde teiste vahekaartide avatud lehtede andmetele, mis töötlevad ühes protsessis.
Kuna Chrome käivitab erinevaid saite erinevates protsessides, on praktiliste rünnakute võimalused piiratud teenustega, mis võimaldavad erinevatel kasutajatel oma lehti majutada. Meetod võimaldab ründajal, kellest on võimalik sisestada oma JavaScripti kood, tuvastada teised sama saidi kasutaja avatud lehed ja hankida neilt konfidentsiaalset teavet, nagu näiteks sisselogimisandmed või pangarekvisiidid, mille süsteem automaatse täitmise korral web-vormides täidab. Demonstratsioonina on näidatud, kuidas rünnata kellegi teise blogi Tumblr'is, kui selle omanik avab teises vahekaardis kurjategijate blogi sama teenuse raames.

Teine meetodi rakendamise variant on rünnak brauserilaiendite vastu, mis võimaldab ründajal installeerida kontrolli all oleva laiendi kaudu andmeid teistest laienditest välja võtta. Näitena on illustreeritud, kuidas kahjuliku laiendi installimisega saab hankida konfidentsiaalset teavet paroolihaldurist LastPass.

Uurijatel on avaldatud Chrome 89-s töötava eksploitide prototüüp, mis töötab CPU Intel i7-6700K ja i7-7600U süsteemides. Eksploitatsiooni loomisel on kasutatud Google'i varem avaldatud JavaScript-koodi prototüüpe Spectre rünnakute sooritamiseks. Uurijad on suutnud ette valmistada töötavaid eksploitide versioone Intel ja Apple M1 protsessorite süsteemide jaoks, mis võimaldab korraldada mälu lugemist kiirusel 500 baiti sekundis ja 96% täpsusega. Eeldatakse, et meetod sobib ka AMD protsessoritele, kuid täielikult toimiva eksploidiga valmis ei saadud.
Rünnak on rakendatav kõigile Chromiumi mootoril põhinevatele brauseritele, sealhulgas Google Chrome, Microsoft Edge ja Brave. Uurijad usuvad ka, et meetodit saab kohandada töötamiseks Firefoxiga, kuid kuna Firefoxi mootor erineb tugevalt Chrome'ist, on selle sarnase eksploidiga loomise töö jäetud tulevikku.
Veebibrauseri kaudu toimuvate spekulatiivsete juhiste täitmise rünnakute kaitsmiseks on Chromes rakendatud aadressiruumi segmentimist — sandbox-isolatsioon lubab JavaScripti töötada ainult 32-bitiste näidikutega ja jagab käsitlejate mälu mitteühtlastesse 4 GB hunnikutesse (heap). Küsimiseks, kuidas pääseda juurde kogu protsessi aadressiruumi ja mööduda 32-bitise piirangust, on teadlased kasutanud Type Confusion'i tehnikat, mis sunnib JavaScripti mootori töötlema objekti valesti määratud tüübis, andes võimaluse luua 64-bitine näidik kahe 32-bitise väärtuse kombinatsiooni alusel.
Rünnaku olemus seisneb selles, et JavaScript-mootori töötlemisel luuakse tingimused, mis viivad spekulatiivse täitmise korralduste juurde, mis ligipääseb massiivile. Objekt valitakse selliselt, et ründajate kontrollitavad väljad asuvad 64-bitise näitajaga alal. Kuna kahjulik objekti tüüp ei vasta töödeldava massiivi tüübile, blokeerib Chrome'i koodi deoptimeerimise mehhanism tavaliselt sellised toimingud, mis on seotud massiivide ligipääsuga. Selle probleemi lahendamiseks viiakse Type Confusion rünnaku kood tingimuslikku plokki „if”, mis ei aktiveeru normaalses olukorras, kuid täidetakse spekulatiivses režiimis, kui protsessor ennustab vale suunamist.
Seega protsessor spekulatiivselt pöördub loodud 64-bitise osutaja poole ja tagastab oleku pärast ebaõnnestunud prognoosi määramist, kuid täitmisjäljed jäävad üldsesse vahemälu ja neid saab taastada vahemälu sisu määramise meetodite abil kolmandate osapoolte kanalite kaudu, mis analüüsivad juurdepääsuaja muutust vahemälus ja mittevahemälus olevate andmete vahel. Vahemälu sisu analüüsimiseks olemasoleva JavaScripti ajaanduri täpsuse puudulikkuse tingimustes kasutatakse Google'i pakutud meetodit, mis petab protsessorites rakendatavat Tree-PLRU vahemälu andmete välja tõrjumise strateegiat ja võimaldab tsüklite arvu suurendamise kaudu oluliselt suurendada aega olemasoleva ja puuduva väärtuse puhul vahemälus.
Allikas: opennet.ru
