PDA

Просмотр полной версии : В ядро Linux 5.4 приняты патчи для ограничения доступа root к внутренностям ядра


Suicide
30.09.2019, 19:48
Линус Торвальдс принял (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aefcf2f4b58155d27340ba5f9ddbe9513da8286d) в состав будущего выпуска ядра Linux 5.4 набор патчей "lockdown (https://lkml.org/lkml/2019/9/10/856)", предложенный (https://mjg59.dreamwidth.org/50577.html) Дэвидом Хоуэллсом (David Howells, работает в Red Hat) и Мэтью Гарретом (Matthew Garrett (https://mjg59.dreamwidth.org/), работает в Google) для ограничения доступа пользователя root к ядру. Связанная с "lockdown" функциональность вынесена в опционально загружаемый LSM-модуль (Linux Security Module (https://en.wikipedia.org/wiki/Linux_Security_Modules)), устанавливающий барьер между UID 0 и ядром, ограничивая определённую низкоуровневую функциональность.

Если злоумышленник в результате атаки добился выполнения кода с правами root, то он может выполнить свой код и на уровне ядра, например, через замену ядра при помощи kexec или чтения/записи памяти через /dev/kmem. Наиболее очевидным следствием подобной активности может стать обход (https://www.opennet.ru/opennews/art.shtml?num=41852) UEFI Secure Boot или извлечение конфиденциальных данных, хранящихся на уровне ядра.

Изначально функции ограничения root развивались в контексте усиления защиты верифицированной загрузки и дистрибутивы уже достаточно давно применяют сторонние патчи для блокирования обхода UEFI Secure Boot. При этом в основной состав ядра подобные ограничения не включались из-за разногласий (https://lwn.net/Articles/751061/) в их реализации и опасений нарушения работы существующих систем. Модуль "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_* (https://github.com/torvalds/linux/blob/master/security/lockdown/Kconfig), которые могут принимать значения "integrity" и "confidentiality". В первом случае блокируются возможности, позволяющие вносить изменения в работающее ядро из пространства пользователя, а во втором случае помимо этого отключается функциональность, которую можно использовать для извлечения конфиденциальной информации из ядра.

При этом важно отметить, что lockdown лишь ограничивает штатные возможности доступа к ядру, но не защищает от модификаций в результате эксплуатации уязвимостей. Для блокирования внесения изменений в работающее ядро при применении эксплоитов проектом Openwall развивается (https://www.opennet.ru/opennews/art.shtml?num=47989) отдельный модуль LKRG (https://www.openwall.com/lkrg/) (Linux Kernel Runtime Guard).

30.09.2019

http://www.opennet.ru/opennews/art.shtml?num=51591​