Szyfrowanie dysków USB 11


Linux-Magazine
Od Redakcji: artykuł pochodzi z sierpniowego wydania Linux Magazine. Kompletną listę artykułów możecie znaleźć na stronach miesięcznika.

Bardzo łatwo jest zgubić dysk USB, warto więc odpowiednio zabezpieczyć znajdujące się na nim dane, by nie dostały się w niepowołane ręce.

Często przechowujemy dane na dyskach USB. Są to między innymi hasła, adresy mailowe, arkusze kalkulacyjne i inne informacje, których nie chcielibyśmy ujawniać osobom postronnym. Jeśli jednak zgubimy dysk, nie będziemy mieli wpływu na to, w jaki sposób zostaną wykorzystane znajdujące się na nim dane.
Problem ten rozwiązuje szyfrowanie. Dzięki infrastrukturze mapowania urządzeń wprowadzonej w jądrze 2.6 Linux pozwala nam teraz dodać do systemu plików powłokę ochronną. Moduł jądra dm_crypt wykorzystuje to podejście do osadzania systemów plików w zaszyfrowanej warstwie. Aby zamontować partycję bądź dysk, musimy najpierw usunąć zabezpieczenie, podając właściwe hasło (Rysunek 1).

lm-sierpien-passwort
Rysunek 1: KDE 4 pyta użytkownika o hasło zabezpieczające dysk USB z szyfrowaniem przez LUKS.

Zaszyfrowane w ten sposób dyski działają jedynie z jądrem, który zawiera moduł dm_crypt. Oczywiście dysk jest bezużyteczny pod Windows, chyba że odczytamy go za pomocą maszyny wirtualnej, co oczywiście nie jest rozwiązaniem adekwatnym do problemu. Jeśli więc zależy nam na wymianie danych z komputerami z Windows, najlepiej skorzystać z rozwiązania całkowicie w przestrzeni użytkownika, takiego jak TrueCrypt.
Moduł musi też znać metodę szyfrowania. Przykładowo jądro 2.6.24 może wykorzystywać algorytm aes-xts-plain, który nie został zaimplementowany w poprzednich wersjach. Oznacza to, że dysku zaszyfrowanego za pomocą aes-xts-plain na Ubuntu 8.04 nie zamontujemy na Ubuntu 7.10, choć oczywiście dyski zaszyfrowane metodami z wcześniejszych wersji działają w późniejszych.

Szyfrowanie dysku

Bez względu na to, czy szyfrujemy czy odszyfrowujemy partycję, potrzebujemy pakietu cryptsetup. Zarówno Ubuntu, jak i openSUSE umożliwiają instalację cryptsetup za pomocą menedżera pakietów. Oczywiście możemy też zaszyfrować normalne dyski twarde, powinniśmy jednak być ostrożni: jeśli przez przypadek wpiszemy /dev/sda1 zamiast /dev/sdb1, stracimy dostęp do głównej partycji. Co więcej, przed zaszyfrowaniem powinniśmy sformatować partycję, co wiąże się z usunięciem znajdujących się na niej danych (a przynajmniej z utrudnieniem dostępu do nich, chociaż do czasu nadpisania przez nowe pliki).
Zaczynamy od uruchomienia konsoli, następnie wydajemy polecenie tail -f /var/log/messages. Kiedy podłączamy dysk do portu USB, na konsoli wyświetlonych zostaje wiele komunikatów, łącznie z sdb: sbd1 (lub podobnym). Wiersz ten informuje nas o nazwie napędu, którą Linux przypisał dyskowi. W tym artykule przyjmujemy, że jest to sdb.
Większość popularnych dystrybucji automatycznie montuje dyski USB. KDE 3 pyta nas, czy chcemy otworzyć znalezione właśnie medium w nowym oknie. Gnome nawet nie raczy tego zrobić, zaś KDE 4 wyświetla w panelu okno informacyjne, kierujące naszą uwagę na nowy napęd.
Wszystkie kroki, które poznajemy poniżej, powinny zostać wykonane z wiersza poleceń. Najpierw uruchamiamy narzędzie do partycjonowania Fdisk, co wymaga uprawnień administratora. Możemy je uzyskać albo poleceniem sudo, albo uruchamiając powłokę administratora poleceniem su –. Tak więc Fdiska możemy uruchomić na przykład za pomocą sudo fdisk /dev/sdb.
Program możemy kontrolować za pomocą następujących klawiszy: [D] usuwa istniejącą partycję, [N] a następnie [P] tworzy nową partycję główną; musimy jeszcze wpisać [1] (pierwsza partycja główna) i dwukrotnie nacisnąć [Enter]. Klawiszem [W] zapisujemy zmiany w strukturze dysku. Jeśli powyższe brzmi dla nas skomplikowanie, możemy użyć półgraficznego odpowiednika Fdiska, uruchamianego poleceniem cfdisk, a jeśli i on wydaje nam się zbyt trudny w obsłudze – sprawdza się także narzędzie GUI, takie jak Gparted.
Kolejny krok to zapełnienie nowej partycji (nie dysku!) losowymi danymi:

