O nouă tehnică pentru exploatarea vulnerabilităților Spectre în Chrome

Un grup de cercetători din universitățile americane, australiene și israeliene au propus o nouă tehnică de atac pe canal lateral pentru a exploata vulnerabilitățile clasei Spectre în browserele bazate pe motorul Chromium. Atacul, cu numele de cod Spook.js, vă permite să ocoliți mecanismul de izolare a site-ului rulând cod JavaScript și să citiți conținutul întregului spațiu de adrese al procesului curent, de exemplu. accesați datele din pagini care rulează în alte file, dar procesate în același proces.

Deoarece Chrome rulează site-uri diferite în procese diferite, capacitatea de a efectua atacuri practice este limitată la serviciile care permit utilizatorilor diferiți să-și găzduiască paginile. Metoda permite, dintr-o pagină în care atacatorul are posibilitatea de a-și încorpora codul JavaScript, să determine prezența altor pagini deschise de utilizator de pe același site și să extragă din acestea informații confidențiale, de exemplu, acreditări sau detalii bancare substituite prin sistemul de completare automată a câmpurilor în formularele web. Ca demonstrație, este arătat cum puteți ataca blogul altcuiva pe serviciul Tumblr dacă proprietarul său deschide un blog al atacatorilor găzduit pe același serviciu într-o altă filă.

O altă opțiune de utilizare a metodei este un atac asupra suplimentelor de browser, care permite, la instalarea unui add-on controlat de atacator, să extragă date din alte suplimente. Ca exemplu, arătăm cum, prin instalarea unui supliment rău intenționat, puteți extrage informații confidențiale din managerul de parole LastPass.

Cercetătorii au publicat un prototip al unui exploit care funcționează în Chrome 89 pe sisteme cu CPUIntel i7-6700K și i7-7600U. La crearea exploit-ului, prototipurile de cod JavaScript publicate anterior de Google au fost folosite pentru a efectua atacuri de clasă Spectre. Se observă că cercetătorii au reușit să pregătească exploit-uri de lucru pentru sisteme bazate pe procesoare Intel și Apple M1, care fac posibilă organizarea citirii memoriei la o viteză de 500 de octeți pe secundă și o precizie de 96%. Se presupune că metoda este aplicabilă și procesoarelor AMD, dar nu a fost posibilă pregătirea unui exploit complet funcțional.

Atacul este aplicabil oricăror browsere bazate pe motorul Chromium, inclusiv Google Chrome, Microsoft Edge și Brave. De asemenea, cercetătorii cred că metoda poate fi adaptată pentru a funcționa cu Firefox, dar din moment ce motorul Firefox este foarte diferit de Chrome, munca de creare a unui astfel de exploit este lăsată pentru viitor.

Pentru a proteja împotriva atacurilor bazate pe browser legate de execuția speculativă a instrucțiunilor, Chrome implementează segmentarea spațiului de adrese - izolarea sandbox permite JavaScript să funcționeze numai cu pointeri pe 32 de biți și partajează memoria handler-urilor în heap-uri disjunse de 4 GB. Pentru a oferi acces la întregul spațiu de adrese ale procesului și a ocoli limitarea de 32 de biți, cercetătorii au folosit o tehnică numită Type Confusion, care obligă motorul JavaScript să proceseze un obiect cu un tip incorect, ceea ce face posibilă formarea unui tip de 64 de biți. pointer bazat pe o combinație de două valori de 32 de biți.

Esența atacului este că atunci când procesează un obiect rău intenționat special conceput în motorul JavaScript, sunt create condiții care duc la execuția speculativă a instrucțiunilor care accesează matricea. Obiectul este selectat în așa fel încât câmpurile controlate de atacator să fie plasate în zona în care este utilizat pointerul pe 64 de biți. Deoarece tipul obiectului rău intenționat nu se potrivește cu tipul matricei care este procesată, în condiții normale astfel de acțiuni sunt blocate în Chrome printr-un mecanism de deoptimizare a codului utilizat pentru accesarea matricelor. Pentru a rezolva această problemă, codul pentru atacul Type Confusion este plasat într-un bloc condiționat „dacă”, care nu este activat în condiții normale, dar este executat în mod speculativ, dacă procesorul prezice incorect ramificarea ulterioară.

Ca rezultat, procesorul accesează în mod speculativ pointerul pe 64 de biți generat și derulează înapoi starea după ce a determinat o predicție eșuată, dar urmele execuției rămân în memoria cache partajată și pot fi restaurate utilizând metode de detectare a cache-ului pe canal lateral care analizează modificările în timpii de acces la datele din cache și necache. Pentru a analiza conținutul cache-ului în condiții de acuratețe insuficientă a temporizatorului disponibil în JavaScript, se utilizează o metodă propusă de Google, care înșală strategia de evacuare a cache-ului Tree-PLRU folosită la procesoare și permite, prin creșterea numărului de cicluri, să crește semnificativ diferența de timp când o valoare este prezentă și absentă în cache.

Sursa: opennet.ru

Adauga un comentariu