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

Një grup hulumtuesish nga Politechnika e Zvicrës identifikuan një variant të ri sulmi në mekanizmin e ekzekutimit spekulativ të kalimeve të tërthorta në CPU, i cili lejon nxjerrjen e informacionit nga memoria e bërthamës ose organizimin e një sulmi në sistemin mikpritës nga makina virtuale. Çshtëllimet e kësaj cenueshmërie morën emrin kodor Retbleed (CVE-2022-29900, CVE-2022-29901) dhe janë të ngjashme në natyrë me sulmet Spectre-v2. Dallimi qëndron në organizimin e ekzekutimit spekulativ të kodit të rastësishëm gjatë përpunimit të instruksionit “ret” (kthehu), i cili nxjerr adresën për kalim nga stack, në vend të kalimit të tërthortë përmes instruksionit “jmp” që ngarkon adresën nga memoria ose regjistri i CPU.

Sulmuesi mund të krijojë kushte për parashikim të pasaktë të kalimit dhe të organizojë një kalim spekulativ të qëllimtë në një bllok kodi që nuk parashikohet nga logjika e ekzekutimit të programit. Në fund të fundit, procesori do të përcaktojë se parashikimi i kalimit nuk është realizuar dhe do ta rikthejë operacionin në gjendjen e tij fillestare, por të dhënat e përpunuara në procesin e ekzekutimit spekulativ do të mbeten në cache dhe të dhëna mikroarkitekturore. Nëse blloku i ekzekutuar gabimisht bën një kërkesë në memorie, ekzekutimi i tij spekulativ do të çojë në nguljen në cache të përgjithshëm dhe të dhënave të lexuara nga memoria.

Për të identifikuar të dhënat që mbeten në cache pas ekzekutimit spekulativ të operacioneve, sulmuesi mund të përdorë metoda për definimin e të dhënave të mbetura nëpërmjet kanaleve anësore, për shembull, duke analizuar ndryshimet në kohën e qasjes në të dhënat e cache të ruajtura dhe ato që nuk janë ruajtur në cache. Për nxjerrjen e qëllimtë të informacionit nga zona në një nivel tjetër privilegji (p.sh., nga memoria e bërthamës) përdoren “gadgets” — sekuenca komandash të pranishme në bërthamë që janë të përshtatshme për leximin spekulativ të të dhënave nga memoria në varësi të kushteve të jashtme, të cilat mund të ndikojnë nga sulmuesi.

Për mbrojtjen nga sulmet klasike të klasës Spectre, të cilat përdorin instruksione të kalimit 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ë kalimit të tërthortë me instruksionin “ret”, për të cilin procesorët përdorin një bllok të veçantë parashikimi të gjendjes së stack, që nuk përdor bllokun e parashikimit të kalimeve. Kur u shpik retpoline në vitin 2018, u mendua se manipulimet e ngjashme me Spectre mbi adresat nuk ishin të aplikueshme në praktikë për kalimin spekulativ duke përdorur instruksionin “ret”.

Hulumtuesit që zhvilluan metodën e sulmit Retbleed demonstruan mundësinë e krijimit të kushteve mikroarkitekturore për iniciimin e kalimit spekulativ duke përdorur instruksionin “ret” dhe publikuan një set mjetesh për identifikimin në bërthamën Linux të sekuencave instruksionesh të përshtatshme për shfrytëzimin e cenueshmërisë (gadgets), në të cilat shfaqen këto kushte.

Gjatë hulumtimit, u përgatit një eksploit funksional, i cili në sistemet me CPU Intel nga një proces i papranueshëm në hapësirën e përdoruesit lejon nxjerrjen e të dhënave të rastësishme nga memoria e bërthamës me një shpejtësi prej 219 byte në sekondë dhe një saktësi prej 98%. Në procesorët AMD, efikasiteti i eksploitit është shumë më i lartë — shpejtësia e rrjedhjes arrin 3.9 KB në sekondë. Si një shembull praktik, u tregua se si me anë të eksploitit të propozuar të përcaktohet përmbajtja e skedarit /etc/shadow. Në sistemet me CPU Intel, sulmi për përcaktimin e hashes të fjalëkalimit të përdoruesit root u zhvillua për 28 minuta, ndërsa në sistemet me CPU AMD — për 6 minuta.

