Специалисты из Технического университета Граца (Австрия) представили новую атакуна кросс-кэш ядра Linux под названием SLUBStick, которая позволяет превратить ограниченную уязвимость кучи в возможность произвольного чтения и записи памяти, что дает злоумышленникам возможность повышать привилегии или выходить за пределы контейнеров.
Атака была протестирована на версиях ядра Linux 5.9 и 6.2, что говорит о высокой универсальности метода. В ходе экспериментов были использованы 9 существующих уязвимостей как на 32-битных, так и на 64-битных системах.
Уязвимости, использованные в эксперименте
SLUBStick показала свою эффективность даже при активных современных защитах ядра – Supervisor Mode Execution Prevention (SMEP), Supervisor Mode Access Prevention (SMAP) и Kernel Address Space Layout Randomization (KASLR).
Детали атаки будут представленына конференции Usenix Security Symposium, которая пройдет в конце августа. Исследователи продемонстрируют повышение привилегий и выход из контейнеров на новейшей версии Linux с включенной защитой.
Технические подробности SLUBStick
Ядро Linux управляет памятью, выделяя и освобождая блоки памяти (slabs), для различных типов структур данных. Уязвимости в процессе управления памятью могут позволить злоумышленникам искажать или манипулировать структурами данных, что называется атакой кросс-кэша (cross-cache attack). Обычно такие атаки успешны примерно в 40% случаев и часто приводят к сбоям системы.
SLUBStick использует уязвимости кучи, такие как двойное освобождение (double-free), использование после освобождения (use-after-free, UAF) или запись за пределы буфера (out-of-bounds), чтобы манипулировать процессом выделения памяти. Затем в атаке используется побочный канал синхронизации для определения точного момента выделения и освобождения блоков памяти, что позволяет атакующему предсказывать и контролировать повторное использование памяти.
Используя эту информацию, вероятность успешной эксплуатации кросс-кэш атаки возрастает до 99%, что делает SLUBStick очень практичным.
Показатели успешности атаки
Конвертация уязвимости кучи в возможность произвольного чтения и записи памяти проходит в три этапа:
- Освобождение определенных блоков памяти и ожидание их повторного использования ядром;
- Повторное выделение блоков контролируемым образом, чтобы они были использованы для критически важных структур данных, таких как таблицы страниц;
- После возврата блоков злоумышленник перезаписывает записи таблицы страниц, получая возможность читать и записывать данные в любую область памяти.
Обзор SLUBStick
Реальное влияние на безопасность
Как и большинство атак с использованием побочных каналов, SLUBStick требует локального доступа к целевой машине с возможностью выполнения кода. Кроме того, для атаки требуется наличие уязвимости кучи в ядре Linux, которая будет использована для получения доступа к памяти.
Атака имеет ряд преимуществ для злоумышленников. Даже для тех, кто уже обладает возможностью выполнения кода, SLUBStick предоставляет возможность повысить привилегии, обойти защиты ядра, выйти за пределы контейнеров или использовать его в составе сложной цепочки атак.
Повышение привилегий может быть использовано для получения root-доступа, что позволяет выполнять любые операции, а выход из контейнера позволяет вырваться из изолированной среды и получить доступ к хост-системе. В постэксплуатационной фазе SLUBStick может модифицировать структуры или хуки ядра для поддержания постоянного присутствия, что затрудняет обнаружение вредоносного ПО.
Изменение данных “/etc/passwd”
Для тех, кто хочет глубже изучить SLUBStick и поэкспериментировать с эксплуатацией уязвимостей, исследователи опубликовали все детали в техническом докладе, а также разместили код в репозитории GitHub.