AMD procesoru spekulatīvās izpildes mehānisma ievainojamība

Grsecurity projekts ir publicējis detalizētu informāciju un demonstrāciju par uzbrukuma metodi jaunai ievainojamībai (CVE-2021-26341) AMD procesoros, kas saistīti ar instrukciju spekulatīvu izpildi pēc beznosacījumu pārsūtīšanas operācijām. Ja uzbrukums ir veiksmīgs, ievainojamība ļauj noteikt patvaļīgu atmiņas apgabalu saturu. Piemēram, pētnieki ir sagatavojuši izlietojumu, kas ļauj noteikt adreses izkārtojumu un apiet KASLR (kodola atmiņas nejaušināšanas) aizsardzības mehānismu, izpildot nepievilcīgu kodu ePBF kodola apakšsistēmā. Nevar izslēgt citus uzbrukumu scenārijus, kas var izraisīt kodola atmiņas satura noplūdi.

Ievainojamība ļauj radīt apstākļus, kādos procesors preventīvās izpildes laikā spekulatīvi apstrādā instrukciju uzreiz pēc lēciena instrukcijas atmiņā (SLS, Straight Line Speculation). Turklāt šāda optimizācija darbojas ne tikai nosacījuma lēciena operatoriem, bet arī instrukcijām, kas nozīmē tiešu beznosacījuma lēcienu, piemēram, JMP, RET un CALL. Sekojot beznosacījuma lēciena instrukcijām, var ievietot patvaļīgus datus, kas nav paredzēti izpildei. Pēc tam, kad ir noteikts, ka atzars neietver nākamās instrukcijas izpildi, procesors vienkārši atgriež stāvokli un ignorē spekulatīvo izpildi, bet norādījumu izpildes pēdas paliek koplietotajā kešatmiņā un ir pieejamas analīzei, izmantojot sānu kanālu izguves metodes.

Tāpat kā Spectre-v1 ievainojamības izmantošanas gadījumā, uzbrukumam kodolā ir nepieciešamas noteiktas instrukciju secības (sīkrīki), kas noved pie spekulatīvas izpildes. Ievainojamības bloķēšana šajā gadījumā ir saistīta ar šādu sīkrīku identificēšanu kodā un papildu instrukciju pievienošanu tiem, kas bloķē spekulatīvu izpildi. Spekulatīvas izpildes nosacījumus var radīt arī nepievilcīgas programmas, kas darbojas eBPF virtuālajā mašīnā. Lai bloķētu iespēju konstruēt sīkrīkus, izmantojot eBPF, ieteicams sistēmā atspējot nepievilcīgu piekļuvi eBPF (“sysctl -w kernel.unprivileged_bpf_disabled=1”).

Ievainojamība skar procesorus, kuru pamatā ir Zen1 un Zen2 mikroarhitektūra, tostarp pirmās un otrās paaudzes AMD EPYC un AMD Ryzen Threadripper procesori, kā arī AMD Ryzen 2000/3000/4000/5000, AMD Athlon, AMD Athlon X, AMD Ryzen Threadripper PRO un APU sērijas procesori A. Lai bloķētu spekulatīvu instrukciju izpildi, pēc filiāļu operācijām (RET, JMP, CALL) ieteicams izsaukt INT3 vai LFENCE instrukcijas.

Avots: opennet.ru

Pievieno komentāru