r   e   k   l   a   m   a
r   e   k   l   a   m   a

Szyfrowanie całego dysku: ochroń swoje dane przed wścibskimi

Strona główna AktualnościBEZPIECZEŃSTWO

Bez względu na to, jak skrycie będziemy prowadzili naszą komunikację, iloma warstwami szyfrowania otoczymy nasze pliki, pocztę, wiadomości czy rozmowy, zawsze trzeba liczyć się z najgorszym. W tym wypadku najgorszym jest uzyskanie przez napastnika fizycznego dostępu do naszych urządzeń. Wykorzystując narzędzia informatyki śledczej do analizy śladów w systemie operacyjnym, można pozyskać bardzo dużo informacji, często wystarczających do odszyfrowania naszych danych, można też w systemie umieścić w sposób niepostrzeżony dla użytkownika oprogramowanie inwigilujące. Mówi się, że przed takim atakiem nie ma obrony, a jednak historia pokazuje inaczej: pełne szyfrowanie dysków stanowi dla napastników twardy orzech do zgryzienia. Jeśli chcecie się dowiedzieć, jak to działa i jak samodzielnie zabezpieczyć swoje wrażliwe dane na dysku przed nieupoważnionym dostępem zapraszamy do lektury.

Dlaczego szyfrować dyski?

Wierzących w prawo do prywatności (zapisane przecież w Powszechnej Deklaracji Praw Człowieka ONZ: Nie wolno ingerować samowolnie w czyjekolwiek życie prywatne, rodzinne, domowe, ani w jego korespondencję, ani też uwłaczać jego honorowi lub dobremu imieniu. Każdy człowiek ma prawo do ochrony prawnej przeciwko takiej ingerencji lub uwłaczaniu) przekonywać tu specjalnie nie trzeba. Być może są wśród nas tacy, którzy naprawdę nie mają nic do ukrycia i gotowi byliby podzielić się każdym aspektem swojego życia z obcymi, ale niech to się dzieje z ich wyboru – nie można oczekiwać, że każdy będzie tak „otwarty”.

Wątpiącym w to prawo można powiedzieć, że w wielu wypadkach jest to konieczne dla ochrony interesów innych ludzi – koronnym przykładem niech tu będzie lekarz-psychiatra, któremu wykradną laptopa z dokumentacją medyczną jego pacjentów, czy prawnik, który na swoim komputerze przechowuje materiały niezbędne dla obrony swoich klientów.

r   e   k   l   a   m   a

Jeśli te argumenty Was nie przekonały, pozostaje argument techniczno-biznesowy. Bez szyfrowania dysków, sprzedaż czy nawet wyrzucenie na śmietnik starych nośników wiąże się z koniecznością porządnego ich „wyczyszczenia”, czyli zapisania losowymi ciągami zer i jedynek. Trwa to bardzo długo i nie gwarantuje, że dane zostaną na pewno zniszczone. Znane są wypadki, że za pomocą specjalistycznych narzędzi udało się odczytać zawartość dysku, który był w ten sposób wielokrotnie „czyszczony”. Tymczasem dobrze zaszyfrowany nośnik możemy wyjąć z komputera i sprzedać tak, jakby niczego na nim nie było.

Dlaczego stosować pełne szyfrowanie dysku?

W przeciwieństwie do szyfrowania danych na poziomie systemu plików, pełne szyfrowanie dysku na poziomie sektorowym wiąże się z zaszyfrowaniem (prawie) wszystkich danych znajdujących się na dysku. Zabezpieczone w ten sposób zostają nie tylko pliki na poszczególnych partycjach, ale też wrażliwe na analizę przestrzeń wymiany (swap) i zwykle niewidoczne dla użytkownika pliki tymczasowe, pozwala też ukryć wszystkie metadane – strukturę katalogów, nazwy plików, ich rozmiary oraz czasy modyfikacji i dostępu.

