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.