Ranjivosti u eBPF-u koje bi mogle zaobići zaštitu od napada Spectre 4

Identificirane su dvije ranjivosti u Linux kernelu koje omogućavaju korištenje eBPF podsistema za zaobilaženje zaštite od napada Spectre v4 (SSB, spekulativno zaobilaženje trgovine). Koristeći neprivilegirani BPF program, napadač može stvoriti uslove za spekulativno izvršavanje određenih operacija i odrediti sadržaj proizvoljnih područja memorije kernela. Održavači eBPF podsistema u kernelu dobili su pristup prototipu eksploatacije koji pokazuje sposobnost izvođenja napada u praksi. Problemi su otklonjeni u obliku zakrpa (1, 2), koje će biti uključene u sljedeće ažuriranje kernela Linuxa. Ažuriranja u distribucijskim kompletima još nisu kreirana (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

Spectre 4 metoda napada zasniva se na vraćanju podataka pohranjenih u kešu procesora nakon odbacivanja rezultata spekulativnog izvršenja operacija prilikom obrade naizmjeničnih operacija pisanja i čitanja korištenjem indirektnog adresiranja. Kada operacija čitanja prati operaciju pisanja (npr. mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), pomak adrese čitanja može već biti poznat zbog sličnih operacija koje se izvode (operacije čitanja su obavlja mnogo češće i čitanja se mogu izvoditi iz keš memorije) i procesor može spekulativno izvršiti čitanje prije pisanja bez čekanja da se izračuna indirektni pomak upisivanja.

Ako se nakon izračunavanja pomaka otkrije sjecište memorijskih područja za pisanje i čitanje, procesor će jednostavno odbaciti već spekulativno dobiveni rezultat čitanja i ponoviti ovu operaciju. Ova funkcija omogućava instrukciji za čitanje da pristupi staroj vrijednosti na nekoj adresi dok operacija trgovine još nije završena. Nakon odbacivanja neuspješne spekulativne operacije, u keš memoriji ostaju tragovi njenog izvršenja, nakon čega se može koristiti jedan od metoda za određivanje sadržaja keš memorije na osnovu analize promjena u vremenu pristupa keširanim i nekeširanim podacima.

Prva ranjivost (CVE-2021-35477) je uzrokovana nedostatkom u mehanizmu za verifikaciju BPF programa. Da bi se zaštitio od napada Spectre 4, verifikator dodaje dodatnu instrukciju nakon potencijalno problematičnih pohranjivanja u memoriju koja pohranjuje nultu vrijednost za zamjenu tragova prethodne operacije. Očekivalo se da će operacija nule pisanja biti vrlo brza i blokirati spekulativno izvršenje jer ovisi samo o pokazivaču na okvir BPF steka. Ali u stvari, pokazalo se da je moguće stvoriti uslove pod kojima se instrukcija koja vodi spekulativnom izvršenju uspeva izvršiti pre operacije preventivnog skladištenja.

Druga ranjivost (CVE-2021-3455) je zbog činjenice da kada BPF verifikator identificira potencijalno opasne operacije spremanja memorije, ne uzima u obzir neinicijalizirana područja BPF steka, na koju prva operacija pisanja nije zaštićena. Ova karakteristika dovodi do mogućnosti izvođenja spekulativne operacije čitanja, ovisno o neinicijaliziranom memorijskom području, prije izvršavanja instrukcije pohranjivanja. Nova memorija za BPF stek se dodeljuje bez provere sadržaja koji je već u dodeljenoj memoriji, a postoji način pre nego što se BPF program pokrene da manipuliše sadržajem memorijskog regiona koji će tada biti dodeljen BPF steku.

izvor: opennet.ru

Dodajte komentar