sok A Bitdefender kutatói új sebezhetőséget fedeztek fel az utasítások spekulatív végrehajtásának mechanizmusában a modern processzorokban, aki megkapta a SWAPGS nevet, Megfelel a problémát okozó processzor utasításának.
Sebezhetőség lehetővé teszi egy kiváltságos támadó számára, hogy meghatározza a kernel memóriaterületeinek tartalmát vagy virtuális gépek futtatása. A probléma megerősítést nyert az Intel processzorain (x86_64), és részben érinti azokat az AMD processzorokat, amelyeknél az elsődleges támadási vektor nem jelenik meg.
A korábban bevezetett Spectre és Meltdown anti-sebezhetőségi módszerek nem védenek az SWAPGS-támadások ellen Intel processzorok használatával, de már javasoltak megoldásokat Linuxra, ChromeOS-ra, Androidra és Windows-ra.
A sérülékenység a Spectre v1 osztályba tartozik és azon az elképzelésen alapszik, hogy adatokat kérjen le a processzor gyorsítótárából, amelyek az utasítások spekulatív végrehajtása után maradnak.
A modern CPU-k konverziós előrejelző blokkjai néhány, valószínűleg végrehajtandó utasítás proaktív végrehajtását használják a teljesítmény javítása érdekében, de nem várják meg a végrehajtásukat meghatározó összes tényező kiszámítását (például amikor az utasítások átállási feltételei vagy hozzáférési paramétereket még nem számolták ki).
Ha az előrejelzés nem kerül megerősítésre, a processzor elveti a spekulatív futtatás eredményét, de a futtatás során feldolgozott adatokat a processzor gyorsítótárba helyezi, és a gyorsítótár tartalmának csatornákon keresztüli meghatározására szolgáló módszerekkel visszaállíthatja azokat. a gyorsítótárazott és nem gyorsítótárazott adatok hozzáférési idejének változása.
A SWAPGS-ről
Az új támadás sajátossága az SWAPGS utasítás spekulatív végrehajtása során felmerülő szivárgás használata, amelyet az operációs rendszerek használnak a GS regiszter értékének kicserélésére, amikor a vezérlést a felhasználói térről az operációs rendszer kernelére helyezik át (a felhasználói térben használt GS értéket felváltja a kernel műveleteiben használt érték).
A GS Linux kernelje tárolja a per_cpu mutatót, amelyet a kernel adatainak elérésére használunk, és rámutat a TLS-re (Thread Local Storage) a felhasználói térben.
Az SWAPGS-utasítás kettős meghívásának kizárása után a kerneltérből történő ismételt kernel-hozzáférés vagy a GS-regiszter cseréjét nem igénylő kód végrehajtása után az utasítás előtt ellenőrizni és feltételes átmenetet kell végrehajtani.
A spekulatív végrehajtási mechanizmus megelőzi a kód végrehajtását az SWAPGS utasítással, anélkül, hogy megvárná az ellenőrzési eredményt, és ha a kiválasztott elágazást nem erősítik meg, dobja el az eredményt.
Ezért, olyan helyzet állhat elő, amikor az SWAPGS végrehajtását meghatározó fiókot spekulatív módon választják ki, de a spekulatív végrehajtás során a GS regiszter értékét az SWAPGS utasítás megváltoztatja, és a memória függő műveletekben fogja használni, amelyeket a CPU tárol.
A kutatók két támadási forgatókönyvet javasoltak amelyekhez prototípusokat használtak fel.
- Az első forgatókönyv azon a helyzeten alapul, amikor az SWAPGS utasítást nem spekulatív módon hajtják végre, annak ellenére, hogy a tényleges végrehajtás során használják, és a második forgatókönyv ezzel ellentétes, amikor az SWAPGS utasítást spekulatív módon hajtják végre, bár valójában nem kellene.
- Minden forgatókönyv esetében két működési lehetőség van: a támadó meghatározhatja az értéket egy adott címben az alapterületen, a támadó pedig egy adott értéket kereshet véletlen címekben a magban.
A megoldáshoz a rendszermag frissítésének telepítése szükséges mind a fő rendszerre, mind a vendégkörnyezetre, majd a rendszer újraindítása. A védelem letiltásához Linuxon használhatja a "nospectre_v1" beállítást, amely szintén letiltja az SWAPGS biztonsági rés blokkolásának intézkedéseit.
A megoldás a Linux kernel javításaként érhető el, amely már szerepel a 4.19.65, 5.2.7, 4.14.137, 4.9.188 és 4.4.188 verziókban, míg a különböző Linux disztribúciók esetében a vonatkozó javítások ezen és a következő hét időszakában érkeznek.