SWAPGS — nova ranjivost u mehanizmu spekulativnog izvršavanja CPU-a

Istraživači iz tvrtke Bitdefender otkrile su otkrili novu ranjivost (CVE-2019-1125) u mehanizmu spekulativnog izvođenja instrukcija modernih CPU-a, koja je nazvana SWAPGS, prema nazivnoj procesorskoj instrukciji koja uzrokuje problem. Ranjivost omogućava omogućava neprivilegiranom napadaču da odredi sadržaj područja memorije jezgre ili pokrenutih virtualnih strojeva. Problem potvrđena je dodiruje Intel procesore (x86_64) i djelomično dotiče procesore AMD, za koje se ne manifestira osnovni vektor napada. Ranije implementirani načini protiv djelovanja ranjivostima Spectre i Meltdown ne štite od napada SWAPGS na Intel procesorima, ali su za Linux, ChromeOS, Android i Windows već predložene ispravke.

Ranjivost pripada klasi Spectre v1 i temelji se na ideji oporavka podataka iz procesorskih predmemorija, koji ostaju nakon spekulativnog izvođenja instrukcija. Blokovi predviđanja skokova modernih CPU-a za povećanje performansi koriste odgađano izvršenje određenih instrukcija za koje se vjerojatno očekuje da će biti izvršene, ali ne čekaju sve čimbenike koji definiraju njihovo izvršenje (npr. kada uvjeti skoka ili parametri pristupa još nisu izračunati). Ako predviđanje nije potvrđeno, procesor odbacuje rezultat spekulativnog izvršenja, ali podaci obrađeni tijekom tog izvršenja ostaju u procesorskoj predmemoriji i mogu se oporaviti pomoću metoda određivanja sadržaja predmemorije preko bočnih kanala, koji analiziraju promjene vremena pristupa predmemoriranim i nepodmirenim podacima.

Osobitost novog napada leži u korištenju curenja koja nastaju tijekom spekulativnog izvršenja instrukcije SWAPGS, koja se koristi u operativnim sustavima za zamjenu vrijednosti registra GS prilikom prijenosa kontrole iz prostora korisnika u jezgru OS-a (vrijednost GS koja se koristi u prostoru korisnika zamjenjuje se vrijednošću koja se koristi u operacijama unutar jezgre). U Linux jezgri, GS sadrži per_cpu pokazivač koji se koristi za pristup podacima jezgre, dok su u prostoru korisnika pokazivači na TLS (Thread Local Storage).

Kako bi se isključila dvostruka aktivacija instrukcije SWAPGS prilikom ponovnog pristupa jezgru iz kernel prostora ili kada se izvršava kod koji ne zahtijeva zamjenu registri GS, prije instrukcije se provodi provjera i uvjetna granica. Mehanizam spekulativnog izvršavanja unaprijed prelazi na izvršavanje koda s instrukcijom SWAPGS, ne čekajući rezultat provjere, i ako odabrana grana nije potvrđena, odbacuje rezultat. Tako može nastati situacija u kojoj će spekulativno biti odabrana grana koja ne predviđa izvršavanje SWAPGS, ali će se tijekom spekulativnog izvršavanja vrijednost registra GS promijeniti instrukcijom SWAPGS i koristiti u zavisnim operacijama s memorijom koje se zadržavaju u CPU cacheu.

Istraživači su predložili dva scenarija napada, za koje su pripremljeni prototipovi eksploita. Prvi scenarij temelji se na situaciji kada se instrukcija SWAPGS ne izvršava spekulativno, iako se koristi tijekom stvarnog izvršavanja, dok se drugi odnosi na suprotnu situaciju, kada se instrukcija SWAPGS izvršava spekulativno, iako to zapravo ne bi trebala. Za svaki scenarij su predviđena dva načina eksploatacije: napadač može odrediti vrijednost na određenoj adresi u kernel prostoru i napadač može pretražiti određenu vrijednost na slučajnim adresama u kernelu. Provođenje napada traje dugo, a za organizaciju curenja može biti potrebno izvođenje eksploita tijekom nekoliko sati.

Pogledajte video

U Linux kernelu problem riješena kroz promjenu logike poziva instrukcije SWAPGS (blokiranje spekulativnog izvršavanja), analogno ispravci drugih ranjivosti iz klase Spectre v1. Pretpostavlja se da će dodana zaštita minimalno utjecati na performanse tipičnih radnih opterećenja. Kašnjenje se javlja u fazi prebacivanja između korisničkog i kernel prostora, što može dovesti do smanjenja performansi, na primjer, tijekom intenzivnog izvršavanja sistemskih poziva iz aplikacije ili čestog generiranja NMI i prekida.

Ispravak zahtijeva instalaciju ažuriranja jezgre kako na glavnom sustavu, tako i u gostujućim okruženjima, uz naknadno ponovno pokretanje sustava. Za onemogućavanje zaštite u Linuxu može se koristiti opcija «nospectre_v1», koja također isključuje mjere za blokiranje ranjivosti SWAPGS. Ispravak je dostupan u obliku zakrpe za jezgru Linux, koja je već uključena u izdanja 4.19.65, 5.2.7, 4.14.137, 4.9.188 i 4.4.188. Ažuriranja za distribucije Linux još uvijek nisu objavljena (Debian, RHEL, Fedora, Arch Linux, SUSE/openSUSE, Ubuntu). U Windowsima je problem tiho riješen u srpnjskom ažuriranju. Tvrtka Google pripremila ispravila je jezgru 4.19, isporučenu u ChromeOS i Android.

Prema tvrdnjama istraživača iz tvrtke Bitdefender, Intel je bio obaviješten o problemu još u kolovozu prošle godine. Problem je odlučeno riješiti programerski, pri čemu su u koordiniranu izradu ispravka uključeni programeri iz Microsofta, Googlea i jezgre Linux. Stari Intelovi procesori, do Ivy Bridge, znatno su teži za napad zbog nedostatka podrške za instrukciju WRGSBASE, korištenu u eksploitu. Sustavi ARM, POWER, SPARC, MIPS i RISC-V nisu pogođeni problemom, jer ne podržavaju instrukciju SWAPGS.

Problem prijeti prvenstveno vlasnicima Intelovih procesora —
na sustavima AMD uspjelo se reproducirati samo drugi scenarij napada, ograničen na spekulativno procesiranje osnovne vrijednosti registra GS, što se može iskoristiti za traženje određenih vrijednosti u slučajnim područjima memorije. Za blokiranje ovog napada dovoljno je postojeći načini zaštite od ranjivosti Spectre v1.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster