SWAPGS - o nouă vulnerabilitate în mecanismul de execuție speculativă a CPU

Cercetători de la Bitdefender dezvăluit noua vulnerabilitate (CVE-2019-1125) în mecanismul de execuție a instrucțiunilor speculative al CPU-urilor moderne, care poartă denumirea de SWAPGS, care corespunde denumirii instrucțiunii procesorului care provoacă problema. Vulnerabilitate Acesta permite permite unui atacator neprivilegiat să determine conținutul zonelor de memorie kernel sau care rulează mașini virtuale. Problemă confirmat în procesoare Intel (x86_64) și parțial afectează Procesoare AMD pentru care nu apare vectorul de atac principal. Metodele implementate anterior pentru a contracara vulnerabilitățile Spectre și Meltdown nu protejează împotriva atacului SWAPGS atunci când se utilizează procesoare Intel, dar au fost deja propuse remedieri pentru Linux, ChromeOS, Android și Windows.

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 eliminat prin schimbarea logicii de apelare a instrucțiunii SWAPGS (blocarea execuției speculative), similar cu corectarea altor vulnerabilități din clasa Spectre v1. Protecția adăugată este de așteptat să aibă un impact minim asupra performanței sarcinilor de lucru tipice. Latența are loc în timpul fazei de comutare între spațiul utilizator și cel al nucleului, ceea ce poate duce la performanțe slabe atunci când, de exemplu, există apeluri puternice de sistem din aplicație sau generarea frecventă de NMI-uri și întreruperi.

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 plasture pentru nucleul Linux, care este deja inclus în versiuni 4.19.65, 5.2.7, 4.14.137, 4.9.188 și 4.4.188. Actualizările pentru distribuțiile Linux nu au fost încă lansate (Debian, RHEL, Fedora, Arch Linux, SUSE/openSUSE, Ubuntu). Pe Windows, problema a fost rezolvată în liniște Actualizare iulie. Compania Google pregătit remediere pentru kernel-ul 4.19 livrat cu ChromeOS și Android.

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 este suficient metodele existente de protecție împotriva Spectre v1.

Sursa: opennet.ru

Adauga un comentariu