Cercetători de la Bitdefender
Vulnerabilitatea aparține clasei Spectre v1 și se bazează pe ideea restabilirii datelor din memoria cache a procesorului rămase după executarea speculativă a instrucțiunilor. Pentru a îmbunătăți performanța, unitățile de predicție a ramurilor ale CPU-urilor moderne folosesc execuția preventivă a unor instrucțiuni care sunt cel mai probabil să fie executate, dar fără a aștepta calculul tuturor factorilor care determină execuția lor (de exemplu, când condițiile de ramificație sau parametrii de acces nu au încă calculate). Dacă predicția nu este confirmată, procesorul renunță la rezultatul execuției speculative, dar datele procesate în timpul acesteia rămân în memoria cache a procesorului și pot fi restaurate folosind metode de determinare a conținutului cache-ului prin canale laterale, analizând modificarea accesului. timp pentru datele din cache și necache.
Particularitatea noului atac este utilizarea unei scurgeri care apare în timpul execuției speculative a instrucțiunii SWAPGS, care este utilizată în sistemele de operare pentru a înlocui valoarea registrului GS atunci când controlul trece din spațiul utilizatorului la nucleul OS (GS valoarea utilizată în spațiul utilizatorului este înlocuită cu valoarea utilizată în timpul operațiunilor din nucleu). În nucleul Linux, GS stochează un pointer per_cpu folosit pentru a accesa datele kernelului, iar spațiul utilizator stochează pointeri către TLS (Thread Local Storage).
Pentru a evita apelarea instrucțiunii SWAPGS de două ori atunci când accesați din nou nucleul din spațiul nucleului sau când executați cod care nu necesită o modificare a registrului GS, se efectuează o verificare și o ramură condiționată înaintea instrucțiunii. Motorul de execuție speculativă continuă în mod proactiv să execute cod cu instrucțiunea SWAPGS fără a aștepta rezultatul verificării și, dacă ramura selectată nu este confirmată, renunță la rezultat. Astfel, poate apărea o situație când o ramură care nu implică execuția SWAPGS este selectată în mod speculativ, dar în timpul execuției speculative valoarea registrului GS va fi modificată de instrucțiunea SWAPGS și utilizată în operațiunile dependente de memorie care ajung în memoria cache a CPU.
Cercetătorii au propus două scenarii de atac pentru care au fost pregătite prototipuri de exploatare. Primul scenariu se bazează pe situația în care instrucțiunea SWAPGS nu este executată speculativ, deși este folosită efectiv în execuție, iar al doilea este invers, când instrucțiunea SWAPGS este executată speculativ, deși nu ar trebui să fie executată efectiv. Pentru fiecare scenariu, există două opțiuni de exploatare: atacatorul poate determina valoarea la o anumită adresă din zona nucleului, iar atacatorul poate căuta o anumită valoare la adrese aleatoare din nucleu. Efectuarea unui atac durează mult și exploit-ul poate necesita câteva ore pentru a finaliza scurgerea.
Există o problemă în nucleul Linux
Remedierea necesită instalarea unei actualizări de kernel atât pe sistemul gazdă, cât și pe mediile oaspeților, urmată de o repornire a sistemului. Pentru a dezactiva protecția pe Linux, poate fi folosită opțiunea „nospectre_v1”, care dezactivează și măsurile de blocare a vulnerabilității SWAPGS. Remedierea este disponibilă ca
Potrivit cercetătorilor de la Bitdefender, Intel a fost informat despre problemă în august anul trecut. S-a decis să se rezolve problema în mod programatic, pentru care dezvoltatorii de la Microsoft, Google și kernel-ul Linux au fost implicați în dezvoltarea coordonată a unei remedieri. Procesoarele Intel mai vechi, pre-Ivy Bridge, sunt mult mai greu de atacat din cauza lipsei de suport pentru instrucțiunea WRGSBASE folosită în exploit. Sistemele ARM, POWER, SPARC, MIPS și RISC-V nu sunt afectate de problemă deoarece nu acceptă instrucțiunea SWAPGS.
Problema îi afectează în principal pe proprietarii de procesoare Intel -
Pe sistemele AMD, doar al doilea scenariu de atac a putut fi reprodus, care se limitează la procesarea speculativă a valorii de bază a registrului GS, care poate fi folosită pentru a căuta valori specifice în zonele de memorie aleatoare. Pentru a bloca această opțiune de atac
Sursa: opennet.ru