Проект Openwall издаване на ядрото (Linux Kernel Runtime Guard), предназначен за откриване и блокиране на атаки и нарушения на целостта на ядрените структури. Например, модулът може да защити от неразрешени промени в работещото ядро и опити за изменение на разрешенията на потребителски процеси (определение на прилагането на експлоити). Модулът е подходящ както за организиране на защита от вече известни експлоити за ядрото на Linux (например, в ситуации, когато системата е проблематична за обновление на ядрото), така и за противопоставяне на експлоити за още неизвестни уязвимости. Код на проекта под лицензия GPLv2.
Сред измененията в новата версия:
- Променено е позиционирането на проекта LKRG, който вече не се разделя на отделни подсистеми за проверка на целостта и определяне на прилагането на експлоити, а се представя като цялостен продукт за откриване на атаки и различни нарушения на целостта;
- Осигурена е съвместимост с ядра на Linux от 5.3 до 5.7, както и с ядра, компилирани с агресивни оптимизации на GCC, без опции CONFIG_USB и CONFIG_STACKTRACE или с опция CONFIG_UNWINDER_ORC, както и с ядра, в които липсват перехващаеми функции на LKRG, ако без тях може да се обиколи;
- При компилирането е осигурена проверка на някои задължителни настройки на ядрото CONFIG_* за генериране на смислени съобщения за грешки вместо неясни сривове;
- Добавена е поддръжка на режим на заспиване (ACPI S3, suspend to RAM) и режим на сън (S4, suspend to disk);
- В Makefile е добавена поддръжка за DKMS;
- Реализирана е експериментална поддръжка на 32-битови платформи ARM (тестов на Raspberry Pi 3 Model B). Преди това наличната поддръжка AArch64 (ARM64) е допълнена с осигуряване на съвместимост с платата Raspberry Pi 4;
- Добавени са нови обработвачи (hook), включително обработвача за извикване capable() за по-добро определяне на експлоити, манипулиращи ««, а не идентификаторите на процесите ();
- Предложена е нова логика за определяне на опити за излизане от ограниченията на пространствата на имената (например, от контейнери Docker);
- На системите x86-64 е осигурена проверка и прилагане на бита SMAP (Supervisor Mode Access Prevention), предназначен за блокиране на достъпа до данни в пространството на потребителя от привилегирования код, изпълняван на ядрото. Защитата SMEP (Supervisor Mode Execution Prevention) беше реализирана по-рано;
- В процеса на работа е осигурено разполагането на настройките LKRG в страница памет, обикновено достъпна само за четене;
- Изходът в логовете на информация, която може да бъде най-полезна за атаките (например, информация за адресите в ядрото), е ограничен до режим на отстраняване на грешки (log_level=4 и по-висок), изключен по подразбиране.
- Увеличена е мащабируемостта на базата данни за проследяване на процесите — вместо едно RB дърво, защитавано с един spinlock, е задействана хеш таблица от 512 RB дървета, защитени съответно с 512 блокировки за четене-запис;
- Реализиран и включен по подразбиране режим, при който проверката на целостта на идентификаторите на процесите често се извършва само за текущата задача, а също и опционално за активираните (събуждащите се) задачи. За останалите задачи, които са в състояние на сън или работят без достъп до контролирането в LKRG API ядрото, проверката се извършва по-рядко.
- Добавени нови sysctl и параметри на модула за фина настройка на LKRG, както и два sysctl за опростена настройка чрез избор от подготвени от разработчиците набори за фини настройки (profiles);
- Настройките по подразбиране са променени, за да се постигне по-везан баланс между оперативността на откриване на нарушенията и ефективността на реакцията от една страна и влиянието върху производителността и риска от фалшиви срабатывания от друга;
- Unit-файлът на systemd е преработен за зареждане на модула LKRG в ранна фаза на зареждане (за деактивиране на модула може да се използва параметър на командния ред на ядрото);
С оглед на предложените в новото издание оптимизации, намалението на производителността при прилагането на LKRG 0.8 се оценява на ниво от 2.5% в режим по подразбиране («heavy») и 2% в облекчен режим («light»).
В наскоро проведено на ефективността на пакетите за откриване на руткити LKRG най-добри резултати, без фалшиви срабатывания, установявайки 8 от 9 тествани rootkit-и, работещи на ядрото (бяха идентифицирани rootkit-ите Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit и Sutekh, но беше пропуснат Keysniffer, който е модул на ядрото с кейлоггер, а не rootkit в пряк смисъл). За сравнение, пакетите AIDE, OSSEC и Rootkit Hunter установиха 2 rootkit-а от 9, докато Chkrootkit не идентифицира нито един. В същото време LKRG не поддържа идентифицирането на rootkit-и, поставени в пространството на потребителя, така че най-голямата ефективност се постига при използване на комбинация от AIDE и LKRG, която позволи да се открият 14 от 15 rootkit-а от всички типове.
Допълнително може да се отбележи, че разработчикът на дистрибуцията започна на готови пакети с DKMS за Debian, Whonix, Qubes и Kicksecure, а пакетът за вече е актуализиран до версия 0.8. Пакетите с LKRG също са налични в руски и .
Проверка на целостта в LKRG се извършва на основата на сравнение на актуалния код и данни на ядрото и модулите, някои важни структури от данни и настройки на CPU с запазени хешове или копия на съответните области от паметта, структури от данни или регистри. Проверките се активират както периодично по таймер, така и при настъпване на различни събития.
Определението за възможно приложение на експлоити и блокиране на атаки се извършва на етапа преди предоставяне на ядрото достъп до ресурси (например, преди отваряне на файл), но след получаване на неразрешени права от процеса (например, смяна на UID). При установяване на неразрешено поведение на процеси по подразбиране се изпълнява тяхното принудително прекратяване, което е достатъчно за блокиране на много експлоити.
Източник: opennet.ru
