LKRG 0.9.0 (Guard)

Теги

Linux Kernel Runtime Guard (LKRG) — это модуль для ядра Linux, отвечающий за проверку целостности среды и предотвращающий выполнение эксплойтов, нацеленных на уязвимости в самом ядре.

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

В данную версию LKRG непосредственный вклад (через pull requests на GitHub) внесло несколько разработчиков, ранее не принимавших участие в проекте. В частности, так Борисом Лукашевым была добавлена возможность сборки в составе дерева ядра Linux, а Виталием Чикуновым из ALT Linux - интеграция с mkosi и GitHub Actions. На данный момент, пакет с LKRG в Arch Linux уже обновлен до версии 0.9.0.

Изменения в новой версии модуля ядра:

  • Обеспечена совместимость с ядрами Linux с 5.8 по 5.12, а также со стабильными ядрами 5.4.87 и новее (включающими нововведения из ядер 5.8 и новее) и с ядрами из версий RHEL вплоть до 8.4, с сохранением поддержки и всех ранее поддерживаемых версий ядер, таких как ядра из RHEL 7;
  • Добавлена возможность сборки LKRG не только как внешнего модуля, но и в составе дерева ядра Linux, в том числе его включения в образ ядра;
  • Добавлена поддержка многих дополнительных конфигураций ядра и системы;
  • Исправлено несколько существенных ошибок и недоработок в LKRG;
  • Существенно упрощена реализация некоторых компонентов LKRG;
  • Внесены изменения для упрощения дальнейшей поддержки и отладки LKRG;
  • Для тестирования LKRG, добавлена интеграция с out-of-tree и mkosi;
  • Репозиторий проекта перенесен с BitBucket на GitHub и добавлена непрерывная интеграция с использованием GitHub Actions и mkosi, включая проверку сборки и загрузки LKRG в ядра релизов Ubuntu, а также в предоставляемые проектом Ubuntu ежедневные сборки свежайших mainline-ядер.

Для сборки потребуются make и C компилятор. Кроме того, ставим в систему -devel пакеты ядра (команда в зависимости от ОС):

$ sudo apt-get install linux-headers-$(uname -r)

Собираем сам модуль:

# cd /usr/local/src/

# git clone https://bitbucket.org/Adam_pi3/lkrg-main.git

# cd lkrg-main/

# make -j8

Запускаем его в работу как и любой другой модуль ядра:

# insmod output/p_lkrg.ko p_init_log_level=3

С загрузкой модуля, в sysctl у нас появляются несколько параметров, которыми мы можем управлять:

# sysctl -a | grep lkrg

lkrg.block_modules = 0

lkrg.clean_message = 1

lkrg.force_run = 0

lkrg.hide = 0

lkrg.log_level = 3

lkrg.timestamp = 15

  • lkrg.block_modules — блокировать (1), или не блокировать (0) загрузку модулей в ядро.
  • lkrg.clean_message — выводить ли сообщение «System is clean», если значение log_level позволяет это делать.
  • lkrg.force_run — при передаче сюда единицы, будет произведён запуск проверки целостности. Функция проверки будет запущена, при этом, значение будет вновь изменено на 0.
  • lkrg.log_level — уровень детализации логов, которые ведёт LKRG.
  • lkrg.timestamp — частота вызова функции целостности в секундах. Сюда можно передать значение от 5 до 1800.
  • lkrg.hide — механизм сокрытия модуля в системе. 

С помощью параметра lkrg.hide мы можем скрыть присутствие модуля в системе.