Metody wyłączania zabezpieczeń blokady w systemie Ubuntu w celu zdalnego obejścia bezpiecznego rozruchu UEFI

Andrey Konovalov z Google opublikowany sposób na zdalne wyłączenie ochrony Lockdownoferowane w pakiecie jądra Linuksa dostarczanym z Ubuntu (techniki teoretycznie sugerowane mieć działają z jądrem Fedory i innymi dystrybucjami, ale nie są testowane).

Blokada ogranicza dostęp użytkownika root do jądra i blokuje ścieżki obejścia UEFI Secure Boot. Na przykład w trybie blokady dostęp do /dev/mem, /dev/kmem, /dev/port, /proc/kcore, debugfs, kprobes mode debuging, mmiotrace, tracifs, BPF, PCMCIA CIS (struktura informacji o karcie), niektóre interfejsy są ograniczone Rejestry ACPI i MSR procesora, wywołania kexec_file i kexec_load są blokowane, tryb uśpienia jest zabroniony, użycie DMA dla urządzeń PCI jest ograniczone, import kodu ACPI ze zmiennych EFI jest zabroniony, manipulacje na portach I/O nie są zabronione dozwolone, łącznie ze zmianą numeru przerwania i portu we/wy dla portu szeregowego.

Mechanizm Lockdown został niedawno dodany do głównego jądra Linuksa 5.4, ale w jądrach dostarczanych w dystrybucjach jest on nadal zaimplementowany w formie łatek lub uzupełniony łatkami. Jedną z różnic między dodatkami dostarczanymi w pakietach dystrybucyjnych a implementacją wbudowaną w jądro jest możliwość wyłączenia zapewnianej blokady, jeśli masz fizyczny dostęp do systemu.

W Ubuntu i Fedorze dostępna jest kombinacja klawiszy Alt+SysRq+X, aby wyłączyć blokadę. Rozumie się, że kombinacji Alt+SysRq+X można używać tylko przy fizycznym dostępie do urządzenia, a w przypadku zdalnego włamania się i uzyskania dostępu do roota atakujący nie będzie mógł wyłączyć Lockdown i np. załadować moduł z rootkitem, który nie jest cyfrowo wpisany do jądra.

Andrey Konovalov pokazał, że oparte na klawiaturze metody potwierdzania fizycznej obecności użytkownika są nieskuteczne. Najprostszym sposobem wyłączenia blokady byłoby programowo symulacja naciśnięcie Alt+SysRq+X przez /dev/uinput, ale ta opcja jest początkowo zablokowana. Jednocześnie udało się zidentyfikować co najmniej dwie kolejne metody podstawienia Alt+SysRq+X.

Pierwsza metoda polega na użyciu interfejsu „sysrq-trigger” - aby go zasymulować, wystarczy włączyć ten interfejs, wpisując „1” do /proc/sys/kernel/sysrq, a następnie wpisując „x” do /proc/sysrq-trigger. Powiedziała luka wyłączony w grudniowej aktualizacji jądra Ubuntu oraz w Fedorze 31. Warto zauważyć, że programiści, podobnie jak w przypadku /dev/uinput, początkowo próbowałem zablokuj tę metodę, ale blokowanie nie zadziałało z powodu Błędy w kodzie.

Druga metoda polega na emulacji klawiatury poprzez USB/IP a następnie wysłanie sekwencji Alt+SysRq+X z wirtualnej klawiatury. Jądro USB/IP dostarczane z Ubuntu jest domyślnie włączone (CONFIG_USBIP_VHCI_HCD=m i CONFIG_USBIP_CORE=m) i zapewnia podpisane cyfrowo moduły usbip_core i vhci_hcd wymagane do działania. Napastnik może stwórz wirtualne urządzenie USB, działanie obsługi sieci na interfejsie pętli zwrotnej i podłączenie go jako zdalnego urządzenia USB za pomocą USB/IP. O określonej metodzie zgłoszone dla programistów Ubuntu, ale poprawka nie została jeszcze wydana.

Źródło: opennet.ru

Dodaj komentarz