sudo dd bs=4K if=/dev/urandom of=/dev/sdb1

Jest to bardzo istotny krok, ponieważ dzięki wypełnieniu „pustej” przestrzeni losowymi danymi odbieramy atakującemu możliwość zorientowania się, na przykład, jaki rozmiar mają zaszyfrowane dane (choć sprytny atakujący zawsze sprawdzi czasy dostępy do bloków). Parametr bs=4K ustawia rozmiar bloku na 4 KB, by przyspieszyć cały proces.
W tym momencie możemy załadować moduł jadra poleceniem sudo modprobe dm_crypt. Chcąc użyć dysku w swoim własnym systemie później, powinniśmy dodać nazwę modułu do pliku /etc/modules. W tym celu wystarczy tylko uzyskać prawa administratora (sudo su), a następnie napisać:

echo dm_crypt >> /etc/modules

Później używamy narzędzia cryptsetup i mapowania urządzeń do utworzenia warstwy ochronnej (Rysunek 2):

sudo cryptsetup -yvh sha256 -c aes-xts-plain -s 256 luksFormat /dev/sdb1

kde4_cryptsetup
Rysunek 2: Kamizelka kuloodporna: cryptsetup pozwala na osadzenie partycji /dev/sdb1 w warstwie ochronnej.

Opcja -yvh sha256 oznacza, że program dwukrotnie prosi nas o hasło i zachowuje je w 256-bitowym skrócie. Parametr -c pozwala zdefiniować metodę szyfrowania. W tym przykładzie użyliśmy algorytmu AES XTS o 256-bitowej długości klucza (-s 256). Jeśli jednak planujemy korzystać z tego dysku w systemach z jądrem wcześniejszym niż 2.6.24, powinniśmy wybrać opcję -c aes-lrw-benbi, zaś w przypadku jader starszych niż 2.6.20 – -c aes-cbc-essiv:sha256.

Polecenie luksFormat, które pyta o hasło i inicjalizuje partycję, jest częścią pakietu LUKS. Kolejne polecenie, luksOpen, pozwala uzyskać dostęp do zaszyfrowanej partycji (wiersz 1. na Listingu 1). Montując napęd, możemy wybrać dowolną nazwę (w naszym przypadku jest to secret).

LUKS to skrót od nazwy Linux Unified Key Setup. Jest to standard określający budowę nagłówka i format danych w szyfrowanych partycjach; używa się go w połączeniu z modułem jądra dm_crypt. LUKS obsługuje wiele haseł i jest odporny na ataki słownikowe.

Następnie crypsetup prosi nas o wprowadzenie hasła, które właśnie utworzyliśmy. Musimy powtórzyć to polecenie przy każdym montowaniu zaszyfrowanego dysku. Na tym etapie powinniśmy już mieć dostęp do odszyfrowanych danych przez punkt montowania /dev/mapper/secret, wciąż jednak brakuje nam systemu plików. Możemy go utworzyć poleceniem mkfs.ext3 (wiersz 2. na Listingu 1), po czym zamontować partycję (wiersz 3.).
Napęd USB powinien być już zamontowany w katalogu /mnt. Jest prawie gotowy – potrzebuje jeszcze kilku niewielkich modyfikacji. Możemy na przykład zmienić użytkownika poleceniem chmod użytkownik.użytkownik, w zależności od tego, którego konta najczęściej używamy.
Zamontowany napęd powinien się zachowywać jak każdy inny – możemy z niego korzystać, używając ulubionego menedżera plików. Po zakończeniu odmontowujemy go poleceniem sudo umount /mnt, zaś warstwę ochronną zamykamy poleceniem luksClose (wiersz 5. na Listingu 1).

