U Linux kernelu otkrivena je ranjivost (CVE-2021-33624) koja omogućava korištenje eBPF pod-sustava za zaobilaženje zaštite od Spectre tipa ranjivosti, što omogućuje otkrivanje sadržaja memorije kao rezultat stvaranja uvjeta za spekulativno izvršavanje određenih operacija. Za Spectre napad potrebna je prisutnost posebne sekvence instrukcija u privilegiranom kodu koja dovodi do spekulativnog izvršavanja. Manipulacijom s predanim BPF programima moguće je generirati slične instrukcije u eBPF i izazvati curenje sadržaja memorije kernela i proizvoljnih područja fizičke memorije putem bočnih kanala.
Ranjivost je uzrokovana nedostatcima u verifikatoru koji se koristi za identificiranje pogrešaka i nedopuštenih aktivnosti u BPF programima. Verifikator pregledava moguće putanje izvršavanja koda, ali propušta grananja koja su neprihvatljiva s gledišta semantike skupa instrukcija arhitekture. Tijekom izvršavanja BPF programa, takva grananja koja verifikator nije uzeo u obzir mogu biti pogrešno predviđena od strane procesora i izvršena u spekulativnom načinu. Na primjer, prilikom analize operacije „load“, verifikator pretpostavlja da se u instrukciji koristi registar s adresom čija se vrijednost uvijek nalazi unutar određenih granica, no napadač može stvoriti uvjete pod kojima procesor pokuša spekulativno izvršiti operaciju s adresom koja ne odgovara uvjetima provjere.
Problem se pojavljuje od izdanja kernela 4.15 i otklonjen je u obliku zakrpa (1, 2, 3, 4). U distribucijama ranjivost još uvijek ostaje neispravljena (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).
Dodatno se može primijetiti zabilješka o utjecaju na performanse alata za zaštitu od Spectre tipa ranjivosti. U bilješci su sažeti rezultati optimizacije debbugera rr (Record and Replay), u svom vremenu razvijenog u Mozilli za otklanjanje složenih grešaka u Firefoxu. Keširanje sistemskih poziva koji se koriste za provjeru postojanja direktorija omogućilo je skraćenje vremena izvršavanja operacije „rr sources“ za testni projekt sa 3 minute 19 sekundi na 36 sekundi.
Autor optimizacije odlučio je provjeriti koliko će se performanse promijeniti nakon isključivanja zaštite od Spectre. Nakon pokretanja sustava s parametrom „mitigations=off”, vrijeme izvršavanja „rr sources” bez optimizacije iznosilo je 2 minute i 5 sekundi (brže 1.6 puta), a s optimizacijom — 33 sekunde (brže 9%). Zanimljivo je da isključivanje zaštite od Spectre ne samo da je skratilo vrijeme izvršavanja koda na razini jezgre 1.4 puta (s 2m9s na 1m32s), već je i dvostruko smanjilo vrijeme izvršavanja u prostoru korisnika (s 1m9s na 0m33s), pretpostavlja se da je to rezultat smanjene učinkovitosti rada CPU keša i TLB resetiranja pri aktiviranoj zaštiti od Spectre.
Izvor: opennet.ru
