SWAPGS - нова уязвимост в механизма за спекулативно изпълнение на процесора

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

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

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

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

Изследователите са предложили два сценария на атака, за които са подготвени прототипи на експлойт. Първият сценарий се основава на ситуацията, при която инструкцията 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

Добавяне на нов коментар