Linuxi tuumas avastati haavatavus (CVE-2021-33624), mis võimaldab kasutada eBPF-alamsüsteemi Spektri-tüüpi haavatavuste kaitse ümberminekuks, võimaldades määrata mälu sisu spetsiifiliste operatsioonide spekulatiivse täitmise tingimuste loomise tagajärjel. Spektri rünnaku jaoks on vajalik, et privileege omavas koodis oleks kindel käsuseade järjestus, mis viib spekulatiivsete käskude täitmiseni. BPF-programmide täitmiseks edastatud parameetrite manipuleerimise kaudu on võimalik genereerida sarnaseid käske eBPF-s ja saavutada tuuma mälu ja suvaliste füüsilise mälu alade väljalasketäiendamine kõrvalkanalite kaudu.
Haavatavus tuleneb puudustest verifikaatoris, mida kasutatakse BPF-programmide vigade ja ebasobiva tegevuse tuvastamiseks. Verifikaator läbib võimalikke koodide täitmisviise, kuid jätab kõrvale harude variandid, mis on semantika seisukohalt arhitketuurile sobimatud. BPF-programmi täitmisel võivad aga sellised harude variandid, mida verifikaator ei arvesse võtnud, olla protsessori poolt valesti ennustatud ja spekulatiivselt täidetud. Näiteks analüüsides 'load' operatsiooni arvutab verifikaator, et käskluses kasutatakse registrit, mille aadressi väärtus on alati seatud piiretes, kuid ründaja võib luua tingimusi, mille korral protsessor proovib spekulatiivselt täita käsklust aadressiga, mis ei vasta kontrollimiseks seatud tingimustele.
Probleem ilmneb alates tuuma versioonist 4.15 ja on lahendatud plaastrite (1, 2, 3, 4) kujul. Distrodes jääb haavatavus hetkel parandamata (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).
Lisaks tasub märkida, et Spectre klassi haavatavuste kaitsevahendite mõju jõudlusele on oluliselt võetud kokku. Märkmes on esitatud tulemused veaparanduse tööriista rr (Record and Replay) optimeerimisest, mis kunagi loodi Mozilla poolt Firefoxi raskesti korratavates vigades silumiseks. Süsteemikõnede vahemälu, mida kasutatakse kaustade olemasolu kontrollimiseks, vähendas „rr sources” toimingu kestust testprojektil 3 minutit 19 sekundilt 36 sekundile.
Optimeerimise autor soovis kontrollida, kui palju muutub jõudlus pärast Spectre kaitse keelamist. Pärast süsteemi käivitamist parameetriga „mitigations=off” kestis „rr sources” ilma optimeerimiseta 2 minutit 5 sekundit (1,6 korda kiiremini), ja optimeerimisega 33 sekundit (9% kiiremini). Huvi pakub, et Spectre kaitse keelamine mitte ainult ei vähendanud koodi kestust tuuma tasemel 1,4 korda (2m9s-lt 1m32s-le), vaid vähendas ka kasutaja ruumi toimingute aega kaks korda (1m9s-lt 0m33s-le), tõenäoliselt seoses CPU vahemälu ja TLB eemaldamiste efektiivsuse vähenemisega, kui Spectre kaitse oli sisse lülitatud.
Allikas: opennet.ru
