Przechowywanie poufnych danych w GNU/Linuksie


Tutorial jest uzupełnieniem Artykułu Przechowywanie poufnych danych w GNU/Linuksie (Hakin9 01/2005). Zakładamy, że opisane ćwiczenia będą przeprowadzone przy użyciu dołączonej do pisma dystrybucji Hakin9 Live.

Uwaga! Nie zalecamy szyfrowania prawdziwych cennych danych w systemie Hakin9 Live – grozi to ich utratą po ponownym uruchomieniu komputera.

Cel: po wykonaniu opisanych ćwiczeń Czytelnik:

  • będzie potrafił, posługując się się pakietem GnuPG, szyfrować symetrycznie i asymetrycznie pojedyncze pliki,
  • będzie potrafił stworzyć i użytkować szyfrowany katalog za pomocą narzędzia EncFS,
  • będzie umiał stworzyć i zamontować szyfrowaną partycję (rzeczywistą lub wirtualną) przy wykorzystaniu narzędzia cryptoloop.

    Symetryczne szyfrowanie plików – pakiet GnuPG

    W pierwszym ćwiczeniu użyjemy pakietu GnuPG do zaszyfrowania pojedynczego pliku. W naszym przypadku będzie to plik HK1204.pdf.

    [01] W tutorialu wykorzystamy algorytm AES (ma najlepszy stosunek wydajności do jakości). Zaczynamy więc od załadowania modułu jądra odpowiedzialnego za jego obsługę:

    $ su -
    # modprobe aes
    # exit

    [02] Tworzymy katalog /home/haking/encrypted, w którym będziemy trzymać nasze zaszyfrowane dane:

    $ mkdir ~/encrypted

    Zapisujemy w nim plik HK1204.pdf.

    [03] Czas na szyfrowanie. Wydajmy poniższe polecenie:

    $ gpg --output ~/encrypted/cyph1 --symmetric --cipher-algo AES192 ~/encrypted/HK2104.pdf

    Powyższa komenda nakazuje symetryczne zaszyfrowanie pliku HK2104.pdf do pliku wyjściowego ~/encrypted/cyph1 przy użyciu algorytmu AES ze 192-bitowym kluczem. Wszystkie ostrzeżenia i błędy są dla nas nieistotne – ignorujemy je.

    [04] Do zaszyfrowania konieczne jest podanie hasła. Pomyślmy więc chwilę nad zdaniem, które nie ma większego sensu, ale daje się łatwo zapamiętać - na przykład Wieczorami z krasnalami slon na trabie rumbe rabie. Taka jego zabawa, 666. I takie też ustalimy hasło.

    [05] Plik został zaszyfrowany. Teraz trzeba bezpiecznie pozbyć się oryginału:

    $ shred -n 35 -z -u ~/encrypted/HK2104.pdf

    [06] Aby odszyfrować plik i odzyskać dane skorzystamy z następującej komendy:

    $ gpg --output HK2104.pdf --decrypt ~/encrypted/cyph1

    Szyfrowane katalogi – EncFS

    [07] Przed skorzystaniem z możliwości programu EncFS należy stworzyć dwa katalogi. Jeden (u nas ~/.crypto) będzie przechowywał nasze dane w postaci zaszyfrowanej (nie będziemy z niego korzystać bezpośrednio), natomiast w drugim (~/secret) będą one montowane i deszyfrowane w locie przy każdym żądaniu dostępu. Montowanie może oczywiście odbyć się tylko po podaniu prawidłowego hasła.

    $ mkdir ~/.crypto

    $ mkdir ~/secret

    [08] Kolejnym krokiem jest uaktywnienie mechanizmu EncFS:

    $ su -; insmod fuse; exit

    $ encfs ~/.crypto ~/secret

    Po wciśnięciu klawisza [Enter] zostaniemy poproszeni o wybór trybu konfiguracji. Decydujemy się tutaj na Prekonfigurowany tryb dla paranoików

    Czas na ustalenie hasła do naszego archiwum. Po jego podaniu i potwierdzeniu nasz wirtualny system plików jest gotowy do użytku.

    [09] Kopiujemy do niego kilka plików (echo, ls, telnet):

    $ cp /bin/echo /bin/ls /bin/telnet ~/secret/

    Sprawdzamy, co znajduje się w katalogach ~/secret oraz ~/.crypto:

    $ ls ~/secret

    $ ls ~/.crypto

    Jak widać, w pierwszym są nasze pliki, a w drugim ich zaszyfrowana wersja. Teraz, aby nikt nie mógł przeczytać ich zawartości, możemy odmontować wirtualny system plików poleceniem:

    $fusermount -u ~/crypto

    Udało się! Nasze dane są bezpieczne.

    [10] Teraz spróbujmy podmontować je jeszcze raz – z dodatkowym zabezpieczeniem, które powoduje automatyczne odmontowanie po określonym czasie bezczynności (10 minut):

    $ encfs --idle=10 ~/.crypto ~/secret

    Nasze pliki są znów dostępne w katalogu ~/secret. Jeśli odczekamy 10 minut przekonamy się, że zostanie on automatycznie odmontowany.

    Szyfrowany system plików – cryptoloop


    Pozostało jeszcze jedno narzędzie, które pomoże nam zabezpieczyć poufne pliki. Jest to wbudowany w jądro Linux cryptoloop

    [14] Zakładając, że nie mamy dostępnej wolnej partycji (tak właśnie jest w przypadku Hakin9 Live),wykorzystamy wygodną cechę mechanizmu zwrotnego – loopback – umożliwiającą wykorzystanie jako systemu plików zwykłego pliku. Przygotujmy go zatem:

    $ dd if=/dev/urandom of=~/crypto.raw bs=1k count=10000

    Spowoduje to utworzenie pliku o rozmiarze 10 megabajtów, wypełnionego przypadkowymi wartościami (śmieciami).

    [15] Następną czynnością jest powiązanie stworzonego pliku pliku z wolnym urządzeniem loop oraz zaszyfrowanie go wybraną przez nas metodą:

    $ su -

    # losetup -e aes-192 /dev/loop0 /home/haking/crypto.raw

    System poprosi nas o podanie hasła o minimalnej długości 20 znaków.

    [16] Mając już przygotowane miejsce, trzeba zrobić tam trochę porządku, czyli założyć jakiś system plików. Na przykład ext2:

    # mkfs.ext2 /dev/loop0

    [17]Po powyższej czynności można już zwolnić (opcja -d) urządzenie loop0:

    # losetup -d /dev/loop0

    # exit

    [18] Nasz szyfrowany system plików już jest gotowy do montowania i używania tak samo, jak każdy inny system plików. Zamontujmy go więc i zobaczmy, jak działa:

    $ mkdir ~/encrypted_disk

    $ mount -t ext2 ~/crypto.raw ~/encrypted_disk -oencryption=aes-192

    mount, po podaniu prawidłowego hasła, sam już powiąże podany plik z pierwszym wolnym urządzeniem loop.

    [19] Skopiujmy teraz nasze pliki do bezpiecznego kontenera:

    $ cp /bin/echo /bin/ls /bin/telnet ~/encrypted_disk

    To wszystko – nasz nowy zaszyfrowany dysk można do woli montować i odmontowywać. Nikt, kto nie zna hasła dostępu do niego, nie będzie miał możliwości zajrzenia do środka.