A Bitdefender kutatásai szerint új sebezhetőség () a modern CPU-k spekulatív utasításvégrehajtási mechanizmusában, amely SWAPGS névre hallgat, a problémát kiváltó utasítás neve után. A sebezhetőség nem privilégizált támadók számára lehetővé teszi a kernel vagy a futó virtuális gépek memóriazónáinak tartalmának meghatározását. A probléma az Intel (x86_64) processzorokban, valamint részben az AMD processzorokban, ahol az alapvető támadási vektor nem ugrik elő. A Spectre és Meltdown sebezhetőségek ellen már implementált ellenintézkedések nem nyújtanak védelmet a SWAPGS támadások ellen Intel processzorok alkalmazásakor, de a Linux, ChromeOS, Android és Windows számára már javasoltak javításokat.
A sebezhetőség a Spectre v1 osztályba tartozik, és annak az elképzelésnek alapján működik, hogy adatokat állítanak helyre a processzor gyorsítótárából, amelyek a spekulatív utasításvégrehajtás után maradnak. A modern CPU-k ugráselőrejelző blokkjai a teljesítmény növelése érdekében előre végrehajtják bizonyos utasításokat, amelyek valószínűleg végrehajtásra kerülnek, de nem várják meg az összes végrehajtást meghatározó tényező kiszámítását (például amikor még nem számolták ki az ugrás feltételeit vagy a hozzáférési paramétereket). Ha a jóslat nem igazolódik, a processzor elveti a spekulatív végrehajtás eredményét, azonban a végrehajtás során feldolgozott adatok a processzor gyorsítótárában maradnak, és helyreállíthatók a gyorsítótár tartalmának közvetett csatornákon való meghatározását célzó módszerekkel, amelyek a gyorsítótárazott és a nem gyorsítótárazott adatokhoz való hozzáférési idő változását elemzik.
Az új támadás sajátossága a sebezhetőség kihasználásában rejlik, amely a spekulatív utasításvégrehajtás során jön létre, amikor a SWAPGS utasítást alkalmazzák az operációs rendszerekben a GS regiszter értékének cseréjekor a felhasználói térből az OS kernelbe (a felhasználói térben használt GS értéket arra az értékre cserélik, amelyet a kernel műveleteknél használnak). A Linux kernelben a GS tárolja a per_cpu mutatót, amelyet a kernel adataihoz való hozzáféréshez használnak, míg a felhasználói térben a TLS (Thredd Local Storage) mutatók találhatók.
A SWAPGS utasítás megduplázott hívásának kizárása érdekében, amikor a kernelből a kernel területébe, vagy ha a regiszter GS helyettesítését nem igénylő kód végrehajtásra kerül, a parancs végrehajtása előtt ellenőrzést és feltételes ugrást végeznek. A spekulatív végrehajtás mechanizmusa előre áttér a SWAPGS utasítással rendelkező kód végrehajtására, anélkül, hogy megvárná az ellenőrzés eredményét, és ha a kiválasztott ág nem megerősített, elveti az eredményt. Így előfordulhat, hogy a spekulatív módon kiválasztott ág nem tartalmazza a SWAPGS végrehajtásának lehetőségét, de a spekulatív végrehajtás során a SWAPGS utasítás módosítja a GS regiszter értékét, amelyet a memóriával kapcsolatos függő műveletekhez használnak, és amely a CPU gyorsítótárában marad.
A kutatók két támadási forgatókönyvet javasoltak, amelyekhez prototípus exploitokat készítettek. Az első forgatókönyv azon a helyzeten alapul, amikor a SWAPGS utasítást nem hajtják végre spekulatívan, pedig tényleges végrehajtás szükséges, míg a második, éppen ellenkezőleg, amikor a SWAPGS utasítás spekulatívan végrehajtásra kerül, noha valójában nem kellene. Mindkét forgatókönyvnél két kihasználási lehetőség van: a támadó meghatározhat egy értéket egy adott címre a kernel területén, illetve a támadó egy adott érték keresését végezheti véletlenszerű címeken a kernelben. A támadás végrehajtása sok időt vesz igénybe, és a kiszivárgás elősegítéséhez az exploit futtatása több órát is igényelhet.

A Linux kernelben a probléma a SWAPGS utasítás hívási logikájának megváltoztatásával (spekulatív végrehajtás letiltása), hasonlóan más Spectre v1 osztályú sebezhetőségek javításához. Feltételezik, hogy a hozzáadott védelem minimális hatással lesz a tipikus munkaterhelések teljesítményére. A késleltetés a felhasználói tér és a kernel közötti váltás során jelentkezik, amely a teljesítmény csökkenéséhez vezethet, például intenzív rendszerhívások végrehajtása során az alkalmazásból, vagy gyakori NMI és megszakítások generálásakor.
A javítás kényszeríti a kernelfrissítések telepítését a fő rendszerben és a vendégkörnyezetekben, amit a rendszer újraindítása követ. A védelem letiltásához a Linuxban használható a "nospectre_v1" opció, ami a SWAPGS sebezhetőség elleni intézkedéseket is letiltja. A javítás elérhető a Linux kernelhez, amely már része a kiadásoknak , , 4.14.137, 4.9.188 és 4.4.188. A Linux disztribúciók frissítései még nem jelentek meg (, , , , , ). Windows alatt a problémát csendben orvosolták a . A Google javítást biztosított a 4.19-es kernelhez, amely a ChromeOS-ban érhető el, és .
a Bitdefender kutatói szerint az Intel már tavaly augusztusban értesült a problémáról. A problémát programozással kívánták orvosolni, ezért a javítás koordinálásában részt vettek a Microsoft, a Google és a Linux kernel fejlesztői. Az Intel régebbi processzorai, az Ivy Bridge előtt, jelentősen nehezebben támadhatók a WRGSBASE utasítás támogatásának hiánya miatt, amelyet a kihasználás során alkalmaztak. Az ARM, POWER, SPARC, MIPS és RISC-V rendszerek nem érintettek, mivel nem támogatják a SWAPGS utasítást.
A probléma elsősorban az Intel processzorral rendelkező felhasználókat fenyegeti —
AMD rendszereken csak a támadás második forgatókönyvének reprodukálása volt lehetséges, amely a GS regiszter alapértékének spekulatív feldolgozására korlátozódik, és bizonyos értékek keresésére használható véletlenszerű memória területeken. E támadási mód megakadályozásához a Spectre v1 sebezhetőségek ellen alkalmazható védelmi módszereket kell használni.
Forrás: opennet.ru
