AMD protsessorite spekulatiivse täitmismehhanismi haavatavus

Grsecurity projekt on avaldanud AMD protsessorite uue haavatavuse (CVE-2021-26341) ründemeetodi üksikasjad ja demonstratsiooni, mis on seotud juhiste spekulatiivse täitmisega pärast tingimusteta edasisuunamisoperatsioone. Kui rünnak õnnestub, võimaldab haavatavus määrata suvaliste mälualade sisu. Näiteks on teadlased ette valmistanud ärakasutamise, mis võimaldab neil määrata aadresside paigutust ja mööda minna KASLR-i (kernel memory randomization) kaitsemehhanismist, käivitades ePBF tuuma alamsüsteemis privilegeerimata koodi. Välistada ei saa ka muid ründe stsenaariume, mis võivad viia tuumamälu sisu lekkeni.

Haavatavus võimaldab luua tingimused, mille korral protsessor ennetava täitmise ajal spekulatiivselt töötleb käsku vahetult pärast hüppekäsku mällu (SLS, Straight Line Speculation). Lisaks ei tööta selline optimeerimine mitte ainult tingimusliku hüppe operaatorite, vaid ka otsest tingimusteta hüpet eeldavate juhiste jaoks, nagu JMP, RET ja CALL. Järgides tingimusteta hüppejuhiseid, saab paigutada suvalisi andmeid, mis pole täitmiseks mõeldud. Pärast kindlaksmääramist, et haru ei hõlma järgmise käsu täitmist, keerab protsessor lihtsalt oleku tagasi ja ignoreerib spekulatiivset täitmist, kuid käsu täitmise jälg jääb jagatud vahemällu ja on analüüsimiseks saadaval külgkanalite otsingutehnikate abil.

Nagu Spectre-v1 haavatavuse ärakasutamise puhul, nõuab rünnak tuumas teatud käskude jadade (vidinate) olemasolu, mis viivad spekulatiivse täitmiseni. Haavatavuse blokeerimine taandub sel juhul selliste vidinate tuvastamisele koodis ja neile lisajuhiste lisamisele, mis blokeerivad spekulatiivse täitmise. Spekulatiivse täitmise tingimusi võivad luua ka eBPF-i virtuaalmasinas töötavad privilegeerimata programmid. eBPF-i abil vidinate loomise võimaluse blokeerimiseks on soovitatav keelata privilegeerimata juurdepääs eBPF-ile süsteemis (“sysctl -w kernel.unprivileged_bpf_disabled=1”).

Haavatavus mõjutab Zen1 ja Zen2 mikroarhitektuuril põhinevaid protsessoreid, sealhulgas esimese ja teise põlvkonna AMD EPYC ja AMD Ryzen Threadripper protsessoreid, samuti AMD Ryzen 2000/3000/4000/5000, AMD Athlon, AMD Athlon X, AMD Ryzen Threadripper PRO ja APU seeria protsessorid A. Käskude spekulatiivse täitmise blokeerimiseks on soovitatav pärast haruoperatsioone (RET, JMP, CALL) kutsuda välja INT3 või LFENCE käsud.

Allikas: opennet.ru

Lisa kommentaar