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

Cercetătorii de la compania Bitdefender au identificat o nouă vulnerabilitate (CVE-2019-1125) în mecanismul de execuție speculativă a instrucțiunilor procesorului modern, care a primit numele SWAPGS, corespunzător denumirii instrucțiunii de procesor care cauzează problema. Vulnerabilitatea permite permite unui atacator fără privilegii să determine conținutul zonelor de memorie ale nucleului sau al mașinilor virtuale active. Problema a fost confirmată în procesoarele Intel (x86_64) și parțial implică în procesoarele AMD, pentru care nu se manifestă vectorul principal de atac. Metodele anterioare de combatere a vulnerabilităților Spectre și Meltdown nu protejează împotriva atacului SWAPGS atunci când se folosesc procesoare Intel, dar pentru Linux, ChromeOS, Android și Windows deja au fost propuse remedii.

Vulnerabilitatea aparține clasei Spectre v1 și se bazează pe ideea de recuperare a datelor din cache-ul procesorului, care rămân după execuția speculativă a instrucțiunilor. Blocurile de predicție a salturilor din procesoarele moderne pentru a îmbunătăți performanța aplică execuția anticipată a unor instrucțiuni care cel mai probabil vor fi executate, fără a aștepta calcularea tuturor factorilor care determină execuția lor (de exemplu, când condițiile de salt sau parametrii de acces nu sunt încă calculați). Dacă prognoza nu se confirmă, procesorul renunță la rezultatul execuției speculative, dar datele procesate în timpul acesteia rămân în cache-ul procesorului și pot fi recuperate prin metode de determinare a conținutului cache-ului prin canale externe, analizând modificarea timpului de acces la datele cached și uncached.

Particularitatea noului atac este utilizarea scurgerii care apare în timpul execuției speculative a instrucțiunii SWAPGS, care este aplicată în sistemele de operare pentru a înlocui valoarea registrului GS la trecerea controlului din spațiul utilizatorului în nucleul sistemului de operare (valoarea GS utilizată în spațiul utilizatorului este înlocuită cu valoarea utilizată pentru operațiile în nucleu). În nucleul Linux, în GS este stocat un pointer per_cpu, utilizat pentru a accesa datele nucleului, iar în spațiul utilizatorului, pointerii către TLS (Thread Local Storage).

Pentru a evita apelul dublu al instrucțiunii SWAPGS la o nouă accesare a nucleului din spațiul kernel sau când se execută cod care nu necesită schimbarea registrului GS, se efectuează o verificare și o ramificare condiționată înainte de instrucțiune. Mecanismul de execuție speculativă trece anticipat la execuția codului cu instrucțiunea SWAPGS, fără a aștepta rezultatul verificării, iar dacă ramura selectată nu se confirmă, rezultatul este abandonat. Astfel, poate apărea o situație în care ramura speculativă este aleasă fără a prevedea execuția SWAPGS, dar, în timpul execuției speculative, valoarea registrului GS va fi modificată de instrucțiunea SWAPGS și utilizată în operațiuni dependente de memorie, care se acumulează în cache-ul CPU.

Cercetătorii au propus două scenarii de atac, pentru care au fost pregătite prototipuri de exploat. Primul scenariu se bazează pe situația în care instrucțiunea SWAPGS nu este executată speculativ, deși este utilizată în execuția reală, iar al doilea — invers, când instrucțiunea SWAPGS este executată speculativ, deși nu ar trebui. Pentru fiecare scenariu sunt prevăzute două variante de exploatare: atacatorul poate determina o valoare la o anumită adresă din spațiul kernel și atacatorul poate căuta o anumită valoare la adrese aleatorii în nucleu. Efectuarea atacului durează mult timp și, pentru a organiza o scurgere, poate fi necesară executarea exploatului timp de câteva ore.

Redați video

În nucleul Linux, problema remediată prin modificarea logicii de apel al instrucțiunii SWAPGS (blocarea execuției speculative), similar cu corectările altor vulnerabilități din clasa Spectre v1. Se presupune că protecția adăugată va avea un impact minim asupra performanței sarcinilor de lucru obișnuite. Întârzierea apare în etapa de comutare între spațiul utilizatorului și nucleu, ceea ce poate duce la o scădere a performanței, de exemplu, în cazul execuției intensive a apelurilor de sistem din aplicație sau generarea frecventă de NMI și întreruperi.

Core updating is required for both the main system and guest environments, followed by a system reboot. To disable protection in Linux, the option 'nospectre_v1' can be used, which also disables measures to block the SWAPGS vulnerability. The fix is available as patch for the Linux kernel, which is already included in the releases 4.19.65, 5.2.7, 4.14.137, 4.9.188, and 4.4.188. Updates for Linux distributions have not yet been released (Debian, RHEL, Fedora, Arch Linux, SUSE/openSUSE, Ubuntu). In Windows, the issue was resolved discreetly in the July update. Google pregătită provided the fix for kernel 4.19, delivered in ChromeOS and Android.

According to researchers from Bitdefender, Intel was informed about the issue as early as August last year. The problem was resolved programmatically, with developers from Microsoft, Google, and the Linux kernel working together to produce a fix. Older Intel processors, prior to Ivy Bridge, are significantly harder to attack due to the lack of support for the WRGSBASE instruction used in the exploit. ARM, POWER, SPARC, MIPS, and RISC-V systems are not affected by the issue, as they do not support the SWAPGS instruction.

The problem mainly threatens Intel processor owners—
on AMD systems, only the second attack scenario could be reproduced, limited to speculative processing of the base value of the GS register, which can be used to find certain values in random areas of memory. To block this attack variant, suficient existing methods of protection against Spectre v1 vulnerabilities.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster