Onderzoekers van Bitdefender een nieuwe kwetsbaarheid () in de mechanismen voor speculatieve uitvoering van instructies in moderne CPU's, genaamd SWAPGS, verwijzend naar de procesinstructie die het probleem veroorzaakt. De kwetsbaarheid staat een niet-geprivilegieerde aanvaller toe om de inhoud van kernelgeheugengebieden of draaiende virtuele machines te bepalen. Het probleem in Intel-processors (x86_64) en gedeeltelijk in AMD-processors, waarvoor de primaire aanvalsvector zich niet manifesteert. Eerdere tegenmaatregelen voor de kwetsbaarheden Spectre en Meltdown beschermen niet tegen de SWAPGS-aanval bij het gebruik van Intel-processors, maar voor Linux, ChromeOS, Android en Windows zijn al oplossingen voorgesteld.
De kwetsbaarheid valt onder de klasse Spectre v1 en is gebaseerd op het idee van het herstellen van gegevens uit de procesorkooi die overblijven na de speculatieve uitvoering van instructies. De voorspellingsmodules van moderne CPU's passen speculatieve uitvoering toe van enkele instructies waarvan waarschijnlijk wordt verwacht dat ze worden uitgevoerd, maar wachten niet op de berekening van alle factoren die hun uitvoering bepalen (bijvoorbeeld wanneer de overgangsvoorwaarden of toegangsparameters nog niet zijn berekend). Als de voorspelling niet wordt bevestigd, werpt de processor het resultaat van de speculatieve uitvoering af, maar de tijdens dit proces verwerkte gegevens blijven in de procesorkooi en kunnen worden hersteld met behulp van methoden die de inhoud van de kooi bepalen via zij-tactieken, die de toegangstijd tot gecachte en niet-gecacheerde gegevens analyseren.
De eigenschap van de nieuwe aanval is het gebruik van een lek dat optreedt tijdens de speculatieve uitvoering van de instructie SWAPGS, die in besturingssystemen wordt gebruikt om de waarde van de GS-register te vervangen bij de overgang van controle van de gebruikersruimte naar de kernel van het besturingssysteem (de gebruikte waarde van GS in de gebruikersruimte wordt vervangen door de waarde die wordt gebruikt bij operaties in de kernel). In de Linux-kernel bevat GS een per_cpu-pointer die wordt gebruikt voor toegang tot kerngegevens, terwijl in de gebruikersruimte pointers naar TLS (Thread Local Storage) worden bewaard.
Om dubbele aanroep van de SWAPGS-instructie te voorkomen bij herhaalde toegang tot de kernel vanuit de kernruimte of wanneer er code wordt uitgevoerd die geen wijziging van het GS-register vereist, wordt er vóór de instructie een controle en voorwaardelijke sprong uitgevoerd. Het mechanisme voor speculatieve uitvoering gaat vooruit met de uitvoering van de code met de SWAPGS-instructie, zonder te wachten op het resultaat van de controle, en als de gekozen tak niet bevestigd wordt, wordt het resultaat verworpen. Zo kan het gebeuren dat speculatief een tak wordt gekozen die geen uitvoering van SWAPGS voorziet, maar tijdens de speculatieve uitvoering de waarde van het GS-register wordt gewijzigd door de SWAPGS-instructie en gebruikt wordt in afhankelijke geheugenoperaties, die in de CPU-cache worden opgeslagen.
Onderzoekers hebben twee aanvalsscenario's voorgesteld waarvoor prototypes van exploits zijn voorbereid. Het eerste scenario is gebaseerd op de situatie waarin de SWAPGS-instructie niet speculatief wordt uitgevoerd, hoewel deze wordt gebruikt tijdens de feitelijke uitvoering, en het tweede scenario is het tegenovergestelde, waarbij de SWAPGS-instructie speculatief wordt uitgevoerd, hoewel deze feitelijk niet zou moeten worden uitgevoerd. Voor elk scenario zijn er twee exploitatievarianten voorzien: de aanvaller kan een waarde bepalen op een bepaald adres in het kernelgebied en de aanvaller kan een bepaalde waarde zoeken op willekeurige adressen in de kernel. Het uitvoeren van de aanval kost veel tijd en voor het organiseren van een lek kan het nodig zijn om de exploit gedurende enkele uren uit te voeren.

In de Linux-kernel is er een probleem door wijziging van de logica van de aanroep van de SWAPGS-instructie (blokkeren van speculatieve uitvoering), vergelijkbaar met de oplossing van andere kwetsbaarheden in de Spectre v1-klasse. Er wordt aangenomen dat de toegevoegde bescherming minimaal invloed zal hebben op de prestaties van typische werkbelasting. De vertraging vindt plaats tijdens de omschakeling tussen de gebruikersruimte en de kernel, wat kan leiden tot verminderde prestaties, bijvoorbeeld bij intensieve uitvoering van systeemaanroepen vanuit een applicatie of bij frequente generatie van NMI en onderbrekingen.
De correctie vereist de installatie van een kernelupdate zowel in het hoofd systeem als in de gastomgevingen, met een daaropvolgende herstart van het systeem. Om de bescherming in Linux uit te schakelen, kan de optie 'nospectre_v1' worden gebruikt, die ook de maatregelen voor het blokkeren van de SWAPGS-kwetsbaarheid uitschakelt. De correctie is beschikbaar als voor de Linux-kernel, die al is opgenomen in de versies , , 4.14.137, 4.9.188 en 4.4.188. Updates voor Linux-distributies zijn nog niet uitgebracht (, , , , , ). In Windows is het probleem zonder veel publiciteit opgelost in . Google heeft de correctie voor kernel 4.19 geleverd, die wordt meegeleverd met ChromeOS en .
Volgens onderzoekers van Bitdefender was Intel al in augustus vorig jaar op de hoogte van het probleem. Het probleem moest softwarematig worden opgelost, waarvoor ontwikkelaars van Microsoft, Google en de Linux-kernel zijn betrokken bij de gecoördineerde ontwikkeling van de correctie. Oude Intel-processoren, tot Ivy Bridge, zijn aanzienlijk moeilijker te exploiteren vanwege het ontbreken van ondersteuning voor de WRGSBASE-instructie die in de exploit is gebruikt. Systemen met ARM, POWER, SPARC, MIPS en RISC-V zijn niet vatbaar voor het probleem, aangezien ze de SWAPGS-instructie niet ondersteunen.
Het probleem bedreigt in hoofdzaak bezitters van Intel-processoren —
op systemen van AMD kon alleen het tweede aanvalsscenario worden gereproduceerd, dat is beperkt tot de speculatieve verwerking van de basiswaarde van de GS-register, wat kan worden gebruikt om bepaalde waarden in willekeurige geheugengebieden te vinden. Om deze aanvalsmethode te blokkeren bestaande methoden voor bescherming tegen Spectre v1-kwetsbaarheden.
Bron: opennet.ru
