NFsec Logo

Omijanie uwierzytelniania w mechanizmie szyfrowania dysków LUKS

15/11/2016 w Bezpieczeństwo Brak komentarzy.  (artykuł nr 576, ilość słów: 390)

B

łąd w implementacji narzędzia cryptsetup używanego do szyfrowania dysków w systemie Linux za pomocą LUKS pozwala atakującemu na ominięcie procedur uwierzytelniania za pomocą. Uwaga. Naciskania klawisza “ENTER” przez 70 sekund. Skutkiem jest otrzymanie powłoki uruchomionej z uprawnieniami administratora. Luka została odkryta przez Hektora Marco – tak, tego samego odpowiedzialnego za znalezienie błędu pozwalającego na ominięcie uwierzytelniania w bootloaderze GRUB2.

Niekończące się wpisywanie hasła:

Usterka jest spowodowana przez nieprawidłowe sprawdzanie hasła w skrypcie /scripts/local-top/cryptroot. Kiedy użytkownik przekroczy dozwoloną liczbę prób wprowadzenia prawidłowego hasła (standardowo 3), sekwencja uruchomienia jest kontynuowana dalej. Wywołany skrypt /scripts/local obsługuje błąd tak, jakby został spowodowany przez powolne urządzenie (a nie nieprawidłowe zachowanie użytkownika!), które potrzebuje więcej czasu na rozruch. Skrypt następnie próbuje wielokrotnie (do 30 razy na platformie x86 oraz 150 na PowerPC) odzyskać / zamontować “ociągające się” urządzenie poprzez funkcję local_deveice_setup(). Za każdym razem, gdy skrypt próbuje zamontować zaszyfrowaną partycję – użytkownik dostaje ponowne trzy szanse wpisania hasła. Sumując to daje to 93 próby wpisania hasła na architekturze x86. I tutaj pojawia się prawdziwy problem. Po przekroczeniu całkowitego limitu prób dla nieustalonych usterek sprzętowych – skrypt nie będąc świadomy rzeczywistej przyczyny błędów wywołuje funkcję panic() próbując załadować dodatkowe sterowniki i uruchamiając powłokę (Busybox) z uprawnieniami użytkownika root. Eksploracja błędu więc polega na naciskaniu klawisza Enter do czasu aż pojawi się znak zachęty powłoki (około 70 sekund).

Naprawa i obejście błędu:

Błąd można w prosty sposób naprawić. Wystarczy, że procedura rozruchu zostanie zatrzymana, gdy tylko użytkownik przekroczy dozwoloną liczbę prób. Odkrywca luki już stworzył poprawkę. Istnieje również szybkie obejście błędu. Wystarczy dodać parametr "panic" w linii bootloadera Grub:

sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="panic=5 /' /etc/default/grub
grub-install

Wówczas zamiast uruchomienia powłoki maszyna zostanie ponownie uruchomiona po 5 sekundach.

Impakt:

Atakujący, który wykorzysta ten błąd może doprowadzić do:

1) eskalacji uprawnień – poprzez umieszczenie plików SetUID w partycji bootującej (która najczęściej nie jest szyfrowana) lub podmiany jądra oraz obrazu initrd i późniejszym wykorzystaniu tego faktu do podniesienia uprawnień swojemu, lokalnemu użytkownikowi.
2) wycieku informacji – poprzez uzyskanie dostępu do wszystkich niezaszyfrowanych dysków lub przekopiowaniu zaszyfrowanego urządzania na inne, zewnętrze w celu późniejszych prób złamania hasła chroniącego.
3) odmowy usługi – poprzez skasowanie zawartości wszystkich dysków (nawet tych zaszyfrowanych).

“Complexity is the worst enemy of security”

Więcej informacji: CVE-2016-4484: Cryptsetup Initrd root Shell

Kategorie K a t e g o r i e : Bezpieczeństwo

Tagi T a g i : , , , ,

Komentowanie tego wpisu jest zablokowane.