SWAPGS – a CPU spekulatív végrehajtási mechanizmusának új sebezhetősége

A Bitdefender kutatói kiderült új sebezhetőség (CVE-2019 1125-). Sebezhetőség lehetővé teszi lehetővé teszi a jogosulatlan támadók számára a kernel memóriaterületeinek vagy a futó virtuális gépek tartalmának meghatározását. Probléma megerősített Intel processzorokban (x86_64) és részben érinti AMD processzorok, amelyeknél a fő támadási vektor nem jelenik meg. A Spectre és Meltdown sérülékenységek ellen korábban bevezetett módszerek nem védenek a SWAPGS támadás ellen Intel processzorok használatakor, de Linux, ChromeOS, Android és Windows esetében már javasoltak javításokat.

A sérülékenység a Spectre v1 osztályba tartozik, és azon az elgondoláson alapul, hogy a processzor gyorsítótárából vissza kell állítani az utasítások spekulatív végrehajtása után megmaradt adatokat. A teljesítmény javítása érdekében a modern CPU-k elágazás-előrejelző egységei néhány olyan utasítás előzetes végrehajtását használják, amelyek végrehajtása a legnagyobb valószínűséggel történik, de nem várják meg a végrehajtásukat meghatározó összes tényező kiszámítását (például ha az elágazási feltételek vagy a hozzáférési paraméterek nem. még kiszámítva). Ha az előrejelzés nem igazolódik be, a processzor elveti a spekulatív végrehajtás eredményét, de az alatt feldolgozott adatok a processzor gyorsítótárában maradnak, és visszaállíthatók az oldalcsatornákon keresztül a gyorsítótár tartalmának meghatározására szolgáló módszerekkel, a hozzáférés változásának elemzésével. idő a gyorsítótárazott és nem gyorsítótárazott adatokhoz.

Az új támadás sajátossága a SWAPGS utasítás spekulatív végrehajtása során fellépő szivárgás használata, amelyet az operációs rendszerekben a GS regiszter értékének helyettesítésére használnak, amikor a vezérlés a felhasználói térből az operációs rendszer kernelébe (a GS) kerül át. a felhasználói térben használt érték lecserélődik a kernelben végzett műveletek során használt értékre). A Linux kernelben a GS egy per_cpu mutatót tárol a kerneladatok eléréséhez, a felhasználói terület pedig a TLS-re (Thread Local Storage) mutató mutatókat.

Annak elkerülése érdekében, hogy a SWAPGS utasítás kétszeri meghívását elkerülje, amikor ismét kernelterületről éri el a rendszermagot, vagy olyan kódot hajt végre, amely nem igényel GS-regiszter módosítást, az utasítás előtt egy ellenőrzést és egy feltételes elágazást hajtanak végre. A spekulatív végrehajtási motor proaktív módon végrehajtja a kódot a SWAPGS utasítással anélkül, hogy megvárná az ellenőrzés eredményét, és ha a kiválasztott ág nem erősíthető meg, elveti az eredményt. Így olyan helyzet állhat elő, amikor egy SWAPGS végrehajtást nem igénylő ágat spekulatív módon választanak ki, de a spekulatív végrehajtás során a GS regiszter értékét a SWAPGS utasítás megváltoztatja és a függő memóriaműveletekben használja, amelyek a CPU gyorsítótárába kerülnek.

A kutatók két támadási forgatókönyvet javasoltak, amelyekhez exploit prototípusokat készítettek. Az első forgatókönyv azon a helyzeten alapul, amikor a SWAPGS utasítást nem spekulatív módon hajtják végre, bár ténylegesen a végrehajtás során használják, a második pedig az ellenkezője, amikor a SWAPGS utasítást spekulatív módon hajtják végre, bár valójában nem szabadna végrehajtani. Mindegyik forgatókönyv esetében két lehetőség van a kihasználásra: a támadó meghatározhatja az értéket a kernelterület egy adott címén, a támadó pedig kereshet egy adott értéket a kernel véletlenszerű címein. A támadás végrehajtása hosszú időt vesz igénybe, és a kihasználás több órát is igénybe vehet a szivárgás befejezéséhez.

Probléma van a Linux kernelben Eltüntetett a SWAPGS utasítás meghívásának logikájának megváltoztatásával (a spekulatív végrehajtás blokkolása), hasonlóan a Spectre v1 osztályú más sérülékenységek kijavításához. A hozzáadott védelem várhatóan minimális hatással lesz a tipikus munkaterhelések teljesítményére. A késleltetés a felhasználói és a kernelterület közötti váltási szakaszban jelentkezik, ami gyenge teljesítményt eredményezhet, ha például erős rendszerhívás történik az alkalmazásból, vagy gyakran generálnak NMI-ket és megszakításokat.

A javítás megköveteli a kernelfrissítés telepítését mind a gazdagépen, mind a vendégkörnyezeten, majd a rendszer újraindítását. A védelem letiltásához Linuxon a "nospectre_v1" opció használható, amely letiltja a SWAPGS sebezhetőséget blokkoló intézkedéseket is. A javítás elérhető, mint tapasz a Linux kernelhez, amely már benne van a kiadásokban 4.19.65, 5.2.7, 4.14.137, 4.9.188 és 4.4.188. A Linux disztribúciók frissítései még nem jelentek meg (Debian, RHEL, Fedora, Arch Linux, SUSE/openSUSE, Ubuntu). Windowson a probléma csendben megoldódott Júliusi frissítés. Google Company előkészített javítás a ChromeOS-sel szállított 4.19-es kernelhez Android.

A Bitdefender kutatói szerint az Intel még tavaly augusztusban értesült a problémáról. A probléma programozott megoldása mellett döntöttek, amelyhez a Microsoft, a Google és a Linux kernel fejlesztőit bevonták a javítás összehangolt kidolgozásába. A régebbi Intel processzorokat, az Ivy Bridge előtti processzorokat sokkal nehezebb megtámadni az exploit során használt WRGSBASE utasítás támogatásának hiánya miatt. Az ARM, POWER, SPARC, MIPS és RISC-V rendszereket nem érinti a probléma, mert nem támogatják a SWAPGS utasítást.

A probléma elsősorban az Intel processzorok tulajdonosait érinti -
Az AMD rendszereken csak a második támadási forgatókönyv volt reprodukálható, amely a GS-regiszter alapértékének spekulatív feldolgozására korlátozódik, amivel konkrét értékeket lehet keresni a véletlenszerű memóriaterületeken. Ennek a támadási lehetőségnek a blokkolásához elegendő a Spectre v1 elleni védelem meglévő módszerei.

Forrás: opennet.ru

Hozzászólás