Securityinfo
  • Strona główna
  • Publikacje
  • Zespół
  • Współpraca
  • Kontakt
Szukaj w Securityinfo
Nawigacja: Strona główna » Publikacje » Szyfrowanie danych autoryzacyjnych i uwierzytelniających

Szyfrowanie danych autoryzacyjnych i uwierzytelniających

1. Po co szyfrować?

O potrzebie szyfrowania poufnych danych transmitowanych przez sieć nie trzeba chyba nikogo przekonywać. Nie od dziś wymaga się szyfrowania wszelkich transakcji, których przedmiotem są hasła, dane osobowe, numery kart kredytowych, czy też dowolne inne poufne dane. Jednak nieco gorzej jest z danymi spoczywającymi bezpiecznie (?) na nośnikach pamięci masowej.

Nie należy oczywiście oczekiwać od przeciętnego użytkownika, że będzie na co dzień operował na zaszyfrowanym systemie plików. Co więcej, bardzo mało prawdopodobne jest nawet bezpieczne przechowywanie przez większość użytkowników tak kluczowych informacji, jak dane autoryzacyjne do własnych kont bankowych. Niemniej należałoby oczekiwać, że w środowiskach korporacyjnych odpowiednie wymagania stawiane przez politykę bezpieczeństwa narzucają konieczność przechowywania, a nie tylko przesyłania, kluczowych danych w formie bezpiecznej, a więc zaszyfrowanej. Czy tak się jednak dzieje? Czy w przypadku fizycznego dostępu do urządzeń dyskowych naszej firmy hostingowej w ręce osoby niepowołanej nie dostaną się przypadkiem poufne informacje znajdujące się w naszej bazie? Co z kopiami zapasowymi danych? Czy nasz bank, archiwizując dane, szyfruje je zanim przekaże kurierowi taśmę? Niestety, z tym bywa różnie.

Załóżmy jednak, że kopie archiwalne, kopie bezpieczeństwa, jak również systemy plików, na których operuje system są szyfrowane i klucze umożliwiające ich rozszyfrowanie są bezpiecznie przechowywane. Załóżmy również, że polityka bezpieczeństwa narzuca stosowanie silnych haseł przy dostępie do systemów i wszystkie dostępne usługi są dobrze zabezpieczone. Co się jednak stanie, gdy intruz dostanie się do komputera któregoś z pracowników (przełamując nierzadko dość słabe zabezpieczenia systemu lub uzyskując fizyczny dostęp do dysków z niezaszyfrowanymi — bo po co — danymi)? Czy przypadkiem nie znajdzie tam kluczy SSH (bez albo z bardzo słabym hasłem, bo tak było wygodniej), pozwalających bez wysiłku zestawić połączenie z serwerami firmowymi? A co z kluczami PGP, kluczami do VPNów, dziesiątkami haseł do najróżniejszych miejsc zapisanymi przez najróżniejsze programy dla wygody i, w znakomitej większości, w formie niezaszyfrowanej?

Niestety, odpowiedź prawdopodobnie brzmi tak. Mamy szansę znaleźć niezabezpieczone informacje pozwalające dostać się do miejsc, do których nikt niepowołany dostać się nie powinien. Jedynie od zakresu kompetencji pracownika zależy do jak bardzo newralgicznych fragmentów systemu uzyskamy dostęp. W połączeniu z faktem, że używane aktualnie przez większość firm „systemy biurkowe” nie są w pełni bezpieczne bez względu na poziom załatania, daje to poważny powód do zmartwienia.

Co możemy zatem zrobić? Oczywiście zaszyfrować. Rozwiązaniem jest stworzenie zaszyfrowanego kontenera zawierającego wszelkie kluczowe dane i zadbanie, żeby czas, w którym możliwy jest dostęp do tych danych w formie rozszyfrowanej nie był dłuższy niż jest to bezwzględnie konieczne.

2. Wybrane technologie

