Brak dostępu – szyfrowanie dysków w Linuksie

Zaszyfrowane woluminy już dawno przestały być czymś wyjątkowym. Zasady korporacyjne i reguły zgodności często wymagają szyfrowania danych o kluczowym znaczeniu. W niniejszym artykule omawiamy narzędzia do szyfrowania dysków w systemie Linux.

To nie przypadek, że w ciągu ostatnich 10 lat laptopy zepchnęły komputery stacjonarne na drugi plan. Obecnie użytkownicy potrzebują jedynie systemów stacjonarnych do pracy wymagającej dużej mocy obliczeniowej, takiej jak renderowanie wideo lub gry. Do wszystkiego innego wystarczą nawet laptopy ze średniej półki. Jednak laptopy mają też jedną wadę: znacznie łatwiej je ukraść niż komputer stacjonarny. Odpowiednia polisa ubezpieczeniowa może amortyzować koszty wymiany urządzenia w przypadku kradzieży, trudniej jednak zrekompensować utratę danych.

Korporacje i użytkownicy mogą skutecznie chronić się przed tego rodzaju czarnym scenariuszem tylko poprzez całkowite zaszyfrowanie nośników danych w urządzeniu, od pamięci USB po zewnętrzne dyski twarde. W jaki sposób użytkownik Linuksa może najlepiej zabezpieczyć dane na dysku za pomocą szyfrowania? Poniżej opisujemy najważniejsze metody i narzędzia do szyfrowania pamięci masowej w Linuksie.

Cryptsetup z LUKS

Prawie każdy, kto kiedykolwiek miał do czynienia z szyfrowaniem w systemie Linux, natknął się na skrót LUKS [1], co oznacza Linux Unified Key Setup. Standard LUKS opisuje, jak powinno wyglądać szyfrowanie dysków w systemie Linux (Rysunek 1). LUKS jest oparty na narzędziu Cryptsetup, które z kolei wykorzystuje moduł jądra o nazwie Dmcrypt do zarządzania zaszyfrowanymi woluminami.

Na pierwszy rzut oka brzmi to znacznie bardziej chaotycznie niż jest w rzeczywistości — przynajmniej jeśli pamiętamy, że od dziesięcioleci jądro Linuksa obsługuje urządzenia blokowe i ich sterowniki. Warstwa urządzeń blokowych jądra wykorzystuje sztuczkę, umożliwiającą łączenie szeregowe różnych sterowników w celu połączenia ich funkcji.

Dmcrypt stanowi część warstwy urządzeń blokowych. Jeśli administrator poinstruuje program mapujący urządzenie (na przykład LVM), aby dołączył sterownik Dmcrypta do urządzenia blokowego przed uzyskaniem do niego dostępu, wszystkie funkcje Dmcrypta staną się dostępne dla danego urządzenia blokowego. Dmcrypt implementuje również własne szyfrowanie. Jednak w oczach twórców jądra te środki nie wystarczą, by sprostać dzisiejszym wymaganiom. W związku z tym stworzyli format LUKS, który standaryzuje wszystkie funkcje potrzebne do szyfrowania i definiuje je jako część nagłówka w tabeli partycji. Oznacza to również, że definicja zaszyfrowanych dysków w systemie Linux jest niezależna od dystrybucji i dostawcy.

Rysunek 1: LUKS, standardowy format dysków zaszyfrowanych w systemie Linux, działa w wielu różnych dystrybucjach.

Zintegrowany z systemem

Obecnie Cryptsetup z obsługą LUKS jest dołączony do wszystkich dystrybucji. Większość producentów zintegrowała również to narzędzie bezpośrednio ze swoimi procedurami konfiguracyjnymi. Możemy rozpocząć szyfrowanie podczas instalowania poszczególnych katalogów, takich jak /home, lub zaszyfrować cały dysk.

