Група изследователи от Сеулския университет и компания Samsung разработиха техника за атака на ARM процесори, носеща кодово име TikTag, която може да се използва за заобикаляне на хардуерния механизъм за защита MemTag (MTE, Memory Tagging Extension), присъстващ в чиповете, базирани на архитектура ARMv8.5-A. Атаката позволява определяне на съдържанието на TikTag тагове за произволни адреси в паметта, поради изтичане на данни, възникващи в резултат на спекулативното изпълнение на инструкции на CPU.
Технологията MemTag дава възможност за свързване на тагове с области в паметта и организиране на проверка на коректността на използването на указатели, за да се блокира експлоатацията на уязвимости, предизвикани от достъп до вече освободени блокове памет, препълване на буфера и достъп преди инициализация. При използване на MemTag за всяки 16 байта физическа памет се създава 4-битов таг, който служи като ключ за достъп до тази памет. Тагът може да бъде генериран от приложението за заделената область памет с помощта на специални инструкции на CPU, и след това да бъде съхранен в горните неизползвани битове на указателя. При достъп до паметта с използване на тагиран указател, процесорът проверява съответствието на тага, свързан с указателя, с таговете, свързани с блоковете памет, и разрешава достъпа само ако таговете съвпадат.
Предложената атака позволява да се определят таговете, свързани с блокове памет, и да се заобиколи защитата на MemTag. Изследователите демонстрираха възможността за извършване на атака TikTag чрез експлоатиране на уязвимости в ядрото на Linux и браузъра Chrome, използвайки съществуващите в тези продукти последователности от инструкции (гаджети), които водят до спекулативно изпълнение на код. Подобни гаджети, при спекулативен режим на изпълнение на код, работещ с указатели, предизвикват прочит на метаданни MemTag в зависимост от външни условия, на които може да влияе атакуващият. След определяне на грешна прогноза, резултатът от спекулативното изпълнение се отхвърля, но получените данни остават в кеша и могат да бъдат извлечени чрез анализ през странични канали. Вероятността за успешното заобикаляне на защитата на MemTag в проведените тестове е оценена на 95% при извършване на атака в продължение на около 4 секунди.

Идентифицирани са два вида гаджети, които водят до изтичане на информация за таговете на MemTag. В първия случай спекулативното изпълнение възниква при неправилна прогноза на прехода, а условията за изпълнение на гаджета могат да бъдат създадени чрез манипулации със системни повиквания. Във втория случай
спекулативното изпълнение се дължи на грешка в предсказването на взаимовръзката между операциите на четене и запис при използване на оптимизацията STLF (Store-To-Load-Forwarding), което позволява опция за подбиране на таг, оценявайки състоянието на кеша (ако тагът съвпада, стойността ще бъде директно пренасочена от предишната команда "store" в операция "load" и ще промени състоянието на кеша). Първият вид гаджети е подходящ за атака на ядрото на Linux, а вторият за JavaScript двигателя V8, използван в браузерите на базата на Chromium. Прототип на инструмента за извършване на атака е публикуван в GitHub.


Компания ARM потвърди възможността за атака върху системи с процесори Cortex-X2, Cortex-X3, Cortex-A510, Cortex-A520, Cortex-A710, Cortex-A715 и Cortex-A720, но не възнамерява да прави промени в CPU, за да блокира проблема, тъй като архитектурата MemTag предполага, че етикетите не са конфиденциални данни за приложенията. В кода на Chromium проблемът също остава нерешен, тъй като в браузъра Chrome защитата на базата на MemTag все още не се прилага по подразбиране. Екипът, отговорен за сигурността на платформата Android, призна възможността за атака върху устройства Pixel 8, в които се прилага защитата MemTag, добави корекции за блокиране на изтичанията и изрази готовността си да изплати награда за открита уязвимост.
Като заобиколни методи за блокиране на атака изследователите предлагат да се използват инструкции sb или isb за забрана на спекулативното изпълнение по време на критични операции с паметта или да се вмъкват между инструкциите за разклонение и инструкциите за достъп до паметта запълвания от други инструкции.
Източник: opennet.ru