Dostępny jest szereg rozwiązań pozwalających zabezpieczyć newralgiczne dane przed dostępem osób niepowołanych, w przypadku gdy uzyskają one, w taki czy inny sposób, dostęp do systemu. Skupię się na trzech przykładowych metodach szyfrowania danych, z których każda obrazuje nieco inne podejście do problemu.

2.1. kWallet

kWallet to zautomatyzowany i scentralizowany system pozwalający na bezpieczne zapamiętywanie loginów, haseł i innych poufnych danych wprowadzanych przez użytkownika poprzez formularze na stronach internetowych, pozwalających na logowanie do poczty, itp. Coraz więcej aplikacji z pakietu KDE wykorzystuje kWallet do zarządzania informacjami autoryzacyjnymi i uwierzytelniającymi.

Podejście to nie rozwiązuje co prawda w zadowalający sposób problemu bezpiecznego przechowywania kluczy kryptograficznych, jednak jest znakomitą alternatywą dla mechanizmów wspierających magazynowanie danych autoryzacyjnych implementowanych w większości klientów popularnych usług (jak przeglądarki WWW, klienty poczty, itp.) Głównym problemem tych wszechobecnych ułatwień jest oczywisty brak jakiegokolwiek poszanowania zasad bezpieczeństwa. W wielu przypadkach takie podejście ma uzasadnienie, gdyż dostanie się w ten sposób przez osobę niepowołaną do naszego profilu na forum dyskusyjnym, czy innego niezbyt krytycznego zasobu, nie jest większym problemem, zaś zapamiętanie hasła przez automat bardzo ułatwia życie. Są jednak sytuacje, w których na taki luksus nie możemy sobie pozwolić. W przypadku autoryzacji w systemach korporacyjnych, czy w aplikacjach webowych dających dostęp do wewnętrznych funkcji systemu firmy, czy w jakichkolwiek innych przypadkach wymagających dokładnej weryfikacji tożsamości i uprawnień konieczne jest stosowanie silnych haseł i zachowanie szczególnej dbałości o odpowiednie ich przechowywanie.

Tutaj z pomocą przychodzi globalny menedżer informacji autoryzacyjnych przechowujący powierzone mu treści w zaszyfrowanym pliku, do którego dostęp możliwy jest jedynie po podaniu hasła głównego (ang. master password). kWallet jest właśnie takim menedżerem. Jak już wspomniałem, integruje się on ze środowiskiem KDE i pozwala pogodzić zadowalające bezpieczeństwo przechowywania informacji z zadowalającą wygodą dostępu do nich.

Aby zwiększyć mobilność użytkowników umożliwiono korzystanie z plików portfela umieszczonych na wymiennych nośnikach danych (jak klucze USB, itp.) Po pierwsze ułatwia to przenoszenie bazy haseł pomiędzy stanowiskami, a po drugie pozwala zminimalizować czas kiedy zaszyfrowane archiwum jest dostępne dla osób które uzyskają nieautoryzowany dostęp do stanowiska.

2.2. dm-crypt, LUKS i FreeOTFE

