Выпуск модуля LKRG 0.6 для защиты от эксплуатации уязвимостей в ядре Linux
Проект Openwall опубликовал выпуск модуля ядра LKRG 0.6 (Linux Kernel Runtime Guard), обеспечивающего выявление несанкционированного внесения изменений в работающее ядро (проверка целостности) или попыток изменения полномочий пользовательских процессов (определение применения эксплоитов). Об особенностях LKRG можно прочитать в первом анонсе проекта.
В новой версии для systemd подготовлен unit-файл для инициализации LKRG на начальной стадии загрузки, а также предложены сборочные опции для его установки и удаления. В подсистеме проверки целостности переработана поддержка меток перехода (*_JUMP_LABEL) и обеспечена защита битов SMEP (Supervisor Mode Execution Protection, 20 бит в регистре CR4) и WP (Write Protect, 16 бит в регистре CR0) для систем с архитектурой x86.
В коде определения применения эксплоитов при помощи pCFI (вариант Control Flow Integrity) реализована защита против ранее не определяемой в LKRG техники эксплуатации через непреднамеренный вызов функций ядра в качестве ROP-гаджетов. Доступ к интерфейсу usermodehelper ограничен только для приложений из белого списка, так как данный интерфейс мог использоваться для обхода LKRG. Для исключения ложных срабатываний обеспечено замораживание все пользовательских процессов во время инициализации LKRG. Решены проблемы со сборкой в ядрах Linux 4.17+ при включении опции CONFIG_ARCH_HAS_SYSCALL_WRAPPER.