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

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 328
Зарегистрирован: 20.08.2022

#

Выпуск LKRG 1.0.0 для защиты от эксплуатации уязвимостей в ядре Linux
Дата публикации:Fri, 05 Sep 2025 08:20:32 +0300

Проект Openwall опубликовал модуль ядра LKRG 1.0.0 (Linux Kernel Runtime Guard), предназначенный для проверки целостности структур ядра и выявления попыток эксплуатации уязвимостей в ядре. Отмечается, что присвоение номера версии 1.0.0 ознаменовало достижение проектом зрелого состояния. Код проекта распространяется под лицензией GPLv2.
Модуль подходит как для защиты от атак, манипулирующих уже известными узявимостями в ядре Linux, так для противостояния эксплоитам, использующим ещё неизвестные уязвимости, если в них не применяются специальные меры для обхода LKRG. Защита основывается на выявлении несанкционированного внесения изменений в работающее ядро (проверка целостности) и отслеживании изменения полномочий пользовательских процессов (определение применения эксплоитов).
Проверка целостности выполняется на основе сравнения хэшей, вычисляемых для наиболее важных областей памяти и структур данных ядра, таких как IDT (Interrupt Descriptor Table), MSR, таблицы системных вызовов, все процедуры и функции, обработчики прерываний, списки загруженных модулей, содержимое секции ".text" модулей и атрибуты процессов. Процедура проверки активируется периодически по таймеру или при наступлении определённых событий в ядре, например, при выполнении системных вызовов setuid, setreuid, fork, exit, execve и do_init_module.
Определение возможного применения эксплоитов и блокирование атак производится на стадии до предоставления ядром доступа к ресурсам (например, до открытия файла), но после получения процессом несанкционированных полномочий (например, смена UID). При выявлении несанкционированного поведения процессов выполняется их принудительное завершение, чего достаточно для блокирования многих эксплоитов. Накладные расходы от работы модуля оцениваются в 2-2.5%.
Поддерживается работа на системах с архитектурами x86-64, AArch64 (ARM64), ARM32 и x86. Работа LKRG 1.0.0 протестирована с ядрами из различных дистрибутивов, начиная с ядра 3.10 из RHEL/CentOS 7 и заканчивая 6.17-rc4 из репозитория, в котором ведётся подготовка релиза Fedora 44. Пакеты доступны для дистрибутивов ALT Linux, Arch Linux, Astra Linux, Gentoo, Guix, NixOS, Rocky Linux, Whonix, Yocto и OpenBMC. Собранные для Rocky Linux пакеты можно использовать в RHEL 8/9 и производных дистрибутивах, таких как AlmaLinux 8/9, а пакеты для Whonix в Debian и Ubuntu.
Среди изменений в новой версии:
  • Обеспечена совместимость с ядрами Linux вплоть до выпуска 6.17-rc4. При использовании с ядрами начиная с 6.13 прекращён перехват удалённых вызовов override_creds() и revert_creds(), что ограничило выявление атак, переопределяющих указатель cred. Ограничения попытались компенсировать через добавления проверок перезаписи указателя cred в других местах ядра. Прекращено излишнее отслеживание учётных данных для которых не производится проверка целостности. Изменение позволило сократить кодовую базу примерно на 1500 строк. Добавлена поддержка появившегося в ядре Linux 6.10 механизма для создания в ФС OverlayFS временных файлов, используя опцию O_TMPFILE (ovl_tmpfile). Указанная поддержка необходима для предотвращения ложных срабатываний, проявляющихся при использовании изолированных контейнеров на системах с ядрами 6.10-6.12. Для систем x86_64 добавлена поддержка технологии Intel CET (Control-flow Enforcement Technology) для защиты исполняемого кода с использованием инструкций IBT (indirect branch tracking), а также программной защиты kCFI (kernel Control Flow Integrity) для блокирования нарушения нормального порядка выполнения (control flow) в результате применения эксплоитов, изменяющих хранимые в памяти указатели на функции. Для подключения многих обработчиков вместо kretprobes задействован механизм kprobes, упрощающий код установки hook-ов и позволяющий добиться более высокой производительности. Переработана работа с блокировками (lock) данных в ядре, специфичных для процесса (per-task shadow data). За счёт исключения лишних блокировок удалось повысить производительность обращения к подобным данным. Устранены ошибки, приводившие к состоянию гонки, проблемам с проверкой целостности и ложным срабатываниям. Улучшена поддержка сборки с использованием Clang.
Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=63827

Жизнь за Нер'зула!

Ответить