SWAPGS – uus haavatavus protsessori spekulatiivses täitmismehhanismis

Bitdefenderi teadlased tuvastatud uus haavatavus (CVE-2019-1125) tänapäevaste protsessorite spekulatiivses käskude täitmise mehhanismis, mille nimi on SWAPGS, mis vastab probleemi põhjustava protsessori käsu nimele. Haavatavus võimaldab võimaldab privilegeerimata ründajal määrata tuumamälualade või töötavate virtuaalmasinate sisu. Probleem kinnitatud Inteli protsessorites (x86_64) ja osaliselt mõjutab AMD protsessorid, mille puhul peamist ründevektorit ei kuvata. Varem rakendatud meetodid Spectre ja Meltdowni haavatavuste vastu võitlemiseks ei kaitse SWAPGS-i rünnaku eest Inteli protsessorite kasutamisel, kuid Linuxi, ChromeOS-i, Androidi ja Windowsi jaoks on juba pakutud parandusi.

Haavatavus kuulub Spectre v1 klassi ja põhineb ideel taastada pärast käskude spekulatiivset täitmist allesjäänud andmed protsessori vahemälust. Jõudluse parandamiseks kasutavad kaasaegsete protsessorite haruennustusseadmed mõningate kõige tõenäolisemalt täidetavate käskude ennetavat täitmist, kuid ootamata kõigi nende täitmist määravate tegurite arvutamist (näiteks kui harutingimused või juurdepääsuparameetrid pole veel välja arvutatud). Kui ennustus ei leia kinnitust, siis protsessor loobub spekulatiivse täitmise tulemusest, kuid selle käigus töödeldud andmed jäävad protsessori vahemällu ja neid saab taastada kasutades külgkanalite kaudu vahemälu sisu määramise meetodeid, analüüsides juurdepääsu muutumist. aega vahemällu salvestatud ja vahemällu salvestamata andmetele.

Uue ründe eripäraks on SWAPGS-i käsu spekulatiivsel täitmisel tekkiva lekke kasutamine, mida kasutatakse operatsioonisüsteemides GS-i registri väärtuse asendamiseks, kui juhtimine läheb kasutajaruumist OS-i tuumale (GS-i). kasutajaruumis kasutatav väärtus asendatakse väärtusega, mida kasutatakse tuumas tehtavate toimingute ajal). Linuxi tuumas salvestab GS per_cpu osuti, mida kasutatakse kerneli andmetele juurde pääsemiseks, ja kasutajaruum salvestab viiteid TLS-ile (Thread Local Storage).

Vältimaks SWAPGS-käsu kahekordset väljakutsumist, kui kernelile uuesti kerneli ruumist juurde pääsete või GS-registri muutmist mittevajava koodi käivitamisel tehakse enne käsklust kontroll ja tingimuslik haru. Spekulatiivne täitmismootor jätkab ennetavalt koodi täitmist SWAPGS-käsuga, ootamata kontrolli tulemust, ja kui valitud haru ei kinnitata, tühistab tulemuse. Seega võib tekkida olukord, kui spekulatiivselt valitakse välja haru, mis ei hõlma SWAPGS-i täitmist, kuid spekulatiivse täitmise käigus muudetakse GS-i registri väärtust SWAPGS-käsuga ja seda kasutatakse sõltuvates mäluoperatsioonides, mis jõuavad CPU vahemällu.

Teadlased on välja pakkunud kaks rünnakustsenaariumi, mille jaoks on ette valmistatud prototüübid. Esimene stsenaarium põhineb olukorral, kus SWAPGS-käsku ei täideta spekulatiivselt, kuigi seda tegelikult kasutatakse täitmisel, ja teine ​​on vastupidine, kui SWAPGS-käsku täidetakse spekulatiivselt, kuigi tegelikult ei tohiks seda täita. Iga stsenaariumi puhul on kaks ärakasutamisvõimalust: ründaja saab määrata väärtuse tuumapiirkonna kindlal aadressil ja ründaja saab otsida kindlat väärtust kerneli juhuslikel aadressidel. Rünnaku läbiviimine võtab kaua aega ja ärakasutamine võib lekke lõpuleviimiseks kuluda mitu tundi.

Linuxi tuumas on probleem kõrvaldatud muutes SWAPGS-i käsu kutsumise loogikat (spekulatiivse täitmise blokeerimine), sarnaselt muude Spectre v1 klassi haavatavuste parandamisega. Lisakaitsel on eeldatavasti minimaalne mõju tüüpiliste töökoormuste toimimisele. Latentsus ilmneb kasutaja ja kerneli ruumi vahelise ümberlülitamise faasis, mis võib põhjustada kehva jõudluse, kui näiteks rakendusest tuleb palju süsteemikutseid või sageli genereeritakse NMI-sid ja katkestusi.

Parandus nõuab kerneli värskenduse installimist nii hostsüsteemi kui ka külaliskeskkondadesse, millele järgneb süsteemi taaskäivitamine. Kaitse keelamiseks Linuxis saab kasutada valikut "nospectre_v1", mis keelab ka meetmed SWAPGS-i haavatavuse blokeerimiseks. Parandus on saadaval kujul plaaster Linuxi kerneli jaoks, mis on juba väljalasetes kaasatud 4.19.65, 5.2.7, 4.14.137, 4.9.188 ja 4.4.188. Linuxi distributsioonide värskendusi pole veel välja antud (Debian, RHEL, Fedora, Arch Linux, SUSE/openSUSE, Ubuntu). Windowsis lahendati probleem vaikselt Juuli värskendus. Google'i ettevõte ette valmistatud parandus kerneli 4.19 jaoks, mis tarnitakse koos ChromeOS-iga ja Android.

Bitdefenderi teadlaste sõnul teavitati Intelit probleemist eelmise aasta augustis. Probleem otsustati lahendada programmiliselt, mille parandamise koordineeritud väljatöötamisse kaasati Microsofti, Google'i ja Linuxi tuuma arendajad. Vanemaid Inteli protsessoreid, Ivy Bridge'i eelseid protsesse, on palju keerulisem rünnata, kuna ärakasutamisel kasutatud WRGSBASE-juhiseid ei toetata. ARM-, POWER-, SPARC-, MIPS- ja RISC-V-süsteeme probleem ei mõjuta, kuna need ei toeta SWAPGS-i juhiseid.

Probleem puudutab peamiselt Inteli protsessorite omanikke -
AMD süsteemides suudeti reprodutseerida ainult teist rünnakustsenaariumit, mis piirdub GS-registri baasväärtuse spekulatiivse töötlemisega, mida saab kasutada juhuslike mälupiirkondade konkreetsete väärtuste otsimiseks. Selle ründevaliku blokeerimiseks piisavalt olemasolevad kaitsemeetodid Spectre v1 vastu.

Allikas: opennet.ru

Lisa kommentaar