SWAPGS - nova ranljivost v mehanizmu špekulativnega izvajanja procesorja

Raziskovalci iz Bitdefenderja razkrila nova ranljivost (CVE-2019-1125) v špekulativnem mehanizmu za izvajanje ukazov sodobnih procesorjev, ki se imenuje SWAPGS, kar ustreza imenu procesorskega ukaza, ki povzroča težavo. Ranljivost omogoča dovolite neprivilegiranemu napadalcu, da določi vsebino pomnilniških območij jedra ali delujočih virtualnih strojev. Težava potrjeno v procesorjih Intel (x86_64) in delno vpliva Procesorji AMD, pri katerih se glavni vektor napada ne pojavi. Predhodno uporabljene metode za preprečevanje ranljivosti Spectre in Meltdown ne ščitijo pred napadom SWAPGS pri uporabi Intelovih procesorjev, vendar so bili že predlagani popravki za Linux, ChromeOS, Android in Windows.

Ranljivost spada v razred Spectre v1 in temelji na ideji obnovitve podatkov iz predpomnilnika procesorja, ki ostanejo po špekulativnem izvajanju navodil. Za izboljšanje zmogljivosti enote za napovedovanje razvejanja sodobnih CPE uporabljajo preventivno izvajanje nekaterih navodil, za katera je najverjetneje, da bodo izvedena, vendar brez čakanja na izračun vseh dejavnikov, ki določajo njihovo izvedbo (na primer, ko pogoji za razvejanje ali parametri dostopa niso še izračunana). Če napoved ni potrjena, procesor zavrže rezultat špekulativne izvedbe, vendar podatki, obdelani med njo, ostanejo v predpomnilniku procesorja in jih je mogoče obnoviti z metodami za določanje vsebine predpomnilnika prek stranskih kanalov, analizo spremembe dostopa čas do predpomnjenih in nepredpomnjenih podatkov.

Posebnost novega napada je uporaba puščanja, ki nastane med špekulativnim izvajanjem ukaza SWAPGS, ki se v operacijskih sistemih uporablja za zamenjavo vrednosti registra GS, ko nadzor preide iz uporabniškega prostora v jedro OS (GS vrednost, uporabljena v uporabniškem prostoru, se nadomesti z vrednostjo, uporabljeno med operacijami v jedru). V jedru Linuxa GS shrani kazalec per_cpu, ki se uporablja za dostop do podatkov jedra, uporabniški prostor pa shrani kazalce na TLS (Thread Local Storage).

Da bi se izognili dvakratnemu klicu ukaza SWAPGS pri ponovnem dostopu do jedra iz prostora jedra ali pri izvajanju kode, ki ne zahteva spremembe registra GS, se pred ukazom izvedeta preverjanje in pogojna veja. Špekulativni izvedbeni mehanizem proaktivno nadaljuje z izvajanjem kode z navodili SWAPGS, ne da bi čakal na rezultat preverjanja, in če izbrana veja ni potrjena, zavrže rezultat. Tako lahko pride do situacije, ko je špekulativno izbrana veja, ki ne vključuje izvajanja SWAPGS, vendar bo med špekulativnim izvajanjem vrednost registra GS spremenjena z ukazom SWAPGS in uporabljena v odvisnih pomnilniških operacijah, ki končajo v predpomnilniku CPU.

Raziskovalci so predlagali dva scenarija napada, za katera so bili pripravljeni prototipi izkoriščanja. Prvi scenarij temelji na situaciji, ko se navodilo SWAPGS ne izvaja špekulativno, čeprav se dejansko uporablja pri izvajanju, drugi pa je nasprotno, ko se navodilo SWAPGS izvaja špekulativno, čeprav dejansko ne bi smelo biti izvedeno. Za vsak scenarij obstajata dve možnosti za izkoriščanje: napadalec lahko določi vrednost na določenem naslovu v območju jedra in napadalec lahko poišče določeno vrednost na naključnih naslovih v jedru. Izvedba napada traja dolgo časa in izkoriščanje lahko zahteva več ur, da dokonča uhajanje.

V jedru Linuxa je težava odpraviti s spremembo logike klicanja ukaza SWAPGS (blokiranje špekulativnega izvajanja), podobno kot popravek drugih ranljivosti razreda Spectre v1. Pričakuje se, da bo imela dodana zaščita minimalen vpliv na delovanje tipičnih delovnih obremenitev. Zakasnitev se pojavi med fazo preklapljanja med uporabnikom in prostorom jedra, kar lahko povzroči slabo delovanje, ko je na primer veliko sistemskih klicev iz aplikacije ali pogosto ustvarjanje NMI in prekinitev.

Popravek zahteva namestitev posodobitve jedra v gostiteljskem sistemu in gostujočem okolju, čemur sledi ponovni zagon sistema. Za onemogočanje zaščite v Linuxu lahko uporabite možnost "nospectre_v1", ki prav tako onemogoči ukrepe za blokiranje ranljivosti SWAPGS. Popravek je na voljo kot obliž za jedro Linuxa, ki je že vključeno v izdaje 4.19.65, 5.2.7, 4.14.137, 4.9.188 in 4.4.188. Posodobitve za distribucije Linuxa še niso bile izdane (Debian, RHEL, Fedora, Arch Linux, SUSE/openSUSE, Ubuntu). V sistemu Windows je bila težava tiho odpravljena Julijska posodobitev. Podjetje Google pripravljeno popravek za jedro 4.19, dobavljeno s sistemom ChromeOS in Android.

Po mnenju raziskovalcev iz Bitdefenderja je bil Intel o težavi obveščen že avgusta lani. Odločeno je bilo, da se težava odpravi programsko, za kar so bili v usklajenem razvoju popravka vključeni razvijalci iz Microsofta, Googla in jedra Linuxa. Starejše Intelove procesorje, pred Ivy Bridge, je veliko težje napadati zaradi pomanjkanja podpore za navodilo WRGSBASE, uporabljeno v izkoriščanju. Težava ne vpliva na sisteme ARM, POWER, SPARC, MIPS in RISC-V, ker ne podpirajo navodil SWAPGS.

Težava prizadene predvsem lastnike procesorjev Intel -
Na sistemih AMD je bilo mogoče reproducirati samo drugi scenarij napada, ki je omejen na špekulativno obdelavo osnovne vrednosti registra GS, ki se lahko uporablja za iskanje določenih vrednosti v naključnih pomnilniških območjih. Za blokiranje te možnosti napada zadostuje obstoječe metode zaščite pred Spectre v1.

Vir: opennet.ru

Dodaj komentar