Линус Торвалдс в състава на бъдещото издание на ядрото на Linux 5.4 пакет от пачове ««, Дейвид Хауълс (David Howells, работи в Red Hat) и Ме́тю Гарет (, работи в Google) за ограничаване на достъпа на потребителя root до ядрото. Свързаната с «lockdown» функционалност е изнесена в опционално зареждан LSM-модул (), който поставя бариера между 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 (структура на информация за картата), някои интерфейси на ACPI и CPU MSR регистри, блокират се извикванията kexec_file и kexec_load, забранява се преминаване в спящ режим, лимитира се използването на DMA за PCI устройства, забранява се внос на ACPI код от EFI променливи,
не се допуска манипулация с входно/изходни портове, включително промяна на номера на прекъсванията и входно/изходния порт за серийния порт.
По подразбиране модулът lockdown не е активен, изгражда се при указание в kconfig опцията SECURITY_LOCKDOWN_LSM и се активира чрез параметъра на ядрото «lockdown=», управляващия файл «/sys/kernel/security/lockdown» или опции за изграждане , които могат да приемат стойности «integrity» и «confidentiality». В първия случай се блокират възможностите, позволяващи извършване на промени в работещото ядро от пространството на потребителя, а във втория случай, освен това, се изключва функционалността, която може да се използва за извличане на конфиденциална информация от ядрото.
Важно е да се отбележи, че lockdown само ограничава стандартните възможности за достъп до ядрото, но не защитава от модификации в резултат на експлоатация на уязвимости. За блокиране на извършването на промени в работещото ядро при прилагане на експлоити от проекта Openwall отделен модул (Linux Kernel Runtime Guard).
Източник: opennet.ru
