В ядро Linux 5.4 приняты патчи для ограничения доступа root к внутренностям ядра
Линус Торвальдс принял в состав будущего выпуска ядра Linux 5.4 набор патчей «lockdown», предложенный Дэвидом Хоуэллсом (David Howells, работает в Red Hat) и Мэтью Гарретом (Matthew Garrett, работает в 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).
Источник: http://www.opennet.ru/opennews/art.shtml? num=51591
© OpenNet