Uus tehnika Chrome'i Spectre haavatavuste ärakasutamiseks

Rühm Ameerika, Austraalia ja Iisraeli ülikoolide teadlasi on pakkunud välja uue külgkanalite rünnakutehnika, et kasutada ära Chromiumi mootoril põhinevate brauserite Spectre-klassi haavatavused. Rünnak koodnimega Spook.js võimaldab JavaScripti koodi käivitades saidi isolatsioonimehhanismist mööda minna ja lugeda kogu käimasoleva protsessi aadressiruumi sisu, s.t. pääseda juurde muudel vahekaartidel töötavate, kuid samas protsessis töödeldud lehtede andmetele.

Kuna Chrome käitab erinevaid saite erinevates protsessides, on praktiliste rünnakute sooritamise võimalus piiratud teenustega, mis võimaldavad erinevatel kasutajatel oma lehti hostida. Meetod võimaldab lehelt, kuhu ründajal on võimalus oma JavaScripti kood manustada, tuvastada teiste samalt saidilt kasutaja poolt avatud lehtede olemasolu ja eraldada neilt konfidentsiaalset teavet, näiteks asendatud mandaadid või pangarekvisiidid. veebivormide väljade automaatse täitmise süsteemi abil. Demonstratsioonina näidatakse, kuidas saate Tumblri teenuses rünnata kellegi teise ajaveebi, kui selle omanik avab teisel vahekaardil samas teenuses hostitud ründajate ajaveebi.

Teine võimalus meetodi kasutamiseks on rünnak brauseri lisandmoodulite vastu, mis võimaldab ründaja juhitud lisandmooduli installimisel teistest lisandmoodulitest andmeid eraldada. Näitena näitame, kuidas pahatahtliku lisandmooduli installimisega saate LastPassi paroolihaldurist konfidentsiaalset teavet eraldada.

Teadlased on avaldanud ärakasutamise prototüübi, mis töötab Chrome 89-s süsteemides, millel on CPUIntel i7-6700K ja i7-7600U. Exploiti loomisel kasutati Spectre-klassi rünnakute läbiviimiseks varem Google'i avaldatud JavaScripti koodi prototüüpe. Märgitakse, et teadlased suutsid Inteli ja Apple M1 protsessoritel põhinevate süsteemide jaoks ette valmistada tööeksploite, mis võimaldavad korraldada mälu lugemist kiirusega 500 baiti sekundis ja 96% täpsusega. Eeldatakse, et meetod on rakendatav ka AMD protsessoritele, kuid täielikult funktsionaalset exploiti ei olnud võimalik ette valmistada.

Rünnak on rakendatav kõigi Chromiumi mootoril põhinevate brauserite jaoks, sealhulgas Google Chrome, Microsoft Edge ja Brave. Teadlased usuvad ka, et meetodit saab kohandada töötama Firefoxiga, kuid kuna Firefoxi mootor erineb Chrome'ist oluliselt, siis töö sellise ärakasutamise kallal jääb tulevikuks.

Käskude spekulatiivse täitmisega seotud brauseripõhiste rünnakute eest kaitsmiseks rakendab Chrome aadressiruumi segmenteerimist – liivakasti isoleerimine võimaldab JavaScriptil töötada ainult 32-bitiste osutitega ja jagab töötlejate mälu 4 GB hunnikutes. Juurdepääsu võimaldamiseks kogu protsessi aadressiruumile ja 32-bitisest piirangust mööda hiilimiseks kasutasid teadlased tehnikat nimega Type Confusion, mis sunnib JavaScripti mootorit töötlema vale tüüpi objekti, mis võimaldab moodustada 64-bitise. kursor põhineb kahe 32-bitise väärtuse kombinatsioonil.

Rünnaku olemus seisneb selles, et spetsiaalselt loodud pahatahtliku objekti töötlemisel JavaScripti mootoris luuakse tingimused, mis viivad massiivile ligipääsevate juhiste spekulatiivse täitmiseni. Objekt valitakse nii, et ründaja juhitavad väljad paigutatakse 64-bitise kursori kasutusalasse. Kuna pahatahtliku objekti tüüp ei ühti töödeldava massiivi tüübiga, blokeeritakse sellised toimingud Chrome'is tavatingimustes massiividele juurdepääsuks kasutatava koodi deoptimeerimise mehhanismiga. Selle probleemi lahendamiseks paigutatakse tüübisegaduse rünnaku kood tingimuslikku "if" plokki, mida tavatingimustes ei aktiveerita, kuid mis käivitatakse spekulatiivses režiimis, kui protsessor ennustab edasist hargnemist valesti.

Selle tulemusena pääseb protsessor spekulatiivselt juurde genereeritud 64-bitisele kursorile ja keerab oleku tagasi pärast ebaõnnestunud ennustuse tuvastamist, kuid täitmise jäljed jäävad jagatud vahemällu ja neid saab taastada külgkanali vahemälu tuvastamise meetodite abil, mis analüüsivad muutusi juurdepääsuajad vahemällu salvestatud ja vahemällu salvestamata andmetele. Vahemälu sisu analüüsimiseks JavaScriptis saadaoleva taimeri ebapiisava täpsuse korral kasutatakse Google'i pakutud meetodit, mis petab protsessorites kasutatava Tree-PLRU vahemälu väljatõstmise strateegiat ja võimaldab tsüklite arvu suurendamisega suurendab oluliselt ajavahet, kui väärtus on vahemälus olemas ja puudub. .

Allikas: opennet.ru

Lisa kommentaar