Luka w cryptsetup pozwalająca na wyłączenie szyfrowania w partycjach LUKS2

W pakiecie Cryptsetup służącym do szyfrowania partycji dyskowych w systemie Linux została zidentyfikowana luka (CVE-2021-4122), która umożliwia wyłączenie szyfrowania na partycjach w formacie LUKS2 (Linux Unified Key Setup) poprzez modyfikację metadanych. Aby wykorzystać lukę, osoba atakująca musi mieć fizyczny dostęp do zaszyfrowanego nośnika, tj. Metoda ta ma sens głównie w przypadku ataków na zaszyfrowane zewnętrzne urządzenia pamięci masowej, takie jak dyski Flash, do których osoba atakująca ma dostęp, ale nie zna hasła umożliwiającego odszyfrowanie danych.

Atak dotyczy wyłącznie formatu LUKS2 i wiąże się z manipulacją metadanymi odpowiedzialnymi za aktywację rozszerzenia „reszyfrowanie online”, które pozwala, w przypadku konieczności zmiany klucza dostępu, na bieżąco inicjować proces ponownego szyfrowania danych bez przerywania pracy z partycją. Ponieważ proces deszyfrowania i szyfrowania nowym kluczem zajmuje dużo czasu, „ponowne szyfrowanie online” pozwala nie przerywać pracy z partycją i wykonywać ponowne szyfrowanie w tle, stopniowo ponownie szyfrując dane z jednego klucza na drugi . Możliwe jest również wybranie pustego klucza docelowego, co pozwala na konwersję sekcji do postaci odszyfrowanej.

Osoba atakująca może dokonać zmian w metadanych LUKS2, które symulują przerwanie operacji deszyfrowania w wyniku awarii i doprowadzić do odszyfrowania części partycji po aktywacji i użyciu zmodyfikowanego dysku przez właściciela. W takim przypadku użytkownik, który podłączył zmodyfikowany dysk i odblokował go poprawnym hasłem, nie otrzyma żadnego ostrzeżenia o procesie przywracania przerwanej operacji ponownego szyfrowania i może jedynie dowiedzieć się o postępie tej operacji za pomocą „luks Dump” Komenda. Ilość danych, jaką atakujący może odszyfrować, zależy od rozmiaru nagłówka LUKS2, ale przy domyślnym rozmiarze (16 MiB) może przekroczyć 3 GB.

Problem wynika z faktu, że chociaż ponowne szyfrowanie wymaga obliczenia i sprawdzenia skrótów nowego i starego klucza, skrót nie jest wymagany do rozpoczęcia deszyfrowania, jeśli nowy stan implikuje brak klucza w postaci zwykłego tekstu do szyfrowania. Dodatkowo metadane LUKS2, które określają algorytm szyfrowania, nie są chronione przed modyfikacją, jeśli wpadną w ręce atakującego. Aby zablokować lukę, twórcy dodali do LUKS2 dodatkową ochronę metadanych, dla których teraz sprawdzany jest dodatkowy hash, wyliczany na podstawie znanych kluczy i zawartości metadanych, tj. osoba atakująca nie może już potajemnie zmieniać metadanych bez znajomości hasła deszyfrującego.

Typowy scenariusz ataku wymaga, aby osoba atakująca mogła wielokrotnie sięgnąć po dysk. Najpierw osoba atakująca, która nie zna hasła dostępu, wprowadza zmiany w obszarze metadanych, powodując odszyfrowanie części danych przy następnej aktywacji dysku. Następnie dysk wraca na swoje miejsce, a atakujący czeka, aż użytkownik podłączy go, wprowadzając hasło. Po aktywacji urządzenia przez użytkownika rozpoczyna się proces ponownego szyfrowania w tle, podczas którego część zaszyfrowanych danych zostaje zastąpiona danymi odszyfrowanymi. Co więcej, jeśli atakującemu uda się ponownie zdobyć urządzenie, część danych na dysku będzie w formie odszyfrowanej.

Problem został zidentyfikowany przez opiekuna projektu cryptsetup i naprawiony w aktualizacjach cryptsetup 2.4.3 i 2.3.7. Status aktualizacji generowanych w celu rozwiązania problemu w dystrybucjach można śledzić na następujących stronach: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Luka pojawia się dopiero od wydania cryptsetup 2.2.0, w którym wprowadzono obsługę operacji „ponownego szyfrowania online”. Jako obejście ochrony można zastosować uruchomienie z opcją „--disable-luks2-reencryption”.

Źródło: opennet.ru

Dodaj komentarz