Uwaga: szyfrowanie całego dysku chroni dane na komputerze tylko wtedy, gdy komputer jest fizycznie wyłączony. W wypadku, gdy napastnik przejmie komputer włączony, ma on możliwość przejęcia kluczy kryptograficznych z RAM. Dlatego dla najbardziej wrażliwych danych, szczególnie na laptopach, warto łączyć szyfrowanie całodyskowe z szyfrowaniem na poziomie plików.

Zarazem cała zawartość zaszyfrowanego dysku jest udostępniana zaraz po przedstawieniu przez użytkownika właściwego klucza/hasła, tak że w czasie pracy komputera mamy dostęp do wszystkich danych. To może być uznane za główną słabość pełnego szyfrowania dysku – napastnik, który przejmie działający komputer, nie musi przejmować się szyfrowaniem, może też wydostać przechowywane w pamięci operacyjnej klucze. Dlatego też niekiedy łączy się pełne szyfrowanie dysku z szyfrowaniem na poziomie plików, pozwalającym zabezpieczyć te najbardziej newralgiczne dane nawet w takiej sytuacji.

Szyfrowanie zawierających system operacyjny dysków na poziomie sektorowym jest zadaniem nieco paradoksalnej natury. Z jednej strony chcemy mieć zaszyfrowany cały dysk, z drugiej uruchomić z niego system. Jak jednak załadować system z zaszyfrowanego dysku, skoro oprogramowanie deszyfrujące jest zaszyfrowane w systemie? Pomijając rozwiązania sprzętowej natury, zwykle realizuje się to za pomocą mechanizmu przedstartowego uwierzytelniania, które pozwala na załadowanie minimalnego środowiska, w którym zachodzi uwierzytelnienie użytkownika i odszyfrowanie jądra systemu i przekazanie działającym tam sterownikom kluczy deszyfrujących dysk.

Warto pamiętać, że większość komercyjnych systemów szyfrowania dysków jest pisanych z myślą o użytkownikach biznesowych, których potrzeby w tej kwestii nie tylko są inne od potrzeb użytkowników indywidualnych, ale wręcz stoją w opozycji do nich – ot np. w wypadku tych komercyjnych systemów oczekuje się wręcz, że administrator będzie w stanie zdalnie zawartość dysku odszyfrować.

Przyjrzymy się bliżej temu wszystkiemu na przykładzie oprogramowania dm-crypt, będącego standardową częścią Linuksa. Czemu akurat dm-crypt, a nie inne narzędzia szyfrujące, np. BitLocker czy TrueCrypt? Powodów jest kilka. Po pierwsze, korzystanie z linuksowych systemów operacyjnych do przechowywania wrażliwych danych jest o tyle rozsądne, że łatwiej niż np. w wypadku Windowsów skroić je na własne potrzeby, uszczelnić i i ograniczyć powierzchnię ataku. Po drugie, używanie do celów osobistego szyfrowania danych narzędzi, których kod źródłowy nie został dokładnie zbadany przez ekspertów, jest dość ryzykowne (nie mówiąc już o narzędziach, które wgrywają klucze recovery do chmury Microsoftu).

Po trzecie, dm-crypt wraz z towarzyszącymi mu narzędziami jest aktywnie rozwijanym oprogramowaniem, które zostało dobrze zintegrowane z popularnymi linuksowymi dystrybucjami, tak że pozwalają one dziś na zautomatyzowanie procesu pełnego szyfrowania dysku przy instalacji systemu. Po czwarte wreszcie, dm-crypt jest fundamentem mechanizmu szyfrowania w urządzeniach z Androidem, a co za tym idzie, jest prawdopodobnie najpopularniejszym tego typu narzędziem na świecie.

Zdajemy sobie sprawę, że w wielu przypadkach Linux nie jest w stanie zastąpić Windowsa czy OS-a X, opublikujemy więc także poradnik pełnego szyfrowania dysków także dla tych systemów.

Jak działa szyfrowanie na poziomie sektorowym?

