W Windows 2000 wprowadzone zostało rozszerzenie do NTFS, które pozwalało na szyfrowanie plików - EFS. Zgodnie z oczekiwaniami wkrótce potem pojawiły się pytania jak odzyskać zaszyfrowane pliki. Nawet nie tyle - jak odzyskać pliki, tylko jak je odszyfrować. Ponieważ ciągle tego typu problemy się trafiają, postanowiłem trochę ten temat wyjaśnić. Po części dlatego, że słowa kluczowe związane z EFS trafiają się wśród tych, które prowadzą do mojego bloga. Ograniczę się do "domowego" scenariusza wykorzystania EFS, czyli do stacji roboczej bez domeny, bez całej infrastruktury PKI i bez agentów odzyskiwania danych.
EFS: odzyskiwanie zaszyfrowanych plików
Jak działa EFS
Nie będę opisywał dokładnej zasady działania EFS, ograniczę się tylko do tych informacji, które są przydatne/niezbędne w związku z odzyskiwaniem dostępu do plików.
Jak szyfrowane są pliki? Plik szyfrowany jest algorytmem symetrycznym (kilka różnych algorytmów w zależności od wersji systemu) przy pomocy unikalnego dla każdego pliku klucza. Klucz ten osadzany jest w nagłówku pliku, oczywiście w postaci zaszyfrowanej. W tym przypadku wykorzystywana jest kryptografia asymetryczna, a do szyfrowania wykorzystywany jest certyfikat EFS.
Ze wspomnianym certyfikatem EFS związana jest para kluczy, jak to zwykle przy kryptografii asymetrycznej bywa. Klucz prywatny musi być chroniony, bo od jego bezpieczeństwa zależy skuteczność całego mechanizmu EFS. Do zabezpieczenia klucza wykorzystywany jest systemowy mechanizm DPAPI. Mówiąc w pewnym uproszczeniu - klucze prywatne zabezpieczane są za pośrednictwem danych uwierzytelniających użytkownika.
By zmniejszyć prawdopodobieństwo utraty dostępu do plików, certyfikat EFS należy wyeksportować wraz z kluczem prywatnym i przechowywać w bezpieczny sposób. Oczywiście o tej dobrej praktyce osoby, które utraciły dostęp do plików, dowiadują się dopiero po tym smutnym fakcie.
Co trzeba mieć, by pliki odzyskać
Teoretycznie można prowadzić atak brute-force i szukać klucza (symetrycznego), jakim plik został zaszyfrowany. Lepiej jednak skupić się na bardziej realistycznych metodach. W tym wypadku trzeba mieć klucze prywatne związane z certyfikatem EFS. Klucze te przechowywane są w %userprofile%. Jeśli profil użytkownika "ocalał", pewna szansa na odzyskanie plików jest. W przeciwnym wypadku... No cóż, w zasadzie można dać sobie spokój.
Przykład: Advanced EFS Data Recovery
Jednym z narzędzi przeznaczonych do odzyskiwania plików EFS jest Advanced EFS Data Recovery. Narzędzie oczywiście trochę kosztuje, jednak dostępna jest wersja trial, na której przykładzie pokażę jak odzyskiwać pliki.
Na początek ofiara. Jest nią plik o wdzięcznej nazwie plik.txt, który został zaszyfrowany przy pomocy EFS. Po tym fakcie hasło użytkownika zostało wielokrotnie zresetowane. W wyniku tej operacji użytkownik ten utracił dostęp, co objawia się takim oto komunikatem przy próbie otwarcia pliku:

W celu odzyskania dostępu do tego pliku wykorzystam narzędzie Advanced EFS Data Recovery Po uruchomieniu programu jego GUI wygląda mniej więcej tak. Mniej więcej, bo pomijam kreator i przechodzę do wersji zaawansowanej.

W pierwszym kroku należy wyszukać pliki związane z EFS (EFS related files), w szczególności klucze, do których dostęp przez naszą nierozwagę (reset hasła) utraciliśmy. Program potrafi wyszukiwać zarówno klucze w plikach jeszcze istniejących, jak i te usunięte lub "zniknięte" w inny sposób. W tym drugim przypadku należy wybrać wyszukiwanie na poziomie sektorów.
Rezultatem wyszukiwania jest lista znalezionych plików (kluczy). Na zielono oznaczone są te, do których udało uzyskać się dostęp, na czerwono natomiast oznaczone są pliki, do których użycia potrzebne jest hasło. W celach edukacyjnych hasła na razie podawać nie będę.

W drugim kroku należy znaleźć pliki zaszyfrowane z pomocą EFS. Można to zrobić na dwa sposoby:
- kazać programowi takie pliki znaleźć,
- wskazać interesujące nas pliki,
Po znalezieniu/wskazaniu plików pojawić się taka sytuacja, jak przedstawiona poniżej.

