Zaszyfruj chmurę, czyli jak zapewnić poufność swoich danych

Zaszyfruj chmurę, czyli jak zapewnić poufność swoich danych

To, że władze państw interesują się komunikacją internautów i danymi, które przechowują na serwerach dostawców, nie jest żadną niespodzianką – Edward Snowden w zasadzie tylko potwierdził i uściślił podejrzenia. My w Oktawave jesteśmy z dala od Stanów Zjednoczonych i amerykańskie prawo (umożliwiające służbom praktycznie nieograniczony dostęp do prywatnych danych) nas nie obowiązuje. To jednak nie znaczy, że jako dostawca chmury jesteśmy w stanie zapewnić użytkownikom absolutną prywatność. Działając w ramach obowiązującego w Polsce prawa, nie możemy w pewnych sytuacjach odmówić udostępnienia danych użytkowników stronom trzecim, np. policji posiadającej nakaz prokuratorski lub sądowy.

Najlepszy sposób na zachowanie prywatności w Internecie brzmi: nie ufaj nikomu. Jeśli chcesz zwiększyć bezpieczeństwo swoich danych, tak byśmy nawet my nie mogli uzyskać do nich dostępu, a przejęte przez strony trzecie obrazy dysków były dla nich bezużyteczne, musisz sięgnąć po techniki kryptograficzne i sam się zabezpieczyć. Na szczęście nie jest to trudne: dziś pokażemy Ci, jak stworzyć w chmurze Oktawave zaszyfrowany dysk i jak z niego korzystać.

To musisz wiedzieć na początku

Zanim przystąpisz do tworzenia szyfrowanych dysków, zastanów się nad kilkoma kwestiami. Pierwszą z nich jest zarządzanie kluczami szyfrującymi i ich przechowywaniem. Jedno jest pewne: swojego klucza nie powinieneś trzymać w chmurze – powinien on być trzymany tak daleko od danych, jak to jest tylko możliwe. Dobrym rozwiązaniem jest nauczenie się na pamięć frazy odszyfrowującej – polecamy do tego techniki opisane tutaj.

Warto też zaznaczyć, że powinieneś zmienić domyślne hasło roota oraz wyłączyć konto supportowe Oktawave. Wiąże się to z pewnym ryzykiem – jeśli coś pójdzie nie tak, nikt nie będzie mógł Ci pomóc w konfiguracji Twoich usług, ale o to przecież chodzi, prawda?

klawiatura chmura

Druga kwestia to system szyfrowania. Ze względu na wyższe koszty utrzymania instancji Windows, trudności w zabezpieczeniu tego systemu i słabości jego systemu szyfrowania EFS (dane z oryginalnego niezaszyfrowanego pliku pozostają na dysku po stworzeniu nowej, zaszyfrowanej wersji), będziemy korzystać z Linuksa. Tutaj najprościej zastosować działający w przestrzeni użytkownika system EncFS, ale jest on ograniczony w możliwościach, nie chroni przed ciekawskim administratorem z dostępem root. Dlatego o wiele lepiej wykorzystać dobrze zintegrowany z jądrem system dm-crypt/LUKS, pozwalający na szyfrowanie całych partycji w sposób „przezroczysty” dla systemu plików.

A jaki szyfr wybrać? Domyślnie najczęściej obecnie wybiera się dziś AES. W jądrze Linuksa są też inne szyfry blokowe o wysokim poziomie bezpieczeństwa, np. Serpent, Twofish i Camellia – sugerujemy zaznajomienie się z tematem i wybranie dla siebie najlepszej opcji. W rozważaniach należy uwzględnić okres, przez jaki zaszyfrowane dane mają pozostać bezpieczne, czyli po prostu długość klucza.

