SWAPGS – naujas procesoriaus spekuliacinio vykdymo mechanizmo pažeidžiamumas

Tyrėjai iš Bitdefender atskleista naujas pažeidžiamumas (CVE-2019-1125) šiuolaikinių procesorių spekuliaciniame komandų vykdymo mechanizme, kuris pavadintas SWAPGS, kuris atitinka problemą sukeliančios procesoriaus komandos pavadinimą. Pažeidžiamumas leidžia leisti neprivilegijuotam užpuolikui nustatyti branduolio atminties sričių arba veikiančių virtualių mašinų turinį. Problema patvirtino „Intel“ procesoriuose (x86_64) ir iš dalies paveikia AMD procesoriai, kuriems pagrindinis atakos vektorius neatsiranda. Anksčiau įdiegti metodai, skirti neutralizuoti Spectre ir Meltdown pažeidžiamumą, neapsaugo nuo SWAPGS atakos naudojant „Intel“ procesorius, tačiau jau buvo pasiūlyti pataisymai „Linux“, „ChromeOS“, „Android“ ir „Windows“.

Pažeidžiamumas priklauso Spectre v1 klasei ir yra pagrįstas idėja atkurti duomenis iš procesoriaus talpyklos, likusių po spekuliacinio instrukcijų vykdymo. Siekdami pagerinti našumą, šiuolaikinių procesorių šakų numatymo blokai naudoja prevencinį kai kurių instrukcijų, kurios greičiausiai bus įvykdytos, vykdymą, bet nelaukia, kol bus apskaičiuoti visi jų vykdymą lemiantys veiksniai (pavyzdžiui, kai šakos sąlygos ar prieigos parametrai neturi dar apskaičiuota). Jei prognozė nepasitvirtina, procesorius atmeta spekuliacinio vykdymo rezultatą, tačiau jo metu apdoroti duomenys lieka procesoriaus talpykloje ir gali būti atkurti naudojant talpyklos turinio nustatymo per šoninius kanalus metodus, analizuojant prieigos pasikeitimą. laiko talpykloje saugomiems ir neišsaugotiems duomenims.

Naujos atakos ypatumas yra nutekėjimo, atsirandančio spekuliatyvaus SWAPGS nurodymo vykdymo metu, kuris naudojamas operacinėse sistemose pakeisti GS registro reikšmę, kai valdymas iš vartotojo erdvės pereina į OS branduolį (GS) reikšmė, naudojama vartotojo erdvėje, pakeičiama reikšme, naudojama atliekant operacijas branduolyje ). „Linux“ branduolyje GS saugo per_cpu rodyklę, naudojamą branduolio duomenims pasiekti, o vartotojo erdvė saugo nuorodas į TLS (Thread Local Storage).

Kad SWAPGS komanda nebūtų iškviečiama du kartus, kai vėl pasiekiate branduolį iš branduolio erdvės arba kai vykdomas kodas, kuriam nereikia keisti GS registro, prieš komandą atliekama patikra ir sąlyginė šaka. Spekuliacinis vykdymo variklis aktyviai vykdo kodą su SWAPGS komanda, nelaukdamas patikrinimo rezultato, o jei pasirinkta šaka nepatvirtina, rezultatą atmeta. Taigi, gali susidaryti situacija, kai spekuliaciniu būdu pasirenkama šaka, kurioje SWAPGS vykdymas nevykdomas, tačiau spekuliacinio vykdymo metu GS registro reikšmė bus pakeista SWAPGS instrukcija ir naudojama priklausomose atminties operacijose, kurios atsiduria procesoriaus talpykloje.

Tyrėjai pasiūlė du atakos scenarijus, kuriems buvo parengti išnaudojimo prototipai. Pirmasis scenarijus paremtas situacija, kai SWAPGS komanda nevykdoma spekuliatyviai, nors realiai naudojama vykdant, o antrasis – priešingai, kai SWAPGS komanda vykdoma spekuliatyviai, nors realiai ji neturėtų būti vykdoma. Kiekvienam scenarijui yra dvi išnaudojimo parinktys: užpuolikas gali nustatyti reikšmę konkrečiame branduolio srities adresu, o užpuolikas gali ieškoti konkrečios reikšmės atsitiktiniais branduolio adresais. Atakos vykdymas užtrunka ilgai, o išnaudojimui gali prireikti kelių valandų, kad nutekėjimas būtų užbaigtas.

„Linux“ branduolyje yra problema pašalinta pakeitus SWAPGS instrukcijų iškvietimo logiką (spekuliatyvaus vykdymo blokavimas), panašiai kaip ir kitų Spectre v1 klasės pažeidžiamumų taisymas. Tikimasi, kad papildoma apsauga turės minimalų poveikį tipinių darbo krūvių veikimui. Latencija atsiranda perjungimo tarp vartotojo ir branduolio erdvės fazės metu, todėl gali sumažėti našumas, kai, pavyzdžiui, iš programos iškviečiama daug sistemos arba dažnai generuojami NMI ir pertrūkiai.

Norint taisyti, reikia įdiegti branduolio naujinimą tiek pagrindinėje sistemoje, tiek svečių aplinkoje, o po to iš naujo paleisti sistemą. Norint išjungti apsaugą Linux sistemoje, galima naudoti parinktį „nospectre_v1“, kuri taip pat išjungia priemones, skirtas blokuoti SWAPGS pažeidžiamumą. Pataisymas pasiekiamas kaip pleistras Linux branduoliui, kuris jau įtrauktas į leidimus 4.19.65, 5.2.7, 4.14.137, 4.9.188 ir 4.4.188. Linux platinimų atnaujinimai dar nebuvo išleisti (debian, RHEL, Minkšta fetrinė skrybėlė, Arch Linux, SUSE / openSUSE, ubuntu). „Windows“ sistemoje problema buvo tyliai ištaisyta Liepos mėnesio atnaujinimas. „Google“ įmonė paruoštas 4.19 branduolio pataisymas, pristatytas su „ChromeOS“ ir Android.

„Bitdefender“ tyrėjų teigimu, „Intel“ apie problemą buvo informuota dar praėjusių metų rugpjūtį. Problemą buvo nuspręsta išspręsti programiškai, o taisymo koordinuotame kūrime dalyvavo „Microsoft“, „Google“ ir „Linux“ branduolio kūrėjai. Senesnius „Intel“ procesorius, prieš „Ivy Bridge“, atakuoti yra daug sunkiau, nes nepalaikoma WRGSBASE instrukcija, naudojama išnaudojime. ARM, POWER, SPARC, MIPS ir RISC-V sistemos problemos neturi įtakos, nes jos nepalaiko SWAPGS instrukcijos.

Problema daugiausia liečia „Intel“ procesorių savininkus -
AMD sistemose pavyko atkurti tik antrąjį atakos scenarijų, kuris apsiriboja spekuliatyviu GS registro bazinės vertės apdorojimu, kuris gali būti naudojamas ieškant konkrečių reikšmių atsitiktinėse atminties srityse. Norėdami užblokuoti šią atakos parinktį pakanka esami apsaugos nuo Spectre v1 metodai.

Šaltinis: opennet.ru

Добавить комментарий