Андрей Коновалов от компания Google метод за дистанционно изключване на защитата , предложена в пакета с ядрото на Linux, предоставено в Ubuntu (теоретично предложените методи да работят с ядрото на Fedora и други дистрибуции, но не са тествани).
Lockdown ограничава достъпа на потребителя root до ядрото и блокира обходите на UEFI Secure Boot. Например, в режим на lockdown се ограничава достъпът до /dev/mem, /dev/kmem, /dev/port, /proc/kcore, debugfs, режим на отстраняване на грешки kprobes, mmiotrace, tracefs, BPF, PCMCIA CIS (Структура на информацията за карти), някои интерфейси ACPI и MSR-регистри на CPU, блокират се извикванията kexec_file и kexec_load, забранява се преминаването в режим на заспиване, лимитира се използването на DMA за PCI-устройства, забранява се вноса на ACPI код от EFI променливи, не се допуска манипулация с входно/изходни портове, включително промяна на номера на прекъсването и входно/изходния порт за серийния порт.
Механизмът Lockdown беше добавен наскоро в основния състав на ядрото на Linux , но в предоставените в дистрибуции ядра все още се реализира под формата на пачове или се допълва с пачове. Една от разликите, предоставяни в дистрибуциите надстройки от вградената в ядрото реализация, е възможността за изключване на предоставената защита при наличие на физически достъп до системата.
В Ubuntu и Fedora комбинацията от клавиши Alt+SysRq+X е предвидена за изключване на Lockdown. Предполага се, че комбинацията Alt+SysRq+X може да се използва само при физически достъп до устройството, а в случай на дистанционно хакване и получаване на root достъп атакуващият не може да изключи Lockdown и, например, да зареди в ядрото модул без подпис с rootkit.
Андрей Коновалов показа, че свързаните с използването на клавиатурата методи за потвърждение на физическото присъствие на потребителя не са ефективни. Най-простият начин за изключване на Lockdown би бил софтуерната на натискането на Alt+SysRq+X чрез /dev/uinput, но този вариант е първоначално блокиран. В същото време бяха открити поне още два начина за подмяна на Alt+SysRq+X.
Първият метод е свързан с използването на интерфейса „sysrq-trigger“ — за симулация е достатъчно да се активира този интерфейс, записвайки „1“ в /proc/sys/kernel/sysrq, а след това да се запише „x“ в /proc/sysrq-trigger. Указаната дупка в декемврийското обновление на ядрото на Ubuntu и във Fedora 31. Интересно е, че разработчиците, както в случая с /dev/uinput, първоначално да се блокира този метод, но блокировката не работеше поради кода.
Вторият метод е свързан с емулиране на клавиатура чрез и последващо изпращане на последователността Alt+SysRq+X от виртуалната клавиатура. В доставеното с Ubuntu ядро USB/IP по подразбиране е активирано (CONFIG_USBIP_VHCI_HCD=m и CONFIG_USBIP_CORE=m) и са предоставени необходимите за работа модули usbip_core и vhci_hcd, заверени с цифров подпис. Атакуващият може виртуално USB-устройство, мрежов обработчик на loopback интерфейса и свързването му като отдалечено USB-устройство чрез USB/IP. За посочения метод на разработчиците на Ubuntu, но корекцията все още не е пусната.
Източник: opennet.ru