Trzecia sprawa to przemyślenie, co chcesz szyfrować. Tworząc szyfrowane obrazy maszyn wirtualnych, należy pamiętać o partycji swap, a konkretnie o tym, że powinniśmy ją szyfrować, ze względu na rolę, jaką pełni w systemie. Nie można zapomnieć o szyfrowaniu katalogów domowych (/home/*) i katalogów tymczasowych (/tmp). Zaszyfrowanie całego dysku nie jest możliwe – trzeba przynajmniej mieć odszyfrowaną partycję /boot, by mogła ona wystartować.

Ostatnia wreszcie kwestia to problem restartów instancji. Jeśli używasz obrazów starszych wersji Linuksa z bootloaderem grub v1 (np. Debian 6), wówczas bootloader ten będzie próbował podłączyć szyfrowaną partycję automatycznie podczas startu. Wówczas Twoja instancja nie „wstanie” automatycznie: będzie czekała na hasło do podłączenia zaszyfrowanej partycji. Dlatego musisz wcześniej przeedytować konfigurację bootloadera i wyłączyć automatyczne montowanie systemów plików LUKS. Po restarcie instancji zalogujesz się przez SSH do maszyny wirtualnej i ręcznie podłączysz szyfrowaną partycję. Jak to zrobić – dowiesz się z dokumentacji grub.

Lepiej jednak skorzystać z nowszych dystrybucji, korzystających z bootloadera grub v2 (np. Debian 7). Problemu tego nie ma – system wystartuje bez podłączonej szyfrowanej partycji.

Stworzenie wolumenu OVS i partycjonowanie

Zakładamy, że posiadasz już wirtualną maszynę OCI w Oktawave. Jeśli nie, możesz ją założyć wg wskazówek zawartych w naszej dokumentacji. W poniższym przykładzie będziemy wykorzystywali Debiana 7, ale z niewielkimi zmianami wszystkie opisane poniżej operacje można przeprowadzić w dystrybucjach takich jak Ubuntu, CentOS, OpenSUSE czy Gentoo.

Jeśli masz już uruchomioną instancję, dodajmy do niej dysk. W panelu OKTAWAVE | SERVICES | Oktawave Volume Storage kliknij przycisk ADD STORAGE, podając kolejno jego nazwę (np. crypto_1), wydajność (od Tier-1 do Tier-5), rozmiar w GB i nazwę maszyny wirtualnej, do której szyfrowana partycja będzie podłączona.

chmura cloud

Uwaga: ze względu na narzut generowany przez mechanizm szyfrujący dane „w locie”, warto wybrać o jeden poziom wyższą wydajność, niż ta, który planowałbyś dla nieszyfrowanej partycji.

Po kliknięciu przycisku ADD, wolumen OVS zostanie dodany do maszyny wirtualnej. Jak się do niego dostać z poziomu systemu operacyjnego? Zaloguj się jako administrator (root) przez SSH, a po znaku zachęty wpisz, co następuje.

# dmesg |tail

Poznasz w ten sposób nazwę dysku w systemie urządzeń – komunikat informujący o podłączeniu dysku /dev/sdb będzie wyglądał np. tak:

[ 388.402436] sd 2:0:2:0: [sdb] Write Protect is off
[ 388.402439] sd 2:0:2:0: [sdb] Mode Sense: 61 00 00 00
[ 388.402515] sd 2:0:2:0: [sdb] Cache data unavailable
[ 388.402518] sd 2:0:2:0: [sdb] Assuming drive cache: write through
[ 388.403602] sd 2:0:2:0: [sdb] Cache data unavailable
[ 388.403605] sd 2:0:2:0: [sdb] Assuming drive cache: write through
[ 388.407639] sdb: unknown partition table
[ 388.407879] sd 2:0:2:0: [sdb] Cache data unavailable
[ 388.407881] sd 2:0:2:0: [sdb] Assuming drive cache: write through
[ 388.407965] sd 2:0:2:0: [sdb] Attached SCSI disk

Stwórz partycję na dysku, za pomocą następującego polecenia.

# cfdisk /dev/sdb

W narzędziu cfdisk utwórz partycję wybierając z menu New, ustalając typ na Primary (główna) i wpisując rozmiar – w naszym wypadku wystarczy wybrać domyślny rozmiar, obejmujący całe 5 GB wolumenu. Z menu wybierz teraz Type, by wybrać typ systemu plików i wybierz z listy 83 – oznaczający partycję Linuksa. Finalnie zapisz wprowadzone zmiany, wybierając z menu Write, potwierdź wszystkie operacje wpisując yes, i wyjdź z cfdiska wybierając Quit.

Stworzyłeś w ten sposób partycję /dev/sdb1.

Zaszyfrowanie partycji

Gdy masz już dysk OVS podłączony do wirtualnej maszyny, zainstaluj pakiety mechanizmu szyfrowania dm-crypt, wpisując w powłoce następujące polecenie.

# apt-get install cryptsetup

Teraz należy sformatować zaszyfrowany dysk.

# cryptsetup -y luksFormat /dev/sdb1

Podczas formatowania zostaniesz zapytany o frazę szyfrującą (passphrase). Podaj ciąg o odpowiednim poziomie złożoności, składającą się przynajmniej z kilkunastu liter, w tym znaków specjalnych (np. „Marysia-miala-owieczke-bial0”). Zapamiętaj ją dobrze, nie zapisuj jej nigdzie. Jeśli ją zapomnisz, nie odzyskasz zaszyfrowanych informacji z dysku.

cloud chmura

Sprawdź teraz, czy wszystko odbyło się poprawnie.

# cryptsetup luksDump /dev/sdb1

Powinieneś otrzymać w rezultacie komunikat analogiczny do następującego.

LUKS header information for /dev/sdb1
Version: 1
Cipher name: aes
Cipher mode: cbc-essiv:sha256
Hash spec: sha1
Payload offset: 4096
MK bits: 256
MK digest: 67 33 2d 9c a3 84 8a 91 98 46 2a 0d ca d2 6c 24 70 4d 87 9c
MK salt: 83 19 ee db cb 7a e1 d0 fe 4f c7 d2 ba 3c 30 5f
43 44 5c 20 80 4c 95 f7 b4 10 29 ff 5b 8f c6 ab
[…]

Podłączenie zaszyfrowanej partycji do systemu

Aby móc wykorzystywać zaszyfrowaną partycję, musisz stworzyć odwzorowanie urządzenia, pozwalające na jego zamontowanie w systemie plików. W tym celu wpisz w konsoli, co następuje.

# cryptsetup luksOpen /dev/sdb1 krypto_part

Zostaniesz zapytany o frazę szyfrującą („Marysia-miala…”), więc wprowadź ją.

Teraz pozostaje sformatować odwzorowaną partycję w jednym z obsługiwanych przez Linuksa systemów plików. Tutaj wybraliśmy popularny ext4.

# mkfs.ext4 -m 0 /dev/mapper/krypto_part

Teraz, gdy wszystko zostało już skonfigurowane, pozostaje podłączyć szyfrowaną partycję do linuksowego systemu.

# mkdir /krypto1
# mount /dev/mapper/krypto_part /krypto1

Możesz też sprawdzić status podłączonej partycji.

cryptsetup status krypto_part

Jeśli teraz chcesz przenieść któryś z systemowych katalogów na szyfrowaną partycję (np. /tmp), można to zrobić następująco.

# mkdir /krypto1/tmp
# rsync -va /tmp /krypto1/tmp
# mv /tmp /tmp.old (później możesz skasować tmp.old, by uzyskać więcej wolnego miejsca)
# mount -o bind /krypto1/tmp /tmp

Powinieneś sprawdzić w dokumentacji aplikacji, których używasz na serwerze, gdzie przechowują one swoje pliki. Najczęściej będą to katalogi takie jak /tmp/aplikacja czy /var/log/aplikacja.

Po powiązaniu systemowych katalogów do szyfrowanej partycji przeedytuj plik /etc/fstab, tak aby wprowadzone zmiany pozostawały na stałe. Poniższa linijka wprowadza takie powiązanie dla /tmp.

/krypto1/tmp /tmp none bind 0 0

Automatyzacja podłączania szyfrowanej partycji

Przy starcie instancji w chmurze szyfrowana partycja nie będzie automatycznie uruchamiana. Aby uprościć proces jej podłączania, warto przygotować sobie odpowiedni skrypt.

#!/bin/bash
## konfiguracja ##
_part=”/dev/sdb1″
_name=”krypto_part”
_source=”/dev/mapper/krypto_part”
_dest=”/krypto1/”
echo
/sbin/cryptsetup luksOpen ${_part} $_name
echo
/bin/mount/ ${_source} ${_dest}
df -H

Po zapisaniu go (z nazwą np. /usr/local/sbin/mount_luks.sh) i nadaniu mu praw uruchamiania przez administratora (chmod 700 /usr/local/sbin/mount_luks.sh), skrypt ten pozwoli na podłączenie szyfrowanej partycji do systemu po restarcie – wystarczy wydać polecenie mount_luks.sh.

Oczywiście skrypt taki może robić znacznie więcej – np. uruchamiać serwer WWW, obsługujący aplikację webową, której dane przechowywane są na zaszyfrowanej partycji. Szczegółowe informacje o uruchamianiu w ten sposób usług czy serwerów znajdziesz w ich dokumentacji.

Przesyłanie informacji na szyfrowaną partycję

Na nic szyfrowanie, jeśli dane, które mają znaleźć się na zaszyfrowanej partycji nie będą przesyłane tam w sposób bezpieczny. Nie możesz do tego używać zwykłego FTP, polecamy wykorzystanie SFTP, czyli SSH File Transfer Protocol. Jeśli masz zainstalowany pakiet openssh-server w swojej wirtualnej maszynie, to masz wszystko, czego potrzebujesz od strony serwera. Dostęp od strony swojego komputera możesz uzyskać przez programy takie jak Filezilla czy WinSCP, których opis wykracza poza zakres tego poradnika. Wystarczy pamiętać, że do zalogowania się wystarczy wykorzystać login i hasło, jakie wykorzystujesz do logowania się po SSH.

To oczywiście wierzchołek góry lodowej, związanej z zabezpieczaniem zdalnych zasobów w chmurze. Aby zwiększyć bezpieczeństwo dostępu, warto całkowicie zrezygnować z haseł logowania i wykorzystać uwierzytelnianie za pomocą kryptografii klucza publicznego. Można też założyć własną sieć prywatną, by łączyć się z maszyną wirtualną w sposób znacznie utrudniający przechwycenie naszej komunikacji. Jak to zrobić, pokażemy w kolejnych poradnikach.

maciej kuzniarMaciej Kuźniar, prezes Oktawave sp. z o.o. oraz główny architekt. Pasjonat technologii związanych z przetwarzaniem i przechowywaniem danych, posiadający 10 lat doświadczenia w pracy dla klientów klasy enterprise (banki, telekomy, FMCG). Autor koncepcji technologicznie wspierających rozwój startupów oraz rozwiązań architektonicznych gwarantujących wysokie HA i SLA dla systemów IT.

Zdjęcia Cloud computinCloud computing concept with wooden shelf on the wallCloud computing concept on computer keyboard with white keys oraz Cloud computing concept, close up of young businessman with cloud over his hand pochodzą z serwisu Shutterstock. 

Dołącz do dyskusji

MAŁO? CZYTAJ KOLEJNY WPIS...

MAŁO? CZYTAJ KOLEJNY WPIS...

Advertisement