Випуск LKRG 0.8 для захисту від експлуатації вразливостей в ядрі Linux

Проект Openwall опублікував випуск модуля ядра LKRG 0.8 (Linux Kernel Runtime Guard), призначеного для виявлення та блокування атак та порушень цілісності структур ядра. Наприклад, модуль може захистити від несанкціонованого внесення змін до працюючого ядра та спроб зміни повноважень користувальницьких процесів (визначення застосування експлоїтів). Модуль підходить як для організації захисту від вже відомих експлоїтів для ядра Linux (наприклад, у ситуаціях, коли в системі проблематично оновити ядро), так і для протистояння експлоїтам для ще невідомих уразливостей. Код проекту поширюється ліцензія GPLv2.

Серед змін у новій версії:

  • Змінено позиціонування проекту LKRG, який тепер не поділяється на окремі підсистеми для перевірки цілісності та визначення застосування експлоїтів, а подається як цілісний продукт для виявлення атак та різних порушень цілісності;
  • Забезпечено сумісність з ядрами Linux з 5.3 по 5.7, а також з ядрами, зібраними з агресивними оптимізаціями GCC, без опцій CONFIG_USB і CONFIG_STACKTRACE або з опцією CONFIG_UNWINDER_ORC, а також з ядрами, в яких відсутні перехоплення;
  • Під час складання забезпечено перевірку деяких обов'язкових налаштувань ядра 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 протестованих руткиків, що працюють на рівні ядра (були виявлені руткіти Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit та Sutekh я, але пропущений з кейлоггером, а не руткітом у прямому розумінні). Для порівняння, пакети AIDE, OSSEC та Rootkit Hunter виявили 2 руткіти з 9, а Chkrootkit не виявив жодного. При цьому LKRG не підтримує визначення руткітів, що розміщуються у просторі користувача, тому найбільша ефективність досягається при використанні зв'язки AIDE та LKRG, що дозволило виявити 14 із 15 руткітів всіх типів.

Додатково можна відзначити, що розробник дистрибутива Whonix почав формування готових пакетів з DKMS для Debian, Whonix, Qubes та Kicksecure, а пакет для Arch Linux вже оновлено до версії 0.8. Пакети з LKRG також присутні у російських ALT Linux и AstraLinux.

Перевірка цілісності в LKRG виконується на основі порівняння актуального коду та даних ядра та модулів, деяких важливих структур даних та налаштувань CPU зі збереженими хешами або копіями відповідних областей пам'яті, структур даних або регістрів. Перевірки активуються як періодично за таймером, так і при настанні різних подій.

Визначення можливого застосування експлоїтів та блокування атак здійснюється на стадії до надання ядром доступу до ресурсів (наприклад, до відкриття файлу), але після отримання несанкціонованих повноважень процесом (наприклад, зміна UID). При виявленні несанкціонованої поведінки процесів за умовчанням виконується їхнє примусове завершення, чого достатньо для блокування багатьох експлоїтів.

Джерело: opennet.ru

Додати коментар або відгук