Po zaszyfrowaniu dysku system operacyjny nie będzie już mógł być uruchomiony bez hasła. Jeśli wyjmiemy z urządzenia nośnik danych i spróbujemy go odczytać, ujrzymy jedynie losowe dane. Ten sposób korzystania z zaszyfrowanych dysków w Linuksie jest obecnie zdecydowanie najbezpieczniejszym rozwiązaniem. Co więcej, w tym przypadku wykorzystywane jest również akceleracja sprzętowa. Jeśli nie korzystamy z Atoma lub innego taniego procesora, zapewne nasz sprzęt ma wbudowaną obsługę różnych algorytmów szyfrowania.

Urządzenia podłączone do systemu przez USB mogą być również szyfrowane za pomocą Cryptsetupa i LUKS-a – podobnie jak wbudowany dysk NVMe. Istnieją jednak różnice w konfiguracji między poszczególnymi dystrybucjami, a różne środowiska graficzne oferują również własne narzędzia do obsługi Cryptsetupa i LUKS-a. Jeśli chcemy uniknąć korzystania z wiersza poleceń, będziemy musieli zapoznać się z domyślnymi ustawieniami systemu.

Oczywiście połączenie Cryptsetupa i LUKS-a ma jedną zasadniczą wadę: praktycznie nie ma szans na współpracę z innymi systemami operacyjnymi. Jest to w pewnym sensie problem kury i jajka. Kiedy LUKS i Cryptsetup dopiero nabierały rozpędu, istniały już rozwiązania, które dobrze działały na wszystkich głównych systemach operacyjnych. Te alternatywne rozwiązania nie są tak głęboko zintegrowane z systemem, ale potrafią działać poza ograniczeniami konkretnego systemu operacyjnego, nie musimy więc ograniczać się tylko do Linuksa.

Ktoś pamięta Truecrypta?

Artykuł o szyfrowaniu dysków pod Linuksem byłby niekompletny bez wzmianki o Veracrypcie [2] i jego słynnym poprzedniku. Veracrypt wyłonił się z Truecrypta w 2013 roku. W tym czasie Truecrypt był uważany przez wielu użytkowników Linuksa za jedyną słuszną alternatywę dla kombinacji Cryptsetup/LUKS.

Rozwój Truecrypta dobiegł końca w wyniku audytu w 2014 roku i sami twórcy Truecrypta ostrzegali użytkowników, by nie używali tego oprogramowania do ochrony szczególnie istotnych danych. Wkrótce potem programiści udostępnili nową i ostatnią wersję Truecrypta, która była znacznie ograniczona pod względem funkcjonalności. Według twórców, ta ostateczna wersja miała służyć jedynie do skonwertowanie istniejących konfiguracji na do formatu Bitlockera ze standardowym szyfrowaniem firmy Microsoft.

Zakończenie prac nad Truecrypta wywołał w społeczności wiele spekulacji. Kilka lat później w programie odkryto luki, które zostały naprawione w Veracrypcie.

Spadkobierca Truecrypta

Veracrypt, który rok wcześniej wydzielił się z Truecrypta jako niezależny projekt, stał się jego de facto następcą. Krótko mówiąc, Veracrypt jest wysoce funkcjonalną platformą do szyfrowania nośników danych, spełniającą współczesne wymogi.

Rysunek 2: Z szyfrowanych dysków utworzonych w Veracrypcie można korzystać w systemach Windows, MacOS lub Linux.

Ogromną zaletą, jaką Veracrypt odziedziczył po swoim przodku, jest to, że działa na systemach Windows, Linux i macOS (Rysunek 2), dzięki czemu możemy go używać do wymiany danych między tymi systemami. W miarę możliwości program wykorzystuje istniejącą infrastrukturę na różnych systemach operacyjnych. Na przykład w systemie Linux Veracrypt bezpośrednio opiera się na Dmcrypcie. Twórcy zapewniają również, że utworzone kontenery i nośniki danych pozostaną wzajemnie kompatybilne poza granicami systemu operacyjnego – i jak na razie jest to prawdą.

Administrator z nośnikiem danych i odpowiednim kluczem może w ten sam sposób zamontować istniejące urządzenia z szyfrowaniem Veracrypt w systemach Windows, Linux i macOS. Veracrypt jest zatem szczególnie odpowiedni dla użytkowników, którzy często przełączają się z systemu Linux na Windows i z powrotem, ponieważ używają różnych systemów na swoich komputerach domowych i roboczych.

