Opublikowano Shufflecake, zestaw narzędzi do tworzenia ukrytych zaszyfrowanych partycji dyskowych

Firma audytująca bezpieczeństwo Kudelski Security opublikowała narzędzie o nazwie Shufflecake, które umożliwia tworzenie ukrytych systemów plików rozproszonych po dostępnej wolnej przestrzeni na istniejących partycjach i nie do odróżnienia od losowych danych resztkowych. Partycje tworzone są w taki sposób, że bez znajomości klucza dostępu trudno jest udowodnić ich istnienie nawet przy przeprowadzaniu analizy kryminalistycznej. Kod narzędzi (shufflecake-userland) i moduł jądra Linuksa (dm-sflc) napisany jest w języku C i rozpowszechniany na licencji GPLv3, co uniemożliwia włączenie opublikowanego modułu jądra do głównego jądra Linuksa ze względu na niekompatybilność z licencja GPLv2, na której dostarczane jest jądro.

Projekt jest pozycjonowany jako bardziej zaawansowane rozwiązanie niż Truecrypt i Veracrypt do ukrywania danych wymagających ochrony, które ma natywną obsługę platformy Linux i pozwala na umieszczenie na urządzeniu do 15 ukrytych partycji, zagnieżdżonych jedna w drugiej, aby zmylić analizę ich istnienia. Jeśli samo użycie Shufflecake nie jest tajemnicą, jak można ocenić na przykład na podstawie obecności odpowiednich narzędzi w systemie, wówczas nie można określić całkowitej liczby utworzonych ukrytych partycji. Utworzone ukryte partycje można sformatować według uznania użytkownika, aby pomieścić dowolny system plików, na przykład ext4, xfs lub btrfs. Każda partycja traktowana jest jako oddzielne wirtualne urządzenie blokowe z własnym kluczem odblokowującym.

Aby zagmatwać ślady, proponuje się zastosowanie modelu zachowania „wiarygodnej zaprzeczalności”, którego istotą jest to, że cenne dane są ukrywane jako dodatkowe warstwy w zaszyfrowanych sekcjach z mniej wartościowymi danymi, tworząc rodzaj ukrytej hierarchii sekcji. W przypadku nacisku właściciel urządzenia może ujawnić klucz do zaszyfrowanej partycji, jednak w tej partycji mogą być ukryte inne partycje (do 15 zagnieżdżonych poziomów), a określenie ich obecności i udowodnienie ich istnienia jest problematyczne.

Ukrywanie osiąga się poprzez konstruowanie każdej partycji jako zestawu zaszyfrowanych fragmentów umieszczonych w losowych miejscach na urządzeniu pamięci masowej. Każdy plasterek jest tworzony dynamicznie, gdy potrzebna jest dodatkowa przestrzeń dyskowa na partycji. Aby utrudnić analizę, wycinki różnych przekrojów są zmieniane, tj. Sekcje Shufflecake nie są połączone z sąsiadującymi regionami, a plasterki ze wszystkich sekcji są mieszane. Informacje o wykorzystanych i wolnych plasterkach są przechowywane na mapie lokalizacji powiązanej z każdą partycją, do której odwołuje się zaszyfrowany nagłówek. Karty i nagłówek są szyfrowane i bez znajomości klucza dostępu są nie do odróżnienia od danych losowych.

Nagłówek jest podzielony na szczeliny, z których każda definiuje własną sekcję i powiązane z nią wycinki. Sloty w nagłówku są ułożone w stos i powiązane rekurencyjnie - bieżący slot zawiera klucz do odszyfrowania parametrów poprzedniej sekcji w hierarchii (tej mniej ukrytej), pozwalając na użycie jednego hasła do odszyfrowania wszystkich mniej ukrytych sekcji powiązanych z wybraną sekcję. Każda mniej ukryta partycja traktuje wycinki zagnieżdżonych partycji jako wolne.

Domyślnie wszystkie podsekcje Shufflecake mają ten sam widoczny rozmiar, co sekcja najwyższego poziomu. Przykładowo, jeśli na urządzeniu o pojemności 1 GB znajdują się trzy partycje, każda z nich będzie widoczna dla systemu jako partycja o wielkości 1 GB, a łączna dostępna przestrzeń dyskowa będzie współdzielona pomiędzy wszystkimi partycjami – jeśli łączny rozmiar przechowywanych danych przekroczy rzeczywisty rozmiar urządzenia, rozpocznie się zgłaszanie błędu we/wy.

Sekcje zagnieżdżone, które nie są otwarte, nie biorą udziału w alokacji przestrzeni, tj. próba zapełnienia partycji najwyższego poziomu spowoduje zniszczenie danych w partycjach zagnieżdżonych, ale nie umożliwi wykrycia ich obecności poprzez analizę wielkości danych, jakie można umieścić w partycji przed wystąpieniem błędu (jest to zakłada się, że górne partycje zawierają niezmienne dane, aby odwrócić uwagę i nigdy osobno nie są używane, a regularna praca jest zawsze prowadzona z najnowszą zagnieżdżoną sekcją, sam schemat sugeruje, że ważniejsze jest zachowanie tajemnicy istnienia danych, niż je utracić).

W rzeczywistości zawsze tworzonych jest 15 partycji Shufflecake - hasło użytkownika jest dołączone do używanych partycji, a do nieużywanych partycji dostarczane jest losowo generowane hasło (nie można zrozumieć, ile partycji faktycznie jest używanych). Kiedy partycje Shufflecake są inicjowane, dysk, partycja lub wirtualne urządzenie blokowe przydzielone do ich umieszczenia są wypełniane losowymi danymi, co uniemożliwia identyfikację metadanych i danych Shufflecake na tle ogólnym.

Implementacja Shufflecake ma dość wysoką wydajność, ale ze względu na obciążenie, przepustowość jest w przybliżeniu dwukrotnie mniejsza w porównaniu z szyfrowaniem dysku opartym na podsystemie LUKS. Korzystanie z Shufflecake powoduje również dodatkowe koszty pamięci RAM i miejsca na dysku do przechowywania danych serwisowych. Zużycie pamięci szacuje się na 60 MB na partycję, a miejsce na dysku na 1% całkowitego rozmiaru. Dla porównania technika WORAM o podobnym przeznaczeniu prowadzi do spowolnienia od 5 do 200 razy przy 75% utracie użytecznej przestrzeni dyskowej.

Zestaw narzędzi i moduł jądra zostały przetestowane wyłącznie na Debianie i Ubuntu z jądrami 5.13 i 5.15 (obsługiwane w Ubuntu 22.04). Zaznacza się, że projekt należy w dalszym ciągu traktować jako działający prototyp, w którym nie należy przechowywać ważnych danych. W przyszłości planujemy wprowadzić dodatkowe optymalizacje pod kątem wydajności, niezawodności i bezpieczeństwa, a także zapewnić możliwość uruchamiania z partycji Shufflecake.

Źródło: opennet.ru

Dodaj komentarz