AMD procesorių spekuliacinio vykdymo mechanizmo pažeidžiamumas

Grsecurity projektas paskelbė išsamią ir demonstruojamą atakos metodą, skirtą naujam pažeidžiamumui (CVE-2021-26341) AMD procesoriuose, susijusiuose su spekuliatyviu instrukcijų vykdymu po besąlyginių operacijų. Jei ataka sėkminga, pažeidžiamumas leidžia nustatyti savavališkų atminties sričių turinį. Pavyzdžiui, mokslininkai parengė išnaudojimą, leidžiantį nustatyti adreso išdėstymą ir apeiti KASLR (branduolių atminties atsitiktinės atrankos) apsaugos mechanizmą, vykdydami neprivilegijuotą kodą ePBF branduolio posistemyje. Negalima atmesti kitų atakų scenarijų, dėl kurių gali nutekėti branduolio atminties turinys.

Pažeidžiamumas leidžia sukurti sąlygas, kurioms esant procesorius prevencinio vykdymo metu spekuliatyviai apdoroja komandą iškart po šuolio instrukcijos atmintyje (SLS, Straight Line Speculation). Be to, toks optimizavimas veikia ne tik sąlyginio šuolio operatoriams, bet ir instrukcijoms, kurios reiškia tiesioginį besąlyginį šuolį, pvz., JMP, RET ir CALL. Vadovaujantis besąlyginėmis peršokimo instrukcijomis, gali būti pateikiami savavališki duomenys, kurie nėra skirti vykdyti. Nustačius, kad šaka neapima kitos komandos vykdymo, procesorius tiesiog atšaukia būseną ir ignoruoja spekuliacinį vykdymą, tačiau komandų vykdymo pėdsakai lieka bendroje talpykloje ir yra prieinami analizei naudojant šoninio kanalo gavimo metodus.

Kaip ir naudojant Spectre-v1 pažeidžiamumą, ataka reikalauja, kad branduolyje būtų tam tikros instrukcijų sekos (programėlės), kurios veda prie spekuliacinio vykdymo. Šiuo atveju pažeidžiamumo blokavimas susijęs su tokių programėlių identifikavimu kode ir papildomų instrukcijų pridėjimu prie jų, blokuojančių spekuliacinį vykdymą. Sąlygas spekuliaciniam vykdymui taip pat galima sukurti naudojant neprivilegijuotas programas, veikiančias eBPF virtualioje mašinoje. Norint blokuoti galimybę kurti programėles naudojant eBPF, rekomenduojama sistemoje išjungti neprivilegijuotą prieigą prie eBPF („sysctl -w kernel.unprivileged_bpf_disabled=1“).

Pažeidžiamumas paveikia procesorius, pagrįstus Zen1 ir Zen2 mikroarchitektūra, įskaitant pirmosios ir antrosios kartos AMD EPYC ir AMD Ryzen Threadripper procesorius, taip pat AMD Ryzen 2000/3000/4000/5000, AMD Athlon, AMD Athlon X, AMD Ryzen Threadripper PRO ir APU serijos procesoriai A. Norint blokuoti spekuliacinį instrukcijų vykdymą, po šakinių operacijų (RET, JMP, CALL) rekomenduojama iškviesti INT3 arba LFENCE instrukcijas.

Šaltinis: opennet.ru

Добавить комментарий