В ядро 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).

Источник: opennet.ru