Plik, który wskazałem do odszyfrowania nie może zostać odszyfrowany, ponieważ narzędzie nie może uzyskać dostępu do klucza użytego w trakcie jego szyfrowania. Jeśli znamy hasło, problemu właściwie nie ma. Co jeśli hasła nie znamy?
Narzędzie to jest na tyle miłe, że może skorzystać ze słownika (zakładka EFS related files funkcja Add passwords from dictionary...). W tym przypadku wykorzystałem słownik dostępny razem z Cain&Abel. Na pewien czas narzędzie zajęło się samo sobą, co wyglądało mniej więcej tak:

Po dłuższym czasie okazuje się, że... w sumie nie wiadomo, czy się udało. Mam wrażenie, że lepszym rozwiązaniem jest załadowanie haseł najpierw, a dopiero później wyszukanie kluczy EFS. Drugi problem to GUI narzędzia. Dla każdego hasła ze słownika tworzony jest element na liście, co na przykład przy słowniku zawierającym ponad 300 000 elementów ma efekt dość... zabójczy. Dlatego lepiej ograniczyć słownik do kilkudziesięciu najbardziej prawdopodobnych haseł.
Przy okazji zauważyłem, że narzędzie zawiera błąd. Objawia się on tym, że przy takiej kolejności działań, które pokazałem, pliki przygotowane do rozszyfrowania na zakładce Encrypted Files nie są oznaczane jako możliwe do rozszyfrowania, nawet jeżeli stosowny klucz prywatny został odzyskany/odszyfrowany.
Z problemem można sobie poradzić na dwa sposoby. Jeden to usunąć pliki z zakładki Encrypted Files i ponownie je dodać. W tym przypadku narzędzie zorientuje się, że nadają się one do rozszyfrowania. Jest jednak i druga metoda. Wystarczy dodać (pierwsza zakładka) jeszcze jednego użytkownika/hasło, nawet bzdurne, np. test/test. Wówczas narzędzie "zorientuje się", że wybrane pliki (a przynajmniej część z nich) jest jednak w stanie odszyfrować. Co wyglądać będzie mniej więcej tak:

Podsumowanie
Na koniec małe podsumowanie. Stara dobra zasada mówi, by nie używać technologii, której się nie rozumie. Może w dzisiejszych czasach jest ona nieco zapomniana, bo z wielu rozwiązań i wynalazków ludzie korzystają i nie potrzebują do tego gruntownej wiedzy na temat zasady ich działania. Nawet w takim przypadku dobrze jest wiedzieć jak prawidłowo korzystać z określonej rzeczy. EFS nie jest tu wyjątkiem, w końcu równie szkodliwe może być nalanie benzyny do samochodu z silnikiem diesla.
- Jeśli koniecznie chcesz korzystać z EFS, zrób kopię zapasową certyfikatów wykorzystywanych do szyfrowania plików. Skorzystaj też z funkcji agenta odzyskiwania plików. Jego certyfikat wraz z kluczem prywatnym wyeksportuj i przechowuj w sposób bezpieczny. Bezpieczny, czyli taki, który umożliwi dostęp do niego (nich) gdy zajdzie taka potrzeba, ale również taki by nie był on trywialnie dostępny dla osób trzecich.
- Jeśli korzystasz z EFS i system "przestaje działać", to jego reinstalacja nie jest najlepszym pomysłem. W ten sposób prawie na pewno utracisz dostęp do plików. Prawie, bo jeśli jest to "reinstalacja naprawcza", najprawdopodobniej nie będzie miała ona aż tak koszmarnych skutków.
- Jeśli usuwasz profil użytkownika, który miał pliki zaszyfrowane za pomocą EFS, najprawdopodobniej stracisz do nich dostęp.
- Jeśli resetujesz hasło użytkownika, który miał pliki zaszyfrowane za pomocą EFS, najprawdopodobniej stracisz do nich dostęp.
Jeśli już straciłeś dostęp do plików, to szansa na ich odzyskanie jest realna, jeśli:
- uda się odzyskać klucze prywatne związane z certyfikatami EFS (czyli istnieje profil użytkownika, który szyfrował te pliki),
- znasz hasło użytkownika,
W przypadku hasła to w zależności od tego dlaczego dostęp został utracony, może chodzić o aktualne/najnowsze hasło, lub o hasło użytkownika, które było ważne wtedy, gdy pliki były szyfrowane.
I na koniec, jeśli kogoś temat DPAPI interesuje, ciekawa prezentacja: Reverse of DPAPI - BlackHat DC 2010, a jeśli slajdy to za mało: Recovering Windows Secrets and EFS Certificates Offline.
Mój e-mail : [email protected]
Zaszyfrowane pliki na dysku zewnętrznym - bez kopii certyfikatu. Format dysku w komputerze i postawiony system (stary i nowy to Win7Pro). Jakie szanse na odszyfrowania plików względnie JAK to mogę zrobić domowymi metodami?
Co do pytania o "witaminkę" - nie.