Szyfrowanie przez dm-crypt zostało tak pomyślane, by działać w wielu różnych scenariuszach. Sprawdza się zarówno w obsłudze karty microSD włożonej do minikomputerka takiego jak Raspberry Pi, dysku SSD wbudowanego w laptopa, czy macierzy dyskowej podpiętej do serwera po sieciowym systemie plików. Rodzaj pamięci masowej nie ma tu znaczenia czy zastosowany system plików – oprogramowanie to działa w warstwie pośredniej, między systemem plików a sprzętem, bez względu na to, co z tymi warstwami robimy. Dlatego właśnie przy zastosowaniach „biurkowych” najczęściej łączy się dm-crypt z inną warstwą abstrakcji, tj. wolumenami logicznymi (LVM), by ułatwić obsługę zaszyfrowanych partycji.

Kiedyś zarządzanie tymi zaszyfrowanymi dyskami było dość skomplikowane i niezbyt bezpieczne, wiązało się z ręcznym pisaniem tabel odwzorowania urządzeń (device-mapper tables), które były zwykłymi plikami tekstowymi, zawierającymi przekazywaną do kernela konfigurację. Dzisiaj korzystamy ze standardu LUKS (Linux Unified Key Setup), będącym implementacją systemu zarządzania kluczami dla szyfrowanych na poziomie sektorów dysków TKS1. Zapewnia on dwupoziomowe szyfrowanie, rozłączając hasło od klucza głównego, jak również pozwala na bezpieczne przechowywanie tych danych. Poniżej będziemy pisali wyłącznie o kombinacji LUKS/dm-crypt.

Naszym celem jest uzyskanie z niezaszyfrowanego urządzenia blokowego (np. dysku /dev/sda1) zaszyfrowanego wirtualnego urządzenia blokowego (/dev/mapper/szyfrowanydysk). Będziemy mieli do czynienia z dwoma rodzajami zaszyfrowanej informacji: samym zaszyfrowanym urządzeniem oraz informacją niezbędną do obsłużenia zaszyfrowanych danych, obejmującą typ szyfru, hasło i klucz oraz konfigurację skrótu. Dzięki standardowi LUKS wszystkie te dane, oprócz hasła i klucza znajdują się w nagłówku zaszyfrowanej partycji. Użytkownikowi pozostaje tylko wprowadzić hasło.

To hasło o dowolnej długości służy do wyprowadzenia klucza. W tym celu wykorzystywana jest funkcja PBKDF2 (Password Based Key Derivation Function 2), generująca klucz o stałej długości, algorytmem tak zaprojektowanym, by był skrajnie trudny obliczeniowo (utrudniając w ten sposób atak siłowy). Dopiero ten klucz służy do odszyfrowania klucza głównego, służącego do de/szyfrowania danych odczytywanych/zapisywanych na wirtualne urządzenie blokowe. Dzięki temu właśnie możemy dowolnie zmieniać hasła, bez konieczności reszyfrowania danych – i przechowywać klucz główny wraz z zaszyfrowanymi danymi, w nagłówku wirtualnego urządzenia.

LUKS oferuje możliwość przechowywania w tzw. slotach wielu zaszyfrowanych reprezentacji klucza głównego w nagłówku partycji, z których każda może być użyta do odszyfrowania danych. Pozwala to na zastosowanie konfiguracji dla wielu użytkowników, z których każdy ma swoje własne hasło. W slocie oprócz zaszyfrowanej kopii klucza głównego znajdują się jeszcze parametr soli oraz parametr rozciągania. Sól pozwala wzmocnić hasło dodatkową entropią, sprawiając, że wyprowadzonego klucza nie sposób zgadnąć z hasła (ani vice versa). Rozciąganie pozwala ukryć realną długość posolonego hasła, dopełniając go pseudolosowymi wartościami, tak by udopornić system na ataki wykorzystujące tęczowe tablice.

Wiemy już jak obsługiwane są klucze. By zrozumieć działanie całodyskowego szyfrowania, trzeba przyjrzeć się takim zagadnieniom jak typy algorytmów szyfrowania, wektory inicjujące (IV) czy tryby działania, które są tu wykorzystywane.