Luaj videon

Mundësia e kryerjes së sulmit është konfirmuar për brezat 6-8 të procesorëve Intel, të cilët janë prodhuar deri në tremujorin e tretë të vitit 2019 (duke përfshirë Skylake), dhe procesorët AMD të bazuar në mikroarkitekturën Zen 1, Zen 1+ dhe Zen 2, të cilat janë prodhuar deri në tremujorin e dytë të vitit 2021. Në modelet më të reja të procesorëve, si AMD Zen3 dhe Intel Alder Lake, si dhe në procesorët ARM, problemet bllokohen nga mekanizmat e mbrojtjes të pranishëm. Për shembull, përdorimi i instruksioneve IBRS (Indirect Branch Restricted Speculation) ndihmon në mbrojtjen nga sulmi.

Për bërthamën Linux dhe hipervizorin Xen, është përgatitur një set ndryshimesh, të cilat për CPU të vjetër bllokojnë problemin në mënyrë programore. Patch-i i propozuar për bërthamën Linux ndryshon 68 skedarë, shton 1783 rrjeshta dhe fshin 387 rrjeshta. Fatkeqësisht, mbrojtja sjell një ngarkesë të konsiderueshme — në testimet e kryera në procesorët AMD dhe Intel, rënia e performancës vlerësohet nga 14% në 39%. Më e preferuar është përdorimi i mbrojtjes të bazuar në instruksionet IBRS, të cilat janë të disponueshme në gjeneratat më të reja të CPU Intel dhe mbështeten që nga bërthama Linux 4.19.

Në procesorët Intel, zëvendësimi i adresës për kalimet indirekte spekulative realizohet falë një veçorie që shfaqet gjatë mbushjes përposht (underflow) në buferrin e parashikimit të përmbajtjes së skelës (Return Stack Buffer). Kur ndodhin kushte të tilla për instrukcionin "ret", fillon të aplikohet logjika e zgjedhjes së adresës, e cila është e ngjashme me atë që përdoret për kalimet indirekte të zakonshme. Në kernelin Linux janë gjetur më shumë se një mijë vende që krijojnë kushte për iniciimin e këtij nënmbushjeje dhe janë të accesueshme përmes thirrjeve të sistemit.

Në procesorët AMD, ekzekutimi spekulativ i instrukcionit "ret" realizohet pa u lidhur me buferrin specifik të skelës (Return Address Stack) dhe bloku i parashikimit të kalimeve e konsideron instrukcionin "ret" jo si një kthim të kontrollit, por si një kalim indirekt dhe, për rrjedhojë, përdor të dhënat për kalime indirekte në parashikim. Nën kushte të tilla, praktikisht çdo operacion "ret", i arritshëm përmes një thirrje sistemi, mund të përdoret për shfrytëzim.

Për më tepër, në CPU-të AMD gjithashtu është zbuluar një problem tjetër (CVE-2022-23825, Branch Type Confusion), i lidhur me realizimin e kalimeve të rreme — kushtet për parashikimin e kalimit mund të ndodhin edhe pa instrukcione të nevojshme degëzimi, gjë që lejon të ndikosh në buferrin e parashikimit të kalimeve pa instrukcionin "ret". Kjo veçori e bën implementimin e mbrojtjes shumë më të komplikuar dhe kërkon një pastrim më aktiv të buferrit të parashikimit të kalimeve. Pritet që shtimi i mbrojtjes së plotë në kernel të çojë në rritjen e shpenzimeve me 209%.

Burimi: opennet.ru

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster