Un grup de cercetători de la Universitatea Tehnică din Graz (Austria), cunoscut anterior pentru dezvoltarea atacurilor MDS, NetSpectre, Throwhammer și ZombieLoad, a publicat o nouă metodă de atac (CVE-2021-3714) prin canale secundare asupra mecanismului de deduplicare a paginilor de memorie (Memory-Deduplication), care permite identificarea prezenței anumitor date în memorie, organizarea unei scurgeri de conținut pe byte sau determinarea aranjamentului memoriei pentru a ocoli protecția bazată pe randomizarea adreselor (ASLR). Noua metodă se diferențiază de variantele anterioare de atac asupra mecanismului de deduplicare prin faptul că atacul se desfășoară de pe un gazdă externă, utilizând ca criteriu variația timpului de răspuns la cererile trimise de atacator prin protocoalele HTTP/1 și HTTP/2. Capacitatea de a realiza atacul a fost demonstrată pentru servere bazate pe Linux și Windows.
Atacurile asupra mecanismului de deduplicare a memoriei folosesc ca canal pentru scurgerea de informații diferența de timp în procesarea operațiunii de scriere, în situațiile în care modificarea datelor duce la clonarea paginii de memorie deduplicată prin mecanismul Copy-On-Write (COW). În procesul de lucru, kernel-ul identifică paginile de memorie identice din procese diferite și le combină, afișând paginile de memorie identice într-o singură zonă de memorie fizică pentru a stoca doar o singură copie. Atunci când unul dintre procese încearcă să schimbe datele asociate paginilor deduplicante, apare o excepție (page fault) și se creează automat o copie separată a paginii de memorie, care este alocată procesului, prin mecanismul Copy-On-Write. Timpul suplimentar necesar pentru realizarea copiei poate fi un indiciu al modificării datelor intersectante cu alt proces.
Cercetătorii au arătat că întârzierile generate de funcționarea mecanismului COW pot fi detectate nu doar local, ci și prin analiza variației timpului de livrare a răspunsurilor prin rețea. Au fost propuse mai multe metode de determinare a conținutului memoriei de la un gazdă îndepărtată prin analiza timpului de execuție a cererilor prin protocoalele HTTP/1 și HTTP/2. Pentru a menține tiparele selectate, sunt utilizate aplicații web standard care păstrează informațiile primite în cereri în memorie.
Principiul general al atacului constă în umplerea server pagina de memorie cu date ce pot repeta conținutul deja existent pe server. Apoi, atacatorul așteaptă timpul necesar pentru ca nucleul să efectueze deduplicarea și combinarea paginii de memorie, după care face modificări în copia controlată a datelor și evaluează timpul de reacție pentru a determina succesul atacului.

În cadrul experimentelor efectuate, viteza maximă de scurgere a informațiilor a fost de 34.41 biți pe oră în timpul unui atac prin rețeaua globală și 302.16 biți pe oră în cadrul unui atac prin rețeaua locală, ceea ce este mai rapid decât alte metode de extragere a datelor prin canale externe (de exemplu, la atacul NetSpectre, viteza de transfer este de 7.5 biți pe oră).
Au fost propuse trei variante funcționale ale atacului. Prima variantă permite identificarea datelor din memorie servere web, utilizând Memcached. Atacul constă în încărcarea unor seturi specifice de date în stocarea Memcached, curățarea blocului deduplicat, rescrierea aceluiași element și crearea unei condiții pentru apariția copierei COW prin modificarea conținutului blocului. În cadrul experimentului cu Memcached, s-a reușit, în 166.51 secunde, să se determine versiunea libc instalată în sistemul care rulează într-o mașină virtuală.
Cea de-a doua variantă a permis să se afle conținutul înregistrărilor din SGBD MariaDB, folosind stocarea InnoDB, prin recrearea conținutului byte cu byte. Atacul se realizează prin trimiterea unor cereri special alterate, care conduc la neconformități de un byte în paginile de memorie și analiza timpului de reacție pentru a determina dacă presupunerea privind conținutul byte-ului a fost corectă. Viteza unei astfel de scurgeri este mică, de 1.5 biți pe oră în timpul atacurilor din rețeaua locală. Un avantaj al metodei este că poate fi utilizată pentru recuperarea conținutului necunoscut al memoriei.
A treia variantă a permis, în 4 minute, ocolirea completă a mecanismului de protecție KASLR și obținerea de informații despre offset-ul din memoria imaginii nucleului mașinii virtuale, în situația în care adresa offset-ului se află într-o pagină de memorie, iar alte date din aceasta nu sunt modificate. Atacul a fost efectuat de pe un host aflat la 14 salturi (hops) de sistemul atacat. Exemple de cod pentru realizarea atacurilor prezentate sunt promise a fi publicate pe GitHub.
Sursa: opennet.ro