Kluczowym pojęciem jest tu szyfr blokowy – czyli taki, który na wejściu przyjmuje bloki jawnych danych określonej długości oraz tajny klucz, a na wyjściu zwraca przekształcony blok z szyfrogramem o tej samej długości. Każdy blok jest przetwarzany w taki sam sposób. Różni się on tym od szyfru strumieniowego, w którym poszczególne bity tekstu jawnego są łączone z pseudolosowym strumieniem danych z klucza, a transformacja zmienia się w trakcie szyfrowania.

Jako że szyfrujemy sektory dyskowe o stałej długości, mamy do czynienia z szyfrem blokowym. Domyślnie wykorzystuje się tutaj dobrze znany AES – 14 rund szyfrujących (dla klucza 256 bitów) podstawienia-permutacji, praktycznie odporny na wszelkie znane techniki kryptoanalityczne (ładną animację Flash przedstawiającą działanie AES znajdziecie tutaj).

W jakim trybie są zapisywane te bloki na wyjściu? Tu mamy wiele możliwości. Zacznijmy od najprostszej (i najmniej bezpiecznej) z nich, tzw. ECB, Electronic Code Book. Tutaj jawna treść dzielona jest na bloki, a każdy blok szyfrowany oddzielnie. Tak więc wzór w ciągu niezaszyfrowanych bloków zostanie odwzorowany w ciągu zaszyfrowanych bloków, łatwo ujawniając swoją naturę podczas kryptoanalizy. Dlatego ta klasyczna metoda ma dziś zastosowanie wyłącznie edukacyjne.

W CBC (Cipher Block Chaining) przed zaszyfrowaniem na każdym z bloków jawnego tekstu stosowana jest funkcja XOR (suma poprzeczna) z poprzedzającym go blokiem. W ten sposób każdy blok szyfrogramu zależy od uprzedniego przetworzenia wszystkich poprzedzających go bloków jawnego tekstu. Oczywiście pierwszy blok musi otrzymać coś na „dzień dobry”, dostaje więc losowo generowany wektor inicjujący (IV). Jest to blok pozwalający na uzyskanie unikatowych szyfrogramów za pomocą tego samego klucza, dostarczający procesowi odpowiedniej losowości i używany tylko raz dla danego klucza (w przeciwnym razie może ujawnić pewne informacje o pierwszym bloku). Jako jednak że pracujemy na oddzielnych sektorach dysku i musimy mieć do nich niezależny dostęp, każdy z nich samodzielnie wykorzystuje wektor inicjujący. I ten tryb ma jednak swoje słabości, przede wszystkim niemożliwość paralelizacji oraz podatność na uszkodzenia, propagowane wraz z szyfrowaniem do kolejnych bloków.

Obecnie w dm-crypcie (ale i w większości innych programów szyfrujących) stosuje się najczęściej tryb XTS (XEX-based tweaked-codebook mode with ciphertext stealing), łączony z szyfrem symetrycznym AES. Wykorzystuje on dwa klucze AES, z których jeden służy do szyfrowania blokowego AES, a drugi do do szyfrowania wartości modyfikującej. Na tej wartości działa następnie funkcja wielomianowa Galois i funkcja XOR, wykonywane na jawnym tekście oraz na szyfrogramie każdego bloku. Wykorzystanie funkcji Galois zapewnia, że z identycznych bloków jawnego tekstu nie powstaną identyczne bloki szyfrogramu.

Szyfrowanie dysków dla ludu

To wszystko pewnie może brzmieć dość skomplikowanie dla Zwykłego Użytkownika, dlatego należy z uznaniem wyrazić się o staraniach Canonicala, które wraz z wydaniem Ubuntu 12.10 w swoim instalatorze Ubiquity wprowadziło prosty mechanizm szyfrowania całego dysku.

