Лінус Торвальдс прийняв до складу майбутнього випуску ядра Linux 5.4 набір патчів для обмеження доступу root до нутрощів ядра
Лінус Торвальдс прийняв до складу майбутнього випуску ядра Linux 5.4 набір патчів для обмеження доступу root до нутрощів ядра
Лінус Торвальдс прийняв до складу майбутнього випуску ядра Linux 5.4 набір патчів "lockdown", пропонований Девідом Хоуеллсом (David Howells, працює в Red Hat) і Метью Гарретом (Matthew Garrett, працює в Google) для обмеження доступу користувача. Пов'язана з "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).