Razem z Windows 2000 i NTFS 3.0 (wówczas zwanym NTFS 5.0) pojawił się EFS. EFS pozwalał na szyfrowanie poszczególnych plików, nie pozwalał i nie pozwala na szyfrowanie całych partycji lub dysków. Równolegle pojawiło się kilka narzędzi komercyjnych, które pozwalały szyfrować całe dyski i wymagały uwierzytelnienia użytkownika przed uruchomieniem systemu. Możliwość szyfrowania partycji systemowej pojawiła się również w TrueCrypt od wersji 5.0. Od czasu, gdy pojawiła się taka możliwość w TrueCrypt, dysk systemowy mojego "roboczego" laptopa jest zaszyfrowany. Dlaczego whole disk encryption a nie EFS?
EFS kontra TrueCrypt, czyli dlaczego szyfruję cały dysk
Jak działa EFS
EFS nie jest nowym systemem plików, lecz pewnym rozszerzeniem możliwości NTFS. Pliki (a konkretnie ich zawartość) jest szyfrowana algorytmem symetrycznym (DESX, 3DES, AES) przy pomocy unikalnego klucza. Klucz wykorzystany do szyfrowania zawartości pliku jest osadzany w nagłówku pliku, oczywiście w postaci zaszyfrowanej z wykorzystaniem kryptografii asymetrycznej, przy użyciu certyfikatu EFS (a właściwie kluczy skojarzonych z tym certyfikatem). Nie są szyfrowane metadane dokumentów, takie jak nazwa, czy data utworzenia, modyfikacji oraz ostatniego dostępu. Klucze prywatne certyfikatów (nie tylko tych do EFS) przechowywane są przy pomocy DPAPI. I teraz uwaga - choć samo szyfrowanie plików z wykorzystaniem EFS nie wykorzystuje hasła użytkownika, to hasło użytkownika jest wykorzystywane przez DPAPI. Do tego tematu jeszcze wrócę.
Podsumowując (uproszczony) sposób działania EFS:
- szyfrowana jest jedynie zawartość wskazanych plików,
- plik jest szyfrowany przy pomocy kryptografii symetrycznej,
- klucz wykorzystany do szyfrowania pliku jest szyfrowany przy pomocy kryptografii asymetrycznej z wykorzystaniem kluczy certyfikatu EFS,
- klucze prywatne (w tym te związane z certyfikatami EFS) szyfrowane są pośrednio z użyciem hasła użytkownika,
- pliki zaszyfrowane EFS dostępne są dla (uprawnionych) użytkowników od razu po zalogowaniu w systemie, EFS działa przeźroczyście,
Przed czym trzeba się chronić
Szyfruję dysk nie dlatego, że jest to sexy, ale jest to działanie mające za zadanie przeciwdziałanie konkretnemu zagrożeniu. Chodzi tu przede wszystkim o sytuację, w której intruz ma fizyczny dostęp do laptopa. Może na nim uruchomić dowolny inny system i dowolne narzędzia. Idąc dalej - chodzi o to, by w przypadku utraty laptopa (kradzież, zagubienie) ryzyko ujawnienia danych na nim zawartych było minimalne. Oczywiście można zastanawiać się nad scenariuszem utraty laptopa. W szczególności
Co może zrobić taki intruz:
- przeszukać standardowo dostępne pliki, w tym pliki tymczasowe,
- przeszukać usunięte pliki,
- spróbować złamać EFS,
Może też na przykład zmodyfikować system operacyjny offline, ale tematem integralności systemu operacyjnego tym razem się nie zajmuję. Chodzi mi tutaj tylko o bezpieczeństwo danych.
Przypadek pierwszy: istniejące pliki
Już o tym pisałem w poprzednim wpisie. Wiele aplikacji tworzy pliki tymczasowe (i nie zawsze je usuwa). W plikach tych zawarta może być część lub całość danych z zaszyfrowanego pliku. Więcej informacji na ten temat tu: TrueCrypt's Deniable File System.
Przypadek drugi: usunięte pliki
Jest to twórcze rozwinięcie przypadku pierwszego. Nawet jeśli pliki tymczasowe zostają usunięte, to możliwe jest ich częściowe lub pełne odzyskanie, przynajmniej w części przypadków. Co więcej możliwe jest odzyskanie zawartości pliku przed szyfrowaniem EFS, co jest znanym faktem, stąd zalecenie użycia narzędzia cipher.
Odzyskanie usuniętych plików wymaga więcej pracy niż przeszukanie plików istniejących na dysku, nie jest to jednak wyjątkowo trudne wyzwanie. Zainteresowanych odsyłam do tematu file carving, a hands-on lab może przeprowadzić sobie każdy z użyciem choćby TestDisk.
Przypadek trzeci: łamanie EFS
Nie, nie chodzi mi o żadne tajne backdory, których podobnież (według teorii spiskowych) Windows ma być pełny. Ja proponuję uderzenie w najsłabsze miejsce, czyli w hasło używane przez DPAPI do ochrony kluczy prywatnych używanych przy szyfrowaniu EFS.
Dlaczego jest to najsłabsze miejsce? Nie chodzi nawet o to, że ludzie mają tendencje do wykorzystywania słabych haseł, bo taki sam zarzut można postawić wszystkim innym hasłom, w tym także hasłom, które wykorzystywane są w TrueCrypt. Problemem jest sposób, w jaki Windows przechowuje te hasła. O ile nie zostało to skonfigurowane inaczej, Windows przechowuje dwa hashe hasła:
- LM (LanManager),
- NTLM,
Jeśli istnieje hash LM, złamanie hasła jest zadaniem trywialnym. Pisałem już o tym, ale w skrócie i dla przypomnienia - hasło dzielone jest na dwie 7 znakowe części, które dalej obrabiane są oddzielnie. W dodatku nie ma różnicy między dużymi i małymi znakami. Stosunkowo mała przestrzeń do przeszukania, oraz możliwość sprawdzenia dużej ilości haseł na sekundę, powoduje, że złamanie hasha LM jest zadaniem niezbyt wymagającym. Warto też pamiętać o rainbow tables, których przygotowanie dla hashy LM nie jest zbyt trudne.
Hasha LM może nie być w dwóch sytuacjach:
- wprowadzono zmianę w konfiguracji systemu wyłączającą tworzenie hasha LM,
- hasło użytkownika jest dłuższe od 14 znaków,
W tym wypadku złamać należy hash NTLM, który stanowi nieco większe wyzwanie, głównie z uwagi na większą przestrzeń do przeszukania (maksymalnie 127 znaków, rozróżniane duże i małe litery). To, czy złamanie hasła będzie proste, zależy tak naprawdę od użytkownika i tego, czy korzysta z dobrego hasła. Długie hasło zawierające w sobie duże litery, małe litery, cyfry i znaki specjalne może być (teoretycznie) łamane tysiące lat, a przynajmniej tak wynika z prostego wyliczenia opartego na przestrzeni haseł do sprawdzenia i ilości haseł sprawdzanych na sekundę. Trzeba jednak uwzględnić fakt, że łamanie haseł może być zrównoleglone. Jeśli jeden komputer (mój staruszek laptop) pracę wykonywałby 6 tysięcy lat, to ile czasu zajęłoby to zadanie, gdyby do pracy wykorzystać na przykład botnet Storm w okresie świetności? Poza tym hashe NTLM również można atakować przy pomocy rainbow tables.
Jeśli komputer jest członkiem domeny, możliwe jest jeszcze łamanie hasła przechowywanego w systemie w celu umożliwienia uwierzytelnienia bez kontaktu z kontrolerem domeny.
Ogólnie należy przyjąć, że sposób przechowywania haseł w Windows jest podatny na ataki offline. Co prawda można zaszyfrować bazę haseł za pomocą syskey, przy czym hasło oczywiście musi być albo przechowywane na nośniku zewnętrznym (archaiczna dyskietka), albo wpisywane przy starcie systemu.
A co, jeśli zaszyfruje cały dysk
A jak wygląda sprawa, gdy dysk został zaszyfrowany, na przykład przy pomocy TrueCrypt?
Pierwsze dwa przypadki: pliki istniejące, bądź usunięte
Dysk jest zaszyfrowany, bez podania hasła, nie można go odszyfrować. W związku z tym nie jest możliwe uzyskanie dostępu do plików, zarówno tych istniejących, jak i wcześniej usuniętych.
Łamanie TrueCrypt
Czy możliwe jest złamanie hasła do kontenera/dysku zaszyfrowanego przy pomocy TrueCrypt? Oczywiście, to tylko kwestia czasu. Przy czym w tym wypadku czas może być dość długi.
W przypadku EFS, a właściwie DPAPI, hasło było dostępne w systemie, choć jako hash (czyli po przekształceniu nieodwracalnym). W przypadku TrueCrypt hasła nie ma. To nie jest tak, że TrueCrypt (lub inny analogiczny program) przetrzymuje gdzieś bazę haseł, weryfikuje hasło podane z zapamiętanym i jeśli się zgadza - odszyfrowuje dane. Tutaj każde podane hasło poddawane jest przekształceniu na klucz kryptograficzny (PKCS#5) i następuje próba rozszyfrowania danych. PKCS#5 zawiera ochronę przed atakami offline. Założenie jest proste, operacja pozyskiwania klucza z hasła jest wykonywana stosunkowo rzadko, więc może być obliczeniowo kosztowna. W dodatku ilość iteracji (a więc i czas wykonania całości operacji) może być modyfikowana (obecnie w TrueCrypt to 1000 lub 2000 operacji, w zależności od wykorzystanej funkcji skrótu). Proste porównanie - jeśli hash NTLM jest otrzymywany w rezultacie wyliczenia hasha MD4, to uzyskiwanie klucza przy pomocy tego algorytmu byłoby 1000 razy wolniejsze (1000 razy operacja MD4). Oczywiście - TrueCrypt używa innych funkcji skrótu niż MD4, a więc ta wartość jest w rzeczywistości jeszcze większa. Przykładowy rezultat openssl speed porównujący wydajność dla md4 i rmd160:
The 'numbers' are in 1000s of bytes per second processed. type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes md4 5350.73k 16952.25k 46535.51k 90200.09k 134567.60k rmd160 3023.47k 10478.88k 19451.84k 23687.43k 29691.56k
Wydajność...
Nie ma się co oszukiwać, strata w wydajności jest. Dla przykładu prosty test - odczytanie pewnej ilości danych z dysku i z szyfrowanego kontenera TrueCrypt (ten sam sprzęt):
Dysk nieszyfrowany:
TimeThis : Command Line : dd if=\\.\c: of=nul bs=4096 count=102400 TimeThis : Start Time : Sun Jul 20 21:17:31 2008 TimeThis : End Time : Sun Jul 20 21:18:07 2008 TimeThis : Elapsed Time : 00:00:35.907
Kontener TrueCrypt:
TimeThis : Command Line : dd if=\\.\z: of=nul bs=4096 count=102400 TimeThis : Start Time : Sun Jul 20 21:22:45 2008 TimeThis : End Time : Sun Jul 20 21:23:31 2008 TimeThis : Elapsed Time : 00:00:46.423
Tak naprawdę przeprowadzałem więcej testów (dla różnych wartości danych do odczytu) i narzut na szyfrowanie (AES) kształtuje się zwykle w okolicach 30%. To na pewno nie jest mała wartość, ale nawet ten narzut przy obecnej wydajności sprzętu, nie powoduje uciążliwej (w odbiorze) straty wydajności.
I podsumowanie
W skrócie: EFS nie jest złą technologią. Po prostu nie jest wystarczająco skuteczny w scenariuszu, o którym mowa (fizyczny dostęp do komputera/dysku). Z kolei szyfrowanie na poziomie dysku/partycji również nie rozwiąże wszystkich problemów (po starcie systemu wszystkie pliki są rozszyfrowane), więc mimo szyfrowania całego dysku, warto również zabezpieczać się na wyższych warstwach, korzystając choćby z EFS, lub z szyfrowanych kontenerów TrueCrypt. W każdym razie szyfrowanie dysku/partycji nie jest bezcelowe.
EDIT: Trochę więcej o łamaniu NTLM i rezultat openssl speed porównujący md4 i rmd160.
Ja mam takie pytanie jeśli można.
Przy użyciu TrueCrypta zaszyfrowałem jedna partycje dysku (95%) 5% zostawiłem na śmieci.
Hasło mam dość długie bo ponad 30 znaków.
Wiem, że zaszyfrowaną partycje można wywalić i tyle, ale czy można ją jakoś rozszyfrować? Czy są na to sposoby sprawdzone? Czy ktoś kiedyś to zrobił? Oczywiście nie chcę wiedzieć jak to się robi, tylko czy ktoś w razie czego może dostać się do moich danych? Z góry dziękuje za odpowiedź. Pozdrawiam
Jak byś mogł to daj znać na meila
Pamiętam konkretne cyfry, liczby, symbole i wyrazy ale po kilku latach nie pamiętam kolejności a kombinacji przy haśle ok 15-25 znakowym jest za dużo by klepać na piechotę. Czy ktoś może mi poradzić jak stworzyć słownik do "jakiegoś programu" który w miarę szybko by pokombinował... pozdrawiam