Możliwość szyfrowania była oczywiście dostępna wcześniej, ale wyłącznie przez instalator tekstowy, o którym większość osób nawet nie wiedziała że istnieje. W ślad za Canonicalem poszli inni twórcy dystrybucji, nie tylko tych wyprowadzonych z Ubuntu – coraz więcej desktopowych systemów linuksowych pozwala na zaszyfrowanie dysku „jednym kliknięciem”. No może nie jednym, ale prościej się już nie da, w 14.04 LTS wystarczy zaznaczyć „ptaszkiem” szyfrowanie i podać hasło, by system automatycznie skonfigurował nam wolumeny logiczne, ustawił partycję wymiany, zaszyfrował wszystko i skonfigurował tak, by po podaniu hasła przy starcie normalnie uruchomić komputer (i to z działającą opcją hibernacji, z czym często systemy szyfrowania mają kłopoty).

Domyślne ustawienia LUKS-a w Ubuntu są całkiem dobre: AES z XTS w trybie plain64, 256-bitowy klucz z haszowaniem SHA1, wyprowadzony przez 1 sekundę pracy PBKDF2. System, katalog domowy i przestrzeń wymiany zostają wrzucone do jednego zaszyfrowanego wolumenu logicznego. Do tego instalator zakłada mającą ok. 250 MB partycję /boot, która nie jest zaszyfrowana, i gdzie znajdziemy pliki niezbędne do rozruchu systemu. Dla większości osób, które nie mają skomplikowanej konfiguracji systemowej i nie są ścigane przez NSA, takie szyfrowanie jest wystarczające.

Konfiguracja przystosowana dla wszystkich nie musi jednak pasować każdemu. Podstawowe problemy to wymuszanie często zbędnej partycji wymiany (jeśli ktoś ma w komputerze 16 GB RAM, po co mu 16 GB swapa?), niemożliwość współdzielenia dysku z innymi systemami (czy to Windowsami czy Linuksami), używanie nielubianych przez wielu wolumenów logicznych (kiedyś mieliśmy normalne partycje, po co nam jakieś wolumeny?), oraz konieczność korzystania z tablicy partycji w starym formacie MBR, co oznacza, że z nowych firmware UEFI musimy korzystać w trybie kompatybilności (legacy), czyli nie zadziała Secure Boot w Windowsach, wymagający tablicy GPT.

Pomóc może w tej sytuacji ręczna konfiguracja. Jeśli w instalatorze wybierzemy na ekranie Rodzaj instalacji opcję Użycie innego rozwiązania. Tutaj możemy zbudować dopasowane do własnych potrzeb zestawienie partycji, pamiętając o założeniu na początku partycji /boot 250 MB. Pozostałe partycje możemy skonfigurować dowolnie, trzeba jedynie pamiętać, że ustalając ich format należy w polu Użyj jako wybrać fizyczny wolumen do szyfrowania.

Gdy to zrobimy, instalator sam wygeneruje wirtualne szyfrowane dyski. Pozostaje jeszcze oznaczyć punkt montowania przynajmniej dla głównej partycji (root, /) i to wszystko – klikając zainstaluj uzyskamy taką konfigurację, jaka nam pasuje (zachowując przy tym np. wcześniej zainstalowanego Windowsa na dysku). To wszystko. Minusem tej konfiguracji będzie to, że podczas logowania będziemy musieli oddzielnie podawać hasło dla każdej zaszyfrowanej partycji, w tym dla swapa.

Takiej półautomatycznej konfiguracji szyfrowania wciąż jednak daleko jest do elastyczności, jaką może zaoferować LUKS/dm-crypt, wykorzystywany wraz z narzędziem cryptsetup. W następnym artykule przedstawimy metody dla zaawansowanych, za pomocą których można stworzyć konfiguracje szyfrowania dysków zarówno bezpieczniejsze, jak i bardziej dostosowane do naszych potrzeb.

© dobreprogramy
r   e   k   l   a   m   a
r   e   k   l   a   m   a

Komentarze

r   e   k   l   a   m   a
r   e   k   l   a   m   a
Czy wiesz, że używamy cookies (ciasteczek)? Dowiedz się więcej o celu ich używania i zmianach ustawień.
Korzystając ze strony i asystenta pobierania wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.