SWAPGS — нова уязвимост в механизма за спекулативно изпълнение на CPU

Изследователи от компанията Bitdefender установиха ново уязвимост (CVE-2019-1125) в механизма за спекулативно изпълнение на инструкции в съвременните CPU, което получи името SWAPGS, съответстващо на името на процесорната инструкция, която предизвиква проблема. Уязвимостта позволява позволява на непривилигирован атакуващ да определи съдържанието на области на паметта на ядрото или на стартирани виртуални машини. Проблемът е потвърден в процесорите Intel (x86_64) и частично засяга в процесорите AMD, за които основният вектор на атака не се проявява. Предишно реализираните методи за противодействие на уязвимостите Spectre и Meltdown не защитават от атаката SWAPGS при използване на процесори Intel, но вече са предложени корекции за Linux, ChromeOS, Android и Windows.

Уязвимостта принадлежи към класа Spectre v1 и се основава на идеята за възстановяване на данни от кеша на процесора, останали след спекулативното изпълнение на инструкции. Блоковете за предсказване на преходи на съвременните CPU за повишаване на производителността прилагат предварително изпълнение на някои инструкции, които вероятно ще бъдат изпълнени, но не изчакват изчисляването на всички фактори, определящи тяхното изпълнение (например, когато все още не са изчислени условията за преход или параметрите за достъп). Ако прогнозата не се потвърди, процесорът отхвърля резултата от спекулативното изпълнение, но данните, обработени в хода на това, остават в кеша на процесора и могат да бъдат възстановени с помощта на методи за определяне на съдържанието на кеша чрез странични канали, които анализират промяната на времето за достъп до кеширани и некеширани данни.

Особеността на новата атака е в използването на изтичането, което възниква в хода на спекулативното изпълнение на инструкциите SWAPGS, които се използват в операционните системи за замяна на стойността на регистъра GS при преминаване на контрола от потребителското пространство към ядрото на ОС (употребяваната в потребителското пространство стойност GS се заменя със стойността, използвана при операциите в ядрото). В ядрото на Linux в GS се съхранява указател per_cpu, използван за достъп до данни на ядрото, а в потребителското пространство указателите за TLS (Thread Local Storage).

За да се избегне двойно извикване на инструкцията SWAPGS при повторно обръщение към ядрото от пространство на ядрото или когато се изпълнява код, който не изисква смяна на регистра GS, преди инструкцията се извършва проверка и условен преход. Механизмът за спекулативно изпълнение предварително преминава към изпълнението на кода с инструкцията SWAPGS, без да изчаква резултата от проверката, и ако избраната клонка не бъде потвърдена, резултатът се отхвърля. По този начин може да възникне ситуация, при която спекулативно ще бъде избрана клонка, която не предвижда изпълнение на SWAPGS, но в процеса на спекулативното изпълнение стойността на регистра GS ще бъде променена от инструкцията SWAPGS и използвана в зависими операции с паметта, които остават в кеша на CPU.

Изследователите предложиха два сценария на атака, за които са подготвени прототипи на експлоити. Първият сценарий се основава на ситуация, при която инструкцията SWAPGS не се изпълнява спекулативно, въпреки че се използва при фактическото изпълнение, а вторият — обратно, когато инструкцията SWAPGS се изпълнява спекулативно, въпреки че фактически не трябва. За всеки сценарий са предвидени два варианта на експлоатация: атакуващият може да определи стойност на определен адрес в областта на ядрото и атакуващият може да извърши търсене на определена стойност на произволни адреси в ядрото. Провеждането на атаката отнема много време, а за организиране на изтичането може да се наложи изпълнението на експлоита в течение на няколко часа.

Възпроизведи видео

В ядрото на Linux проблемът е отстранена чрез промяна на логиката на извикването на инструкцията SWAPGS (блокиране на спекулативното изпълнение), по аналогия с поправките на други уязвимости от класа Spectre v1. Предполага се, че добавената защита минимално ще повлияе на производителността на стандартните работни натоварвания. Забавянето възниква на етапа на превключване между пространството на потребителя и ядрото, което може да доведе до намаляване на производителността, например, при интензивно изпълнение на системни извиквания от приложение или често генериране на NMI и прекъсвания.

Корекцията изисква инсталиране на актуализация на ядрото както в основната система, така и в гостуващите среди, последвано от рестартиране на системата. За деактивиране на защитата в Linux може да се използва опцията „nospectre_v1“, която също така деактивира мерките за блокиране на уязвимостта SWAPGS. Корекцията е налична като пач за ядрото на Linux, което вече е включено в версиите 4.19.65, 5.2.7, 4.14.137, 4.9.188 и 4.4.188. Актуализации за дистрибуциите на Linux все още не са издадени (Debian, RHEL, Fedora, Arch Linux, SUSE/openSUSE, Ubuntu). В Windows проблемът е бил решен без много шум в юлското обновление. Компанията Google подготови корекция за ядрото 4.19, доставяно в ChromeOS и Android.

Според изследователите от компанията Bitdefender, Intel е била информирана за проблема още през август миналата година. Проблемът е решен да бъде устранен софтуерно, за което в координирането на разработката на корекцията са били привлечени разработчици от Microsoft, Google и ядрото на Linux. Старите процесори Intel, преди Ivy Bridge, са значително по-трудни за атака поради липсата на поддръжка на инструкциите WRGSBASE, използвани в експлойта. ARM, POWER, SPARC, MIPS и RISC-V системи не са изложени на проблема, тъй като не поддържат инструкциите SWAPGS.

Проблемът заплашва главно притежателите на процесори Intel —
в системите AMD успяхме да възпроизведем само втория сценарий на атака, който е ограничен до спекулативната обработка на основното значение на регистра GS, което може да се използва за намиране на определени стойности в случайни области на паметта. За блокиране на този вариант на атака е достатъчно има съществуващи методи за защита от уязвимости Spectre v1.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster