Новая техника обхода защиты ASLR, реализуемая на JavaScript
Группа исследователей из амстердамского свободного университета разработала (pdf 1, pdf 2) новую технику обхода механизма защиты ASLR (Address space layout randomization), позволяющую определить раскладку памяти процесса. Особенностью предложенного метода является то, что он может быть реализован на языке JavaScript, что значительно упрощает обход дополнительных уровней защиты при эксплуатации уязвимостей в web-браузерах.
Метод является разновидностью атак по сторонним каналам (side-channel attacks) и основан на косвенном определении адресов к которым ранее были обращения, путем оценки различий во времени доступа к данным до и после сброса кэша (разновидность атаки "EVICT+TIME"). Если в обычных условиях для успешной эксплуатации новой уязвимости в Firefox требуется наличие еще одной уязвимости, которая позволит получить сведения о ASLR-смещениях в адресном пространстве процесса, то предложенная техника позволяет выявить эти смещения на уровне выполнения скрипта на языке JavaScript.
По заявлению исследователей предложенный метод универсален и надежно работает в Chrome и Firefox как минимум на 22 микроархитектур, включая процессоры Intel Xeon, Atom, Core, Celeron (CVE-2017-5925), AMD (CVE-2017-5926), Allwinner, Samsung Exynos, NVIDIA Tegra (CVE-2017-5927 для ARM) и др. Проблема усугубляется тем, что атака направлена на аппаратные особенности кэширования адресов в современных процессорах и с ней трудно бороться на программном уровне без отключения кэша или выполнения манипуляций, снижающих производительность. Реализация защиты на аппаратном уровне также затруднена, так как требует создания отдельного кэша для таблиц страниц памяти.