Dobësitë në nënsistemin eBPF që lejojnë anashkalimin e mbrojtjes kundër sulmeve Spectre

Është identifikuar një dobësi në kernelin Linux (CVE-2021-33624) që lejon nënsistemin eBPF të përdoret për të anashkaluar mbrojtjen kundër dobësive të klasës Spectre, të cilat bëjnë të mundur përcaktimin e përmbajtjes së kujtesës si rezultat i krijimit të kushteve për ekzekutimi spekulativ i operacioneve të caktuara. Sulmi Spectre kërkon praninë e një sekuence të caktuar komandash në kodin e privilegjuar që çon në ekzekutimin spekulativ të udhëzimeve. Duke manipuluar programet BPF të transmetuara për ekzekutim, është e mundur të gjenerohen instruksione të ngjashme në eBPF dhe të rrjedhin përmbajtjet e kujtesës së kernelit dhe zonave arbitrare të memories fizike përmes kanaleve anësore.

Dobësia është shkaktuar nga defekte në verifikuesin, i cili përdoret për të zbuluar gabimet dhe aktivitetin e papranueshëm në programet BPF. Verifikuesi numëron shtigjet e mundshme të ekzekutimit të kodit, por anashkalon opsionet e degëzimit që janë të papranueshme nga pikëpamja e semantikës së arkitekturës së grupit të udhëzimeve. Gjatë ekzekutimit të një programi BPF, opsione të tilla degëzimi që nuk merren parasysh nga verifikuesi mund të parashikohen gabimisht nga procesori dhe të ekzekutohen në modalitetin spekulativ. Për shembull, kur analizon operacionin "load", verifikuesi pret që instruksioni të përdorë një regjistër me një adresë, vlera e të cilit është gjithmonë brenda kufijve të specifikuar, por një sulmues mund të krijojë kushte në të cilat procesori do të përpiqet të kryejë në mënyrë spekulative një operacion me një adresë që nuk plotëson kushtet e verifikimit.

Problemi është shfaqur që nga lëshimi i kernel 4.15 dhe është rregulluar në formën e arnimeve (1, 2, 3, 4). Dobësia mbetet e pafiksuar në shpërndarje (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).

Për më tepër, mund të vini re shënimin për ndikimin e performancës së mjeteve për t'u mbrojtur nga dobësitë e Spectre. Shënimi përmbledh rezultatet e optimizimit të korrigjuesit rr (Regjistro dhe Riplay), i cili dikur u krijua në Mozilla për të korrigjuar gabimet e vështira për t'u përsëritur në Firefox. Memorizimi i thirrjeve të sistemit të përdorura për të kontrolluar ekzistencën e drejtorive reduktoi funksionin "rr sources" për projektin e testimit nga 3 minuta 19 sekonda në 36 sekonda.

Autori i optimizimit vendosi të kontrollojë se si do të ndryshonte performanca pas çaktivizimit të mbrojtjes Spectre. Pas nisjes së sistemit me parametrin “mitigations=off”, koha e ekzekutimit të “rr sources” pa optimizim ishte 2 minuta 5 sekonda (1.6 herë më shpejt), dhe me optimizim ishte 33 sekonda (9% më shpejt). Është interesante se çaktivizimi i mbrojtjes Spectre jo vetëm që uli kohën e ekzekutimit të kodit në nivelin e kernelit me 1.4 herë (nga 2m9s në 1m32s), por gjithashtu përgjysmoi kohën e ekzekutimit në hapësirën e përdoruesit (nga 1m9s në 0m33s), me sa duket për shkak të reduktimit të efikasitetit të funksionimit të cache-it të CPU dhe TTB. rivendoset kur është aktivizuar mbrojtja Spectre.

Burimi: opennet.ru

Shto një koment