Innym dostępnym rozwiązaniem jest zaszyfrowanie danych na poziomie systemu plików (czy to całego urządzenia, wydzielonej partycji, czy też pliku kontenerowego zawierającego autonomiczny system plików i montowanego poprzez pętlę zwrotną (ang. loopback). Jest to rozwiązanie uzupełniające możliwości szyfrowanego portfela danych uwierzytelniających (jak kWallet) o możliwość przechowywania właściwie dowolnych danych poufnych. Polega ono na tym, że wszelkie dane zapisywane do odpowiednio przygotowanego systemu plików są szyfrowane, a dane odczytywane zeń są rozszyfrowywane przed przekazaniem ich programowi docelowemu.

Szyfrowanie odbywa się jednym z symetrycznych szyfrów za pomocą dowolnej wielkości klucza, który należy chronić możliwie jak najdłuższą sekretną frazą (passphrase). Należy mieć świadomość, że jeśli osoba niepowołana wejdzie w posiadanie zaszyfrowanego kontenera, będzie mogła przeprowadzić na nim atak słownikowy lub przeglądu zupełnego (ang. brute-force) bez żadnych ograniczeń częstotliwości przeprowadzanych prób poza ograniczeniem wydajności maszyn, na których przeprowadzany będzie atak. Dlatego frazy używane do ochrony klucza powinny mieć długość przynajmniej kilkunastu znaków i nie powinny być wyrażeniami słownikowymi, ani łatwymi do przewidzenia sekwencjami. Należy mieć na uwadze, że od tego jak silna jest użyta fraza zależy bezpieczeństwo wszystkich pozostałych kluczy i haseł.

Ideę tę implementuje dm-crypt. Jest to mechanizm zapewniający warstwę abstrakcji nad urządzeniami blokowymi, która pozwala na przezroczyste szyfrowanie danych za pomocą cryptoapi dostępnego w Linuksie począwszy od wersji 2.6. Rozwiązanie to zastępuje mniej zunifikowane i mniej wygodne w użyciu wcześniejsze sposoby przezroczystego szyfrowania systemów plików.

Jak już wspomniałem, możliwe jest zaszyfrowanie dowolnego systemu plików, a w szczególności znajdującego się na urządzeniu przenośnym, takim jak np. klucz USB. Oznacza to, że utrata klucza nie jest równoznaczna z ujawnieniem poufnych danych, a jednocześnie możliwa jest pełna mobilność i zminimalizowanie czasu, gdy intruz, dostawszy się do stanowiska, ma dostęp do danych, czy to w formie zaszyfrowanej, czy rozszyfrowanej. Co więcej, gdy wykorzystamy dodatkowo format LUKS do zapisania na kluczu informacji na temat szyfru, jaki został użyty podczas szyfrowania, możliwe jest automatyczne rozpoznanie systemu plików jako zaszyfrowanego. Skutkuje to systemowym monitem o frazę autoryzującą i, w przypadku poprawnej autoryzacji, zamontowaniem systemu plików.

Okazuje się również, że klucz z zaszyfrowanym systemem plików i metodą szyfrowania opisaną w formacie LUKS może zostać całkiem poprawnie zamontowany również pod systemami Windows. Jest to możliwe dzięki programowi o mniej lub bardziej wdzięcznej nazwie FreeOFTE. Pozwala on montować różnego rodzaju szyfrowane woluminy, w tym właśnie te opisane w formacie LUKS. Należy jedynie pamiętać, żeby użyty algorytm szyfrujący był dostępny w posiadanej wersji FreeOTFE.

Jak widać, możliwości tej metody ochrony składowanych danych są właściwie nieograniczone. Przy odpowiednim skonfigurowaniu programów (wspomniane PGP, SSH, itd.) można z powodzeniem przenieść ich katalogi konfiguracyjne zawierające klucze prywatne do szyfrowanego kontenera, czy to wydzielonego na dysku, czy też umieszczonego na nośniku zewnętrznym. Jednocześnie nic nie stoi na przeszkodzie, żeby magazynować tam również (najlepiej w dodatkowo zaszyfrowanej formie) najróżniejsze numery PIN czy inne informacje uwierzytelniające i autoryzacyjne. Niezależnie od tego czy będą składowane i wykorzystywane automatycznie przez przeglądarkę lub klienta poczty, czy też używane do autoryzacji offline.

2.3. Windows EFS

Systemy z Redmond już w wersji 2000 wyposażone zostały w natywny mechanizm szyfrowania danych na dyskach, a wersje XP i 2003 przyniosły istotne poszerzenie możliwości (jak obsługa algorytmu 3DES począwszy od wersji XP i AES począwszy od wersji XP Service Pack 1 i 2003). Pewną charakterystyczną, w stosunku do pozostałych mechanizmów, cechą tego rozwiązania jest fakt, że zamiast szyfrowanych kontenerów, które zawierają system plików, czy też dane zapisane w wewnętrznym formacie, w tym przypadku szyfrowane są poszczególne foldery lub pliki. Szyfrowanie tak jak w przypadku szyfrowania całych systemów plików odbywa się przeźroczyście dla użytkownika i realizowane jest poniżej warstwy aplikacji.

Pełna integracja z powłoką systemową powoduje, że rozwiązanie to okazuje się być bardzo wygodne. W najnowszych wersjach systemu sprowadza się do zaznaczenia jednej opcji w zaawansowanych właściwościach pliku lub folderu lub użycia polecenia cipher, jeśli komuś bliższe jest zarządzanie z wiersza poleceń. Zadbano również, by atrybut szyfrowania był dziedziczony, tak jak podpowiada to intuicja. Oznacza to, że cała zawartość dodana do szyfrowanego folderu zostanie również zaszyfrowana. Rozwiązanie to w pewnym zakresie zastępuje ideę szyfrowanego zasobnika zapewniając jednocześnie bardziej przezroczyste wpasowanie w logikę systemu plików (nie wymaga tworzenia pętli zwrotnych i zakładania systemów plików wewnątrz plików służących jako zasobniki).

Mechanizm EFS jest oczywiście dostępny wszędzie, gdzie uda nam się założyć partycję NTFS w wersji 3.0 lub wyższej. Oznacza to, że możliwe jest również szyfrowanie danych znajdujących się na przenośnych pamięciach masowych, co umożliwi nam pewną mobilność, jednak nie należy spodziewać się szczególnych sukcesów w odczytywaniu zaszyfrowanych w ten sposób plików pod systemami innymi lub w innych wersjach niż użyte podczas szyfrowania. Pod Linuksem pewną nadzieję daje ntfsdecrypt (część pakietu ntfsprogs), jednak autorzy sami przyznają, że program nie implementuje całej oczekiwanej funkcjonalności i rozszyfrowanie czegokolwiek nie jest gwarantowane. Starsze wersje Windowsa mogą również sprawiać problemy ze względu na niekompatybilność algorytmów szyfrujących. Jednym słowem, przenośność, jakkolwiek teoretycznie możliwa (jeśli dodatkowo zabierzemy ze sobą klucz prywatny), może okazać się cokolwiek problematyczna.

Dodatkowe wygodne możliwości, jakie oferuje mechanizm EFS to między innymi możliwość współdzielenia szyfrowanych plików przez różnych użytkowników, czy też możliwość rozszyfrowania danych nawet po utracie przez uprawnionego użytkownika klucza prywatnego (certyfikatu) pod warunkiem wcześniejszego wygenerowania klucza uniwersalnego. Natomiast jego sporą wadą z punktu widzenia zapewniania należytego bezpieczeństwa jest zrezygnowanie z fraz uwierzytelniających podczas rozszyfrowania zaszyfrowanych danych. Do wykonania operacji na szyfrowanym pliku nie jest wymagane dodatkowe uwierzytelnienie poza uzyskaniem dostępu do konta użytkownika (po zalogowaniu następuje domniemanie, że użytkownik jest uprawniony i do wszelkich operacji kryptograficznych automatycznie wykorzystywany jest jego klucz prywatny). Rozsądek podpowiada, że jest to założenie cokolwiek na wyrost.

Należy oddać sprawiedliwość projektantom Microsoftu, że od wersji XP/2003 nie jest już możliwe dostanie się do dowolnych zaszyfrowanych plików poprzez reset hasła właściciela (przez fizyczny dostęp do maszyny). Certyfikaty służące do rozszyfrowania plików po prostu przestaną działać. Niemniej bardzo istotne dla poprawienia bezpieczeństwa byłoby umożliwienie stosowania wspomnianych fraz autoryzujących przy każdym rozszyfrowywaniu pliku po trwającym dłużej niż określony czas (kilku, kilkudziesięciu minut) okresie braku operacji na nim, po wylogowaniu, określonym czasie braku aktywności użytkownika, itp. Prawdopodobnie byłoby to nieco mniej wygodne dla użytkowników, niemniej podwyższanie wygody użytkowania kosztem bezpieczeństwa w nieobligatoryjnym systemie, który właśnie do zapewniania rzeczonego bezpieczeństwa został zaprojektowany, nie wygląda na pomysł, któremu można by wróżyć szczególnie spektakularny sukces.

3. Dlaczego nośniki zewnętrzne?

Jak już wspomniałem wcześniej, dobrze jest mieć możliwość korzystania z zaszyfrowanych danych umieszczonych na nośnikach zewnętrznych (w rozumieniu przenośnych, jak wspomniane klucze USB) w jak najprostszy i jak najbardziej przezroczysty sposób. Ideałem byłoby, żeby w momencie zamontowania systemu plików, po włożeniu klucza do portu i wpisaniu hasła, wszystkie programy, których dane znajdują się na kluczu automatycznie mogły z nich korzystać, a po wyjęciu klucza całkowicie traciły dostęp do tych danych (czyściły pamięć podręczną, itp.). Okazuje się, że możliwe jest uzyskanie sytuacji bardzo zbliżonej do ideału, na przykład przy wykorzystaniu technologii dm-crypt i LUKS.

Dlaczego jednak jest to takie ważne? Z jednej strony sprawa jest oczywista — ułatwia to przenoszenie danych. Gdy wszystkie systemy (stanowiska), na których operujemy obsługują stosowany przez nas algorytm szyfrujący i technologię opisu partycji (jak LUKS), wówczas umieszczenie danych na kluczu zwiększa zarówno wygodę, jak i bezpieczeństwo — przy sobie mamy zawsze aktualne dane i nie występują one w wielu kopiach (np. na każdym stanowisku), co zmniejsza niebezpieczeństwo dostania się archiwum (choćby w postaci zaszyfrowanej) w niepowołane ręce i ułatwia ewentualne wykrycie takiego zajścia.

Z drugiej zaś strony pozwala to skrócić czas, kiedy dane są dostępne dla osób, które też mają dostęp (czy to w sposób uprawniony, czy nie) do tej samej stacji roboczej. Najbardziej istotne jest oczywiście odmontowanie kontenera z poufnymi danymi, gdy tylko dostęp do nich nie jest już konieczny, jednak również dostęp do zaszyfrowanego woluminu może nie być pożądany. Szczególnie jeśli nie zastosowaliśmy odpowiednio długiej frazy zabezpieczającej. Oczywiście złamanie zabezpieczeń jest bardzo czasochłonne (a często wręcz niewykonalne w zadowalającym czasie, a z tego powodu — nieopłacalne), jednak mimo wszystko, jeśli chronimy w ten sposób informacje krytyczne, dostęp do nich, czy to w formie zaszyfrowanej, czy nie, powinien być ograniczony jedynie do osób upoważnionych.

4. Idealne rozwiązanie?

Jak zwykle w przypadku, gdy próbujemy pogodzić bezpieczeństwo z wygodą użytkowania konieczne są kompromisy i nie należy się spodziewać rozwiązań idealnych. Szyfrowanie jest uciążliwe (chociaż obecnie już coraz przyjaźniejsze użytkownikowi) czy to poprzez niedostatki w wygodzie użycia, czy też poprzez konieczność pamiętania długich i skomplikowanych haseł i dbania by szyfrowane nośniki danych odmontowywać, kiedy dostęp do danych zgromadzonych na nich nie będzie już potrzebny. Jednak jest to jedyna możliwość zapewnienia faktycznego bezpieczeństwa. Zamiast pamiętać dziesiątki silnych haseł, często wystarczy, że zapamiętamy ich kilka i nie osłabi to bezpieczeństwa naszych poufnych danych.

Podsumowując, raczej mało prawdopodobne jest, by nawet świadomy użytkownik zapamiętał rzeczone dziesiątki silnych haseł, do każdej istotnej lokacji inne i w dodatku każde, od czasu do czasu, zmieniane na zupełnie inne wylosowane hasło. Dużo bardziej prawdopodobne, że hasła wcale nie byłyby różne (czyli de facto i tak można by mówić o głównym haśle), nie byłyby zmieniane nigdy, albo przynajmniej zbyt rzadko i według stałego algorytmu, i prędzej czy później zostałyby gdzieś zapisane. Lepiej więc pogodzić się z pewnymi niewygodami wynikającymi z konieczności pamiętania, by mieć przy sobie nośnik z hasłami i kluczami, pamiętania hasła do rozszyfrowania danych na nim zgromadzonych, czy dbania, by dane nie znajdowały się w postaci rozszyfrowanej, gdy nie ma takiej konieczności. Wygląda bowiem na to, że jest to jedyny dostępny dzisiaj sensowny kompromis między wygodą użytkowania a bezpieczeństwem. I co ważne, w przeciwieństwie do restrykcyjnej polityki zmian haseł, itp., ma szanse uchronić nas przed zaniedbaniem bezpieczeństwa w wyniku rutyny czy też zwykłego zbagatelizowania problemu.

Jeśli już zdecydujemy się na ochronę krytycznych danych poprzez ich szyfrowanie, na pytanie które rozwiązanie wybrać? również nie ma jednej odpowiedzi. Dostępnych technologii i ich kombinacji są dziesiątki. Powyżej przedstawiłem trzy przykładowe, które jednocześnie znacznie różnią się od siebie zakresami zastosowania i metodami podejścia do problemu. Aby odpowiednio wybrać trzeba najpierw dobrze sprecyzować swoje potrzeby i stopień w jakim jesteśmy w stanie poświęcić wygodę użytkowania. To z kolei wymaga określenia rzeczywistej wartości danych, do których dostęp umożliwiają chronione dane uwierzytelniające, czyli oszacowanie kosztów związanych z potencjalnym dostaniem się tych danych w niepowołane ręce.

Spis treści

  • 1. Po co szyfrować?
  • 2. Wybrane technologie
  • 2.1. kWallet
  • 2.2. dm-crypt, LUKS i FreeOTFE
  • 2.3. Windows EFS
  • 3. Dlaczego nośniki zewnętrzne?
  • 4. Idealne rozwiązanie?

Autor

Michał Sobiegraj

Michał Sobiegraj specjalizuje się w bezpieczeństwie systemów, jest konsultantem i ewangelizatorem bezpieczeństwa informacji. Jest CISSPem z dużym praktycznym doświadczeniem.

Michał jest również konsultantem dystrybucji Debian GNU/Linux, administratorem i okazjonalnym programistą.

Kontakt: m.sobiegraj@securityinfo.pl

Zobacz również

  • dm-crypt: a Linux 2.6 device-mapper crypto target [en]
  • dm-crypt wiki [en]
  • Encrypting Root Filesystem with DM-Crypt with LUKS [en]
  • Crypto loops [en]
  • Linux Unified Key Setup [en]
  • Free On-The-Fly Encryption [en]
  • Windows XP/2003 Encrypting File System [en]
  • Szyfrowanie plików w Windows XP
  • Dokumentacja do ntfsdecrypt [en]
Reklama
Sekrety kryptografii - Friedrich L. Bauer Podstawy kryptografii - Marcin Karbowski Kryptografia w praktyce - Niels Ferguson, Bruce Schneier

Narzędzia

  • Publikacja: 7 lutego 2006
  • Aktualizacja: 11 lipca 2008
  • Wersja do wydruku
  • Trackback
  • RSS
ISSA Polska Wrocław
O serwisie Polityka prywatności Mapa serwisu Kontakt Copyright © 2005-2008 Securityinfo