Ang Retbleed ay isang bagong pag-atake sa speculative execution mechanism ng Intel at AMD CPUs

Natukoy ng isang pangkat ng mga mananaliksik mula sa ETH Zurich ang isang bagong pag-atake sa mekanismo ng speculative execution ng mga hindi direktang transition sa CPU, na ginagawang posible na kunin ang impormasyon mula sa kernel memory o ayusin ang isang pag-atake sa host system mula sa mga virtual machine. Ang mga kahinaan ay may codenamed na Retbleed (CVE-2022-29900, CVE-2022-29901) at malapit sa mga pag-atake ng Spectre-v2. Ang pagkakaiba ay nagmumula sa organisasyon ng speculative execution ng arbitrary code kapag pinoproseso ang "ret" (return) instruction, na kumukuha ng address para tumalon mula sa stack, sa halip na isang indirect jump gamit ang "jmp" instruction, na naglo-load ng address mula sa memorya o isang rehistro ng CPU.

Ang isang umaatake ay maaaring lumikha ng mga kundisyon para sa maling hula sa paglipat at ayusin ang isang naka-target, haka-haka na paglipat sa isang bloke ng code na hindi ibinigay para sa lohika ng pagpapatupad ng programa. Sa huli, matutukoy ng processor na hindi makatwiran ang hula ng sangay at ibabalik ang operasyon sa orihinal nitong estado, ngunit ang data na naproseso sa panahon ng speculative execution ay mapupunta sa cache at microarchitectural buffer. Kung ang isang maling naisakatuparan na bloke ay nag-a-access ng memorya, ang speculative execution nito ay hahantong sa data na nabasa mula sa memory na idineposito sa shared cache.

Upang matukoy ang data na natitira sa cache pagkatapos ng mga haka-haka na operasyon, maaaring gumamit ang isang attacker ng mga diskarte sa side-channel upang matukoy ang natitirang data, tulad ng pagsusuri ng mga pagbabago sa mga oras ng pag-access sa naka-cache at hindi naka-cache na data. Upang sadyang kunin ang impormasyon mula sa mga lugar sa isa pang antas ng pribilehiyo (halimbawa, mula sa memorya ng kernel), ginagamit ang "mga gadget" - mga pagkakasunud-sunod ng mga utos na naroroon sa kernel na angkop para sa speculatively na pagbabasa ng data mula sa memorya depende sa mga panlabas na kondisyon na maaaring maimpluwensyahan ng ang umaatake.

Upang maprotektahan laban sa mga klasikong pag-atake ng klase ng Spectre na gumagamit ng kondisyon at hindi direktang mga tagubilin sa pagtalon, karamihan sa mga operating system ay gumagamit ng "retpoline" na pamamaraan, na nakabatay sa pagpapalit ng mga indirect jump operation ng "ret" na pagtuturo, kung saan ang mga processor ay gumagamit ng hiwalay na stack state prediction unit. . hindi gumagamit ng block ng hula sa sangay. Noong ipinakilala ang retpoline noong 2018, pinaniniwalaan na ang mga manipulasyon ng address na tulad ng Spectre ay hindi praktikal para sa speculative branching gamit ang "ret" na pagtuturo.

Ang mga mananaliksik na bumuo ng paraan ng pag-atake ng Retbleed ay nagpakita ng posibilidad na lumikha ng mga microarchitectural na kondisyon para sa pagsisimula ng isang speculative transition gamit ang "ret" na pagtuturo at nag-publish ng mga handa na tool para sa pagtukoy ng mga pagkakasunud-sunod ng mga tagubilin (gadget) na angkop para sa pagsasamantala sa kahinaan sa Linux kernel, kung saan ang mga ganitong kondisyon ay nagpapakita ng kanilang mga sarili.

