SWAPGS – jauna CPU spekulatīvās izpildes mehānisma ievainojamība

Bitdefender pētnieki identificēts jauna ievainojamība (CVE-2019-1125) mūsdienu CPU spekulatīvajā instrukciju izpildes mehānismā, kas tiek nosaukts SWAPGS, kas atbilst tās procesora instrukcijas nosaukumam, kas rada problēmu. Neaizsargātība pieļauj ļauj nepievilinātam uzbrucējam noteikt kodola atmiņas apgabalu vai darbināmo virtuālo mašīnu saturu. Problēma apstiprināja Intel procesoros (x86_64) un daļēji ietekmē AMD procesori, kuriem galvenais uzbrukuma vektors neparādās. Iepriekš ieviestās metodes, lai novērstu Spectre un Meltdown ievainojamības, neaizsargā pret SWAPGS uzbrukumu, izmantojot Intel procesorus, taču jau ir ierosināti labojumi operētājsistēmām Linux, ChromeOS, Android un Windows.

Ievainojamība pieder Spectre v1 klasei, un tās pamatā ir ideja atjaunot datus no procesora kešatmiņas, kas palikuši pēc spekulatīvas instrukciju izpildes. Lai uzlabotu veiktspēju, mūsdienu CPU zaru prognozēšanas bloki izmanto dažu instrukciju, kuras visticamāk tiks izpildītas, iepriekšēju izpildi, bet negaidot visu to izpildi noteicošo faktoru aprēķinus (piemēram, ja atzaru nosacījumi vai piekļuves parametri nav vēl ir aprēķināts). Ja prognoze neapstiprinās, procesors atmet spekulatīvās izpildes rezultātu, bet tās laikā apstrādātie dati paliek procesora kešatmiņā un tos var atjaunot, izmantojot metodes kešatmiņas satura noteikšanai caur sānu kanāliem, analizējot piekļuves izmaiņas. laiks kešatmiņā saglabātajiem un neglabātajiem datiem.

Jaunā uzbrukuma īpatnība ir noplūdes izmantošana, kas notiek spekulatīvas SWAPGS instrukcijas izpildes laikā, kas tiek izmantota operētājsistēmās, lai aizstātu GS reģistra vērtību, kad kontrole pāriet no lietotāja telpas uz OS kodolu (GS lietotāja telpā izmantotā vērtība tiek aizstāta ar vērtību, kas tiek izmantota darbību laikā kodolā). Linux kodolā GS saglabā per_cpu rādītāju, ko izmanto, lai piekļūtu kodola datiem, un lietotāja vieta saglabā norādes uz TLS (Thread Local Storage).

Lai izvairītos no SWAPGS instrukcijas divreiz izsaukšanas, atkārtoti piekļūstot kodolam no kodola vietas vai izpildot kodu, kuram nav nepieciešama GS reģistra maiņa, pirms instrukcijas tiek veikta pārbaude un nosacījuma atzarojums. Spekulatīvais izpildes dzinējs proaktīvi turpina izpildīt kodu ar SWAPGS instrukciju, negaidot pārbaudes rezultātu, un, ja atlasītā filiāle netiek apstiprināta, rezultātu atmet. Tādējādi var rasties situācija, kad spekulatīvi tiek izvēlēts zars, kas neietver SWAPGS izpildi, bet spekulatīvās izpildes laikā GS reģistra vērtība tiks mainīta ar SWAPGS instrukciju un izmantota atkarīgās atmiņas operācijās, kas nonāk CPU kešatmiņā.

Pētnieki ir ierosinājuši divus uzbrukuma scenārijus, kuriem ir sagatavoti ekspluatācijas prototipi. Pirmais scenārijs ir balstīts uz situāciju, kad SWAPGS instrukcija netiek izpildīta spekulatīvi, lai gan tā faktiski tiek izmantota izpildē, bet otrais ir pretējs, kad SWAPGS instrukcija tiek izpildīta spekulatīvi, lai gan to faktiski nevajadzētu izpildīt. Katram scenārijam ir divas izmantošanas iespējas: uzbrucējs var noteikt vērtību noteiktā adresē kodola apgabalā, un uzbrucējs var meklēt noteiktu vērtību nejaušās kodola adresēs. Uzbrukuma veikšana aizņem ilgu laiku, un ekspluatācijai var būt nepieciešamas vairākas stundas, lai pabeigtu noplūdi.

Linux kodolā ir problēma likvidēta mainot SWAPGS instrukcijas izsaukšanas loģiku (bloķējot spekulatīvo izpildi), līdzīgi kā citu Spectre v1 klases ievainojamību labošanai. Paredzams, ka papildu aizsardzībai būs minimāla ietekme uz tipisko darba slodžu veiktspēju. Latentums rodas pārslēgšanās fāzē starp lietotāju un kodola telpu, kā rezultātā var pasliktināties veiktspēja, piemēram, ja, piemēram, no lietojumprogrammas tiek izsaukti intensīvi sistēmas izsaukumi vai bieži tiek ģenerēti NMI un pārtraukumi.

Lai veiktu labojumu, ir jāinstalē kodola atjauninājums gan resursdatora sistēmā, gan viesu vidē, kam seko sistēmas atsāknēšana. Lai atspējotu aizsardzību operētājsistēmā Linux, var izmantot opciju "nospectre_v1", kas arī atspējo pasākumus, lai bloķētu SWAPGS ievainojamību. Labojums ir pieejams kā plāksteris Linux kodolam, kas jau ir iekļauts laidienos 4.19.65, 5.2.7, 4.14.137, 4.9.188 un 4.4.188. Linux izplatīšanas atjauninājumi vēl nav izlaisti (Debian, RHEL, Fedora, Arch Linux, SUSE/openSUSE, Ubuntu). Operētājsistēmā Windows problēma tika klusi novērsta Jūlija atjauninājums. Google uzņēmums sagatavots labojums kodolam 4.19, kas piegādāts kopā ar ChromeOS un android.

Pēc Bitdefender pētnieku domām, Intel par problēmu tika informēts pagājušā gada augustā. Tika nolemts problēmu novērst programmatiski, un izstrādātāji no Microsoft, Google un Linux kodola tika iesaistīti saskaņotā labojuma izstrādē. Vecākiem Intel procesoriem, pirms Ivy Bridge, ir daudz grūtāk uzbrukt, jo netiek atbalstīta ekspluatācijā izmantotā WRGSBASE instrukcija. ARM, POWER, SPARC, MIPS un RISC-V sistēmas problēma neietekmē, jo tās neatbalsta SWAPGS instrukciju.

Problēma galvenokārt skar Intel procesoru īpašniekus -
AMD sistēmās varēja reproducēt tikai otro uzbrukuma scenāriju, kas aprobežojas ar GS reģistra bāzes vērtības spekulatīvu apstrādi, ko var izmantot, lai meklētu konkrētas vērtības nejaušās atmiņas apgabalos. Lai bloķētu šo uzbrukuma iespēju ir pietiekams esošās aizsardzības metodes pret Spectre v1.

Avots: opennet.ru

Pievieno komentāru