Проект Openwall подготовил модуль для защиты от эксплуатации уязвимостей в ядре Linux
30 января 2018 года
Проект Openwall, известный своими инициативами по обеспечению безопасности, представил первый экспериментальный выпуск механизма LKRG (Linux Kernel Runtime Guard), предназначенного для контроля целостности ядра Linux и обнаружения попыток эксплуатации уязвимостей в ядре. Проект находится на стадии тестирования экспериментального прототипа. Лицензия на код модуля пока не выбрана, рассматривается GPLv2. Для финансирования разработки в будущем не исключается выпуск расширенной платной версии LKRG Pro.
LKRG оформлен в виде загружаемого модуля ядра, который пытается выявлять несанкционированное внесение изменений в работающее ядро (проверка целостности) или изменение полномочий пользовательских процессов (определение применения эксплоитов). Проверка целостности выполняется на основе сравнения хэшей, вычисляемых для наиболее важных областей памяти и структур данных ядра (IDT (Interrupt Descriptor Table), MSR, таблицы системных вызовов, все процедуры и функции, обработчики прерываний, списки загруженных модулей, содержимое секции .text модулей, атрибуты процессов и т.п.). Процедура проверки активируется как периодически по таймеру, так и при наступлении различных событий в ядре (например, при выполнении системных вызовов setuid, setreuid, fork, exit, execve, do_init_module и т.п.).
Определение возможного применения эксплоитов и блокирование атак производится на стадии до предоставления ядром доступа к ресурсам (например, до открытия файла), но после получения процессом несанкционированных полномочий (например, смена UID). При выявлении несанкционированного поведения процессов выполняется их принудительное завершение, чего достаточно для блокирования многих эксплоитов. Так как проект находится на стадии разработки, а оптимизации пока не проводились, накладные расходы от работы модуля составляют примерно 6.5%, но в будущем планируется существенно снизить данный показатель.
Модуль подходит как для организации защиты от уже известных эксплоитов для ядра Linux, так и для противостояния эксплоитам для ещё неизвестных уязвимостей, если в них не применяется специальных мер для обхода LKRG. При тестировании LKRG успешно справился с определением попыток эксплуатации уязвимостей CVE-2014-9322 ( BadIRET), CVE-2017-5123 ( отсутствие проверки access_ok() в waitid()) и CVE-2017-6074 ( use-after-free в DCCP), но не подходит для определения таких проблем, как CVE-2016-5195 ( Dirty COW), поражающих компоненты пространства пользователя через ядро.
Авторы не исключают наличия ошибок в коде LKRG и возможных ложных срабатываний, поэтому пользователям предлагается сопоставить риски от возможных ошибок в LKRG c пользой от предлагаемого метода защиты. Из положительных свойств LKRG отмечается то, что механизм защиты выполнен в виде загружаемого модуля, а не патча к ядру, что позволяет использовать его со штатными ядрами дистрибутивов. В частности, модуль опробован с ядром RHEL7, OpenVZ/Virtuozzo 7 и Ubuntu 16.04. В дальнейшем возможно будет организован процесс формирования бинарных сборок для популярных дистрибутивов.
В будущем также ожидается поддержка отслеживания выхода за пределы изолированных контейнеров (смена namespace) и полноценные средства для блокирования атак - в текущей версии сведения о нарушениях целостности выводятся в виде информационных уведомлений, записываемых в лог ядра. Отдельно развивается расширенный вариант модуля, в котором предоставлены дополнительные опции для защиты процессов, файлов и логов (например, защищённый лог не может быть изменён и удалён, даже пользователем root, а только дополнен).
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.