Vulnerabilități în eBPF care permit ocolirea protecției împotriva atacurilor Spectre 4

Au fost identificate două vulnerabilități în nucleul Linux care permit utilizarea subsistemului eBPF pentru a ocoli protecția împotriva atacului Spectre v4 (SSB, Speculative Store Bypass). Folosind un program BPF neprivilegiat, un atacator poate crea condiții pentru executarea speculativă a anumitor operațiuni și poate determina conținutul unor zone arbitrare ale memoriei kernelului. Deținătorii subsistemelor eBPF din nucleu au primit acces la un prototip de exploit care demonstrează capacitatea de a efectua atacuri în practică. Problemele au fost rezolvate sub formă de patch-uri (1, 2), care vor fi incluse în următoarea actualizare a nucleului Linux. Actualizările din kiturile de distribuție nu au fost încă create (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

Metoda de atac Spectre 4 se bazează pe restaurarea datelor stocate în memoria cache a procesorului după eliminarea rezultatului executării speculative a operațiunilor atunci când procesează operațiuni alternative de scriere și citire folosind adresare indirectă. Atunci când o operație de citire urmează unei operațiuni de scriere (de exemplu, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), decalajul adresei de citire poate fi deja cunoscut datorită operațiunilor similare efectuate (operațiile de citire sunt efectuate mult mai frecvent și citirile pot fi efectuate din cache), iar procesorul poate efectua în mod speculativ citiri înainte de scrieri fără a aștepta ca offset-ul indirect al scrierii să fie calculat.

Dacă, după calcularea offset-ului, este detectată o intersecție a zonelor de memorie pentru scriere și citire, procesorul va elimina pur și simplu rezultatul citit deja obținut în mod speculativ și va repeta această operație. Această caracteristică permite unei instrucțiuni de citire să acceseze o valoare veche la o anumită adresă în timp ce operațiunea de stocare nu este încă finalizată. După eliminarea unei operațiuni speculative nereușite, urme ale execuției acesteia rămân în cache, după care una dintre metodele de determinare a conținutului cache-ului poate fi folosită pentru a o prelua pe baza unei analize a modificărilor timpului de acces la datele din cache și necache.

Prima vulnerabilitate (CVE-2021-35477) este cauzată de o defecțiune a mecanismului de verificare a programului BPF. Pentru a proteja împotriva unui atac Spectre 4, verificatorul adaugă o instrucțiune suplimentară după stocările potențial problematice în memorie care stochează o valoare nulă pentru a înlocui urmele operației anterioare. Operația de scriere nulă era de așteptat să fie foarte rapidă și să blocheze execuția speculativă, deoarece depinde doar de un pointer către cadrul stivei BPF. Dar, de fapt, s-a dovedit a fi posibil să se creeze condiții în care o instrucțiune care duce la execuție speculativă să reușească să fie executată înainte de operația de stocare preventivă.

A doua vulnerabilitate (CVE-2021-3455) se datorează faptului că atunci când verificatorul BPF identifică operațiuni de salvare a memoriei potențial periculoase, nu ia în considerare zonele neinițializate ale stivei BPF, prima operațiune de scriere la care nu este protejată. Această caracteristică duce la posibilitatea de a efectua o operație de citire speculativă, dependentă de o zonă de memorie neinițializată, înainte de a executa instrucțiunea de stocare. Noua memorie pentru stiva BPF este alocată fără a verifica conținutul deja din memoria alocată și există o modalitate înainte ca programul BPF să ruleze pentru a manipula conținutul regiunii de memorie care va fi apoi alocată pentru stiva BPF.

Sursa: opennet.ru

Adauga un comentariu