Retbleed ir jauns uzbrukums Intel un AMD CPU spekulatīvajam izpildes mehānismam

Pētnieku grupa no ETH Cīrihes ir identificējusi jaunu uzbrukumu netiešo lēcienu spekulatīvas izpildes mehānismam CPU, kas ļauj iegūt informāciju no kodola atmiņas vai organizēt uzbrukumu resursdatora sistēmai no virtuālajām mašīnām. Ievainojamības tika nosauktas ar koda nosaukumu Retbleed (CVE-2022-29900, CVE-2022-29901), un tās pēc būtības ir līdzīgas Spectre-v2 uzbrukumiem. Atšķirība ir saistīta ar patvaļīga koda spekulatīvas izpildes organizēšanu, apstrādājot “ret” (return) instrukciju, kas izgūst adresi, lai pārietu no steka, nevis netieši lec, izmantojot “jmp” instrukciju, ielādējot adresi no atmiņas. vai CPU reģistrs.

Uzbrucējs var radīt apstākļus nepareizai lēciena prognozēšanai un organizēt mērķtiecīgu spekulatīvu lēcienu uz koda bloku, ko neparedz programmas izpildes loģika. Galu galā procesors noteiks, ka filiāles prognoze nebija pamatota, un atcels operāciju sākotnējā stāvoklī, bet spekulatīvās izpildes laikā apstrādātie dati nogulsnēs kešatmiņā un mikroarhitektūras buferos. Ja kļūdaini izpildīts bloks veic piekļuvi atmiņai, tad tā spekulatīvā izpilde novedīs pie vispārējā kešatmiņas un datu nolasīšanas no atmiņas.

Lai noteiktu datus, kas palikuši kešatmiņā pēc spekulatīvas operāciju izpildes, uzbrucējs var izmantot metodes atlikušo datu noteikšanai, izmantojot trešo pušu kanālus, piemēram, analizēt izmaiņas piekļuves laikā kešatmiņā saglabātajiem un neglabātajiem datiem. Mērķtiecīgai informācijas iegūšanai no apgabaliem citā privilēģiju līmenī (piemēram, no kodola atmiņas) tiek izmantoti "sīkrīki" - kodolā esošās komandu secības, kas piemērotas spekulatīvai datu nolasīšanai no atmiņas atkarībā no ārējiem apstākļiem, kas var tikt ietekmētam no uzbrucēja.

Lai aizsargātu pret klasiskajiem Spectre klases uzbrukumiem, kuros tiek izmantotas nosacītas un netiešas zaru instrukcijas, lielākā daļa operētājsistēmu izmanto “retpoline” metodi, kuras pamatā ir netiešo zaru operāciju aizstāšana ar instrukciju “ret”, kam ir atsevišķs steka stāvokļa prognozēšanas bloks. izmanto procesoros, neizmanto zaru prognozēšanas bloku. Retpolīna ieviešanas laikā 2018. gadā tika uzskatīts, ka Spectre līdzīgas adrešu manipulācijas nebija praktiskas spekulatīvai lēkšanai, izmantojot "ret" instrukciju.

Pētnieki, kuri izstrādāja Retbleed uzbrukuma metodi, demonstrēja iespēju izveidot mikroarhitektūras apstākļus spekulatīvas pārejas uzsākšanai, izmantojot “ret” instrukciju, un publicēja gatavu rīku komplektu, lai identificētu instrukciju secības (sīkrīkus), kas ir piemērotas Linux kodola ievainojamības izmantošanai. kurā parādās šādi apstākļi.

Pētījuma gaitā tika sagatavots darba rīks, kas sistēmās ar Intel centrālajiem procesoriem ļauj no nepievilcīga procesa lietotāja telpā iegūt patvaļīgus datus no kodola atmiņas ar ātrumu 219 baiti sekundē un 98% precizitāti. AMD procesoros izmantošanas efektivitāte ir daudz augstāka - noplūdes ātrums ir 3.9 KB sekundē. Kā praktisks piemērs ir parādīts, kā izmantot piedāvāto izmantošanu, lai noteiktu /etc/shadow faila saturu. Sistēmās ar Intel centrālajiem procesoriem uzbrukums saknes paroles jaucējkoda noteikšanai tika veikts 28 minūtēs, bet sistēmās ar AMD CPU - 6 minūtēs.

Uzbrukums tika apstiprināts 6–8 Intel procesoru paaudzēm, kas tika izlaisti pirms 3. gada 2019. ceturkšņa (tostarp Skylake), un AMD procesoriem, kuru pamatā ir Zen 1, Zen 1+ un Zen 2 mikroarhitektūras un kas tika izlaisti pirms 2021. gada 3. ceturkšņa. Jaunākos procesoru modeļos, piemēram, AMD ZenXNUMX un Intel Alder Lake, kā arī ARM procesoros problēmu bloķē esošie aizsardzības mehānismi. Piemēram, IBRS (Indirect Branch Restricted Speculation) norādījumu izmantošana palīdz aizsargāt pret uzbrukumu.

Linux kodolam un Xen hipervizoram ir sagatavots izmaiņu kopums, kas programmatiski bloķē problēmu vecākos CPU. Piedāvātais Linux kodola ielāps maina 68 failus, pievieno 1783 rindiņas un noņem 387 rindiņas. Diemžēl aizsardzība rada ievērojamas pieskaitāmās izmaksas - tekstos, kas veikti ar AMD un Intel procesoriem, veiktspējas pasliktināšanās tiek lēsta no 14% līdz 39%. Vēlams izmantot aizsardzību, kas balstīta uz IBRS instrukcijām, kas ir pieejamas jaunās paaudzes Intel centrālajos procesoros un tiek atbalstītas kopš Linux 4.19 kodola.

Intel procesoros spekulatīvas netiešās atzaras adreses aizstāšana tiek veikta, pateicoties funkcijai, kas rodas, ja atgriešanas steka buferī rodas nepietiekama plūsma. Kad rodas šādi apstākļi, ret instrukcija sāk piemērot adreses atlases loģiku, kas ir līdzīga tai, ko izmanto tradicionālajos netiešajos lēcienos. Linux kodolā ir atrastas vairāk nekā tūkstotis vietu, kas rada apstākļus šādas atpakaļplūsmas uzsākšanai un ir pieejamas, izmantojot sistēmas izsaukumus.

AMD procesoros “ret” instrukcijas spekulatīvā izpilde tiek veikta bez atsauces uz steka specifisku buferi (Return Address Stack), un zaru prognozēšanas bloks “ret” instrukciju uzskata nevis par kontroles atgriešanu, bet gan kā. netiešo atzaru, un attiecīgi izmanto datus prognozēšanai, prognozējot netiešās pārejas. Šādos apstākļos var izmantot praktiski jebkuru "ret" darbību, kas ir sasniedzama, izmantojot sistēmas zvanu.

Turklāt AMD centrālajiem procesoriem ir arī cita problēma (CVE-2022-23825, Branch Type Confusion), kas saistīta ar fiktīvu zaru ieviešanu - nosacījumi zaru prognozēšanai var rasties pat bez nepieciešamajām zaru instrukcijām, kas ļauj ietekmēt zaru prognozēšanas buferi bez instrukcija "ret". Šī funkcija ievērojami apgrūtina aizsardzības ieviešanu un prasa aktīvāku zaru prognozēšanas bufera notīrīšanu. Paredzams, ka, pievienojot kodolam pilnīgu aizsardzību, pieskaitāmās izmaksas palielināsies par 209%.

Avots: opennet.ru

Pievieno komentāru