Problemy z czyszczeniem kluczy szyfrowania dysku z RAM podczas przechodzenia systemu Linux w tryb uśpienia

Podczas portowania narzędzia cryptsetup-suspend dla NixOS zidentyfikowano błąd w podsystemie szyfrowania dysków LUKS (Linux Unified Key Setup), który spowodował, że od czasu wprowadzenia jądra Linux 6.9 (problemowy commit), wydanego w maju 2024 roku, usuwanie kluczy szyfrowania z pamięci RAM przestało działać przy przechodzeniu systemu w tryb uśpienia.

Narzędzie cryptsetup-suspend jest używane w Debianie do automatycznego blokowania partycji LUKS przed przejściem w tryb uśpienia. Zakłada się, że w przypadku kradzieży laptopa, który przeszedł w tryb uśpienia, przestępca nie będzie miał możliwości dostępu do danych, ponieważ po wybudzeniu z trybu uśpienia wymagane będzie wprowadzenie hasła, aby przywrócić dostęp do zaszyfrowanych danych. Z powodu błędu w jądrze Linux, po zablokowaniu partycji LUKS komendą „cryptsetup luksSuspend” klucze nie zostały usunięte z pamięci RAM i były widoczne przez /proc/keys, co pozwalało atakującemu na ich wydobycie, na przykład metodą „zimnego restartu”, i użycie ich do uzyskania dostępu do danych.

Brak usunięcia kluczy został wykryty podczas debugowania stanu wyścigu, co powodowało problemy z przejściem w tryb uśpienia. Błąd pojawił się po dokonaniu refaktoryzacji w jądrze 6.9, w wyniku której klucze były powiązane z wątkiem wywołującym i miały być usuwane po jego zakończeniu, ale w rzeczywistości pozostawały w pamięci. Proponowany jest jednowierszowy patch do jądra Linux, który eliminuje ten błąd.

Patch ten nie został przyjęty do jądra, ponieważ zidentyfikowano w nim niedoskonałość — patch działa tylko dla fizycznych nośników, ale nie działa dla wirtualnych urządzeń loop. Zamiast naprawić problem po stronie jądra, twórcy narzędzia cryptsetup zaproponowali obejście usuwania kluczy. Zmiana ta została już zaakceptowana i wejdzie w skład wydania cryptsetup 2.8.7.

Ponadto dla NixOS stworzono własną implementację skryptów do blokowania szyfrowanych dysków przed przejściem w tryb uśpienia, w której wykorzystany jest stary patch do jądra, nieprzyjęty w 2015 roku, wymuszający usuwanie kluczy z pamięci przed przejściem w tryb uśpienia.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster