Универсальная, но не очень практичная
Эксперты Технологического университета Граца (Австрия) продемонстрировали новый тип атаки на ядро Linux, при котором одна уязвимость конвертируется в другую и открывает возможность для повышения привилегий или выхода за пределы контейнеров.
Атака была продемонстрирована на версиях ядра 5.9 и 6.2 с использованием девяти разных уязвимостей с присвоенными индексами CVE в 32- и 64-битных системах. Уязвимости датированы 2021-2023 гг. Мало того, как показали исследователи, все современные инструменты защиты ядра – SMAP/SMEP (предотвращение доступа к режиму супервизора или запуска кода в этом режиме) или KASLR (рандомизация адресного пространства ядра) – заблокировать данную атаку не в силах.
Атака получила название SLUBStick. Уже опубликован ее технический анализ.
Как указывают исследователи, SLUBStick использует уязвимости кучи (термин программирования), такие как двойное освобождение памяти (double-free), использование выделенной области памяти после ее освобождения (use-ater-free), запись в области за пределами выделенной памяти (out-of-bounds write) для манипуляций процессом выделения памяти.
Побочный канал для повышения эффективности
Ядро Linux выделяет под разные типы структуры данных фрагменты памяти, которые именуются Slabs (плиты). Каждый Slab – это объем памяти, занятый под различные структуры ядра небольшого объема, для которых нет смысла выделять по целой странице памяти.
В процессе распределения памяти время от времени возникают уязвимости, позволяющие злоумышленниками нарушать целостность структур данных или манипулировать ими; такие атаки называют межкэшевыми (cross-cache). Обычно их эффективность не превышает 40%, плюс рано или поздно они вызывают отказ системы.
Атака SLUBStick, однако, использует временной побочный канал – для определения точного момента, когда осуществляется выделение и очистка объема памяти, что позволяет злоумышленнику предсказывать и контролировать повторное использование памяти. И это повышает успешность атаки до 99%.
Конверсия уязвимости кучи в уязвимость произвольных чтения-записи памяти происходит следующим образом: после освобождения выделенных фрагментов памяти – дождаться их повторного использования ядром; контролируемо перераспределить эти фрагменты, убедившись, что они используются для критических структур данных, таких как страничных таблиц; перезаписать данные в этих таблицах, что открывает возможность считывать произвольные области памяти и записывать в них данные.
«Реализация этой атаки требует локального доступа, возможности запускать на ней код и наличия неисправленной уязвимости ядра, – отмечает Михаил Зайцев, эксперт по информационной безопасности компании SEQ. – То есть, практическая осуществимость этой атаки довольно низка, хотя и далека от невозможности. В любом случае, уязвимости ядра пользователям Linux необходимо отслеживать пристально и устранять как можно оперативнее». Как пишут исследователи атаки, при худших вариантах SLUBStick позволяет повышать привилегии в системе вплоть до максимальных (что по факту означает полный контроль над устройством), обходить средства защиты ядра, выходить за пределы контейнеров и использовать что-либо из этого в рамках более комплексной атаки по цепочке поставок.
Кроме того, SLUBStick позволяет модифицировать структуры самого ядра для обеспечения постоянства присутствия и сокрытия потенциального вредоносного ПО от средств обнаружения.