93 naciśnięcia klawisza Enter dają dostęp do zaszyfrowanych linuksowych systemów
LUKS/dm-crypt to podstawowa metoda blokowego szyfrowania wlinuksowych systemach operacyjnych. Przezroczysty dla systemu plikówmechanizm wyróżnia się ogromną elastycznością i wsparciem dlawielu różnych kryptosystemów i funkcji haszujących, stosuje sięgo więc domyślnie w większości dystrybucji jako sposób nazabezpieczenie nie tylko danych, ale i dostępu do systemu. Okazałosię jednak, że ta ochrona przed dostępem do systemu jest raczejzłudna. Napastnik może bardzo łatwo uzyskać dostęp dopodstawowej powłoki systemowej, wystarczy mu do tego… klawiatura.
Nie trzeba żadnej specjalnej wiedzy technicznej, nie trzebażadnych specjalnych exploitów. Korzystając z klawisza Enter,naciśniętego kilkadziesiąt razy podczas wyświetlania zapytania ohasło mechanizmu zarządzania kluczami (LUKS) podczas rozruchusystemu, dostaniemy minimalną powłokę systemu (busybox) zuprawnieniami roota.
Czym to grozi?
Oczywiście systemowa partycja pozostaje zaszyfrowana, napastniknie ma wglądu w jej zawartość. Jednak rozruchowa partycja /boot, wktórej przechowywany jest m.in. obraz jądra, nie jest zaszyfrowana.Napastnik może umieścić tam swój plik wykonywalny z ustawionymbitem SetUID, który wykorzysta później do eskalacji uprawnień naswojej maszynie, może podmienić też kernel na „odpowiednio”zmodyfikowany.
Na tym nie koniec: systemowa partycja może sobie byćzaszyfrowana, ale nie przeszkadza to w atakach na nią. Złośliwynapastnik może ją po prostu skasować. Może też skopiować ją naswój własny dysk, by później spróbować siłowych ataków.
Zdaniem odkrywców luki, Hectora Marco i Ismaela Ripolla, wzięłasię ona z nieprzemyślanego wprowadzania nowych mechanizmówbezpieczeństwa, które zwiększyły złożoność systemu,sprawiając że przeoczono banalny wręcz błąd. Skrypt/scripts/local-top/cryptroot obsługuje przyjmowanie haseł, ale teżzawiera obejście w razie problemu sprzętowego z klawiaturą.Wciśnięcie łącznie 93 razy klawisza Enter (na systemach x86)sprawia, że przekroczona zostaje domyślna liczba przejściowychbłędów sprzętowych – a główny skrypt nie znając przyczynybłędu, w panice otwiera powłokę, by użytkownik sam sobienaprawił problem, jeśli potrafi.
To bardzo typowa sytuacja w linuksowym świecie, gdzieoprogramowanie tworzą deweloperzy dla deweloperów: wspomnianezachowanie jest przyjazne i wygodne w kontrolowanym przez siebieśrodowisku, jednak w rzeczywistym świecie należy je uznać zanaiwne: otworzenie użytkownikowi busyboksa z uprawnieniami rootanigdy nie powinno być domyślnym zachowaniem, tym bardziej, że takapowłoka daje pełen dostęp do sieci.
Co robić i jak żyć?
Zabezpieczenie się przed takim atakiem jest równie proste, cojego przeprowadzenie. Wystarczy do konfiguracji programu rozruchowegoGRUB dodać parametr panic=5. Uniemożliwi to dostęp do konsoli, gdykernel zostaje uruchomiony w trybie paniki.
# sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="panic=5 /' /etc/default/grub
# grub-install
Oczywiście przygotowanazostała też już łatka, która poprawia wspomniany skrypt. Terazsekwencja startowa zostaje całkowicie zatrzymana po wyczerpaniudopuszczalnej liczby wprowadzeń hasła. Jedynym wyjściem pozostajezrestartowanie komputera. Łatka trafiła już do najpopularniejszych dystrybucji.
Warto podkreślić, że podatne są nie tylko desktopowe systemy,ale też zabezpieczone LUKS-em linuksowe serwery działające wchmurze, nie trzeba więc mieć fizycznego dostępu. Problem dotyczyzarówno Debiana/Ubuntu jak i systemów używających zamiastmechanizmu initramfs mechanizmu Dracut (a więc np. Fedora czy Rosa).
Więcej informacji znajdziecie na bloguodkrywców tej luki, zaprezentowanej po raz pierwszy 11 listopada nakonferencji DeepSec 2016 w Wiedniu.