Rysunek 3: Ukrywając woluminy, Veracrypt umożliwia ukrycie samego istnienia poufnych danych, pomagając uzyskać wiarygodną możliwość zaprzeczenia.
Rysunek 4: Jeśli zainstalujemy EncFS-a w Ubuntu, zobaczymy wyraźne ostrzeżenie. Lepiej jest użyć GocryptFS-a, który naprawił problemy bezpieczeństwa EncFS-a.

Wiarygodne zaprzeczenie

Inną zdecydowanie przydatną funkcją Veracrypt jest odziedziczona po jego poprzedniku funkcja umożliwiająca zagnieżdżanie zaszyfrowanych dysków, a tym samym osiągnięcia tego, co specjaliści od bezpieczeństwa nazywają „możliwością wiarygodnego zaprzeczenia”. Wiarygodne zaprzeczenie pozwala skutecznie ukryć dane, nie sprawiając przy tym wrażenia, że faktycznie jakieś dane ukrywamy. W praktyce chodzi więc o to, aby całkowicie ukryć istnienie zaszyfrowanych nośników. Atakujący nawet nie wie, że dane są ukrywane, ponieważ nie ma żadnych wskazówek mogących na nie wskazywać.

Veracrypt obsługuje wiarygodną możliwość zaprzeczenia, tworząc na dysku wiele zagnieżdżonych kontenerów. Pierwszy pojemnik i jego podpis na dysku są łatwo rozpoznawalne z zewnątrz. Ponieważ jednak ten kontener zawiera tylko pozornie istotne dane, to jeśli jest prawidłowo obsługiwany, właściciel dysku może bez problemu przekazać klucz do niego osobie trzeciej, nie narażając się na ujawnienie ukrytych danych (Rysunek 3). Drugi volumen ukrywa swój nagłówek w nagłówku pierwszego wolumenu. Aby móc go otworzyć, musisz wiedzieć, że istnieje, i oczywiście podać odpowiednie hasło, ponieważ z zewnątrz wygląda jak przypadkowe dane. A jego istnienie można łatwo wytłumaczyć istnieniem pierwszego zaszyfrowanego woluminu.

W systemie Windows Veracrypt idzie o krok dalej i może przechowywać ukryty system operacyjny na zaszyfrowanym dysku. Z zewnątrz dysk ten wygląda jak normalny nośnik danych, ale pod maską skrywa kompletną partycję systemową.

Łatwy w użyciu

Jeśli szukamy szybkiego rozwiązania dla zaszyfrowanych nośników danych, Veracrypt jest właściwym wyborem. Po instalacji, którą obsługujemy z poziomu menedżera pakietów w Linuksie bądź instalatora w Windows i macOS, otwiera się kreator w postaci interfejsu graficznego. Kreator poprowadzi nas przez cały proces szyfrowania. Veracrypt oferuje opcję tworzenia zaszyfrowanych kontenerów w systemie plików lub szyfrowania całych urządzeń blokowych.

Bez względu na to, które podejście wybierzemy, nie powinniśmy mieć problemów z ze zrozumieniem i udzieleniem odpowiedzi na pytania stawiane przez kreatora. Jeśli nigdy wcześniej nie zajmowaliśmy się szyfrowaniem dysków, Veracrypt może nam się wydać nieco nieprzyjazny. Wystarczy jednak nieco doświadczenia, by przyzwyczaić się do pracy z tą platformą.

Rysunek 5: GocryptFS potrafi w bardzo krótkim czasie tworzyć zaszyfrowane kontenery z wirtualnym punktem montowania; w razie potrzeby możemy je zamontować lub odmontować.

GocryptFS

Innym nowoczesnym narzędziem do szyfrowania dysków w Linuksie jest GocryptFS [3]. I ten projekt zawdzięcza swoje istnienie wcześniejszemu systemowi, który stracił popularność wśród użytkowników FOSS: EncFS.

