Найти тему
Проект OpenNet

Выпуск модуля LKRG 0.6 для защиты от эксплуатации уязвимостей в ядре Linux

Проект Openwall опубликовал выпуск модуля ядра LKRG 0.6 (Linux Kernel Runtime Guard), обеспечивающего выявление несанкционированного внесения изменений в работающее ядро (проверка целостности) или попыток изменения полномочий пользовательских процессов (определение применения эксплоитов). Модуль подходит как для организации защиты от уже известных эксплоитов для ядра Linux (например, в ситуациях когда в системе проблематично обновить ядро), так и для противостояния эксплоитам для ещё неизвестных уязвимостей. Об особенностях LKRG можно прочитать в первом анонсе проекта.

В новой версии для systemd подготовлен unit-файл для инициализации LKRG на начальной стадии загрузки, а также предложены сборочные опции для его установки и удаления. В подсистеме проверки целостности переработана поддержка меток перехода (*_JUMP_LABEL) и обеспечена защита битов SMEP (Supervisor Mode Execution Prevention, 20 бит в регистре CR4) и WP (Write Protect, 16 бит в регистре CR0) для систем с архитектурой x86.

В коде определения применения эксплоитов при помощи pCFI (вариант Control Flow Integrity) реализована защита против эксплуатации через непреднамеренный вызов функций ядра в качестве ROP-гаджетов. Интерфейс usermodehelper ограничен запуском приложений из белого списка. pCFI позволил блокировать оба ранее опубликованных метода обхода LKRG из специально модифицированных эксплойтов, тогда как ограничение usermodehelper само по себе также блокировало бы один из них.

Для исключения ложных срабатываний обеспечено замораживание всех пользовательских процессов во время инициализации LKRG. Решены проблемы со сборкой в ядрах Linux 4.17+ при выключении опции CONFIG_ARCH_HAS_SYSCALL_WRAPPER.