У ядро ​​Linux 5.4 прийняті патчі для обмеження доступу root до нутрощів ядра

Лінус Торвальдс ухвалив до складу майбутнього випуску ядра Linux 5.4 набір патчівблокування« запропонований Девідом Хоуеллсом (David Howells, працює в Red Hat) та Метью Гарретом (Меттью Гаррет, працює в Google) для обмеження доступу користувача root до ядра. Пов'язана з «lockdown» функціональність винесена в опціонально завантажуваний LSM-модуль (Linux Security Module), що встановлює бар'єр між UID 0 та ядром, обмежуючи певну низькорівневу функціональність.

Якщо зловмисник в результаті атаки досяг виконання коду з правами root, то він може виконати свій код і на рівні ядра, наприклад, через заміну ядра за допомогою kexec або читання/запису пам'яті через /dev/kmem. Найбільш очевидним наслідком такої активності може стати обхід UEFI Secure Boot або вилучення конфіденційних даних, що зберігаються на рівні ядра.

Спочатку функції обмеження root розвивалися в контексті посилення захисту верифікованого завантаження і дистрибутиви вже давно застосовують сторонні патчі для блокування обходу UEFI Secure Boot. При цьому в основний склад ядра такі обмеження не включалися через розбіжностей у їх реалізації та побоювання порушення роботи існуючих систем. Модуль «lockdown» увібрав у себе патчі, що вже використовуються в дистрибутивах, які були перероблені у формі окремої підсистеми, не прив'язаної до UEFI Secure Boot.

У режимі lockdown обмежується доступ до /dev/mem, /dev/kmem, /dev/port, /proc/kcore, debugfs, налагоджувального режиму kprobes, mmiotrace, tracefs, BPF, PCMCIA CIS (Card Information Structure), деяких інтерфейсів ACPI та MSR-регістрам CPU, блокуються виклики kexec_file і kexec_load, забороняється перехід у сплячий режим, лімітується використання DMA для PCI-пристроїв, забороняється імпорт коду ACPI зі змінних EFI,
не допускаються маніпуляції з портами вводу/виводу, у тому числі зміна номера переривання та порту введення/виводу для послідовного порту.

За замовчуванням модуль lockdown не активний, збирається при вказівці в kconfig опції SECURITY_LOCKDOWN_LSM і активується через параметр ядра lockdown=, керуючий файл /sys/kernel/security/lockdown або складальні опції LOCK_DOWN_KERNEL_FORCE_*, які можуть набувати значення «integrity» і «confidentiality». У першому випадку блокуються можливості, що дозволяють вносити зміни в працююче ядро ​​з простору користувача, а в другому крім цього відключається функціональність, яку можна використовувати для вилучення конфіденційної інформації з ядра.

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

Джерело: opennet.ru

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