Retbleed është një sulm i ri ndaj mekanizmit të ekzekutimit spekulativ të CPU-ve Intel dhe AMD

Një grup studiuesish nga ETH Zurich ka identifikuar një sulm të ri mbi mekanizmin e ekzekutimit spekulativ të tranzicioneve indirekte në CPU, i cili bën të mundur nxjerrjen e informacionit nga memoria e kernelit ose organizimin e një sulmi në sistemin pritës nga makinat virtuale. Dobësitë janë të koduara me emrin Retbleed (CVE-2022-29900, CVE-2022-29901) dhe janë të natyrës së afërt me sulmet Specter-v2. Dallimi ka të bëjë me organizimin e ekzekutimit spekulativ të kodit arbitrar gjatë përpunimit të instruksionit "ret" (kthim), i cili merr adresën për të kërcyer nga pirgu, në vend të një kërcimi indirekt duke përdorur instruksionin "jmp", duke ngarkuar adresën nga memorie ose një regjistër CPU.

Një sulmues mund të krijojë kushte për parashikimin e gabuar të tranzicionit dhe të organizojë një kalim të synuar, spekulativ në një bllok kodi që nuk parashikohet nga logjika e ekzekutimit të programit. Në fund të fundit, përpunuesi do të përcaktojë që parashikimi i degës nuk ishte i justifikuar dhe do ta kthejë operacionin në gjendjen e tij origjinale, por të dhënat e përpunuara gjatë ekzekutimit spekulativ do të përfundojnë në cache dhe buferët mikroarkitekturorë. Nëse një bllok i ekzekutuar gabimisht i qaset memorjes, atëherë ekzekutimi i tij spekulativ do të çojë në depozitimin e të dhënave të lexuara nga memorja në memorien e përbashkët.

Për të përcaktuar të dhënat e mbetura në cache pas operacioneve spekulative, një sulmues mund të përdorë teknika të kanalit anësor për të përcaktuar të dhënat e mbetura, të tilla si analizimi i ndryshimeve në kohën e hyrjes në të dhënat e memories së ruajtur dhe të pakapshme. Për të nxjerrë me qëllim informacionin nga zonat në një nivel tjetër privilegji (për shembull, nga memoria e kernelit), përdoren "gadgets" - sekuenca komandash të pranishme në kernel që janë të përshtatshme për të lexuar në mënyrë spekulative të dhëna nga memorja në varësi të kushteve të jashtme që mund të ndikohen nga sulmuesi.

Për të mbrojtur kundër sulmeve klasike të klasës Spectre që përdorin udhëzime të kërcimit të kushtëzuar dhe të tërthortë, shumica e sistemeve operative përdorin teknikën "retpoline", e cila bazohet në zëvendësimin e operacioneve të kërcimit indirekt me instruksionin "ret", për të cilin procesorët përdorin një njësi të veçantë të parashikimit të gjendjes së stivës. duke mos përdorur një bllok parashikimi të degëve. Kur retpolina u prezantua në vitin 2018, besohej se manipulimet e adresave të ngjashme me Specter nuk ishin praktike për degëzimin spekulativ duke përdorur udhëzimin "ret".

Studiuesit që zhvilluan metodën e sulmit Retbleed demonstruan mundësinë e krijimit të kushteve mikroarkitekturore për fillimin e një tranzicioni spekulativ duke përdorur udhëzimin "ret" dhe publikuan mjete të gatshme për identifikimin e sekuencave të udhëzimeve (gadget) të përshtatshme për shfrytëzimin e cenueshmërisë në kernelin Linux. në të cilat manifestohen kushte të tilla.

