Методи відключення захисту Lockdown в Ubuntu для віддаленого обходу UEFI Secure Boot

Андрій Коновалов із компанії Google опублікував спосіб віддаленого відключення захисту Lockdown, що пропонується в пакеті з ядром Linux, що поставляється в Ubuntu (теоретично запропоновані методи повинні працювати з ядром Fedora та інших дистрибутивів, але вони не протестовані).

Lockdown обмежує доступ користувача root до ядра та блокує шляхи обходу 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 нещодавно був доданий до основного складу ядра Linux 5.4, але в ядрах, що поставляються в дистрибутивах, він як і раніше реалізований у формі патчів або доповнений патчами. Однією з відмінностей надбудов, що надаються в дистрибутивах, від вбудованої в ядро ​​реалізації є можливість відключення блокування за наявності фізичного доступу до системи.

У Ubuntu та Fedora для відключення Lockdown передбачена комбінація клавіш Alt+SysRq+X. Мається на увазі, що комбінацію 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, спочатку намагалися блокувати цей метод, але блокування не працювало через помилки у коді.

Другий спосіб пов'язаний з емуляцією клавіатури через USB/IP і подальшим надсиланням послідовності 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

Додати коментар або відгук