Изследователи от Bitdefender
Уязвимостта принадлежи към класа Spectre v1 и се основава на идеята за възстановяване на данни от кеша на процесора, останал след спекулативно изпълнение на инструкции. За да подобрят производителността, модулите за прогнозиране на разклоненията на съвременните процесори използват превантивно изпълнение на някои инструкции, които е най-вероятно да бъдат изпълнени, но без да изчакват изчисляването на всички фактори, които определят тяхното изпълнение (например, когато условията за разклоняване или параметрите за достъп не са все още е изчислен). Ако прогнозата не се потвърди, процесорът отхвърля резултата от спекулативното изпълнение, но данните, обработени по време на него, остават в кеша на процесора и могат да бъдат възстановени с помощта на методи за определяне на съдържанието на кеша през странични канали, анализирайки промяната в достъпа време до кеширани и некеширани данни.
Особеността на новата атака е използването на теч, който възниква по време на спекулативното изпълнение на инструкцията SWAPGS, която се използва в операционните системи за заместване на стойността на GS регистъра, когато контролът преминава от потребителското пространство към ядрото на ОС (GS стойността, използвана в потребителското пространство, се заменя със стойността, използвана по време на операции в ядрото). В ядрото на Linux GS съхранява указател per_cpu, използван за достъп до данните на ядрото, а потребителското пространство съхранява указатели към TLS (локално съхранение на нишки).
За да избегнете извикването на инструкцията SWAPGS два пъти при нов достъп до ядрото от пространството на ядрото или при изпълнение на код, който не изисква промяна на GS регистър, се извършва проверка и условно разклоняване преди инструкцията. Механизмът за спекулативно изпълнение проактивно продължава да изпълнява код с инструкцията SWAPGS, без да чака резултата от проверката, и ако избраният клон не е потвърден, отхвърля резултата. Така може да възникне ситуация, когато спекулативно е избран клон, който не включва изпълнение на SWAPGS, но по време на спекулативно изпълнение стойността на GS регистъра ще бъде променена от инструкцията SWAPGS и ще се използва в операции със зависима памет, които завършват в кеша на процесора.
Изследователите са предложили два сценария на атака, за които са подготвени прототипи на експлойт. Първият сценарий се основава на ситуацията, при която инструкцията SWAPGS не се изпълнява спекулативно, въпреки че действително се използва при изпълнение, а вторият е обратното, когато инструкцията SWAPGS се изпълнява спекулативно, въпреки че всъщност не трябва да се изпълнява. За всеки сценарий има две опции за експлоатация: атакуващият може да определи стойността на конкретен адрес в областта на ядрото и атакуващият може да търси специфична стойност на произволни адреси в ядрото. Извършването на атака отнема много време и експлойтът може да отнеме няколко часа, за да завърши изтичането.
Има проблем в ядрото на Linux
Корекцията изисква инсталиране на актуализация на ядрото както на хост системата, така и на гост средите, последвано от рестартиране на системата. За да деактивирате защитата на Linux, може да се използва опцията "nospectre_v1", която също деактивира мерките за блокиране на уязвимостта SWAPGS. Корекцията е достъпна като
Според изследователи от Bitdefender Intel са били информирани за проблема още през август миналата година. Беше решено проблемът да бъде решен програмно, за което разработчици от Microsoft, Google и ядрото на Linux бяха включени в координираното разработване на корекция. По-старите процесори на Intel, преди Ivy Bridge, са много по-трудни за атака поради липсата на поддръжка за инструкцията WRGSBASE, използвана в експлойта. Системите ARM, POWER, SPARC, MIPS и RISC-V не са засегнати от проблема, защото не поддържат инструкцията SWAPGS.
Проблемът засяга предимно собствениците на процесори Intel -
В системите на AMD успя да бъде възпроизведен само вторият сценарий на атака, който е ограничен до спекулативна обработка на базовата стойност на регистъра GS, която може да се използва за търсене на специфични стойности в области с произволна памет. За да блокирате тази опция за атака
Източник: opennet.ru