Sa panahon ng pananaliksik, inihanda ang isang gumaganang pagsasamantala na nagbibigay-daan, sa mga system na may mga Intel CPU, na kunin ang arbitrary na data mula sa memorya ng kernel mula sa isang hindi magandang proseso sa espasyo ng gumagamit sa bilis na 219 bytes bawat segundo at 98% na katumpakan. Sa mga processor ng AMD, mas mataas ang kahusayan ng pagsasamantala—ang rate ng pagtagas ay 3.9 KB bawat segundo. Bilang isang praktikal na halimbawa, ipinapakita namin kung paano gamitin ang iminungkahing pagsasamantala upang matukoy ang mga nilalaman ng /etc/shadow file. Sa mga system na may mga Intel CPU, ang pag-atake upang matukoy ang root user password hash ay isinagawa sa loob ng 28 minuto, at sa mga system na may AMD CPU - sa loob ng 6 na minuto.

Nakumpirma ang pag-atake para sa mga henerasyon 6-8 ng mga Intel processor na inilabas bago ang Q3 2019 (kabilang ang Skylake), at ang mga processor ng AMD batay sa Zen 1, Zen 1+ at Zen 2 microarchitectures na inilabas bago ang Q2021 3. Sa mga mas bagong modelo ng processor tulad ng AMD ZenXNUMX at Intel Alder Lake, pati na rin sa mga processor ng ARM, ang problema ay naharang ng mga umiiral na mekanismo ng proteksyon. Halimbawa, ang paggamit ng mga tagubilin sa IBRS (Indirect Branch Restricted Speculation) ay nakakatulong na maprotektahan laban sa mga pag-atake.

Isang hanay ng mga pagbabago ang inihanda para sa Linux kernel at Xen hypervisor, na hahadlang sa problema sa software sa mas lumang mga CPU. Ang iminungkahing patch para sa Linux kernel ay nagbabago ng 68 na file, nagdaragdag ng 1783 na linya, at nagtatanggal ng 387 na linya. Sa kasamaang palad, ang proteksyon ay humahantong sa mga makabuluhang gastos sa overhead - sa mga tekstong isinagawa sa mga processor ng AMD at Intel, ang pagbaba ng pagganap ay tinatantya mula 14% hanggang 39%. Mas mainam na gumamit ng proteksyon batay sa mga tagubilin ng IBRS, na magagamit sa mga bagong henerasyon ng mga Intel CPU at sinusuportahan simula sa Linux kernel 4.19.

Sa mga processor ng Intel, ang pagpapalit ng address para sa isang haka-haka na hindi direktang pagtalon ay isinasagawa salamat sa isang tampok na lumilitaw kapag ang isang pag-apaw ay nangyayari sa mas mababang hangganan (underflow) sa Return Stack Buffer. Kapag nangyari ang mga ganitong kundisyon, ang pagtuturong "ret" ay magsisimulang maglapat ng lohika sa pagpili ng address na katulad ng ginagamit para sa mga normal na hindi direktang pagtalon. Mahigit sa isang libong lugar ang natagpuan sa kernel ng Linux na lumilikha ng mga kundisyon para sa pagsisimula ng naturang backflow at naa-access sa pamamagitan ng mga system call.

Sa mga processor ng AMD, ang speculative execution ng "ret" na pagtuturo ay isinasagawa nang walang reference sa isang stack-specific buffer (Return Address Stack) at ang branch prediction unit ay isinasaalang-alang ang "ret" na pagtuturo hindi bilang isang control return, ngunit bilang isang hindi direktang branch , at, nang naaayon, ginagamit ang data para sa paghula ng mga hindi direktang paglipat. Sa ilalim ng mga kundisyong ito, halos anumang "ret" na operasyon na maabot sa pamamagitan ng isang system call ay maaaring samantalahin.

Bilang karagdagan, ang isa pang isyu ay natukoy din sa mga AMD CPU (CVE-2022-23825, Branch Type Confusion) na may kaugnayan sa pagpapatupad ng mga kathang-isip na sangay - ang mga kondisyon para sa paghula ng sangay ay maaaring mangyari kahit na walang kinakailangang mga tagubilin sa sangay, na nagbibigay-daan sa pag-impluwensya sa buffer ng hula ng sangay nang walang tagubiling "ret". Ang tampok na ito ay makabuluhang nagpapalubha sa pagpapatupad ng proteksyon at nangangailangan ng mas aktibong paglilinis ng buffer ng hula sa sangay. Ang pagdaragdag ng buong proteksyon sa kernel ay inaasahang tataas ang overhead ng 209%.

Pinagmulan: opennet.ru

Magdagdag ng komento