Gjatë hulumtimit, u përgatit një shfrytëzim pune që lejon, në sistemet me CPU Intel, të nxjerrin të dhëna arbitrare nga memoria e kernelit nga një proces i paprivilegjuar në hapësirën e përdoruesit me një shpejtësi prej 219 bajt për sekondë dhe saktësi 98%. Në procesorët AMD, efikasiteti i shfrytëzimit është shumë më i lartë - shkalla e rrjedhjes është 3.9 KB për sekondë. Si shembull praktik, ne tregojmë se si të përdorim shfrytëzimin e propozuar për të përcaktuar përmbajtjen e skedarit /etc/shadow. Në sistemet me CPU Intel, sulmi për të përcaktuar hash-in e fjalëkalimit të përdoruesit rrënjë u krye në 28 minuta, dhe në sistemet me CPU AMD - në 6 minuta.

Sulmi është konfirmuar për gjeneratat 6-8 të procesorëve Intel që janë lëshuar përpara tremujorit të tretë 3 (përfshirë Skylake), dhe procesorë AMD të bazuar në mikroarkitekturat Zen 2019, Zen 1+ dhe Zen 1 që janë lëshuar përpara tremujorit të dytë 2. Në modelet më të reja të procesorëve si AMD Zen2021 dhe Intel Alder Lake, si dhe në procesorët ARM, problemi bllokohet nga mekanizmat ekzistues të mbrojtjes. Për shembull, përdorimi i udhëzimeve IBRS (Indirekt Branch Restricted Speculation) ndihmon në mbrojtjen kundër sulmeve.

Një grup ndryshimesh janë përgatitur për kernelin Linux dhe hipervizorin Xen, i cili do të bllokojë problemin në softuerin në CPU-të më të vjetra. Patch-i i propozuar për kernelin Linux ndryshon 68 skedarë, shton 1783 rreshta dhe fshin 387 rreshta. Fatkeqësisht, mbrojtja çon në kosto të konsiderueshme të përgjithshme - në tekstet e kryera në procesorët AMD dhe Intel, ulja e performancës vlerësohet nga 14% në 39%. Është më e preferueshme të përdoret mbrojtja e bazuar në udhëzimet IBRS, të disponueshme në gjeneratat e reja të CPU-ve Intel dhe të mbështetura duke filluar me kernelin Linux 4.19.

Në procesorët Intel, zëvendësimi i adresës për një kërcim indirekt spekulativ kryhet falë një veçorie që shfaqet kur ndodh një tejmbushje përmes kufirit të poshtëm (nënfluksit) në Bufferin e Stackit të Kthimit. Kur ndodhin kushte të tilla, instruksioni "ret" fillon të zbatojë logjikën e përzgjedhjes së adresave të ngjashme me atë të përdorur për kërcime normale indirekte. Më shumë se një mijë vende janë gjetur në kernelin Linux që krijojnë kushte për fillimin e një kthimi të tillë dhe janë të aksesueshme përmes thirrjeve të sistemit.

Në procesorët AMD, ekzekutimi spekulativ i instruksionit "ret" kryhet pa iu referuar një buferi specifik të stivit (Riku i adresave të kthimit) dhe njësia e parashikimit të degës e konsideron instruksionin "ret" jo si një kthim kontrolli, por si një degë indirekte. , dhe, në përputhje me rrethanat, përdor të dhënat për parashikimin e tranzicioneve indirekte. Në këto kushte, pothuajse çdo operacion "rikthim" i arritshëm nëpërmjet një thirrjeje sistemi mund të shfrytëzohet.

Për më tepër, një problem tjetër është identifikuar edhe në CPU-të AMD (CVE-2022-23825, Konfuzioni i llojit të degës) që lidhet me zbatimin e degëve fiktive - kushtet për parashikimin e degëve mund të ndodhin edhe pa udhëzimet e nevojshme të degës, gjë që lejon ndikimin në tamponin e parashikimit të degës pa udhëzimin "ret". Kjo veçori e ndërlikon ndjeshëm zbatimin e mbrojtjes dhe kërkon pastrim më aktiv të tamponit të parashikimit të degëve. Shtimi i mbrojtjes së plotë në kernel pritet të rrisë shpenzimet e përgjithshme me 209%.

Burimi: opennet.ru

Shto një koment