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

Istraživači iz Bitdefendera otkriveno nova ranjivost (CVE-2019-1125) u spekulativnom mehanizmu izvršenja instrukcija modernih CPU-a, koji se zove SWAPGS, što odgovara imenu procesorske instrukcije koja uzrokuje problem. Ranjivost dozvoljava dozvolite neprivilegovanom napadaču da odredi sadržaj memorijskih područja kernela ili pokrenutih virtuelnih mašina. Problem potvrđeno u Intel procesorima (x86_64) i djelimično utiče AMD procesori za koje se ne pojavljuje glavni vektor napada. Ranije implementirane metode za suzbijanje ranjivosti Spectre i Meltdown ne štite od SWAPGS napada kada se koriste Intel procesori, ali su popravci već predloženi za Linux, ChromeOS, Android i Windows.

Ranjivost pripada klasi Spectre v1 i zasniva se na ideji vraćanja podataka iz keša procesora koji su ostali nakon spekulativnog izvršavanja instrukcija. Da bi poboljšale performanse, jedinice za predviđanje grananja modernih CPU-a koriste preventivno izvršavanje nekih instrukcija za koje je najvjerovatnije da će se izvršiti, ali bez čekanja na izračunavanje svih faktora koji određuju njihovo izvršenje (na primjer, kada uslovi grananja ili parametri pristupa nisu još izračunato). Ako se predviđanje ne potvrdi, procesor odbacuje rezultat spekulativnog izvršenja, ali podaci obrađeni tokom njega ostaju u kešu procesora i mogu se vratiti korištenjem metoda za određivanje sadržaja keša kroz bočne kanale, analizirajući promjenu pristupa vrijeme za keširane i nekeširane podatke.

Posebnost novog napada je korištenje curenja do kojeg dolazi tokom spekulativnog izvršavanja SWAPGS instrukcije, koja se koristi u operativnim sistemima za zamjenu vrijednosti GS registra kada kontrola prelazi sa korisničkog prostora na jezgro OS (GS vrijednost koja se koristi u korisničkom prostoru zamjenjuje se vrijednošću koja se koristi tokom operacija u kernelu). U Linux kernelu, GS pohranjuje per_cpu pokazivač koji se koristi za pristup podacima kernela, a korisnički prostor pohranjuje pokazivače na TLS (Thread Local Storage).

Kako bi se izbjeglo pozivanje SWAPGS instrukcije dvaput kada se ponovo pristupa kernelu iz prostora kernela ili kada se izvršava kod koji ne zahtijeva promjenu GS registra, provjera i uslovno grananje se izvode prije instrukcije. Mehanizam spekulativnog izvršenja proaktivno nastavlja izvršavanje koda sa SWAPGS instrukcijom bez čekanja na rezultat provjere, a ako odabrana grana nije potvrđena, odbacuje rezultat. Dakle, može nastati situacija kada se spekulativno odabere grana koja ne uključuje SWAPGS izvršavanje, ali će tokom spekulativnog izvršenja vrijednost GS registra biti promijenjena SWAPGS instrukcijom i korištena u zavisnim memorijskim operacijama koje završe u CPU kešu.

Istraživači su predložili dva scenarija napada za koje su pripremljeni prototipovi eksploatacije. Prvi scenario se zasniva na situaciji u kojoj se SWAPGS instrukcija ne izvršava spekulativno, iako se zapravo koristi u izvršenju, a drugi je suprotan, kada se SWAPGS instrukcija izvršava spekulativno, iako je zapravo ne bi trebalo izvršiti. Za svaki scenario postoje dvije opcije za eksploataciju: napadač može odrediti vrijednost na određenoj adresi u području kernela, a napadač može tražiti određenu vrijednost na nasumično odabranim adresama u kernelu. Izvođenje napada traje dugo i eksploataciji može biti potrebno nekoliko sati da se završi curenje.

Postoji problem u Linux kernelu eliminisan promjenom logike pozivanja SWAPGS instrukcije (blokiranje spekulativnog izvršenja), slično ispravljanju drugih ranjivosti Spectre v1 klase. Očekuje se da će dodatna zaštita imati minimalan uticaj na performanse tipičnih radnih opterećenja. Latencija se javlja tokom faze prebacivanja između korisničkog i kernel prostora, što može rezultirati lošim performansama kada, na primjer, postoji težak sistemski poziv iz aplikacije ili često generiranje NMI-ova i prekida.

Popravka zahtijeva instaliranje ažuriranja kernela i na domaćinskom sistemu i na gostujućem okruženju, nakon čega slijedi ponovno pokretanje sistema. Da biste onemogućili zaštitu na Linuxu, može se koristiti opcija "nospectre_v1", koja također onemogućuje mjere za blokiranje SWAPGS ranjivosti. Popravak je dostupan kao patch za Linux kernel, koji je već uključen u izdanja 4.19.65, 5.2.7, 4.14.137, 4.9.188 i 4.4.188. Ažuriranja za Linux distribucije još nisu objavljena (Debian, RHEL, fedora, Arch Linux, SUSE/openSUSE, Ubuntu). Na Windows-u, problem je tiho riješen Julsko ažuriranje. Google Company pripremljeno popravak za kernel 4.19 koji se isporučuje s ChromeOS-om i android.

Prema istraživačima iz Bitdefendera, Intel je o problemu obaviješten još u kolovozu prošle godine. Odlučeno je da se problem riješi programski, za što su programeri iz Microsofta, Googlea i Linux kernela bili uključeni u koordiniran razvoj popravka. Starije Intel procesore, pre-Ivy Bridge, mnogo je teže napasti zbog nedostatka podrške za WRGSBASE instrukciju koja se koristi u eksploataciji. ARM, POWER, SPARC, MIPS i RISC-V sistemi nisu pogođeni problemom jer ne podržavaju SWAPGS instrukciju.

Problem uglavnom pogađa vlasnike Intel procesora -
Na AMD sistemima, samo drugi scenarij napada je bio u mogućnosti da se reproducira, koji je ograničen na spekulativnu obradu osnovne vrijednosti GS registra, koji se može koristiti za traženje određenih vrijednosti u nasumičnom memorijskom području. Za blokiranje ove opcije napada dovoljno postojeće metode zaštite od Spectre v1.

izvor: opennet.ru

Dodajte komentar