В рамках проекта Openwall выпустила релиз модуля ядра LKRG 0.8 (Linux Kernel Runtime Guard), предназначен для обнаружения и блокировки атак y нарушения целостности основных конструкций.
Модуль подходит как для организации защиты от уже известных эксплойтов для ядра Linux (например, в ситуациях, когда обновление ядра в системе проблематично), что касается противодействия эксплойтам для неизвестных уязвимостей.
Что нового в LKRG 0.8?
В этой новой версии изменено позиционирование проекта LKRG, чточас не разделен на отдельные подсистемы для проверки целостности и определения использования эксплойтов, он представлен как законченный продукт для выявления атак и различных нарушений целостности;
Что касается совместимости этой новой версии, мы можем обнаружить, что он совместим с ядрами Linux от 5.3 до 5.7а также ядра, скомпилированные с агрессивной оптимизацией GCC, без параметров CONFIG_USB и CONFIG_STACKTRACE или с опцией CONFIG_UNWINDER_ORCа также с ядрами, где нет функций, перехваченных LKRG, если можно обойтись без них.
В добавок к экспериментальная поддержка 32-битных платформ ARM (протестировано на Raspberry Pi 3 Model B), а для ранее доступной поддержки AArch64 (ARM64) дополняется совместимостью с Raspberry Pi 4.
Кроме того, добавлены новые крючки, которые включают обработчик вызова «hook ()», чтобы лучше идентифицировать уязвимости, которыми манипулируют «возможности», а не идентификаторы процесса.
В системах x86-64 проверяется и применяется бит SMAP. (Предотвращение доступа в режиме супервизора), dпредназначен для блокировки доступа к данным в пользовательском пространстве из привилегированного кода, выполняемого на уровне ядра. Защита SMEP (Supervisor Mode Execution Prevention) была реализована ранее.
Это было повышенная масштабируемость базы данных отслеживания процессов: вместо одного дерева RB, защищенного спин-блокировкой, задействована хеш-таблица из 512 деревьев RB, защищенных 512 блокировками чтения и записи соответственно;
Реализован и включен режим по умолчаниюв котором проверка целостности идентификаторов Обработка часто выполняется только для текущей задачи, а также опционально для запущенных задач (пробуждение). Для других задач, которые находятся в приостановленном состоянии или которые работают без вызова API ядра, управляемого LKRG, проверка выполняется реже.
В добавок к файл модуля systemd был переработан для загрузки модуля LKRG на ранней стадии загрузки (параметр командной строки ядра может использоваться для отключения модуля);
Во время компиляции были проверены некоторые из обязательных настроек ядра CONFIG_ * для генерации значимых сообщений об ошибках, а не скрытых ошибок.
Из других изменений, которые выделяются в этой новой версии:
- Добавлена поддержка режимов ожидания (ACPI S3, Suspend to RAM) и Suspend (S4, Suspend to Disk).
- Добавлена поддержка DKMS в Makefile.
- Предлагается новая логика для определения попыток выхода из ограничений пространства имен (например, из контейнеров Docker).
- При этом конфигурация LKRG помещается на страницу памяти, обычно доступную только для чтения.
- Вывод в журналы информации, которая может быть наиболее полезной для атак (например, адресная информация в ядре), ограничивается режимом отладки (log_level = 4 и выше), который по умолчанию отключен.
- Новые параметры sysctl и module были добавлены для настройки LKRG, а также два sysctl для упрощенной настройки путем выбора из профилей, подготовленных разработчиками.
- Настройки по умолчанию изменены для достижения более сбалансированного баланса между скоростью обнаружения нарушений и эффективностью реакции, с одной стороны, и влиянием на производительность и риском ложных срабатываний, с другой.
- Согласно оптимизации, предложенной в новой версии, снижение производительности при применении LKRG 0.8 оценивается в 2.5% в режиме по умолчанию («тяжелый») и 2% в легком режиме («легкий»).
Если вы хотите узнать об этом больше, вы можете проконсультироваться подробности здесь.