Пускането на LKRG 1.0.0 за защита от експлоатация на уязвимости в ядрото на Linux

Проект 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

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster