AMD procesoros, kuru pamatā ir Zen+ un Zen 2 mikroarhitektūras, ir atklāta Meltdown klases ievainojamība

Drēzdenes Tehniskās universitātes pētnieku grupa ir konstatējusi ievainojamību (CVE-2020-12965) AMD procesoros, kuru pamatā ir Zen+ un Zen 2 mikroarhitektūras, kas pieļauj Meltdown klases uzbrukumu. Sākotnēji tika pieņemts, ka AMD Zen+ un Zen 2 procesori nav jutīgi pret Meltdown ievainojamību, taču pētnieki atklāja funkciju, kas, izmantojot nekanoniskas virtuālās adreses, noved pie spekulatīvas piekļuves aizsargātajām atmiņas zonām.

AMD64 arhitektūra izmanto tikai pirmos 48 virtuālās adreses bitus un ignorē atlikušos 16 bitus. Ir norādīts, ka bitiem no 48 līdz 63 vienmēr ir jākopē 47. bita vērtība (zīmes bita paplašinājums). Ja šis nosacījums tiek pārkāpts un tiek mēģināts piekļūt adresei ar patvaļīgām augšējo bitu vērtībām, procesors ģenerē izņēmumu. Atkārtoti aizpildot augšējos bitus, pieejamā adrešu telpa tiek sadalīta divos blokos - apakšējā (no 0 līdz 00007FFFFFFFFFFFFFF), kurā augšējie biti ir iestatīti uz 800000000000, un augšējā (no FFFF1 līdz FFFFFFFFFFFFFFFFFF), kurā visi augšējie biti ir iestatīti uz XNUMX.

Adreses, kas ietilpst norādītajos blokos, sauc par kanoniskām, un nepareizas adreses ar patvaļīgu augšējo bitu saturu sauc par nekanoniskām. Apakšējais kanonisko adrešu diapazons parasti tiek piešķirts procesa datiem, bet augšējais diapazons tiek izmantots kodola datiem (piekļuve šīm adresēm no lietotāja vietas tiek bloķēta privilēģiju atdalīšanas līmenī).

Klasiskā Meltdown ievainojamība ir balstīta uz to, ka spekulatīvas instrukciju izpildes laikā procesors var piekļūt privātam datu apgabalam un pēc tam izmest rezultātu, jo iestatītās privilēģijas aizliedz šādu piekļuvi lietotāja procesam. Programmā spekulatīvi izpildītais bloks ir atdalīts no galvenā koda ar nosacījuma atzaru, kas reālos apstākļos vienmēr tiek aktivizēts, bet sakarā ar to, ka nosacījuma priekšraksts izmanto aprēķinātu vērtību, kuru procesors nezina iepriekšējas izpildes laikā. kods, visas filiāles opcijas tiek spekulatīvi izpildītas.

Tā kā spekulatīvi izpildītās operācijas izmanto to pašu kešatmiņu, ko parasti izpilda instrukcijas, spekulatīvās izpildes laikā ir iespējams iestatīt marķierus kešatmiņā, kas atspoguļo atsevišķu bitu saturu privātajā atmiņas apgabalā un pēc tam parasti izpildītā kodā, lai noteiktu to vērtību, izmantojot laiku. analīzes piekļuve kešatmiņā saglabātajiem un neglabātajiem datiem.

Jaunās ievainojamības iezīme, kas ietekmē AMD Zen+ un Zen 2 procesorus, ir tāda, ka CPU ļauj veikt spekulatīvas lasīšanas un rakstīšanas darbības, kas piekļūst atmiņai, izmantojot nederīgas nekanoniskas adreses, vienkārši ignorējot augšējos 16 bitus. Tādējādi spekulatīvas koda izpildes laikā procesors vienmēr izmanto tikai zemākos 48 bitus, un adreses derīgums tiek pārbaudīts atsevišķi. Ja, tulkojot nekanonisku virtuālo adresi uz fizisko adresi asociatīvajā tulkošanas buferī (TLB), adreses kanoniskajā daļā tiek konstatēta atbilstība, tad spekulatīvā ielādes darbība atgriezīs vērtību, neņemot vērā saturu. no augšējiem 16 bitiem, kas ļauj apiet atmiņas koplietošanu starp pavedieniem. Pēc tam darbība tiks uzskatīta par nederīgu un izmesta, bet piekļuve atmiņai tiks pabeigta un dati nonāks kešatmiņā.

Eksperimenta laikā, izmantojot FLUSH+RELOAD kešatmiņas satura noteikšanas tehniku, pētnieki spēja organizēt kanālu slēpto datu pārraidei ar ātrumu 125 baiti sekundē. Papildus AMD mikroshēmām problēma skar arī visus Intel procesorus, kas ir jutīgi pret klasisko Meltdown ievainojamību. Tās pašas metodes, kas palīdz bloķēt Meltdown uzbrukumus, piemēram, izmantojot LFENCE instrukcijas, var tikt izmantotas, lai aizsargātu pret šo jauno uzbrukumu veidu. Piemēram, ja Intel procesors ietver aparatūras aizsardzību pret sabrukšanu vai sistēmā ir iespējota programmatūras aizsardzība, šādas konfigurācijas nav pakļautas jaunajam uzbrukuma variantam.

Vienlaikus pētnieki atzīmē, ka, salīdzinot ar Intel procesoriem, AMD procesoru arhitektūra ierobežo iespēju veikt reālus uzbrukumus, taču neizslēdz jaunas metodes izmantošanu kombinācijā ar citiem mikroarhitektūras uzbrukumiem to efektivitātes paaugstināšanai. Jo īpaši ierosinātais uzbrukums neļauj noteikt kodola un citu procesu atmiņas apgabalu saturu, bet ir ierobežots ar iespēju piekļūt citiem tās pašas programmas pavedieniem, kas darbojas tajā pašā virtuālajā atmiņas telpā.

Tā kā programmai bez ievainojamības ir iespēja piekļūt saviem pavedieniem, no praktiskā viedokļa šī metode ir interesanta, lai apietu smilškastes izolāciju un organizētu traucējumus citu pavedienu darbā programmās, kas ļauj izpildīt trešās puses kods, piemēram, tīmekļa pārlūkprogrammas un JIT dzinēji . Pētnieki pārbaudīja SpiderMonkey JavaScript dzinēja un Linux kodola ievainojamību pret uzbrukumiem, taču neatrada neaizsargātas kodu sekvences, kuras varētu izmantot uzbrukuma veikšanai. Papildus uzbrukumiem lietojumprogrammām šo metodi var izmantot arī, lai piespiestu nepieņemamas datu plūsmas starp procesora mikroarhitektūras elementiem, vienlaikus izmantojot citas mikroarhitektūras ievainojamības.

Avots: opennet.ru

Pievieno komentāru