Mga kahinaan sa eBPF subsystem na nagbibigay-daan sa pag-bypass ng proteksyon laban sa mga pag-atake ng Spectre

Natukoy ang isang kahinaan sa kernel ng Linux (CVE-2021-33624) na nagpapahintulot sa subsystem ng eBPF na magamit upang i-bypass ang proteksyon laban sa mga kahinaan ng klase ng Spectre, na ginagawang posible upang matukoy ang mga nilalaman ng memorya bilang resulta ng paglikha ng mga kondisyon para sa haka-haka na pagpapatupad ng ilang mga operasyon. Ang pag-atake ng Spectre ay nangangailangan ng pagkakaroon ng isang tiyak na pagkakasunod-sunod ng mga utos sa privileged code na humahantong sa speculative execution ng mga tagubilin. Sa pamamagitan ng pagmamanipula sa mga programa ng BPF na ipinadala para sa pagpapatupad, posibleng bumuo ng mga katulad na tagubilin sa eBPF at i-leak ang mga nilalaman ng memorya ng kernel at mga arbitrary na bahagi ng pisikal na memorya sa pamamagitan ng mga side channel.

Ang kahinaan ay sanhi ng mga depekto sa verifier, na ginagamit upang makita ang mga error at hindi katanggap-tanggap na aktibidad sa mga programa ng BPF. Isinasaalang-alang ng verifier ang mga posibleng path ng pagpapatupad ng code, ngunit nilalaktawan ang mga opsyon sa pagsasanga na hindi katanggap-tanggap mula sa punto ng view ng mga semantika ng arkitektura ng set ng pagtuturo. Kapag nagpapatupad ng isang BPF program, ang mga pagpipiliang sumasanga na hindi isinasaalang-alang ng verifier ay maaaring hindi tama na mahulaan ng processor at maisakatuparan sa speculative mode. Halimbawa, kapag sinusuri ang operasyong "load", inaasahan ng verifier na ang pagtuturo ay gumagamit ng isang rehistro na may isang address na ang halaga ay palaging nasa loob ng tinukoy na mga hangganan, ngunit ang isang umaatake ay maaaring lumikha ng mga kondisyon kung saan ang processor ay susubukan na magsagawa ng haka-haka na operasyon gamit ang isang address na hindi nakakatugon sa mga kundisyon sa pag-verify.

Ang problema ay lumilitaw mula noong inilabas ang kernel 4.15 at naayos sa anyo ng mga patch (1, 2, 3, 4). Ang kahinaan ay nananatiling hindi naayos sa mga pamamahagi (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).

Bilang karagdagan, maaari mong tandaan ang tala tungkol sa epekto ng pagganap ng mga tool upang maprotektahan laban sa mga kahinaan ng Spectre. Binubuod ng tala ang mga resulta ng pag-optimize ng rr (Record and Replay) debugger, na minsang ginawa sa Mozilla upang i-debug ang mga error na mahirap ulitin sa Firefox. Ang pag-cache sa mga tawag sa system na ginamit upang suriin ang pagkakaroon ng mga direktoryo ay nabawasan ang "rr sources" na operasyon para sa pagsubok na proyekto mula 3 minuto 19 segundo hanggang 36 segundo.

Nagpasya ang may-akda ng pag-optimize na suriin kung paano magbabago ang pagganap pagkatapos i-disable ang proteksyon ng Spectre. Pagkatapos i-boot ang system gamit ang parameter na "mitigations=off", ang oras ng pagpapatupad ng "rr sources" nang walang pag-optimize ay 2 minuto 5 segundo (1.6 beses na mas mabilis), at sa pag-optimize ito ay 33 segundo (9% mas mabilis). Kapansin-pansin, ang hindi pagpapagana ng proteksyon ng Spectre ay hindi lamang nabawas sa oras ng pagpapatupad ng code sa antas ng kernel ng 1.4 beses (mula sa 2m9s hanggang 1m32s), ngunit hinahati din ang oras ng pagpapatupad sa espasyo ng gumagamit (mula sa 1m9s hanggang 0m33s), marahil dahil sa pinababang kahusayan ng operasyon ng cache ng CPU at TLB nire-reset kapag pinagana ang proteksyon ng Spectre.

Pinagmulan: opennet.ru

Magdagdag ng komento