EncFS znalazł się pod ostrzałem, gdy podczas audytu stało się z nim coś, co nigdy nie powinno mieć miejsca w przypadku rozwiązania szyfrującego. Mianowicie testerzy wykryli lukę w kodzie źródłowym, która w najgorszym przypadku pozwalała na obliczenie klucza używanego do szyfrowania. To niebezpieczeństwo pojawiało się w EncFS-ie zwłaszcza wtedy, gdy atakujący zdobyli kilka wersji zaszyfrowanego kontenera. Właściwy klucz można było następnie znaleźć poprzez proste dopasowanie i procedurę wykluczania. Od czasu tego incydentu EncFS został uznany jako narzędzie niebezpieczne, którego nie należy używać (Rysunek 4).

Jednak Austriak Jakob Unterwurzacher uznał ideę EncFS za tak przekonującą, że postanowił stworzyć nową implementację. Postnowił przy tym użyć języka programowania Go, co nie tylko wyjaśnia nazwę programu, ale, co ciekawe, przekłada się także na znaczną poprawę szybkości w porównaniu z wcześniej używanym C++. Podobnie jak poprzedni, program korzysta z FUSE (Rysunek 5), więc można go użyć na dowolnym systemie Linux z aktywowanym środowiskiem FUSE.

Ponieważ FUSE jest również dostępny dla Windows, GocryptFS działa również w systemach Windows. Jednak ta wersja nosi nazwę CppcryptFS i, jak sama nazwa wskazuje, została napisana w C++ zamiast Go. Użytkownicy MacOS-a mają mniej szczęścia: macFUSE istnieje, ale nie jest dostępny na wolnej licencji. Dlatego społeczność FOSS stara się unikać tego narzędzia. W międzyczasie jednak opracowano alternatywę, która umożliwiła przeniesienie GocryptFS-a również na macOS-a, chociaż niektóre funkcje specjalne nie zostały jeszcze zaimplementowane.

Jeśli nie chcemy używać GocryptFS-a w wierszu poleceń, możemy skorzystać z SiriKali (patrz: „Linux Magazine” nr 214), który oferuje graficzny interfejs użytkownika dla GocryptFS-a i jego poprzednika EncFS.

Co oferuje GocryptFS

Jak wspomnieliśmy, GocryptFS zawsze tworzy kompletne, zaszyfrowane kontenery w pliku lub na dysku. Zasadniczo GocryptFS jest zaprojektowany jako nakładkowy system plików. W normalnym trybie działania włączamy kontener GocryptFS, zapisujemy w nim coś, ponownie wyłączamy kontener, a następnie zaszyfrowana zawartość pojawia się w podstawowym systemie plików. Dzięki dokumentacji tworzenie nakładek GocryptFS-a jest szybkie i łatwe.

GocryptFS oferuje drugą opcję, znaną jako tryb odwrotny, i która służy do przechowywania danych, które nie są zabezpieczone. Jeśli chcemy na przykład przechowywać kopie zapasowe w chmurze, możemy aktywować tryb odwrotny w GocryptFS-ie. Tryb odwrotny udostępnia zaszyfrowane dane bezpośrednio, dzięki czemu można je skopiować do innej lokalizacji.

GocryptFS jest tak prosty jak Veracrypt, jednak przewyższa Veracrypta pod względem szybkości działania: istnieje duża różnica podczas szyfrowania i to pomimo faktu, że Veracrypt i GocryptFS obsługują akcelerację sprzętową dla różnych algorytmów kryptograficznych. Jeśli często pracujemy z zaszyfrowanymi danymi, na pewno warto przetestować GocryptFS-a.

Uniwersalne GUI: Zulucrypt

Ostatnim omawianym narzędziem jest program, który w rzeczywistości sam nie przeprowadza żadnego szyfrowania. Zulucrypt [4] wraz z dołączonym do niego Zulumountem, służy raczej do zarządzania metodami szyfrowania dostępnymi pod Linuksem.

Zulucrypt (Rysunek 6) ma na celu unifikację klasycznych konfiguracji kryptograficznych z LUKS-em, Veracryptem i GocryptFS-em w jednym interfejsie. Przede wszystkim jest to więc graficzny interfejs użytkownika, który integruje różne narzędzia, wywołując je w tle.

