Retbleed is in nije oanfal op it spekulative útfieringsmeganisme fan Intel en AMD CPU's

In groep ûndersikers fan ETH Zurich hat in nije oanfal identifisearre op it meganisme fan spekulative útfiering fan yndirekte transysjes yn 'e CPU, wêrtroch it mooglik is om ynformaasje út kernel-ûnthâld te ekstrahearjen of in oanfal op it hostsysteem te organisearjen fan firtuele masines. De kwetsberens binne koadenamme Retbleed (CVE-2022-29900, CVE-2022-29901) en binne ticht fan aard foar Specter-v2-oanfallen. It ferskil komt del op 'e organisaasje fan spekulative útfiering fan willekeurige koade by it ferwurkjen fan de "retur" (return) ynstruksje, dy't it adres ophelje om fan 'e stapel te springen, ynstee fan in yndirekte sprong mei de "jmp" ynstruksje, it laden fan it adres fan ûnthâld of in CPU register.

In oanfaller kin betingsten meitsje foar ferkearde oergongsfoarsizzing en in doelrjochte, spekulative oergong organisearje nei in blok koade dat net foarsjoen is troch de logika foar útfiering fan it programma. Uteinlik sil de prosessor bepale dat de tûkefoarsizzing net rjochtfeardige wie en sil de operaasje weromdraaie nei syn oarspronklike steat, mar de gegevens ferwurke tidens spekulative útfiering sille einigje yn 'e cache en mikroarsjitektuerbuffers. As in ferkeard útfierd blok tagong ta it ûnthâld, dan sil syn spekulative útfiering liede ta gegevens lêzen út it ûnthâld wurdt dellein yn de dielde cache.

Om de gegevens te bepalen dy't oerbleaun binne yn 'e cache nei spekulative operaasjes, kin in oanfaller side-kanaaltechniken brûke om oerbleaune gegevens te bepalen, lykas it analysearjen fan feroaringen yn tagongstiden nei cached en uncached data. Om doelbewust ynformaasje te ekstrahearjen út gebieten op in oar privileezjenivo (bygelyks út kernelûnthâld), wurde "gadgets" brûkt - sekwinsjes fan kommando's oanwêzich yn 'e kernel dy't geskikt binne foar spekulatyf lêzen fan gegevens út it ûnthâld ôfhinklik fan eksterne betingsten dy't kinne wurde beynfloede troch de oanfaller.

Om te beskermjen tsjin klassike Spectre-klasse oanfallen dy't gebrûk meitsje fan betingsten en yndirekte sprongynstruksjes, brûke de measte bestjoeringssystemen de "retpoline" technyk, dy't basearre is op it ferfangen fan yndirekte sprongoperaasjes mei de "ret" ynstruksje, wêrfoar processors in aparte stack state prediction unit brûke gjin tûkefoarsizzingsblok brûke. Doe't retpoline waard yntrodusearre yn 2018, waard leaud dat Specter-like adresmanipulaasjes net praktysk wiene foar spekulative branching mei de "ret" ynstruksje.

De ûndersikers dy't de Retbleed-oanfalmetoade ûntwikkele hawwe, demonstreare de mooglikheid om mikroarsjitektoanyske betingsten te meitsjen foar it inisjearjen fan in spekulative oergong mei de ynstruksje "ret" en publisearre ready-made ark foar it identifisearjen fan sekwinsjes fan ynstruksjes (gadgets) geskikt foar it eksploitearjen fan de kwetsberens yn 'e Linux kernel, wêryn sokke betingsten har manifestearje.

Tidens it ûndersyk waard in wurkjende eksploitaasje taret wêrtroch, op systemen mei Intel CPU's, willekeurige gegevens út it kernelûnthâld kinne ekstrahearje út in unprivileged proses yn brûkersromte mei in snelheid fan 219 bytes per sekonde en 98% krektens. Op AMD-processors is de effisjinsje fan 'e eksploitaasje folle heger - it lekrate is 3.9 KB per sekonde. As praktysk foarbyld litte wy sjen hoe't jo de foarstelde eksploitaasje brûke om de ynhâld fan it /etc/shadow-bestân te bepalen. Op systemen mei Intel CPU's waard de oanfal om it root-brûkerswachtwurd hash te bepalen yn 28 minuten útfierd, en op systemen mei AMD CPU's - yn 6 minuten.

De oanfal is befêstige foar generaasjes 6-8 fan Intel-processors dy't waarden frijlitten foar Q3 2019 (ynklusyf Skylake), en AMD-processors basearre op Zen 1, Zen 1+, en Zen 2 mikroarsjitektueren dy't waarden frijlitten foar Q2021 3. Yn nijere prosessormodellen lykas AMD ZenXNUMX en Intel Alder Lake, lykas yn ARM-processors, wurdt it probleem blokkearre troch besteande beskermingsmeganismen. Bygelyks, it brûken fan IBRS (Indirect Branch Restricted Speculation) ynstruksjes helpt te beskermjen tsjin oanfallen.

In set feroarings is taret foar de Linux-kernel en de Xen-hypervisor, dy't it probleem yn software op âldere CPU's blokkearje sil. De foarstelde patch foar de Linux kernel feroaret 68 bestannen, foeget 1783 rigels ta en wisket 387 rigels. Spitigernôch liedt de beskerming ta wichtige overheadkosten - yn 'e teksten útfierd op AMD- en Intel-processors wurdt de prestaasjesfermindering rûsd fan 14% nei 39%. It is better om beskerming te brûken basearre op IBRS-ynstruksjes, beskikber yn nije generaasjes Intel CPU's en stipe te begjinnen mei de Linux kernel 4.19.

Op Intel-processors wurdt adresferfanging foar in spekulative yndirekte sprong útfierd troch in funksje dy't ferskynt as in oerstreaming optreedt troch de legere grins (underflow) yn 'e Return Stack Buffer. As sokke betingsten foarkomme, begjint de ynstruksje "ret" adresseleksjelogika te passen lykas dy brûkt wurdt foar normale yndirekte sprongen. Mear as tûzen plakken binne fûn yn 'e Linux-kernel dy't betingsten meitsje foar it inisjearjen fan sa'n weromstream en tagonklik binne fia systeemoproppen.

Op AMD-processors wurdt spekulative útfiering fan 'e "ret" ynstruksje útfierd sûnder ferwizing nei in stack-spesifike buffer (Return Address Stack) en de branch foarsizzing-ienheid beskôget de "ret" ynstruksje net as in kontrôle werom, mar as in yndirekte branch , en, neffens, brûkt de gegevens foar foarsizzing yndirekte oergongen. Under dizze betingsten kin praktysk elke "ret" operaasje berikber fia in systeemoprop wurde eksploitearre.

Derneist is in oar probleem ek identifisearre yn AMD CPU's (CVE-2022-23825, Branch Type Confusion) yn ferbân mei de ymplemintaasje fan fiktive tûken - betingsten foar tûkefoarsizzing kinne sels foarkomme sûnder de nedige tûke ynstruksjes, wêrtroch it beynfloedzjen fan de tûkefoarsizzingsbuffer mooglik is sûnder de ynstruksje "ret". Dizze funksje komplisearret de ymplemintaasje fan beskerming signifikant en fereasket mear aktive skjinmeitsjen fan 'e tûkefoarsizzingsbuffer. It tafoegjen fan folsleine beskerming oan 'e kernel wurdt ferwachte om de overhead mei 209% te ferheegjen.

Boarne: opennet.ru

Add a comment