Listing 1: Szyfrowanie napędu USB

  1. sudo cryptsetup luksOpen /dev/sdb1 secret
  2. sudo mkfs.ext3 /dev/mapper/secret
  3. sudo mount /dev/mapper/secret /mnt
  4. sudo chown -R użytkownik:uzytkownik /mnt
  5. sudo cryptsetup luksClose /dev/mapper/secret

Odszyfrowywanie

Różne środowiska graficzne odmiennie reagują na podłączenie zaszyfrowanego napędu USB: w przypadku KDE 4 wystarczy kliknąć napis Wolumen po lewej w Dolphinie, by wyświetliło się zapytanie o hasło (Rysunek 1), zaś Gnome powinno wyświetlić prośbę o hasło automatycznie. Tak czy inaczej najważniejsze, by na systemie, w którym chcemy używać zaszyfrowanego dysku, załadowany był moduł jądra dm_crypt.
Opisana w tym artykule metoda ma tę zaletę, że powinna zadziałać na praktycznie każdym systemie linuksowym bez konieczności pobierania dodatkowego oprogramowania; jeśli jednak zależy nam na wymianie danych między różnymi systemami, powinniśmy użyć specjalizowanego pakietu, takiego jak TrueCrypt.

Autor: Kristian Kissling

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

11 komentarzy do “Szyfrowanie dysków USB

  • Kazislav

    „Większość popularnych dystrybucji automatycznie montuje dyski USB. KDE 3 pyta nas, czy chcemy otworzyć znalezione właśnie medium w nowym oknie. Gnome nawet nie raczy tego zrobić, zaś KDE 4 wyświetla w panelu okno informacyjne, kierujące naszą uwagę na nowy napęd.”

    Może ja mam jakieś inne GNOME ale odkąd pamiętam zawsze każdy nośnik mi montuje automatycznie i samo otwiera w nowym oknie.

  • co

    [quote post=”9329″]Zaszyfrowane w ten sposób dyski działają jedynie z jądrem, który zawiera moduł dm_crypt. Oczywiście dysk jest bezużyteczny pod Windows, chyba że odczytamy go za pomocą maszyny wirtualnej, co oczywiście nie jest rozwiązaniem adekwatnym do problemu. Jeśli więc zależy nam na wymianie danych z komputerami z Windows, najlepiej skorzystać z rozwiązania całkowicie w przestrzeni użytkownika, takiego jak TrueCrypt.[/quote]

    Ja używam pod windowsem dysków zaszyfrowanych za pomocą LUKS’a bez maszyny wirtualnej.
    Szukanie na googlach nie boli.
    http://www.aerospacesoftware.com/LUKS-Mount-FreeOTFE.pdf
    http://www.freeotfe.org/

  • Biotrek

    Potwierdzam
    Ja mam tak skonfigurowane, że wyświetla mi się menu z wyborem import obrazów czy muzyki aż po otwórz. A jak nie odpowiada zawsze mogę domyślnie ustawić na otwieranie USBka

  • Nikow

    @Rafal: Nie, nie można tego stwierdzić jednoznacznie. Jedna metoda ma grono zwolenników i druga również. Przyjrzyj się obu sposobom i wybierz według Twoich preferencji lepsze rozwiązanie, niestety, inaczej się nie da. 😉

  • pjs

    Witam wszystkich.
    Mam takie drobne pytanie: czy da sięzaszyfrować tym plik w którym jest system plików? utworzony poleceniami (system plików może iść w pizdu):
    >dd bs=4K if=/dev/urandom of=./crypto.disk count=512
    >mke2fs -F -j crypto.disk

  • homer

    a da rade jakims programem zaszyfrowac partycje ntfs pod ubuntu, chodzi o to ze ja korzystam z linuxa, ale moj brat nie, czasem gdy ja jestm w pracy on podbiera moj dysk usb . a partycja ntfs jest mi potrzebna, bo jak do kogos pojde po filmy czy cos tam innego, to rzecz jasna ze korzystaja z winzgrozy ;]