Zulucrypt jest niezwykle przyjazny dla użytkownika. Narzędzie jest dołączone do większości popularnych dystrybucji Linuksa i można je łatwo zainstalować. Tuż po instalacji wyświetla się główne okno Zulucrypta, dzięki któremu możemy się łatwo przekonać, jak potężne jest to narzędzie.

W Zulucrypcie możemy tworzyć lub otwierać urządzenia LUKS za pomocą Cryptsetupa, tworzyć wolumeny Veracrypta lub korzystać z istniejących i montować systemy plików przez FUSE z GocryptFS-em. Odmontowanie działa w ten sam sposób. Zulucrypt zwalnia użytkownika z konieczności zajmowania się szczegółami aplikacji CLI lub GUI poszczególnych rozwiązań. Niemniej jednak nie zaszkodzi przynajmniej zapoznać się z podstawowymi funkcjami poszczególnych programów, na wypadek gdyby coś poszło nie tak w Zulucrypcie – czyli pojawił się błąd, którego Zulucrypt sam nie potrafiłby naprawić. Jednak w codziennej pracy takie sytuacje zdarzają się niezwykle rzadko.

Podsumowując, Zulucrypt jest potężnym narzędziem, dzięki czemu użytkownicy nie muszą uczyć się obsługi wielu różnych narzędzi, i które skutecznie integruje funkcje różnych programów szyfrujących. Zulucrypt przyda się szczególnie tym z nas, którzy różnych powodów muszą używać więcej niż jednego narzędzia do szyfrowania.

Rysunek 6: Zulucrypt jest wszechstronny, jeśli chodzi o obsługę różnych narzędzi szyfrujących, z którymi spotykają się użytkownicy i administratorzy Linuksa.

Podsumowanie

Szyfrowanie w systemie Linux, zarówno na serwerach, jak i komputerach stacjonarnych, nie stanowi dziś żadnego problemu. Wraz z systemem otrzymujemy wbudowane narzędzia w postaci Cryptsetupa i LUKS-a. Twórcy dystrybucji znakomicie zintegrowali te narzędzia z resztą systemu, możemy więc bez obaw skonfigurować system z zaszyfrowaną partycją główną i katalogami domowymi.

W przypadku urządzeń mobilnych, takich jak laptopy, do dyspozycji mamy narzędzia szyfrujące, które w niczym nie ustępują standardowym produktom z innych systemów, takim jak Bitlocker w Windows czy File Vault w macOS-ie. To samo dotyczy szyfrowania nośników przenośnych, takich jak pamięci USB lub zewnętrzne dyski twarde podłączane przez USB. Tutaj dostępne są rozwiązania w postaci Veracrypta, GocryptFS-a – i oczywiście Cryptsetupa/LUKS-a, które można szybko skonfigurować i które działają w całkowicie niezawodny sposób. Jeśli od czasu do czasu przełączamy się między różnymi systemami operacyjnymi, zapewne wybierzemy Veracrypta, który jest najbardziej uniwersalnym z przedstawionych tu narzędzi.

Jednym z nierozwiązanych problemów jest jednak kwestia szyfrowania istniejących wolumenów zawierających już pewne dane. W praktyce najbardziej opłaca się zrobić kopię danych, zaszyfrować urządzenie, po czym z powrotem przegrać na nie dane.

Info

[1] LUKS: https://gitlab.com/cryptsetup/cryptsetup

[2] Veracrypt: https://www.veracrypt.fr/en/Home.html

[3] GocryptFS: https://github.com/rfjakob/gocryptfs

[4] Zulucrypt: http://mhogomchungu.github.io/zuluCrypt/

Tagi:

Podziel się postem :)

Najnowsze:

Oprogramowanie

Zmiany w Gmailu. Wyszukiwarka staje się “inteligentniejsza”

Google wprowadza zmiany w swoich usługach, w tym w wyszukiwarce działającej w Gmailu. W praktyce chodzi o rozszerzenie zmian z zapowiedzi, która pojawiła się już w lipcu tego roku. Gmail będzie teraz sprawniej szukać wiadomości zależnie od poprzednich działań użytkownika.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *