Łamanie haseł w Windows#

Temat omijania haseł w systemach z rodziny Windows, choć nieco oklepany, to wciąż budzi sporo emocji. Sam kilka lat temu zainteresowałem się zagadnieniem, zebrałem trochę materiałów i wykonałem podstawowe testy. Teraz, kiedy pisanie kodu HTML nie jest problemem, postaram się przytoczyć całość w miarę przystępny sposób.

Treść będzie obszerna, wszystko umieszczę tylko na jednej stronie, w razie czego można korzystać z podręcznego spisu treści generowanego dynamicznie (zielone przyciski). Opisy będą weryfikowane na systemach Windows XP oraz Windows 7. Oczywiście poruszany temat można odnieść do pozostałych systemów czy programów, gdyż spora część opracowania ma charakter uniwersalny.

Testy wydajnościowe (jeśli się pojawią) będą przeprowadzane na dwóch maszynach: Sempron 2500 (512 MB RAM) oraz i-7 2600k (8 GB RAM). Niestety, w żadnej z konfiguracji nie mam odpowiedniej karty graficznej, dlatego łamanie haseł za pomocą grafiki pozostanie w sferze teoretycznych opisów (a szkoda, bo to ciekawa i cholernie wydajna metoda).

Materiał ma charakter edukacyjny. Proszę go nie wykorzystywać przy czynnościach łamiących lub naruszających prawo. Przed wykonywaniem czegokolwiek proponuję sporządzić odpowiednią kopię systemu i danych (tak na wszelki wypadek).

Uwierzytelnianie#

W życiu codziennym bardzo często spotykamy się z pojęciem uwierzytelniania # (authentication) [WikiEN|WikiPL]. Termin oznacza po prostu konieczność potwierdzenia przez osobę swojej tożsamości. Przykładem może być zwykła wizyta u lekarza czy banku. Skupmy się jednak na aspektach informatycznych. Mając dane na temat tożsamości użytkownika zgłaszającego żądanie, system może zadecydować o udzieleniu mu, lub odmowie, dostępu do zasobów. Opracowano wiele metod uwierzytelniania, np. biometryczne lub hasła.

W praktyce najczęściej mamy do czynienia z uwierzytelnieniami opartymi na hasłach. Uwierzytelnienie następuje po identyfikacji, czyli zadeklarowaniu swojej tożsamości przez użytkownika (np. przez podanie loginu). Zadeklarowana, ale jeszcze niezweryfikowana tożsamość jest potwierdzana w procesie uwierzytelnienia (np. przez podanie hasła). W niektórych przypadkach stosuje się techniki hybrydowe, czyli wprowadza wymóg podania kilku informacji (np. hasło + linie papilarne).

Żeby móc zweryfikować wprowadzane dane przez użytkownika (np. przy logowaniu), system musi w jakiś sposób przechowywać jego oryginalne dane. I tutaj zaczynają się schody. Trzymanie haseł w jawnej postaci nigdy nie jest dobrym pomysłem. Wystarczy, że nieuprawniona osoba uzyska dostęp do komputera a wszystkie hasła będą dostępne od ręki. Przypadłość taka bardzo często występuje na stronach internetowych, którymi zarządzają nieodpowiedzialni (niedouczeni) ludzie.

Formy przechowywania haseł w systemach informatycznych

Rysunek. Formy przechowywania haseł w systemach informatycznych

W celu ograniczenia skutków wyżej wymienionego problemu dane na temat haseł przechowuje się w postaci niejawnej. Cały mechanizm wygląda następująco: przy rejestrowaniu hasło zostaje odpowiednio zaszyfrowane za pomocą funkcji jednokierunkowej|funkcji jednostronnej # (one-way function) [WikiEN|WikiPL], np. poprzez funkcję skrótu|funkcję mieszającą # (hash function) [WikiEN|WikiPL], i w takiej postaci przechowywane w systemie. Przykładowo, hasło "abc123" może mieć postać łańcucha "kUge2g0BqUb7k" (tzw. hash). Przypominam, że ze względu na zastosowanie funkcji jednokierunkowej ciągu takiego nie można odszyfrować (tzn. z postaci "kUge2g0BqUb7k" uzyskać "abc123"). Kiedy użytkownik wprowadza swoje dane na etapie logowania, wpisane hasło zostaje ponownie zakodowane (za pomocą tych samych mechanizmów jak przy jego tworzeniu) a następnie ciągi wynikowe są porównywane z tymi przechowywanymi w systemie. Tak to wygląda w dużym uproszczeniu.

Powszechnie stosowanymi funkcjami skrótu są: MD4, MD5, SHA-0, SHA-1, SHA-2, HAVAL, RIPEMD, RIPEMD-160. Funkcje takie powinny być tak skonstruowane, by nie tylko odwrócenie funkcji było niemożliwe, ale również znajdowanie kolizji było trudne obliczeniowo. Poprzez kolizję określamy sytuację, gdy dla dwóch różnych ciągów wejściowych otrzymujemy identyczny skrót.

Należy zwrócić uwagę, że dla algorytmów MD4, MD5, HAVAL, RIPEMD, SHA-0 opracowano skuteczne metody kryptoanalizy umożliwiające złamanie tych algorytmów (znalezienie kolizji) w bardzo krótkim czasie, np. znalezienie kolizji dla algorytmu MD5 z wykorzystaniem ataku autorstwa Xiaoyun Wang zajmuje na przeciętnym komputerze zaledwie godzinę. Dla algorytmu SHA-1 zaproponowano kilka ataków kryptoanalitycznych, jednak poziom bezpieczeństwa gwarantowany przez ten algorytm jest nadal stosunkowo wysoki. Zaleca się jednak jego stopniowe zastępowanie przez SHA-2. Dla algorytmu RIPEMD-160 nie opublikowano skutecznych ataków kryptoanalitycznych.

Zatem skuteczność metody jest silnie uzależniona od sposobów szyfrowania haseł. Jedne algorytmy będą silniejsze i ich złamanie zajmie więcej czasu. Biorąc pod uwagę ciągły rozwój sprzętu informatycznego najlepiej zawsze stosować mocniejsze algorytmy, których skuteczność zapewni spokój na dłuższy czas.

W systemach z rodziny Windows z metodami przechowywania haseł było różnie. Przy obecnych wydajnościach maszyn mechanizmy stosowane w starszych wersjach systemu są po prostu za słabe. W aktualnych systemach sytuacja wygląda lepiej, ale tylko jeśli mamy do czynienia z silnymi hasłami. I tu pojawia się największy problem całego uwierzytelniania opartego na hasłach - ich siła. Ludzie z natury są leniwi i nie lubią utrudniać sobie życia, dlatego tworzą krótkie hasła, do tego bardzo proste (zazwyczaj same litery, ewentualnie też cyfry).

Kolejna sprawa to powszechność całego rozwiązania. Obecnie mamy tyle usług WWW z wymogami podawania hasła, że staje się to uciążliwe. Sporo osób stosuje identyczne loginy i hasła w wielu różnych usługach (na tym samym e-mailu), co jest kardynalnym błędem. Wystarczy, że zabezpieczenia jednej takiej usługi zawiodą i hashe z hasłami wyciekną do Sieci, a na pewno ktoś się nimi zainteresuje (tzn. będzie próbował złamać). W przypadku krótkich haseł (nawet przy zastosowaniu mocnych algorytmów) jego złamanie zajmie niewiele czasu i może zostać przeprowadzone przez każdego. Przy zachowaniu odpowiedniej siły hasła jego rozszyfrowanie może zająć wiele setek lat nawet dla najwydajniejszych superkomputerów, co w praktyce będzie oznaczało porzucenie takiej próby.

W dalszej części artykułu szczegółowo zajmiemy się sposobami przechowywania haseł w Windowsach, metodami wyciągania hashów oraz ich łamania. Pojawią się też uwagi poprawiające bezpieczeństwo systemów.

Najpopularniejsze sposoby omijania haseł#

Kilka podstawowych technik stosowanych przez ludzi:

Oczywiście to tylko podstawy, na przestrzeni lat powstało wiele różnorodnych technik. Wszystko zależy od systemu, do którego chcemy pozyskać dostęp, a także od osób, które mają do niego uprawnienia.

Metody łamania haseł przez programy#

Mając hasła w postaci zahashowanej cały proces łamania sprowadza się do ciągłego porównywania tych wartości z wartościami generowanymi na żywo (lub odczytywanymi z gotowych zbiorów). Oto najpopularniejsze techniki dostępne w wyspecjalizowanych narzędziach.

Brute-force attack#

Atak siłowy (brutalna siła, tzn. niewspomagana umysłem) jest określeniem algorytmu, który opiera się na sukcesywnym sprawdzeniu wszystkich możliwych kombinacji w poszukiwaniu rozwiązania problemu, zamiast skupiać się na jego szczegółowej analizie. Jest to zwykle nieoptymalna, ale najprostsza do zaimplementowania i najbardziej skuteczna metoda postępowania (ponieważ teoretycznie pozwala ona złamać każde hasło – praktycznie może to potrwać nawet tysiące i miliony lat w zależności od jego długości, zastosowanych znaków i algorytmu szyfrującego).

Liczbę kombinacji w ataku siłowym wyznacza się poprzez (^ - symbol potęgi):

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
liczba znaków w zestawie ^ długość hasła

Większość programów oferuje możliwość deklaracji zbiorów znaków, które posłużą do łamania. Im będzie ich mniej, tym szybciej można przeprowadzić dany proces (albo sprawdzić dłuższy wariant hasła). Wiadomym jest że ludzie zasadniczo dają proste hasła (przeważnie coś istniejącego, słownikowego) bez specjalnych znaków (ewentualnie cyfry + litery), a przede wszystkim krótkie, bo komu chciałoby się za każdym logowaniem wpisywać długie ciągi znaków. Oczywiście mogą wystąpić wyjątki od reguły, ale w praktyce sytuacja taka jest sporadyczna. Idealnie jeśli mamy "fizyczny" kontakt z użytkownikiem i możemy ze słuchu wyłapać mniej więcej ile on tych klawiszy wciska (ewentualnie podejrzeć w których okolicach klawiatury znajdują się palce, czy używa Shift’a itd.).

Mask attack#

Odmiana brute-force'a, ale bardziej wyspecjalizowana. Jest stosowana, kiedy posiadamy cześć informacji na temat jakiegoś hasła. Przykładowo: hasło rozpoczyna się kombinacją "1234", pierwsze 4 znaki są cyframi a pozostałe literami, hasło jest 10 znakowe a my wiemy, że znajduje się w nim ciąg znakowy "admin" itp. Im dokładniejsza maska, tym czas łamania hasła będzie mniejszy (w porównaniu z pełnym atakiem siłowym). Należy zauważyć, że za pomocą tej metody można przeprowadzić pełny atak brute-force (tworząc odpowiednią maskę), ale sytuacja odwrotna nie będzie możliwa.

Dictionary attack / Wordlist attack#

Atak słownikowy jest techniką używaną do siłowego odgadywania haseł, w swoim działaniu zbliżoną do metody brute-force. Główna różnica między stosowanymi podejściami polega na sposobie dobierania haseł, które podlegają sukcesywnemu testowaniu. O ile w czystym ataku brute-force bada się kolejno wszystkie dopuszczalne kombinacje klucza w celu odnalezienia właściwego wzoru, o tyle ataki słownikowe bazują tylko na sprawdzeniu niewielkiego podzbioru możliwych wartości, co do którego wiadomo, że jest niewspółmiernie często stosowany przy doborze haseł - na przykład listy słów występujących w danym języku, albo historycznej bazy popularnych haseł. Słownik przeważnie jest zwykłym plikiem tekstowym ze słowami (każde słowo w osobnym wierszu) z rozszerzeniem *.dic.

Hybrid attack#

Można powiedzieć, że jest to odmiana ataku słownikowego połączona z metodą brute-force. Do każdego słowa w słowniku wprowadza się dodatkowe znaki (1,2,3 lub więcej - zależnie od aplikacji) na początku lub na końcu słowa. Dzięki temu bez problemu znajdziemy twór typu "wujek123" lub "@!wujek".

Combinator Attack#

Kolejna odmiana ataku słownikowego. Oprócz sprawdzenia wszystkich słów dostępnych na liście sprawdza się także wszystkie ich kombinacje. Przykładowo, dla dwóch wyrazów "pass" i "12345" sprawdzone zostaną następujące warianty: "passpass", "pass12345", "12345pass", "1234512345".

Permutation attack#

Jeszcze jedna odmiana ataku słownikowego. Dla każdego wyrazu znajdującego się w słowniku tworzone są wszystkie możliwe kombinacje znaków, z których się składają. Przykładowo, dla wyrazu "ABC" sprawdzone zostaną złożenia "ABC", "ACB", "BAC", "BCA", "CAB", "CBA".

Toggle-case attack#

Ostatnia już odmiana ataku słownikowego. Dla każdego słowa umieszczonego w słowniku sprawdzane są wszystkie warianty małych i dużych liter. Przykładowo, dla słowa "pass" weryfikacja nastąpi dla kombinacji "pass", "Pass", "pAss", "PAss", "paSs", "PaSs", "pASs", "PASs", "pasS", "PasS", "pAsS", "PAsS", "PaSS", "pASS", "PASS".

Atak słownikowy (oraz jego odmiany) to szybka metoda, ale mało skuteczna (ze względu na niewielką liczbę haseł w słowniku). Mając dobre słowniki zawsze warto najpierw z nich skorzystać, zanim przejdziemy do bardziej wyrafinowanych technik.

Inne techniki#

Czasami można się zetknąć z jeszcze innymi sposobami, które w zasadzie są silnie uzależnione od stosowanego programu. Są to np. fingerprint attack, table-lookup attack czy rule-based attack. Niektóre z nich są bardzo skomplikowane (szczególnie ten ostatni) i stanowią niejako osobny język programowania dla definiowania reguł łamania haseł. Udostępniają rozmaite funkcje modyfikujące, wycinanie lub dodawanie znaków, a nawet zezwalają na stosowanie operatorów warunkowych. To sprawia, że są one jednymi z najbardziej elastycznych, dokładnych i skutecznych technik.

Więcej informacji na temat poszczególnych metod łamania haseł można znaleźć na stronie projektu hashcat.net.

Rainbow tables#

Tęczowe tablice # (rainbow tables) [WikiEN|WikiPL] to ciekawe zagadnienie dlatego warto poświęcić im nieco więcej miejsca. Są one gotowymi zbiorami skrótów, które pozwalają na zaoszczędzenie mocy obliczeniowej koniecznej do złamania hasła metodą brute-force. Jednym z pionierów tej techniki był Philippe Oechslin z Politechniki w Lozannie.

Żeby zrozumieć sens utworzenia i stosowania takich tablic najlepiej przeanalizować kilka teoretycznych przykładów. Powiedzmy, że mamy hasło 4 znakowe (zbiór dozwolonych znaków wynosi 95). Niech wyznaczenie jednego hashu zajmuje dosyć dużo czasu, np. 1 s (użyto jakąś mocną funkcję mieszającą). Zastosowanie metody brute-force w takim przypadku zajęłoby:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
Liczba znaków alfanumerycznych: 95
Liczba wariacji z powtórzeniami: 95*95*95*95 = 81450625

Czas: 81450625 * 1 s = ~3 lata

Bardzo długotrwały proces, a przecież mamy do czynienia tylko z hasłem czteroznakowym. Co możemy zrobić? Najlepiej wyeliminować wąskie gardło (czyli proces obliczania hashów). Można w tym celu przygotować gotowe zbiory wszystkich kombinacji w postaci zahashowanej i umieścić w pliku tekstowym lub bazie danych. Jeżeli czas potrzebny do wyszukania w bazie danych jednego hashu i odpowiadającego mu hasła jest znacznie krótszy od wyliczenia go (np. 0.01 s), to bardziej będzie opłacać się dokonać takiego ataku (w pewnym sensie jest to atak słownikowy). Wyliczenia dla tej metody są następujące:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
Liczba znaków alfanumerycznych: 95
Liczba wariacji z powtórzeniami: 95*95*95*95 = 81450625

Czas: 81450625 * 0,01 s = ~226 h

Teraz cały proces trwa krócej (226 h vs 3 lata). Problem pojawia się przy silniejszych hasłach, ponieważ bazy danych z hashami mogą zajmować ogromne ilości miejsca. Dla naszego przykładu możemy przyjąć:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
Liczba znaków alfanumerycznych: 95
Liczba wariacji z powtórzeniami: 95*95*95*95 = 81450625

Rozmiar haseł: 81450625 * 1 B = 81450625 B = ~80 MB
Rozmiar hashów: 81450625 * 16 B = 1303210000 B = ~1273 MB
Razem: ~1,35 GB

Widzimy więc, że zwykłe bazy danych skrótów mogą być ogromne, przez co są nieefektywne. Dlatego też opracowano tęczowe tablice, w których przechowywane hashe poddawane są odpowiednim przekształceniom, dzięki czemu całość zajmuje mniej miejsca. Cały proces może wydawać się nieco skomplikowany, niemniej jednak warto go przeanalizować w kilku krokach.

Funkcja redukująca (reduction function)#

Najpierw musimy przygotować odpowiednią funkcję (dostosowaną do naszych indywidualnych potrzeb), która na wejściu dostaje hash (np. MD5), a na wyjściu generuje zupełnie nowe hasło. Oczywiście funkcja nie wyznacza oryginalnego hasła na podstawie hasha - nie jest to możliwe - generuje coś zupełnie nowego.

Przyjmijmy, że w naszym przykładzie funkcja redukująca będzie tworzyć nowe hasło poprzez wycięcie 4-ech pierwszych cyfr z hasha. Takie założenie będzie wprowadzało pewne ograniczenia dla łamanych haseł:

W zależności od doboru funkcji redukującej tęczowe tablice będą miały konkretne ograniczenia. Dlatego dla udostępnianych tęczowych tablic zazwyczaj podaje się następujące parametry:

Niektóre tęczowe tablice mogą oferować łamanie różnych długości haseł (przy różnych zestawach znaków). Istnieje wiele źródeł (np. Ophcrack) z gotowymi zestawami tablic tęczowych, ale ich rozmiary mogą sięgać setek gigabajtów. Można je wygenerować samemu, niestety cały proces trwa długo (zależnie od ilości znaków i długości hasła). Czasami w zasobach WWW można spotkać działające strony obsługujące tęczowe tablice online, wystarczy podać skrót i cierpliwie poczekać na wynik.

Wyliczanie wartości dla tęczowej tablicy#

Bierzemy jakieś przykładowe hasło, dla którego pasować będzie nasza funkcja redukująca - np. 1729. Teraz liczymy hasha dla tego hasła:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
MD5(1729) = 25e2a30f44898b9f3e978b1786dcd85c

Do tak otrzymanego hasha stosujemy naszą funkcje redukującą:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
RED(25e2a30f44898b9f3e978b1786dcd85c) = 2523

Wynik działania funkcji redukującej traktujemy jak kolejne hasło, które będzie argumentem dla funkcji hashującej:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
MD5(2523) = a6d259bfbfa2062843ef543e21d7ec8e
RED(a6d259bfbfa2062843ef543e21d7ec8e) = 6259

Cały proces powtarzamy do skutku (do chwili, kiedy wygenerowany hash nie będzie spełniał założeń naszej funkcji redukującej):

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
MD5(6259) = 99503bdd3c5a4c4671ada72d6fd81433
RED(99503bdd3c5a4c4671ada72d6fd81433) = 9950

MD5(9950) = 09a630e07af043e4cae879dd60db1cac
RED(09a630e07af043e4cae879dd60db1cac) = 0963

MD5(0963) = d1cbdbc9cacee6c8b133c7a92a83bcca
i.t.d.

Kompresja tęczowej tablicy#

Teraz dopiero dzieje się to, co najważniejsze z punktu widzenia użytkownika. Weźmy pierwsze hasło, od którego zaczęliśmy liczenie wartości:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
1729

Weźmy ostatni wyliczony hash:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
d1cbdbc9cacee6c8b133c7a92a83bcca

Na koniec zapiszmy liczbę iteracji (kroków), które doprowadziły od tego hasła do hasha:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
5

Powyższy zestaw danych stanowić będzie pojedynczy element naszej tęczowej tablicy:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
1729;d1cbdbc9cacee6c8b133c7a92a83bcca;5

Cała magia kryje się w tym, że w naszej jednej linijce danych zaszyte są wszystkie informacje uzyskane w toku powyższych obliczeń. Nie są one dostępne (widoczne) wprost, ale tam są i będzie można je odtworzyć.

Hashowanie jak i redukcja są funkcjami jednokierunkowymi. Łańcuchy znaków tworzące tęczowe tablice są łańcuchami jednokierunkowych funkcji redukujących zaczynających się od konkretnego hasła i kończących się na konkretnym hashu. Łańcuch zaczyna się od hasła, które później poddawane jest funkcji hashującej, której to wynik z kolei poddawany jest funkcji redukującej, a następnie znowu funkcji hashującej i redukującej itd. Łańcuch zawiera tylko początkowe hasło i końcowy hash. Dlatego też miliony hashów mogą być zastąpione jedynie rekordem posiadającym jedno początkowe hasło i jeden końcowy hash.

Wyszukiwanie w tęczowej tablicy#

Mając świeżutką tęczową tablice najwyższa porą ją przetestować. Załóżmy, że mamy do złamania następujący hash:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
99503bdd3c5a4c4671ada72d6fd81433

Nie ma go w naszej jednoelementowej tęczowej tablicy, ale zacznijmy na tym hashu przeprowadzać redukcję oraz MD5 na wyniku (tak jak robiliśmy to wcześniej), aż trafimy na hasha znajdującego się w naszej tablicy tęczowej:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
RED(99503bdd3c5a4c4671ada72d6fd81433) = 9950
MD5(9950) = 09a630e07af043e4cae879dd60db1cac

RED(09a630e07af043e4cae879dd60db1cac) = 0963
MD5(0963) = d1cbdbc9cacee6c8b133c7a92a83bcca trafiony!

W odpowiadającym wpisie w tęczowej tablicy zawarte będą informacje o naszym sprawdzanym hashu (i jawnym haśle). Aby odkryć właściwe hasło z którego hash został wygenerowany (ten od którego rozpoczęliśmy nasze poszukiwania) robimy następującą rzeczy. Po pierwsze odczytujemy hasło zapisane w tym elemencie tęczowej tablicy, gdzie nastąpiło dopasowanie:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
1729

Teraz wykonujemy na tym haśle tyle razy hashowanie i redukcję, aż dojdziemy do poszukiwanego (sprawdzanego) hashu:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
MD5(1729) = 25e2a30f44898b9f3e978b1786dcd85c
RED(25e2a30f44898b9f3e978b1786dcd85c) = 2523

MD5(2523) = a6d259bfbfa2062843ef543e21d7ec8e
RED(a6d259bfbfa2062843ef543e21d7ec8e) = 6259

MD5(6259) = 99503bdd3c5a4c4671ada72d6fd8143 trafiony!

Eureka, mamy nasze hasło: 6259. Wygląda to nieco skomplikowanie, ale w praktyce daje spore korzyści.

Zysk czasowy i objętościowy#

Samo utworzenie tęczowych tablic jest procesem czasochłonnym (należy normalnie przeprowadzić wszystkie obliczenia hashów), dlatego lepiej korzystać z gotowców. Przygotowanie takich danych zazwyczaj odbywa się na platformach z wieloma procesorami lub wieloma kartami graficznymi, dlatego etap można odpowiednio przyspieszyć do znośnych jednostek czasowych. Rzeczywisty zysk odczuwalny będzie dopiero dla klienta, który faktycznie stosował będzie gotowy już produkt.

Pierwsza zaleta to taka, że rozmiar słownika został zmniejszony tylokrotnie względem normalnego słownika, ile wynosi ilość iteracji wykonanych dla stworzenia jednego elementu tablicy.

Jeżeli chodzi o zysk czasowy, to być może nie jest on dobrze widoczny na naszym przykładzie, gdyż nasza tęczowa tablica składa się tylko z jednego elementu. W ogólnym przypadku, liczba koniecznych hashowań wynosi tyle ile suma poniższych:

Dodatkowo, należy zauważyć, że:

Pozostaje jeszcze kwestia porównań. Ich sumaryczna ilość to suma poniższych:

Wady tęczowych tablic#

Przy generowaniu tęczowych tablic można napotkać na kilka problemów. Po pierwsze nigdy nie ma pewności, że wygenerowana tablica ma już wszystkie pożądane hashe. Oczywiście nie można być pewnym, iż wszystkie hasła w pożądanej przestrzeni znaków zostaną zahashowane, ale szanse rosną przy odpowiedniej ilości łańcuchów.

Kolejnym niepożądanym efektem jest zjawisko kolizji # (collision) [WikiEN|WikiPL]. Polega ono na wystąpieniu sytuacji, kiedy to z wielu różnych haseł otrzymuje się taki sam hash. W przypadku dobrych funkcji jednokierunkowych jest to marginalne. Mogą też wystąpić zapętlenia w przypadku, gdy hash został zredukowany do hasła, które już wystąpiło w danym łańcuchu wcześniej. Problem ten został jednak znacznie zminimalizowany, wystarczy na całej drodze w łańcuchu, za każdym razem, zastosować inną funkcję redukującą.

Przed tęczowymi tablicami bardzo łatwo się zabezpieczyć. Wystarczy zastosować tzw. sól (salt), czyli losowo generowaną wartość dodawaną jako argument funkcji mieszającej i zapisywaną obok wartości skrótu. Sprawia to, że dla każdej soli funkcja mieszająca jest inna. Żeby złamać taki skrót musielibyśmy posiadać tęczową tablicę dla każdej możliwej soli, co w praktyce jest solidnym czopem dla tej metody.

Większość dystrybucji GNU/Linuksa i systemów BSD wykorzystuje sól do zapisywania haseł użytkowników, funkcjonalność ta jest oferowana przez pakiet shadow. Z kolei większość aplikacji internetowych w PHP wykorzystuje do kodowania haseł użytkowników zwykłe MD5, co ułatwia złamanie hasła.

Podsumowując:

Plik z hasłami w systemach Windows (SAM i SYSTEM)#

Mamy już za sobą solidną porcję teoretycznej wiedzy na temat łamania haseł, przyjrzyjmy się teraz jakie mechanizmy funkcjonują w różnych wersjach Windowsa.

Najpierw wypadałoby w ogóle wyjaśnić co robi hasło w systemie Windows. Otóż hasło jest tylko i wyłącznie "przepustką" do korzystania z systemu, w żaden sposób nie chroni innych danych. Prawdę powiedziawszy najbardziej zabezpieczone w systemie są właśnie pliki z hasłem samego systemu lub innego programu (jeśli aplikacje zostały dobrze napisane). Pozostałe dane przechowywane są w normalnej postaci. W praktyce oznacza to, że bardzo łatwo uzyskać dostęp do danych, bez konieczności podawania hasła. Wystarczy uruchomić drugi system operacyjny i zgrać pliki, można również wypiąć dysk twardy i podłączyć w innym komputerze.

Jeśli koniecznie chcemy zabezpieczyć pewne dane (ewentualnie całe dyski) trzeba je zaszyfrować. Można w tym celu użyć wewnętrznych mechanizmów systemu (np. BitLocker), ewentualnie sięgnąć po zewnętrzne aplikacje (np. TrueCrypt). Jest to temat na osobny artykuł, dlatego powróćmy do naszego właściwego wątku.

Windows 95/98/Me#

W systemach tych hasła przechowywane są w folderze %Windows% (pliki .pwl), ale ponieważ nie są one w żaden sposób chronione a programów do ich łamania jest mnóstwo (choćby słynny Cain & Abel) nie ma sensu się nad tym zagadnieniem rozwodzić.

Winodws NT/2k/XP/Server 2003 (rodzina NT – New Technology)#

Pliki gdzie zapisane są loginy i hasła użytkowników znajdują się w katalogach:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
Oryginał
%SYSTEMROOT%\SYSTEM32\CONFIG (najczęściej C:\WINDOWS\SYSTEM32\CONFIG)

Kopia
%SYSTEMROOT%\REPAIR (najczęściej C:\WINDOWS\REPAIR)

Rejestr
HKEY_LOCAL_MACHINE\SAM

Windows w wielu sytuacjach (np. przy instalacji) tworzy kopie najważniejszych plików znajdujących się w katalogu Config. Najważniejsze jest to, że nie tylko członkowie grupy Administratorzy (zazwyczaj), ale wszyscy użytkownicy mają prawo do odczytu i ich kopiowania. Może się jednak zdarzyć (a bardzo często tak właśnie jest), że dane zawarte w tym katalogu są nieaktualne. Wynika to z faktu, że są tam hasła kont utworzonych podczas instalacji, jeśli je ktoś zmienił później niestety z pliku SAM wyciągniemy nieaktualne dane. Z drugiej strony jeśli administrator systemu jest mądry osobiście to powinien usunąć te pliki lub zablokować katalog Repair.

Wyciąganie plików z hasłami#

Żeby dobrać się do haseł w systemie potrzebne będą: plik SAM (Security Account Manager) oraz plik SYSTEM (klucz SysKey’a).

W systemie Windows zgrywanie wyżej wymienionych plików nie jest możliwe, pliki te są odpowiednio zabezpieczone (a dokładniej: system podczas bootowania ładuje pliki, dlatego nie można wykonywać na nich żadnych operacji). Ta sama uwaga dotyczy Rejestru, obszar z informacjami o przechowywanych hasłach jest chroniony. Konwencjonalnymi metodami nie da się ich ani otworzyć, ani skopiować, ani tym bardziej nadpisać. Trzeba odpalić jakiegoś Linuxa Live CD, może to być mini dystrybucja dyskietkowa bądź pełna płytowa, np. KNOPPIX (najlepiej takiego, który od razu podmontowuje dyski i obsługuje system plików FAT32 lub NTFS) i zgrać sobie owe katalogi na pendrive'a.

Niektóre aplikacje potrafią bezpośrednio z systemu Windows pracować na plikach bez konieczności ich zgrywania. Tak naprawdę odczytują one zawartość chronionego obszaru pamięci operacyjnej, w której przechowywane są m.in. nazwy i hasła użytkowników. Niestety aby z tego skorzystać musimy pracować na koncie z uprawnieniami Administratora.

Zdaje sobie sprawę z tego, że wielu ludzi jest z Linuksem na bakier więc dla nich wytłumaczę inny sposób. Jeśli Windows jest zainstalowany na partycji z systemem FAT32 to możemy użyć najzwyklejszej dyskietki startowej Windowsa 98 i uruchomić komputer w trybie MS-DOS. Przechodzimy do katalogu w którym znajdują się pliczki SAM oraz SYSTEM i je kopiujemy (wszystko odbywa się w trybie tekstowym, co może przysporzyć wielu domorosłym "hakierom" problemów).

Jeśli natomiast Windows stoi na partycji NTFS (New Technology File System) mamy problem, gdyż MS-DOS nie rozpoznaje tego systemu plików, więc nie będziemy mieli dostępu do tej partycji. W takim przypadku należy posłużyć się narzędziem NTFSDOS (sterownik dla DOS-a), które utworzy dyskietkę bootowalną z obsługą NTFS. Postępujemy tak jak w przypadku partycji FAT32, jednak pierwsza rzecz jaką robimy po uruchomieniu DOS-a jest uruchomienie programu ntfsdos poprzez wpisanie po prostu "ntfsdos.exe" (lub bez rozszerzenia, jak kto woli). Następnie ntfsdos poszuka wszystkich partycji NTFS i po kolei zamontuje je nam jako normalne dyski DOS. W rezultacie aplikacja udostępnia wszystkie pliki bez względu na uprawnienia (łącznie z SAM i SYSTEM). Wersja publicznie dostępna pozwala jedynie na odczyt partycji NTFS, ale akurat nam to w stu procentach wystarcza.

Wadą zabawiania się z dyskietkami jest ich pojemność (w obecnych czasach nawet dostępność stacji dyskietek w komputerach). Niestety plik SAM może ważyć nawet więcej niż 2 MB. Musimy go spakować (RAR-em bądź innym pakerem) lub skorzystać z USB. Jeśli mamy dostęp przynajmniej do jednego konta w Windowsie możemy zgrać pliki do katalogu, do którego mamy dostęp a następnie przekopiować je na dowolny nośnik informacji. W ostateczność spod Linuxa pozostaje wysłanie maila z załącznikiem.

Jedną z wygodniejszych opcji jest użycie bootowalnej płytki z programem ERD Commander - po załadowaniu uzyskujemy kawałek systemu Windowsa, działa DHCP (więc o ile korzystamy z tego mamy od razu dostęp do Internetu), działa dostęp do wiersza poleceń (okienko DOS), więc możemy wykonywać od razu polecenia getsyskey i gethashes (firmy InsidePro lub innych odpowiedników, dzięki temu nie trzeba nic kopiować), a także działa program SAMInside.

Więcej szczegółowych informacji#

Plik SAM jest swego rodzaju plikiem rejestru (coś jak plik system.dat w Win95/98/Me), można go zresztą przeglądać za pomocą edytora rejestru, ale wymaga to użycia kilku sztuczek i jest całkowicie bezcelowe. Podczas bootowania Windowsa, zanim użytkownik może w ogóle się zalogować do systemu, główny wątek programu Smss.exe (Session Manager - Menedzer Sesji) uruchamia proces Winlogon.exe, gdyż jest on potrzebny by załadować Lsass.exe (Local Security Subsystem - Lokalny Podsystem Bezpieczeństwa), który następnie ładuje usługę SAM (Security Accounts Manager - Menedżer Kont Bezpieczeństwa), który jest po prosu interfejsem dającym nam dostęp do bazy danych SAM.

Plik binarny SAM nie przechowuje jednak samych haseł a jedynie ich hashe (tzw. skróty haseł), o których pisałem obszernie na początku artykułu. Oczywiście w pliku tym znajdują się zapisane loginy użytkowników, te naturalnie przechowywane są bez jakiegokolwiek kodowania. Kiedy ktoś loguje się na komputer hasło, które wpisał zostaje zaszyfrowane w ten sam sposób, a wynik (czyli hash) jest porównywany z hashem z pliku SAM i jeśli są takie same użytkownik uzyskuje dostęp do systemu.

Należy wspomnieć, że w plikach SAM znajdują się wyłącznie zaszyfrowane lokalne hasła lub hasła użytkowników z danej domeny, ale zależy to od funkcji pełnionej przez dany komputer, tzn. jeśli jest zwykłą stacją roboczą to przechowuje hasła swoich użytkowników, jeśli jest serwerem posiada hasła z użytkowników domeny, logujących się na danym serwerze. Nie trudno więc zauważyć, że rozkodowanie SAM-a daje nam możliwość do przejęcia kontroli nad siecią.

LanMan#

Najwyższy czas wyjaśnić, w jakiej postaci przechowywane są/były nasze hasła. Z początku w Windowsach 3.1/9X/Me stosowano mechanizm LanMan (inaczej LM, LM Hash, LanManager). Było to "leciwe rozwiązanie" podatne na wszelkie ataki (w tym brute-force). Maksymalna długość hasła mogła wynosić 14 znaków, w dodatku nie ma rozróżniania wielkości liter (małe litery zawsze interpretowane są jak duże).

W owym czasie sądzono, że systemy Windows oferują udoskonalone mechanizmy zabezpieczania komputerów hasłami w porównaniu z wydawanymi w tym samym czasie systemami Unix. W większości starych systemów Unix nie można było tworzyć haseł dłuższych niż ośmioznakowe. Autorzy systemu Windows NT szczycili się maksymalną długością czternastu znaków, czyli niemal dwukrotnie większą niż w oferowanych w tamtym czasie w systemach Unix. Wówczas jednak Mudge i WeldPond z firmy L0pht Heavy Industries zdemaskowali słabość szyfrowania LM. Ich firma szybko wypuściła na rynek narzędzie L0phtCrack wykorzystujące niedociągnięcia w schemacie szyfrowania haseł firmy Microsoft.

Cóż to za słabość owej metody? Można powiedzieć że całokształt. Postać hasha będzie miała zawsze 16 bajtów (czyli 128 bitów). Pierwsze osiem bajtów odpowiada pierwszym siedmiu znakom hasła, a drugie osiem bajtów drugim siedmiu znakom hasła. Jeśli hasło jest krótsze niż 14 znaków, np. 10, to znowu pierwsze osiem bajtów hashu odpowiada pierwszym siedmiu znakom naszego hasła, a pozostałe osiem bajtów odpowiada pozostałym znakom naszego hasła.

Jeśli jednak hasło ma długość krótszą lub równą 7 znaków, to po raz trzeci pierwsze osiem bajtów hashu odpowiada literom hasła, a drugie osiem bajtów będzie w tym przypadku zawsze równe:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
AAD3B435B51404EE

Jeśli dane konto w ogóle nie posiada hasła, czy raczej posiada hasło zerowej długości, to obie części hashu przyjmują powyższą wartość, czyli hash wygląda tak:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
AAD3B435B51404EEAAD3B435B51404EE

Jest to niewątpliwie niedociągnięcie autorów schematu szyfrującego z dwóch powodów:

Jeśli kiedykolwiek zetkniesz się z hashem:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
AAD3B435B51404EEAAD3B435B51404EE:FA95F45CC70B670BD865F3748CA3E9FC:::

będzie to oznaczało, że masz do czynienia z hasłem powyżej 14 znaków. Zauważ, że powyższy hash zawiera w części LanMan (oznaczonej czcionką pogrubioną) dwukrotnie powtórzony ciąg "AAD3B435B51404EE", o którym wiemy już, że reprezentuje puste hasło.

Całe rozwiązanie najlepiej podsumowuje krótki cytat z fachowego źródełka:

"...Najistotniejszą słabością szyfrowania LM jest podzielenie hasła na dwie 7-zankowe połowy! Tak więc 8-znakowe hasło może być interpretowane jako hasło siedmioznakowe i hasło jednoznakowe. Weźmy na przykład 12-sto znakowe "123456Qwerty". Podczas szyfrowania za pomocą algorytmu LanMan, hasło jest najpierw przekształcane do dużych liter - "123456QWERTY". Następnie uzupełniane jest pustymi znakami, tak aby miało długość 14 znaków - "123456QWERTY_". Przed zaszyfrowaniem ten 14-sto znakowy ciąg dzielony jest na dwie połowy "123456Q" i "WERTY_". Każdy ciąg jest następnie niezależnie szyfrowany, a wyniki są ponownie łączone. Zaszyfrowana wartość ciągu "123456Q" to 6BF11E04AFAB197F, a wartość "WERTY_" to 1E9FFDCC75575B15. Połączona wartość to 6BF11E04AFAB197F1E9FFDCC75575B15...."

W praktyce oznacza to, że hasło 14 znakowe można potraktować jak dwa osobne hasła 7 znakowe, czyli siła hasła znacząco spada. Bez rozróżniania wielkości liter siła słabnie jeszcze bardziej (ok. 10 razy). Biorąc pod uwagę fakt, że do obliczania haszów stosowany jest przestarzały symetryczny algorytm szyfrujący DES (64-bit) nie stanowi to żadnego wyzwania dla współczesnej techniki.

NTLM#

Microsoft szybko zareagował na słabość mechanizmu logowania i począwszy od Service Packa 2 dla Windows 2000 udostępnił nową metodę pod nazwą NTLM (inaczej NT, NT Hash, NT LanManager). Tym razem hasło nie jest dzielone na dwie części, może posiadać do 127 znaków (czasami podaje się wartość 128), rozróżniane są duże i małe litery, także algorytm hashujący zamieniono na MD4 (128-bit) . Całość dodatkowo zabezpieczono przez SysKey'a.

Dla hasła np. "HASELKO" wartości hashy LM i NT są inne, widać że stosowane są inne algorytmy szyfrujące.

Nie byłoby tragedii z nowym mechanizmem (przy odpowiedniej sile hasła), ale ze względów na kompatybilność (np. użytkowanie w Sieci komputerów z różnymi wersjami systemu) domyślnie pozostawiono włączone obydwa rozwiązania jednocześnie - czyli system przechowuje dwie wersje hasha dla jednego hasła.

Taki stan rzeczy powoduje, że dla haseł do 14 znaków LanMan w zasadzie "zabija" NTLM-a. Stwierdzenie to można potraktować dosłownie. Zamiast męczyć maszynę próbą złamania 14 znakowego hasła NTLM, lepiej jest przeprowadzić atak na haszu LM. Po uporaniu się z hasłem LM wystarczy sprawdzić jedynie wszystkie możliwe kombinacje dla wielkich i małych liter (jeśli hasło je zawiera) i wynik hashowania porównywać z hashem NTLM - ten etap to już tylko formalność. Istnieją programy, które znakomicie radzą sobie z tego typu zadaniem.

Można się przed tym obronić na dwa sposoby:

Jeszcze kilka prostych testów, które w przeszłości przeprowadziłem na komputerze Sempron 2500, przy użyciu programów SAMInside i LC5.

Mamy hasło 7 znakowe (duże i małe litery alfabetu angielskiego). Z moich symulacji wynika że:

Widzisz różnicę? W drugim przypadku dodatkowo trzeba sprawdzić jeszcze małe litery co znacznie wydłuży cały proces.

Kolejny bliźniaczy przykład jak wyżej, ale bierzemy pod uwagę hasło 7 znakowe z tylko dużymi literami. Z moich symulacji wynika że:

Skąd takie wyniki? Dlatego, że w przypadku LM Hash trzeba wykonać więcej operacji zanim zahashujemy dane hasło (zamieniać na duże litery, uzupełniać do 14 znaków, dzielić na 7 znakowe itd.). Widać to znakomicie po liczniku prób (NT – 11mln/s, LM – 7mln/s). Tylko kto z nas stosuje same duże litery w haśle? Wpisując w haśle 1 małą literę wydłużymy łamanie NT do 1 dnia.

Trzeci i ostatni już przykład dobitnie obrazujący całą słabość LM. Mamy hasło 14 znakowe (same litery duże i małe). Jak zdążyłeś się zapoznać, tak naprawdę będą to 2 niezależne od siebie hasła, które można łamać oddzielnie. Czyli de facto wcale nie mamy potężnego hasła (mamy takie samo hasło jak z przykładu pierwszego). Łamanie LM zajmie nam bagatelka 30 minut. Jak wygląda sytuacja z NT? No tutaj nie mam dobrych wieści, czas potrzebny na złamanie to więcej niż 10000 dni (ile więcej tego nie wiem). Dodam tylko, że łamiąc takie hasło na 512 komputerach naraz, na każdym zajmie to także więcej niż 10000 dni (można przeprowadzać takie symulacje). Nadmienię tylko, że pod uwagę brane były tylko litery alfabetu. Widzimy wyraźnie, że NT Hash nie jest takim złym rozwiązaniem, wystarczy całkowicie wyłączyć LM Hashe oraz stosować odpowiednie hasła.

Powyższe wyniki należy traktować względnie, obrazują jedynie różnicę między jedną a drugą metodą. Wartości numeryczne (liczba prób na sekundę i całkowity czas łamania) na przestrzeni kilku lat uległy ogromnej poprawie. Obecnie nawet w warunkach domowych można osiągnąć wydajność, którą dotychczas mogły dysponować tylko wyspecjalizowane służby i organizacje.

SysKey#

Dla formalności warto wspomnieć o jeszcze jednym zagadnieniu. Dawniej można było bardzo łatwo wydobyć hashe za pomocą np. programu PWDump. Wystarczyło włączyć program, a on wyświetlał nam w oknie konsoli hashe (odczytywane z rejestru systemowego). Jeśli program wywołany został ze znakiem przekierowania, np. "pwdump.exe > hash.txt", to nasze hashe zostały zapisane do pliku hash.txt. Jeśli jako parametr podaliśmy adres jakiegoś komputera np. "pwdump.exe 127.0.0.1", "pwdump.exe \127.0.0.1" lub "pwdump www.microsoft.com", to program próbował połączyć się z tym komputerem, i jeśli udostępniał on zdalnie swój rejestr, hashe zostały z niego pobrane.

Drugi sposób polegał na wykorzystaniu programu SAMDump. Aplikacja była w stanie wydobyć hashe bezpośrednio z pliku SAM. Wystarczyło więc skopiować ten plik z jakiegoś komputera na dyskietkę i spokojnie w domu użyć SAMDumpa z tym plikiem jako parametrem, np. "sampdump.exe a:SAM". Oczywiście bezpośrednie zgrywanie pliku SAM nie było możliwe, ale o tym problemie i jego rozwiązaniu pisałem już wcześniej.

Microsoft widząc całą sytuację bardzo szybko wprowadził na rynek poprawki sprawiające, iż tylko członkowie grupy Administratorzy maja prawo odczytu całości rejestru, a więc również hashy. Program PWDump stał się bezużyteczny. A co gorsza dodatek Service Pack 3, a w efekcie każdy następny (było ich w sumie 6) do Windows NT wprowadził usługę SysKey. Potem już Windows 2000, Windows XP i Windows Server 2003 miały ową aplikację instalowaną domyślnie.

SysKey jest to skrót od SystemKey, czyli klucz systemu zwany również bootkey'em. Usługa ta tworzy podczas instalacji unikalny dla każdego systemu klucz, którym dla dodatkowego bezpieczeństwa szyfrowane są hashe w pliku SAM. Nie chcę się wdawać w szczegóły, gdyż myślę, że są one zbędne, ale dla ciekawskich podam, że jest to robione za pomocą algorytmów MD5 i RC4. Żeby było jeszcze ciekawiej klucz ten jest wybierany losowo i nawet ten sam Windows instalowany na tym samym komputerze będzie miał za każdym razem inny klucz!

Hakerzy z całego świata rzucili się na nowe pomysły Microsoftu. Rozwiązania były różne, np. specjalna linuksowa dyskietka, która potrafiła wyłączyć SysKey'a, chociaż daleko jej było do doskonałości. Pierwszym prawdziwym zwycięstwem było stworzenie programu PWDump2. Działał on analogicznie do swojej poprzedniej wersji, ale tylko na lokalnym komputerze. Wykorzystuje on fakt iż SysKey'a można obejść, a co za tym idzie zdobyć czyste hashe za pomocą pewnych wywołań API, ale tylko jeśli jest się aplikacją lsass.exe, która to właśnie zarządza hasłami i kontami. PWDump2 tworzy więc "zdalny" wątek w lsass.exe, a ten wątek ładuje bibliotekę samdump.dll (dostarczana wraz z PWDump2/3/4), która to właśnie omija (jako lsass.exe) SysKey'a i odczytuje nasze upragnione hashe. Program PWDump2 ma tylko jedna wadę. Ponieważ manipuluje on pamięcią, lsass.exe musi więc posiadać przywilej debugowania (tzw. SeDebugPrivilege), żadna aplikacja nie może "otworzyć" procesu o atrybucie systemowym (a takim przecież jest lsass.exe) bez tego przywileju. Tutaj właśnie pojawia się problem, gdyż ten przywilej mają sobie (tzn. programom, które uruchamiają) prawo przyznać tylko członkowie grupy Administratorzy, więc nam (przynajmniej w większości przypadków) się to w ogóle nie przyda.

Warty omówienia będzie także program PWDump3, który pozwalał na wydobycie hashy ze zdalnego komputera. Połączenie odbywa się za pomocą protokołu SMB, przykładowo można je wywołać poleceniem "pwdump3 127.0.0.1 hash.txt Administrator", po czym poproszeni zostaniemy o hasło użytkownika. Po połączeniu aplikacja wysyła na serwer pliki LsaExt.dll i pwservice.exe. Następnie zdalnie uruchamiany jest program pwservice.exe, który robi z biblioteką LsaExt.dll prawie to samo, co PWDump2 robił z samdump.dll. Znowu jednak pojawia się problem znajomości przynajmniej jednego hasła administratora, nie mniej jednak sam projekt jest ciekawy. Wspomnę jeszcze, że istnieje program PWDump4, który jest jakby połączeniem PWDump2 i PWDump3, nie będę go więc opisywał.

Dopiero po jakimś czasie programistom udało się całkowicie złamać SysKey'a, a to za sprawą aplikacji SAMDump2, BKhive i BKreg. Z tych trzech praktycznie najmniej użyteczna jest aplikacja BKreg. Odczytuje ona klucz systemu (bootkey) z rejestru, a co za tym idzie, działa tylko uruchamiana (za wyjątkiem niektórych wersji systemu Windows NT) przez członków grupy Administratorzy. BKhive natomiast wyciąga klucz systemu z pliku SYSTEM, który można znaleźć wszędzie tam gdzie plik SAM. BKreg uruchamia się np. tak: "bkreg key.txt". W tym momencie w pliku key.txt w formacie HEX zostaje zapisany klucz systemu. Bkhive natomiast wywołuje się następująco: "bkhive lokacja_SYSTEM key.txt" i znowu mamy bootkey'a w pliku key.txt. Następnie korzystamy z programu SAMDump2, który jako parametry wykorzystuje właśnie plik SAM i jakiś plik z naszym bootkeyem, czyli np: "samdump2 SAM key.txt". Na koniec dodam tylko, że pierwsze wersje czasami (ale to naprawdę sporadycznie) nie potrafiły odczytać pliku SAM, ale autor bardzo szybko sobie z tym poradził i teraz program działa bez zarzutu. Przynajmniej ja nie miałem z nim żadnego problemu.

Wszystkie wymienione wyżej aplikacje można zastąpić jedną dobrą, np. SAMInside (nie trzeba nawet instalować).

Ze względów bezpieczeństwa lepiej upewnić się, czy usługa SysKey jest włączona. Wystarczy wcisnąć Win + R i wpisać syskey. Pojawi się okienko, w którym widoczne będą interesujące nas informacje. Należy jeszcze wspomnieć, że raz włączonej funkcji SysKey nie da się wyłączyć, a wszelkie próby wyłączenia jej mogą doprowadzić do uszkodzenie bazy haseł SAM.

Włączenie usługi SysKey w systemach Windows

Rysunek. Włączenie usługi SysKey w systemach Windows

Domyślnie w najnowszych systemach Windows aplikacja SysKey jest włączona.

W powyższym oknie można również zmienić lokalizację przechowywania klucza. Wystarczy kliknąć na Aktualizuj i wybrać nową lokalizację, np. pendrive'a (instrukcja). Każda próba zalogowania do systemu będzie wówczas wymagała podłączenia do komputera pamięci przenośnej z właściwym kluczem. Można także założyć dodatkowe hasło, wymagane jeszcze przed pojawieniem się ekranu logowania.

Zarządzanie kontami i hasłami w systemach Windows#

Przeprowadzając testy warto wiedzieć, w jaki sposób szybko manipulować ustawieniami haseł dla poszczególnych użytkowników. Oto kilka sposobów:

  1. Panel Sterowania >> Konta użytkowników
  2. Start >> Uruchom >> cmd >> control userpasswords – ten sam efekt co wyżej.
  3. Start >> Klikamy na graficznym symbolu konta - ten sam efekt co wyżej (w przypadku Win XP klikamy dodatkowo Wstecz).
  4. Start >> Uruchom >> cmd >> control userpasswords2 – więcej opcji, możemy przeglądać jakie uprawnienia mają poszczególne konta (nadawać inne).
  5. Start >> Uruchom >> lusrmgr.msc – to samo co punkt 4 (Zaawansowane).
  6. Mój komputer >> Prawoklik myszą >> Zarządzaj >> Użytkownicy i grupy lokalne - możemy przeglądać jakie uprawnienia mają poszczególne konta.
  7. Start >> Uruchom >> cmd >> net user / net users – zarządzanie kontami pod konsolą.

Oczywiście żeby móc dowolnie modyfikować ustawienia innych kont trzeba mieć uprawnienia administratora.

Tworzenie dyskietki resetującej hasła użytkownika#

Jakby ktoś nie wiedział jest taka opcja wbudowana w systemie. W Panelu sterowania wybieramy Konta użytkowników, następnie dwuklik na użytkowniku, który nas interesuje. W menu po lewej mamy opcję Zapobiegaj zapominaniu hasła (Win XP) lub Utwórz dysk resetowania hasła (Win 7). Wybierając ją otworzy się kreator, który przeprowadzi nas przez cały proces.

Kilka scenariuszy ataków#

Zebrałem w jedno miejsce najpopularniejsze metody dostępu do komputera wykorzystywane przez nieuprawnione osoby. Niektóre z nich mogą już nie działać (efekt wprowadzenia różnych łatek i aktualizacji).

Chwilowa gościna#

Jeśli mamy dostęp do CD-Romu lub pendrive'a możemy zabootować inny system operacyjny (np. Linux), następnie zgrać pliki SAM oraz SYSTEM, a na końcu usunąć je całkowicie z dysku. Ewentualnie po skopiowaniu zamiast usuwać pliki można skasować hasło lub założyć własne. Dzięki temu możemy swobodnie dostać się do komputera ofiary. Kiedy skończymy zabawę nagrywamy z powrotem pliki na swoje miejsce. Na skutego tego ofiara nie spostrzeże się jakiejkolwiek interwencji z naszej strony. Dobrym pomysłem będzie także wgranie jakiegoś keyloggera, utworzenie ukrytego konta lub innej aplikacji, która umożliwi nam w późniejszym czasie łatwiejsze dostanie do systemu (w przypadku gdy użytkownik zmieni hasło). Metoda pozwala nam ominąć żmudną procedurę wyciągania haseł z hashy.

Nie testowałem, nie wiem jak system zachowa się kasując plik SAM lub wgrywając go z powrotem . Dochodzą mnie słuchy, że czasami nawet po wykasowaniu haseł może dojść do uszkodzenia systemu.

Tworzenie ukrytego konta użytkownika#

Jeśli już jakimś cudem uda nam się niepostrzeżenie złamać hasło do Windowsa (najlepiej nie kasujący tylko go łamiąc) warto wprowadzić sobie furtkę w postaci niewidocznego konta użytkownika z prawami administratora. Oto algorytm postępowania:

  1. Start >> Uruchom >> cmd >> net user nick /add - tworzymy nowe konto o podanym nicku. Takie konto można utworzyć w dowolny inny sposób (więcej).
  2. Start >> Uruchom >> regedit - uruchamiamy rejestr systemowy.
  3. Przechodzimy do gałęzi: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\SpecialAccounts\UserList. Klucze SpecialAccounts oraz UserList nie będą dostępne w Win 7 dlatego należy utworzyć je ręcznie (prawym na Winlogon >> Nowy >> Klucz).
  4. Dla klucza UserList tworzymy wartość typu DWORD (prawym na UserList >> Nowy >> Wartość DWORD 32-bitowa). Nazwę podajemy taką samą jak konto, które chcemy ukryć. W sekcji Value (Wartość) wpisujemy 0 (dziesiętnie) lub 00000000 (szesnastkowo). Wpisując 1 sprawimy, że konto będzie widoczne.

Po tych zabiegach mamy nowiutkie niewidoczne konto. Żeby je wywołać przy uruchamianiu systemu należy wcisnąć Ctrl+Alt+Delete+Delete. Pojawi się okno logowania, w którym podajemy login i hasło (jeśli je wcześniej zadeklarowaliśmy).

Ukryte konto pozostanie niewidoczne nawet przy próbie wywołania opcji Przełącz użytkownika w menu Start.

Dostęp do katalogu Administratora#

Jeśli nie mamy uprawnień administratora, tylko na lokalnym systemie posiadamy konto ograniczonego użytkownika warto sprawdzić czy możemy przeglądać katalogi administratora. Kiedy mamy taką możliwość wystarczy do autostartu administratora wstawić plik wsadowy, za pomocą którego dodamy naszego użytkownika do grupy administratorów. Dzięki temu będziemy mogli zainstalować i uruchomić dowolne programy. Przykład pliku wsadowego:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
net user ghost /add REM utworzenie konta (pomijamy ten krok, przecież już mamy konto)
net localgroup Administratorzy ghost /add REM nadanie kontu uprawnień Administratora
del ghost.bat REM usunięcie pliku, zatarcie śladu

Umieszczenie samego pliku wsadowego w autostarcie spowoduje, że przy starcie systemu dosłownie na ułamek sekundy mignie konsola CMD. Żeby tego uniknąć proponuję zastosować program hideex.exe. W przeciwnym wypadku administrator na pewno szybko zorientuje się, że coś jest nie tak w systemie. Z moich testów wynika, że powłoka i tak będzie widoczna, ale trwa to znacznie krócej i mniej na niej widać, praktycznie nic. Oto przykładowe wywołanie:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
@echo off
hideex.exe nasz_plik.bat
exit

Nie wiem tylko jak sprzęgnąć te pliki, niby można przez kolejnego bata, ale wtedy jest problem z umieszczeniem ich w autostarcie. Może po prostu zrobić nowego bata i podać w nim ścieżki dostępu do hideex.exe oraz plik.bat, które znajdują się w naszych katalogach dostępnych na dysku. Niby to działa, ale nie chce mi usuwać pliku z autostartu po wykonaniu bata, pomimo poprawnej deklaracji "del go.bat". Temat wymaga dalszego zgłębienia, ja tylko podaje drobne wskazówki.

Inny wariant metody polega na wykorzystaniu do tego celu rejestru odpowiedzialnego za uruchamianie aplikacji przy starcie systemu. W tym wypadku faktycznie aplikacja hideex.exe całkowicie ukrywa okno konsoli.

Domyślne hasła#

Wiele specjalistycznego oprogramowania posiada predefiniowane loginy i hasła. Nieodpowiedzialni administratorzy często z nich korzystają, zamiast wprowadzić własną politykę bezpieczeństwa. Najlepszym przykładem będą komputery typu SBSMENIS stosowane w pracowniach informatycznych. Domyślne hasła mogą mieć postać: "zaq12wsx", "zaq1@WSX" lub "zxcvbnm123". Te hasła co podałem to standardowe hasła logowania na administratora domeny SBS. Konto ma uprawnienia jak administrator lokalny. Z domyślnymi wartościami bywa różnie (w zależności od wersji), dlatego warto sprawdzić kilka różnych źródeł (np. SBSMENIS - hack it).

Konto SYSTEM w Windows XP#

W systemie Windows XP istnieje specjalne konto SYSTEM, które wykorzystywane jest przez procesy systemowe. Posiada ono uprawnienia do pełnej kontroli nad systemem operacyjnym. Są one więc dużo większe niż uprawnienia administratora systemu. Bez zainstalowanego SP2 lub SP3 można je było wywoływać z dowolnego konta w następujący sposób:

  1. Start >> Uruchom >> cmd - uruchamiamy konsolę.
  2. Wykonujemy at hh:mm /interactive "cmd.exe" - polecenie użyje aplikacji Harmonogram zadań, aby wywołać okno konsoli konta SYSTEM. Zamiast hh:mm podajemy czas, po którym polecenie zostanie wykonane (np. 19:16). Najlepiej zadeklarować wartość większą o 2-3 minuty od aktualnej godziny. Po chwili zostanie wyświetlone nowe okno konsoli. Pierwotne okno konsoli (to, w którym definiowaliśmy czas) zamykamy.
  3. Z Menadżera zadań zamykamy proces explorer.exe.
  4. Przechodzimy do otwartego okna konsoli i odpalamy w nim polecenie explorer.exe.
  5. Otwieramy menu Start i sprawdzamy na jakim użytkowniku jesteśmy zalogowani.
  6. Robimy z systemem co nam się żywnie podoba.

Metoda dobitnie pokazuje, jak niebezpieczne są błędy występujące w systemie operacyjnym. Stosowana jest przeciwko osobom, które nie instalują łatek i poprawek. Także obrazuje niewiedzę administratorów. Bardziej rozgarnięte osoby zablokują możliwość korzystania z poleceń cmd.exe, shoutdown.exe, a nawet z at.exe.

Swojego czasu była to poważna dziura w systemie. Obecnie (przy zainstalowanych SP2/SP3) próba zastosowania polecenia at.exe na koncie zwykłego użytkownika zwróci informację "Odmowa dostępu". Można sobie samemu sprawdzić w Pomocy systemu Windows - temat dotyczący polecenia at - jest tam wyraźnie napisane, że aby skorzystać z tego polecenia trzeba być członkiem lokalnej grupy Administratorzy.

Na kontach z uprawnieniami administratora dalej uda nam się uruchomić konto SYSTEM, aczkolwiek pożytek z niego będzie żaden.

Niebezpieczne logi#

Jednymi z najlepszych miejsc do szukania haseł są pliki historii powłok użytkowników. Przejrzyj pliki .history i .bash_history w poszukiwaniu dziwnych poleceń. Zdarza się, że administrator przypadkowo wpisze hasło w wierszu poleceń. Takie sytuacje mają miejsce najczęściej wtedy, gdy administrator loguje się do zdalnego systemu lub używa polecenia i popełnia błąd podczas wpisywania polecenia i odruchowo wyprzedza pojawienie się monitu o wprowadzenie hasła. Udało nam się kiedyś odkryć w ten sposób 13-znakowe hasło administratora!

Pseudo blokowanie Uruchom/CMD#

Może się zdarzyć taka sytuacja, że administrator zamiast poblokować niebezpieczne polecenia wyciął ze Startu dostęp do Uruchom, co nie oznacza że polecenie konsolowe jest w jakiś sposób zablokowane. Aby to dokładnie sprawdzić należy odpalać polecenie ze skrótu (np. na Pulpicie utworzyć sobie plik wsadowy i podać ścieżkę dostępu do interesującej nas aplikacji). Jeśli mamy zablokowany dostęp do dysku to można odpalić Painta i kliknąć Otwórz, przez to okienko uzyskamy dostęp do dysku.

Wykonywanie poleceń windowsowego shella wyłącza się w rejestrze:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
HKEY_CURRENT_USER/SOFTWARE/POLICIES/MICROSOFT/WINDOWS/SYSTEM

Jeśli jakiegoś klucza będzie brakować to należy go utworzyć samodzielnie. W kluczu SYSTEM tworzymy wartość typu DWORD, dajemy nazwę "DISABLECMD", która może mieć następujące wartości:

Inny sposób polega na skorzystaniu z Lokalnych zasad grup:

Dla osób zarządzających systemami w sieciach polecam szczegółowe przestudiowanie usługi gpedit.msc. Będzie ona dostępna jedynie w przypadku "bogatszych" wersji Windowsa.

Podstawowa linia obrony#

Mówi się, że najlepszą obroną jest atak. Coś w tym musi być, żeby dobrze się bronić należy poznać techniki napastników. Nie zrobimy tego lepiej nim sami nie zaczniemy atakować, nawet własne komputery. Nic tak nie zabezpiecza przed atakami jak świadomość zagrożeń, które na nas czyhają. Nie wszystko można wyeliminować, ale w większości przypadków wystarczy samo utrudnianie.

Dostęp fizyczny do sprzętu#

Im będzie on mniejszy dla osób nieupoważnionych tym lepiej. Jak łatwo zauważyć, żeby odczytać hasła trzeba najpierw wyciągnąć odpowiednie pliki z systemu. Robienie tego zdalnie (przez Internet) wymaga ogromnej wiedzy, ewentualnie sporych zdolności socjotechnicznych. Wystarczy być wyczulonym na pewne nachalne zachowania a nic złego nie powinno się przytrafić.

Przed bootowaniem innego systemu ciężko się przestrzec, zważywszy na fakt, że z takich urządzeń jak CD-Rom czy USB korzystamy na co dzień. Usuwając je z maszyn sami stracimy pewną funkcjonalność. Założenie hasła na BIOS nie załatwi sprawy, niestety w rzeczywistości łatwo je skasować, a nawet i odczytać. Chyba, że w dobie UEFI coś się zmieniło, ale temat wymaga większego zgłębienia z mojej strony. Oczywiście można wprowadzać różne ograniczenia w systemie, ale dla osób obytych z tematem nie będzie to stanowiło żadnej przeszkody, w chwili kiedy mają bezpośredni kontakt z komputerem.

Jeśli faktycznie zależy nam na bezpieczeństwie danych po prostu należy je zaszyfrować. Nowoczesne procesory mają odpowiednie instrukcje wspomagające szyfrowanie, dlatego dużego spadku wydajnościowego nie odczujemy. Dzięki temu nawet zgubienie laptopa nie będzie aż tak brzemienne w skutkach.

Aktualizacje#

Brzmi to banalnie, ale bez aktualnych wersji programów nigdy nie będzie bezpieczeństwa. Z aktualnym oprogramowaniem także nie ma gwarancji, ale ryzyko będzie o wiele mniejsze. Sporo domorosłych "hakierów" wykorzystuje luki i narzędzia utworzone przez uzdolnione osoby. Wystarczy na bieżąco łatać wszystko co możliwe, a większość tego typu ataków będzie nieaktualna. Tyczy się to wszystkich programów, które posiadamy w systemie. Niestety, nawet jeden plugin w przeglądarce może nam rozłożyć cały system, trzeba być czujnym.

Wyłączanie LanMan#

Koniecznie trzeba to zrobić, a powody tego kroku opisałem obszernie już wcześniej. Oto algorytm postępowania:

  1. Start >> Uruchom >> regedit
  2. Przechodzimy do gałęzi: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
  3. Wartość NoLMHash (w prawym oknie) typu REG_DWORD powinna być równa 1 (typ szesnastkowy).

Takie rozwiązanie spowoduje niezgodność naszego systemu ze wszystkimi systemami Windows z serii 9x i Me, ale w żaden sposób nie wpłynie na zgodność z systemami 2000, XP i późniejszymi. Kiedy już ustawisz tę wartość, upewnij się, że wszyscy użytkownicy zmienili swoje hasła - tylko w ten sposób możemy wymusić obowiązywanie nowych ustawień.

Identyczny efekt da włączenie odpowiedniej opcji w Lokalnych zasadach grupy (gpedit.msc) lub stosowanie haseł dłuższych niż 14 znaków. Więcej szczegółowych informacji można znaleźć na stronie Microsoftu.

W systemach Windows Vista (i wyższych) mechanizm LanMan jest domyślnie wyłączony.

Siła hasła#

Zakładając, że system przechowuje hasła w należyty sposób, najlepszą obroną będzie stosowanie odpowiednio silnych haseł. Przez siłę hasła rozumiemy zarówno jego długość (ilość znaków w haśle) jak i zestaw znaków, z którego składa się hasło. Obydwie wartości determinują liczę wszystkich możliwych kombinacji do sprawdzenia, która wyraża się wzorem (^ - symbol potęgi):

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
liczba znaków w zestawie ^ długość hasła

Dane w poniższej tabelce przedstawiają zależność między jedną a drugą wartością dla kilku wariantów długości hasła i jego potencjalnej złożoności.

Liczba różnych haseł

Rysunek. Liczba różnych haseł

Z bardziej profesjonalnego ujęcia siłę hasła zwykło się określać terminem entropia (stopień losowości i nieuporządkowania), który zawdzięczamy nieżyjącemu już matematykowi Claude Shannonowi. Jednostką entropii jest zwyczajowo bit. Im wyższą ma wartość, tym hasło bezpieczniejsze. Ponieważ - jak wiadomo - "matematyka jest wszędzie," także w naszym przypadku powstało równanie, które może posłużyć do obliczenia entropii hasła:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
h = log2(liczba znaków w zestawie)
h * długość hasła // nasza wartość

Jeżeli przyjmiemy, że na klawiaturze komputera mamy do dyspozycji 94 znaki [h=log2(94)], to entropia jednego znaku wyniesie 6.555. Jeżeli pomnożymy tę wartość przez długość hasła uzyskamy entropię hasła w bitach.

Niestety człowiek, będący często najsłabszym ogniwem w procesie zapewniania bezpieczeństwa informacji, kieruje się zazwyczaj nie bezpieczeństwem, lecz łatwością zapamiętania wybieranego hasła. Przykładowo, mając do wyboru dwa hasła: "pBs3!JK0" oraz "stanowisko" przeciętny użytkownik wybierze to drugie hasło, gdyż jest ono o wiele łatwiejsze do zapamiętania. Ta tendencja do tworzenia haseł z wykorzystaniem popularnych słów zaowocowała powstaniem ataku słownikowego (i jego różnych wariantów).

Hasła tworzone przez użytkowników mają znacznie niższy poziom entropii niż hasła generowane losowo. Szacuje się, że np. 8-znakowe hasło tworzone przez użytkownika może sięgnąć 30 bitów, podczas gdy hasło generowane losowo - 52 bitów, przy założeniu, że wykorzystywany jest alfabet 94-znakowy (klawiatura komputera).

Im silniejsze hasło, tym więcej czasu potrzeba do sprawdzenia wszystkich jego możliwości. Oto teoretyczne wyliczenia dla naszego wcześniejszego zestawu haseł.

Czas przeglądu wszystkich możliwych kombinacji przy 100 tys. prób na sekundę

Rysunek. Czas przeglądu wszystkich możliwych kombinacji przy 100 tys. prób na sekundę

Liczba prób na sekundę będzie silnie uzależniona od posiadanego sprzętu oraz od algorytmu, którym hashe z haseł są generowane (a różnice między poszczególnymi rozwiązaniami potrafią być ogromne). Niezależnie od tych dwóch czynników, silne hasło w obecnych czasach powinno być wystarczające nawet dla najwydajniejszych superkomputerów. Oto kilka podstawowych cech silnego hasła:

Taki narzut sprawia, że tworzenie haseł przez osoby nieobeznane z komputerami może być procesem skomplikowanym. W związku z tym wiele systemów informatycznych podczas wprowadzania przez użytkownika nowego hasła może dokonać weryfikacji słabości tego hasła, kierując się odpowiednimi kryteriami. Będzie to szczególnie popularne na stronach internetowych, gdzie dodatkowo można sprawdzić, czy hasło nie było używane przez użytkownika wcześniej oraz czy nie znajduje się np. na liście popularnych słów. System taki może wymuszać na użytkownikach okresową konieczność zmiany hasła (np. co 30 dni), przyjmując jedynie te, które różnią się od 3-5 wcześniej wykorzystywanych wartości.

Odpowiednia siła hasła zagwarantuje, że nawet w przypadku wycieku danych z hashami (co często ma miejsce na stronach WWW) atakujący będzie miał problem z ich odczytaniem.

Hasła niczym bielizna osobista - śliski temat

Rysunek. Hasła niczym bielizna osobista - śliski temat

Bardzo istotne jest stosowanie różnych haseł w różnych programach/usługach. Wydaje się to trudne do zrealizowania, ale w praktyce wystarczy obmyślić swój własny algorytm tworzenia hasła i problem z głowy. Prosty przykład:

Kolejny, ale łatwiejszy do zapamiętania wariant:

Takich przykładowych technik powstało wiele, można nawet skorzystać ze specjalnych programów ułatwiających generowanie dobrych haseł, np. PWGen.

Koniecznie trzeba zachować ostrożność w przypadku pytań zabezpieczających logowanie lub resetowanie hasła. Stanowią one jedną z najpopularniejszych dróg włamań na konta. Jeśli zostaliśmy poproszeni o zdefiniowanie odpowiedzi dla pytania bezpieczeństwa, zastanówmy się, czy jest ona stuprocentowo bezpieczna. Bezpieczna znaczy w tym przypadku tyle, co znana tylko nam. Jeśli mamy możliwość stworzenia własnego pytania, skorzystajmy z niej. Jeśli jednak musimy odpowiedzieć na bardziej standardowe pytanie takie jak "nazwa pierwszej szkoły" czy "imię pierwszego zwierzęcia domowego" pamiętajmy, że odpowiedzi nie muszą być prawdziwe – wystarczy, że będzie to cokolwiek, co zapamiętamy.

W systemach Windows istnieje odpowiednia usługa regulująca zasady tworzenia haseł (więcej1, więcej2).

Unikanie domyślnych wartości#

W przypadku haseł (np. dla routerów) jest to oczywista oczywistość - nigdy nie powinniśmy stosować domyślnych loginów i haseł. Co ciekawe, tę samą regułę warto zastosować także na innych płaszczyznach. Już tłumaczę na czym to polega.

Przy instalowaniu systemu Windows z marszu tworzone jest konto o nazwie Administrator z uprawnieniami administratora oraz konto Gość (niewidoczne). Konto Administrator jest łakomym kąskiem dla szperaczy, dlatego najlepiej zmienić jego nazwę na naszą własną (od razu ustawić trudne hasło). Konto będzie służyło nam do administracji systemu, czyli instalowania programów oraz ustawiania strategicznych funkcji systemu.

Z kolei konto Gościa można wyłączyć. Następnie tworzymy konto z ograniczonymi uprawnieniami i nadajemy mu nazwę Administrator (hasło ustawiamy jak najdłuższe, jak najtrudniejsze składniowo, możemy je zapomnieć). Konto takie będzie służyło jak wabik, zazwyczaj większość hakerów ostrzy sobie ząbki na konta nazwane jako Administrator i Gość.

Ostatnim etapem jest założenie konta użytkownika z ograniczonymi uprawnieniami. Najczęściej do nazwy używamy jakiegoś imienia lub pseudonimu. Tworzymy hasło niezbyt długie acz trudne. Konto takie służy nam do używania Internetu, grania, oglądania filmów, słuchania muzyki, ogólnie służy do eksploatowania systemu. Oczywiście i na takim koncie istnieje możliwość instalowania programów z uprawnieniami administratora, wystarczy kliknąć na pliku instalacyjnym prawym przyciskiem myszki i wybrać opcję "Uruchom jako administrator". Jak widać obsługa konta z ograniczeniem nie nastręcza większych problemów a znacznie zabezpiecza nas przed osobami trzecimi (np. w chwili wymarszu do ubikacji).

Monitoring i administracja#

Zabezpieczenie systemu nie sprowadza się tylko do jego poprawnej konfiguracji, ale polega także na ciągłym monitorowaniu jego pracy i usuwaniu zauważonych słabych punktów. Szczególną uwagę należy poświecić odpowiedniemu ograniczeniu i monitorowaniu kont użytkowników systemu.

Po pierwsze, każde nie wykorzystywane konto administratora lub usługi systemowej powinno być wyłączone lub usunięte. Każde aktywne konto administratora bądź usługi powinno być chronione zmienionym natychmiast po utworzeniu konta silnym hasłem. W sumie wspomniałem już o tym w poprzednim punkcie.

Po drugie, sporządź listę wszystkich kont użytkowników lub usług wraz z przyznanym im poziomem uprawnień. Dotyczy to również kont umożliwiających zarządzania aktywnym osprzętem sieciowym, takim jak routery, przełączniki czy drukarki sieciowe. Opracuj dokładne procedury dodawania i usuwania kont z listy i regularnie sprawdzaj zgodność stanu faktycznego ze sporządzoną listą.

Oprócz powyższych czynności należy włączyć inspekcję następujących zdarzeń:

  1. Wszystkie operacje przeprowadzane w kontekście zabezpieczeń kont należących do grupy administratorów oraz kont wykorzystywanych do uruchomienia usług systemowych.
  2. Pracę komputerów w nietypowych godzinach, w szczególności logowania na konta użytkowników w nietypowych dla tych użytkowników godzinach. Szczególną uwagę należy zwrócić na:
    • powtarzające się nieudane próby zalogowania na konto danego użytkownika,
    • powtarzające się blokady konta,
    • fakt dodawania nowych kont użytkowników,
    • fakt dodawania nowych kont do grup administratorów lokalnych lub domeny,
    • fakt usuwania istniejących kont użytkowników,
    • rozszerzenie uprawnień użytkowników,
    • zmiany haseł konta przeprowadzane o nietypowych godzinach.
  3. Nagłą zmianę rozmiaru pliku systemowego dziennika zabezpieczeń — jego zwiększenie może świadczyć o zanotowaniu wielokrotnych prób zalogowania lub nadużycia uprawnień zalogowanego użytkownika, jego nieuzasadnione zmniejszenie świadczy o skasowaniu dziennika lub niektórych jego wpisów przez hakera. Analizując informacje zapisane w dzienniku zabezpieczeń, należy zwrócić szczególną uwagę na zmiany w występujących w każdym systemie regularnościach, na przykład użytkownik, który do tej pory logował się wyłącznie na jednym komputerze, w ciągu kilku godzin zalogował się na kilkunastu komputerach.
  4. Nieuzasadnione restarty lub błędy krytyczne systemu. Charakterystyczną cechą systemów Windows jest konieczność restartu, aby wprowadzone do systemu zmiany (np. zmiany uprawnień użytkowników) zaczęły obowiązywać, tak więc wiele wrogich programów automatycznie restartuje system, aby przejąć nad nim kontrolę.
  5. Zmiany czasu zegara systemowego.
  6. Obniżenie wydajności komputera. Symptom świadczący w większości wypadków o zainfekowaniu systemu wirusami, może również wskazywać na wykorzystywanie komputera przez hakera do jego celów, np. w ramach ataku DDOS (Distributed Denial of Service).
  7. Zmiany zapisanych na lokalnych dyskach plików, w tym zmiany rozmiarów lub sum kontrolnych plików systemowych, pojawienie się nowych plików systemowych, nie związanych z aktualizacją systemu (szczególnie plików z ustawionym atrybutem Ukryty) oraz zmiany lokalizacji tych plików. Szczególną uwagę należy zwrócić na odczyt plików przez użytkowników, którzy nie powinni mieć nadanych takich uprawnień.
  8. Zmiany w strukturze rejestru systemowego, w szczególności pojawienie się nowych kluczy i wartości w uruchomieniowych kluczach rejestru.
  9. Uruchomienie nowych usług sieciowych, umożliwiających zdalne kontrolowanie systemu.

Większość powyższych reguł będzie istotna dla administratorów sieci, aczkolwiek zwykli użytkownicy także powinni się z nimi zaznajomić (przynajmniej w części).

Sprzęt i oprogramowanie#

Wiedza teoretyczna została wyskrobana, pora zabrać się za kilka praktyczniejszych aspektów.

Zacznijmy od sprzętu. Łamanie haseł wymaga dużych zasobów obliczeniowych. W zależności od siły hasła, od metody jego utworzenia i przechowywania, a także innych udziwnień (np. sól), najwydajniejsze komputery mogą (a raczej będą) niewystarczające dla naprawdę długich haseł. Jak to wygląda w przypadku chałupniczych możliwości?

Dawniej programy korzystały tylko z jednego procesora, dlatego też mogły sprawdzić niewielką liczbę operacji na sekundę. W późniejszym czasie zaczęto wprowadzać rozwiązania wieloprocesorowe, wielordzeniowe oraz wielowątkowe. Powstały dla nich odpowiednie programy, które mogły wykorzystywać owe nowinki techniczne. Mimo takiego usprawnienia, wciąż przeprowadzanie ataków metodą brute-force trwa bardzo długo.

Obok rozwoju procesorów CPU trwał także dynamiczny rozwój procesorów graficznych GPU. Obecne karty graficzne są tak wydajne, że zaczęto wykorzystywać je nie tylko do przetwarzania obrazu 3D, ale także do obliczeń, które do tej pory wykonywane były przez klasyczne procesory (określa się to mianem GPGPU). Okazuje się, że w kartach graficznych drzemie olbrzymi potencjał, szczególnie przy równoległym wykonywaniu operacji. W niektórych przypadkach GPU jest kilkadziesiąt razy wydajniejszy od CPU. Jest to szczególnie zauważalne w przypadku łamania haseł, dlatego powstało wiele ciekawych programów wykorzystujących karty graficzne firm Nvidia oraz AMD (przykładowo rozwiązania hascat, insidepro czy golubev). Najlepiej przeanalizować poniższe fotki obrazujące uzyskane wydajności w różnych konfiguracjach sprzętowych.

Łamanie haseł za pomocą CPU przy użyciu aplikacji hashcat

Rysunek. Łamanie haseł za pomocą CPU przy użyciu aplikacji hashcat

Łamanie haseł za pomocą GPU przy użyciu aplikacji hashcat

Rysunek. Łamanie haseł za pomocą GPU przy użyciu aplikacji hashcat

Wyniki mówią same za siebie, nawet sześciordzeniowy Phenom II X6 nie ma startu do dwuprocesorowej AMD HD 6990 (dla MD5 mamy rezultat 86,24M c/s vs 7190M c/s). Pod uwagę brana była tylko jedna karta graficzna, co jeśli byłoby ich kilka? Odpowiedzi nie trzeba długo szukać. Co jakiś czas można przeczytać o samodzielnych składakach przeznaczonych specjalnie do łamania haseł (więcej1, więcej2, więcej3, więcej4). W obecnych czasach domowymi sposobami można uzyskać moc obliczeniową, którą jeszcze kilka lat temu dysponowały najwydajniejsze superkomputery (np. Cray X1E).

Łamanie haseł za pomocą wielu kart graficznych (25 procesorów graficznych Radeon HD)

Rysunek. Łamanie haseł za pomocą wielu kart graficznych (25 procesorów graficznych Radeon HD)

Powyższy klaster zbudowany został z 10 kart 7970, 4 dwuprocesorowych 5970, 3 dwuprocesorowych 6990 i jednego akcelerator 5870, które współpracują dzięki opartej na Linuksie platformie Virtual OpenCL (VCL). W testach wydajności zastosowano darmową aplikację oclHashcat-plus. Do rozszyfrowania typowego, 8-znakowego hasła, które składa się z małych i wielkich liter, symboli i cyfr (w sumie 95^8 kombinacji), klaster potrzebuje maksymalnie pięć i pół godziny. Odgadnięcie 9-znakowego hasła zajmuje już ponad 500 godzin, a 10-znakowy ciąg to przeszkoda na ponad pięć i pół roku. Wyniki te dotyczą haseł NTLM (sprawdzanych jest 348 miliardów kombinacji na sekundę). Natomiast słabsze hashe LM pozwalają uzyskać 14 znakowe hasło w przeciągu 6 minut przy prędkości 20 miliardów kombinacji na sekundę. W starciu z powszechnie stosowanymi algorytmami szyfrującymi, wydajność klastra zauważalnie spada. W przypadku haseł zakodowanych przy użyciu MD5 jest to ok. 180 mld kombinacji na sekundę, dla SHA1 wartość wynosi ok. 63 mld, a dla SHA512crypt i bcrypt wyniki to odpowiednio 364 tys. i 71 tys. Rozwiązanie przy pełnym obciążeniu potrzebuje mocy równej siedmiu kilowatom.

Gdy 6,5 miliona haseł (SHA-1) z serwisu Linkedln wyciekło dzięki luce w zabezpieczeniach, Gosney (właściciel powyższego klastra) znajdował się wówczas wśród nielicznego grona ekspertów od bezpieczeństwa, który jako pierwszy dokonał analizy wyłudzonych danych. Wraz ze swoim partnerem po fachu, zrekonstruowali w ten sposób 90% skradzionych haseł. Dysponowali oni wówczas maszyną 4x słabszą od opisywanego rozwiązania.

Mało kto może sobie pozwolić na tego typu "zabawki", ale nie oznacza to, że osoby takie są na straconej pozycji. Najprostszym wyjściem będzie oczywiście skorzystanie z gotowych słowników lub tęczowych tablic. Wystarczy trochę poszperać w Internecie, a znajdziemy naprawdę sporo solidnych zestawów.

Ciekawie wygląda także sprawa usług online. Czasami może być to wygodniejsze niż marnowanie niewielkiej mocy obliczeniowej własnych maszyn. Większość serwisów działa na dwuetapowej zasadzie:

Takie usługi można odpowiednio przyspieszyć. Wystarczy zastosować duży dysk SSD, a cały proces przeszukiwania bazy skraca się nawet do 100x. Przy obecnych cenach dysków SSD opcja warta rozważenia. W zasadzie przeprowadzamy tylko wyszukiwanie (bez zapisu), dlatego też żywotność SDD nie powinna stanowić żadnego problemu. Strach pomyśleć jakby to wyglądało przy zastosowaniu np. OCZ Z-Drive R4. W warunkach domowych można pokusić się nawet o umieszczenie niewielkich tęczowych tablic w RAM dysku.

Jeszcze jednym rozwiązaniem wartym uwagi będą systemy rozproszone. Nie znalazłem takiej usługi online do łamania haseł, ale np. do obliczania tęczowych tablic już tak. Strona wykorzystuje klienta BOINC do rozproszonej pracy z wieloma maszynami. Pobierając i instalując oprogramowanie, można pomóc tworzyć więcej tablic, używając wolnej mocy obliczeniowej naszego procesora. Biorąc pod uwagę fakt, że tablice są darmowe, do ich generacji można dołożyć coś od siebie.

Z serwisami online bywa różnie. Chodzi głównie o ich żywotność, która najczęściej bywa bardzo krótka. Najlepszym pomysłem jest wyszukanie ich dopiero wtedy, kiedy zajdzie taka potrzeba.

Resetowanie hasła w Windows 7#

W przypadku zapomnienia hasła do naszego konta nie potrzeba żadnych zewnętrznych narzędzi - wystarczy płyta instalacyjna Windows 7 (lub bootowalny pendrive z systemem). Postępujemy według następujących kroków:

  1. Wkładamy do napędu płytę z Windows 7 i aktywujemy rozruch z napędu CD/DVD zgodnie z instrukcją obsługi płyty głównej naszego komputera (menu rozruchowe wyświetlimy wciskając F2, F12 lub ESC bezpośrednio po uruchomieniu komputera).

    Bootowanie systemu Windows 7 z CD/DVD

    Rysunek. Bootowanie systemu Windows 7 z CD/DVD

  2. Po załadowaniu instalatora klikamy Dalej >> Napraw komputer

  3. Zaznaczamy pierwszą opcję: Użyj narzędzi odzyskiwania… Wybieramy nasz system operacyjny Windows 7 (zapamiętujemy jego lokalizację) i klikamy Dalej a następnie na Wiersz poleceń.

    Opcje odzyskiwania systemu w Windows 7

    Rysunek. Opcje odzyskiwania systemu w Windows 7

  4. W konsoli wykonujemy kopię zapasową pliku sethc.exe za pomocą polecenia:

    1. L
    2. K
    3. T'
    4. T
    5. A
    6. O
    7. Z'
    8. Z
    9. #
    copy c:\windows\system32\sethc.exe c:\

    i potwierdzamy za pomocą Entera.

  5. W konsoli zastępujemy plik sethc.exe plikiem cmd.exe:

    1. L
    2. K
    3. T'
    4. T
    5. A
    6. O
    7. Z'
    8. Z
    9. #
    copy c:\windows\system32\cmd.exe c:\windows\system32\sethc.exe

    po czym wpisujemy tak i potwierdzamy za pomocą Entera.

  6. Klikamy na Uruchom ponownie. Po restarcie, kiedy pojawi się ekran logowania, wciskamy pięć razy Shift. Pokaże nam się wiersz poleceń, w którym możemy manipulować kontami. Wystarczy teraz zresetować hasło poleceniem:

    1. L
    2. K
    3. T'
    4. T
    5. A
    6. O
    7. Z'
    8. Z
    9. #
    net user Login NoweHasło

    gdzie jako Login wpisujemy nazwę użytkownika, a dla NoweHasło wprowadzamy wartość nowego hasła. Całość potwierdzamy Enterem. Od tej pory możemy już zalogować się do systemu na nasze konto, podając nowe hasło.

    Wywołanie cmd.exe podczas logowania do systemu Windows 7

    Rysunek. Wywołanie cmd.exe podczas logowania do systemu Windows 7

  7. Na koniec z powrotem zamieniamy plik c:\windows\system32\sethc.exe (w którym jest wiersz poleceń) na ten, który jest wykonany jako kopia zapasowa na dysku c:\sethc.exe. Operację można przeprowadzić po zalogowaniu się do systemu.

Oczywiście ścieżki dostępu do pliku będą zależne od miejsca, w którym zainstalowany jest system operacyjny (zazwyczaj będzie to partycja C). W razie czego można posiłkować się kolumną Lokalizacja pojawiającą się w kroku trzecim.

Metodę można wykorzystać przy użyciu dowolnej wersji Linux Live, jeśli ktoś akurat nie ma dostępu do płyty instalacyjnej Windows 7.

Offline Windows Password & Registry Editor#

Chyba najbardziej znane narzędzie do resetowania haseł w systemach Windows (XP, Vista, 7, 8.1, Server 2003/2008/2012). Za jego pomocą możemy zmienić lub zresetować hasło dowolnego użytkownika, włączyć lub wyłączyć dowolne konto w systemie, manipulować rejestrem, a wszystko to możliwe za pomocą bootowalnego dysku CD/DVD lub klucza USB.

Po ściągnięciu programu i odpowiednim wypaleniu postępujemy następująco:

  1. Aktywujemy rozruch z napędu CD/DVD zgodnie z instrukcją obsługi płyty głównej naszego komputera (menu rozruchowe wyświetlimy wciskając F2, F12 lub ESC bezpośrednio po uruchomieniu komputera). Jeśli wszystko zrobiliśmy prawidłowo pojawi się poniższy ekran, który zatwierdzamy Enterem.

    Offline Windows Password & Registry Editor - bootowanie

    Rysunek. Offline Windows Password & Registry Editor - bootowanie

  2. Wybieramy partycję, na której mamy zainstalowany Windows po czym zatwierdzamy Enterem. W moim przypadku będzie ona oznaczona numerem 1:

    Offline Windows Password & Registry Editor - wybór partycji systemowej

    Rysunek. Offline Windows Password & Registry Editor - wybór partycji systemowej

    Jeżeli nie widzimy naszego dysku musimy dodać odpowiedni sterownik.

  3. Jeżeli nie zmienialiśmy ścieżki dostępu do rejestru (Windows\system32\config) naciskamy Enter. Natomiast jeżeli dokonywaliśmy zmian wskazujemy poprawną ścieżkę.

  4. Naszym celem jest wyzerowanie hasła dlatego zatwierdzamy Enterem domyślną opcje (1).

  5. Jeszcze raz potwierdzamy Enterem chęć wyzerowania hasła (1 - Edit user data and passwords).

  6. Wybieramy konto, którego hasło chcemy zresetować. Może się to odbyć poprzez podanie 0x(RID), gdzie RID będzie identyfikatorem konta widocznym z lewej strony. Innym sposobem będzie po prostu wpisanie nazwy użytkownika. W moim przypadku będzie to 0x03e8 lub Arek.

    Offline Windows Password & Registry Editor - wybór użytkownika

    Rysunek. Offline Windows Password & Registry Editor - wybór użytkownika

  7. Wybieramy pierwszą opcję Clear (blank) user password i zatwierdzamy Enterem.

  8. Widzimy satysfakcjonujący nas komunikat Password cleared! W razie czego możemy powtórzyć resetowanie (lub przeprowadzić inne zmiany) na pozostałych kontach.

  9. Wychodzimy z programu klikając kolejno: Shift + 1 zatwierdzając Enterem, następnie wpisując q zatwierdzając Enterem. Potwierdzamy zmiany wciskając y i Enter.

  10. Jeżeli coś poszło nie tak możemy zacząć zabawę od początku. Natomiast jeżeli wszystko przebiegło po naszej myśli wpisujemy n i zatwierdzamy Enterem. Na koniec wciskamy Ctrl + Alt + Del w celu ponownego uruchomienia systemu.

W przypadku obecności szyfrowania EFS wprowadzonego w systemie Windows XP (i późniejszych), po wymuszanym resecie hasła wszystkie szyfrowane dane zostaną bezpowrotnie utracone o ile nie zostanie przywrócone stare hasło loginu.

Hiren's BootCD#

Jest to bardzo popularne narzędzie Live CD (szerszy opis) do diagnostyki i naprawy komputera. Można je instalować na CD/DVD lub kluczu USB. W gąszczu szeregu opcji będzie ta, która odpowiada za zresetowanie hasła. Po ściągnięciu programu i odpowiednim wypaleniu postępujemy następująco:

  1. Aktywujemy rozruch z napędu CD/DVD zgodnie z instrukcją obsługi płyty głównej naszego komputera (menu rozruchowe wyświetlimy wciskając F2, F12 lub ESC bezpośrednio po uruchomieniu komputera). Jeśli wszystko zrobiliśmy prawidłowo pojawi się poniższy ekran, z którego wybieramy Mini Windows XP.

    Hiren's BootCD - uruchomienie Mini Windows XP

    Rysunek. Hiren's BootCD - uruchomienie Mini Windows XP

    Można też bezpośrednio skorzystać z narzędzia Offline NT/2000/XP/Vista/7 Password Changer, które jest identyczne z tym opisanym już wcześniej.

  2. Po załadowaniu systemu klikamy prawym przyciskiem myszki na ikonce konfiguracji (prawy dolny róg), następnie wybieramy Password / Keys >> Windows Login >> NTPWEdit.

    Hiren's BootCD - uruchomienie NTPWEdit

    Rysunek. Hiren's BootCD - uruchomienie NTPWEdit

  3. Wskazujemy na ścieżkę dostępu do pliku SAM, w którym umieszczone są informacje o kontach (domyślnie C:\Windows\System32\config\SAM) i klikamy Re(open).

    Hiren's BootCD - wczytywanie bazy SAM za pomocą NTPWEdit

    Rysunek. Hiren's BootCD - wczytywanie bazy SAM za pomocą NTPWEdit

    Powinniśmy uzyskać listę wszystkich kont dostępnych w systemie. Wystarczy wybrać interesujące konto i kliknąć na Change password. Jeśli chcemy wyzerować hasło nie należy podawać żadnej nowej wartości. W razie czego można również odblokować inne konta. Na koniec klikamy na Save changes w celu zapisania zmian (koniecznie).

  4. Po ponownym uruchomieniu komputera zmiany zostaną wprowadzone.

Aplikacja NTPWEdit jest bardzo skuteczna w procesie zerowania/zmiany hasła. Szczerze mówiąc jest to port graficzny dla programu Offline Windows Password & Registry Editor. Może działać w dowolnym innym środowisku naprawczym, jak WinPE, WinRE, BartPE a nawet ReactOS. Każdy użytkownik (nawet mało doświadczony) bez większego problemu dokona resetowania hasła w systemach Windows 2000, XP, Vista, 7, 8, 10.

PC Login Now! 2.0#

Kolejne darmowe narzędzie do manipulowania kontami i ich hasłami. Działa dla systemów Windows 2000 i wyższych. Po ściągnięciu programu i odpowiednim wypaleniu postępujemy następująco:

  1. Aktywujemy rozruch z napędu CD/DVD zgodnie z instrukcją obsługi płyty głównej naszego komputera (menu rozruchowe wyświetlimy wciskając F2, F12 lub ESC bezpośrednio po uruchomieniu komputera). Jeśli wszystko zrobiliśmy prawidłowo pojawi się ekran z możliwością wyboru trybu bootowania z następującymi opcjami: Normal Boot i Advanced Boot. Wybieramy opcję pierwszą i zatwierdzamy Enterem, ewentualnie czekamy chwilkę, gdyż opcja ta jest domyślna.

    PC Login Now! 2.0 - wybór trybu bootowania

    Rysunek. PC Login Now! 2.0 - wybór trybu bootowania

  2. Po zaabotowaniu systemu klikamy na Next w celu uruchomienia narzędzia. Automatycznie wykryte zostaną systemy Windows zainstalowane na komputerze. Wybieramy ten właściwy i ponownie klikamy na Next.

    PC Login Now! 2.0 - wybór systemu operacyjnego

    Rysunek. PC Login Now! 2.0 - wybór systemu operacyjnego

  3. Powinniśmy uzyskać listę wszystkich kont dostępnych w systemie. Wystarczy wybrać interesujące konto, zaznaczyć opcję password is empty i potwierdzić całość klikając na Next.

    PC Login Now! 2.0 - resetowanie hasła dla konkretnego konta

    Rysunek. PC Login Now! 2.0 - resetowanie hasła dla konkretnego konta

    W razie czego możemy dokonać zmian dla kolejnych kont lub ponownie uruchomić komputer.

Program działa nawet w systemach Windows 7 (dokładniejsza instrukcja). Jedyny problem jaki napotkałem to obsługa myszki. Co prawda mysz działa, ale źle określone zostaje położenie kursora. Żeby cokolwiek zaznaczyć trzeba posiłkować się klawiaturą oraz metodą prób i błędów (klikając) starać się ustalić pozycję wskaźnika myszy. Problem taki zaobserwowałem na wirtualnej maszynie. Możliwe, że na normalnej instalacji przypadłość nie wystąpi.

Kon-Boot#

Jeszcze jeden program rozprawiający się z hasłami (niestety płatny). Opisuję go tylko dlatego, że cały proces przebiega w odmienny sposób. Aplikacja jest bajpasem (uchwytem) dla systemowej autoryzacji w Windowsach. W żaden sposób nie resetuje czy zmienia hasła, działa na zasadzie pominięcia uwierzytelniania poprzez odpowiednią modyfikację jądra systemu w locie. Zmiany przeprowadzane są "wirtualnie" i nie modyfikują w żaden sposób pierwotnego systemu. Aktualne wersje działają dla najbardziej popularnych systemów Windows (XP, Server 2003, Server 2008, Vista, 7, 8) z uwzględnieniem wersji 32/64 bitowych. Co ciekawe, w przypadku Windows 8 działa tylko dla klasycznych biosów (nie UEFI).

Najnowsze wersje programu działają także w trybie UEFI, ale konieczne jest wyłączenie opcji Secure Boot w BIOS-ie.

Po ściągnięciu programu (obraz ISO) należy go odpowiednio wypalić. Nie należy się przejmować późniejszą zawartością płyty, która będzie wyglądała na pustą. Wykorzystany został efekt Floppy Emulation mode. Wystarczy uruchomić komputer i zaabotować tak przygotowaną płytkę. Zalogowani zostaniemy na pierwsze konto z uprawnieniami administratora (bez konieczności podawania hasła). Tzn. tak było w moim przypadku na wirtualnej maszynie. Teoretycznie powinienem mieć możliwość wyboru konta (były dwa administratorskie). Możliwe, że to jakiś drobny błąd, który będzie wyeliminowany w kolejnej wersji.

Kon-Boot - modyfikacja jądra systemu Windows

Rysunek. Kon-Boot - modyfikacja jądra systemu Windows

Po załadowaniu systemu najprawdopodobniej automatycznie zainstalowany zostanie sterownik dla stacji dyskietek. Spowodowane jest to trybem emulacji o którym już wspomniałem.

Bardzo ciekawa alternatywa dla wcześniej opisywanych metod. Prawdę mówiąc zaskoczyła mnie skuteczność całego rozwiązania. Wystarczy mieć możliwość bootowania CD/DVD i konieczność łamania haseł zostaje wyeliminowana. Jedynie nowoczesne płyty główne z obsługą UEFI i włączoną opcją Secure Boot oraz systemy operacyjne je wspierające (np. Windows 8) potrafią się przed takim atakiem obronić.

W paczce instalacyjnej dostępne są odpowiednie narzędzia do przygotowania bootowalnego klucza USB.

Ophcrack#

Jest to najbardziej znane narzędzie do łamania haseł w systemach Windows za pomocą tęczowych tablic. Jego popularność wynika głównie ze względu na bardzo łatwy w użytkowaniu interfejs graficzny. Ponadto autorzy udostępniają darmowe tablice dla systemów Windows XP i Windows Vista / Windows 7. Dla bardziej wymagających osób oferowane są większe zbiory (niestety płatne). Program występuje w wersji instalacyjnej oraz Live CD. Zacznijmy najpierw od pierwszego rozwiązania.

Wersja instalacyjna#

Instalacja na systemie Windows jest banalnie prosta. Wystarczy pobrać plik instalacyjny, uruchomić go i przejść przez kolejne kroki instalacji. Już na tym etapie mamy możliwości wybrania z listy komponentów, dostępnych za darmo tęczowych tablic, które zostaną automatycznie pobrane i zainstalowane w systemie. Gdyby jednak pobranie tablic skończyło się niepowodzeniem, to zawsze mamy możliwość pobrania ich bezpośrednio ze strony producenta.

Od wersji 3.7.0 program nie wymaga instalacji i występuje jedynie w wersji przenośnej (portable).

Ophcrack - główne okno aplikacji

Rysunek. Ophcrack - główne okno aplikacji

Poniżej znajduje się opis poszczególnych opcji programu:

Load

Delete – usuwa wybrane hashe kont. Warto podczas łamania haseł, wykluczyć w ten sposób konto gościa (lub inne konta), aby przyspieszyć cały proces

Save

Tables – instalowanie/ładowanie tęczowych tablic, zlokalizowanych na dowolnym napędzie (zaleca się ładowanie tablic z szybkiego medium, ponieważ ma to wpływ na prędkość procesu)

Crack – rozpoczyna proces łamania haseł. Każdy taki proces pozostawia po sobie plik sesji, który możemy załadować ponownie (Load >> Session file)

Help – prosta instrukcja posługiwania się narzędziem w 5 krokach

W zakładce Preferences można dokonać modyfikacji ustawień istotnych z punktu widzenia szybkości i skuteczności łamania:

Opcji niewiele, ale w zasadzie otrzymujemy wszystko to, co najistotniejsze. Program pozwala na bezpośrednie wydobywanie hashy z kont administratora (albo z katalogu SAM), dlatego inne narzędzia są zbędne.

Krótki test#

Przeprowadźmy prosty test łamania hasła. Całość odbywa się na maszynie wirtualnej z systemem Windows 7 (2 rdzenie / 4 wątki). Załadowana została tablica Vista free (461MB). Niestety, obsługuje ona tylko atak słownikowy (z odmianą hybrydową). Niech profil użytkownika będzie miał hasło telephone123.

Proces łamania hasła przeprowadzamy następująco:

  1. Uruchamiamy program z prawami administratora. Ładujemy lokalny plik SAM za pomocą Load >> Local SAM with samdump2 lub Load >> Local SAM with pwdump6.

    Ophcrack - ładowanie kont użytkowników

    Rysunek. Ophcrack - ładowanie kont użytkowników

  2. Usuwamy profile, których haseł nie chcemy łamać (przyspieszy to cały proces) - wystarczy zaznaczyć dany profil i kliknąć na Delete. Następnie ładujemy tęczowe tablice (jeśli nie zostały jeszcze dodane).

    Ophcrack - instalowanie tęczowych tablic

    Rysunek. Ophcrack - instalowanie tęczowych tablic

  3. W razie czego dostosowujemy ustawienia w Preferences względem możliwości aktualnej maszyny. Odpalamy łamanie poprzez kliknięcie na Crack i czekamy cierpliwie.

    Ophcrack - hasło złamane

    Rysunek. Ophcrack - hasło złamane

Jak widać program szybko uporał się z hasłem (11 s). Dodatkowo w zakładce Statistics możemy przejrzeć szczegółowy raport z łamania, ewentualnie wyświetlić raport graficzny (Display graphs). Co prawda tęczowe tablice były niewielkie, ale dla celów testowych wystarczające. W razie czego warto poszukać większych gotowych baz zgodnych z Ophcrackiem. Sama aplikacja nieźle się skaluje, wszystkie 4 wątki procesora były zajęte na 100%.

Wersja LiveCD#

W przypadku wersji bezinstalacyjnej mamy trzy możliwości do wyboru:

Różnią się one tylko i wyłącznie dodaniem (lub nie) konkretnych tęczowych tablic. Pobrałem wersję bez tablic, wypaliłem, zabootowałem system (opcja Ophcrack Graphic mode). Moim oczom ukazała się kolejna wersja Linuxa Live - SliTaz.

Ophcrack Live CD - załadowanie Linuxa SliTaz

Rysunek. Ophcrack Live CD - załadowanie Linuxa SliTaz

Bez zintegrowanych tęczowych tablic powita nas oczywiście uroczy komunikat Warning: No tables found. Tablice, jak i system Windows, były na osobnej (jednej) partycji. Niestety Linux sam jej nie wykrył. Próbowałem wiele sposobów na jej wyszukanie i podmontowanie, ale poległem z kretesem, mimo sporych chęci z mojej strony. Może problemem jest wirtualna maszyna, a może moja niewielka (czyt. żadna) wiedza na temat pingwinów. Nic dziwnego, że Linuksy dalej pozostają w niszy, skoro z tak prostą czynnością jest tyle zachodu. Na tym etapie kończę przygodę z wersją Live.

PwDump#

Aplikacja wyciąga hashe z lokalnych systemów Windows pod warunkiem, że jesteśmy zalogowani na koncie z uprawnieniami administratora. Jeśli pracujemy na profilu z ograniczeniami niczego nie zwojujemy. Na przestrzeni lat powstało wiele różnych wersji pod konkretne systemy operacyjne (dokładny wykaz).

Obecnie (od Windowsa XP do 7) mamy dwie działające możliwości w postaci PwDump6 oraz PwDump7. Zacznijmy najpierw od wersji 6. Po ściągnięciu i wypakowaniu paczki należy koniecznie uruchomić konsolę z uprawnieniami administratora (nawet jeśli znajdujemy się na koncie administratora). Z poziomu konsoli nawigujemy do katalogu programu i wywołujemy jedno z poleceń:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
pwdump localhost // systemy 32-bitowe
pwdump -x localhost // systemy 64-bitowe

pwdump localhost > hasla.txt // eksport do pliku dla systemów 32-bitowych
pwdump -x localhost > hasla.txt // eksport do pliku dla systemów 64-bitowych

Dla nowszej wersji PwDump7 postępujemy podobnie. Ściągamy i wypakowujemy paczkę. Uruchamiamy konsolę z uprawnieniami administratora (nawet jeśli znajdujemy się na koncie administratora). Z poziomu konsoli nawigujemy do katalogu programu i wywołujemy jedno polecenie:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
pwdump7

W oknie konsoli otrzymujemy wszystkie dane. Należy je skopiować i zapisać do pliku. Niestety, z tego co widzę, wersja ta wyciąga błędne hashe (różnią się od PwDump6) w przypadku mojej testowej wersji Windows 7 64-bit. Dla Windowsa XP nie było problemów. Domniemam, że to właśnie tutaj jest błąd, gdyż dla PwDump6 i narzędzia Ophrack wartości są identyczne.

Program opisuję nie bez powodu. Była to jedna z pierwszych tego typu aplikacji, dlatego utarło się w późniejszym czasie pojęcie formatu PWDUMP. Jest to nic innego, jak sposób zapisu poszczególnych danych z profilów w pliku tekstowym. Ma on następującą postać:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<User name>:<User ID>:<LM Hash>:<NT Hash>:::

Przykłady:

Administrator:500:NO PASSWORD*********************:NO PASSWORD*********************:::
Arek:1000:NO PASSWORD*********************:1F04D5C4237578F55F15DBD6F091FF7A:::
Gość:501:NO PASSWORD*********************:NO PASSWORD*********************:::
test:1001:NO PASSWORD*********************:0CB6948805F797BF2A82807973B89537:::

Wiele rozbudowanych programów pozwala na bezpośredni import danych w takim formacie (np. Ophcrack czy SAMInside).

FgDump#

Program jest lekką modyfikacją PwDumpa6. Można go uruchamiać bezpośrednio z pliku fgdump.exe (koniecznie poprzez Uruchom jako administrator). Do prawidłowego działania wymagana jest dodatkowo biblioteka libeay32.dll. Jeśli nie będzie jej w paczce programu to można ją znaleźć w aplikacji PwDump7. Po uruchomieniu wygenerowanych zostanie kilka plików. Dane kont zapisane zostaną w 127.0.0.1.pwdump. Można go otworzyć dowolnym edytorem tekstowym. Tutaj także wystąpiło u mnie błędne odczytanie jednego hasha (identycznie jak w opisywanym wcześniej PwDump7 dla systemu Windows 7 64-bit).

Bkreg/Bkhive/SAMDump2#

O tym zestawie napisałem już pare słów przy okazji omawiania SysKey'a. Zacznijmy od Bkreg, który na koncie administratora pobiera klucz SysKey'a (tzw. bootkey) bezpośrednio z rejestru systemowego. Klucz przyda się do rozszyfrowania pliku SAM. Z poziomu konsoli nawigujemy do katalogu programu i wywołujemy jedno polecenie:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
bkreg keyfile

Klucz pojawi się w konsoli a także zostanie wyeksportowany do pliku keyfile w postaci HEX - dlatego nie ma się co przejmować "krzaczorami". Program raczej zbędny, ponieważ żeby dobrać się do pliku SAM trzeba zabootować inny system operacyjny. Skoro przeprowadzamy taką czynność najlepiej od razu skopiować obydwa pliki, czyli SAM oraz SYSTEM, a potem na spokojnie rozszyfrować na innym komputerze.

Do wyciągnięcia klucza z pliku SYSTEM posłuży nam właśnie program Bkhive. Z poziomu konsoli nawigujemy do katalogu programu i wywołujemy jedno polecenie:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
bkhive system key.txt

Oczywiście program jak i plik SYSTEM powinny znajdować się w tej samej lokalizacji. Jeśli nie, należy podać odpowiednie ścieżki. Tutaj klucz także zapisany zostanie do pliku tekstowego w postaci HEX.

Mając klucz SysKey'a oraz plik SAM można przeprowadzić proces deszyfracji za pomocą programu SAMDump2. Z poziomu konsoli nawigujemy do katalogu programu i wywołujemy polecenie:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
samdump2 sam key.txt > hashes.txt

W oknie konsoli uzyskamy nazwy kont oraz hashe, które dodatkowo zostaną wyeksportowane do pliku tekstowego. Dzięki operowaniu na wyciągniętych wcześniej plikach, cały proces można przeprowadzić na koncie o dowolnych uprawnieniach. Bardzo wygodna metoda, zważywszy na fakt, że programy bezpośrednio wyciągające dane na kontach administratorów często przestają działać.

Identyczną funkcjonalność jak Bkhive i SAMDump2 oferują programy GetSyskey oraz GetHashes firmy InsidePro.

Podsumowanie#

Łamanie haseł jest pomocną umiejętnością dla kogoś, kto próbuje się włamać do systemu i dlatego właśnie koniecznością jest, aby administratorzy systemu rozumieli sposób, w jaki hasła są przechowywane, kradzione i łamane. Ponieważ potencjalni intruzi szperają i dłubią w systemach, ślinka im do ust napłynie na sam widok hasha LM, a ich cel będzie w połowie zdobyty, jeśli użytkownicy korzystają z prostych haseł. Pamiętaj, że wiedza to połowa sukcesu, więc jeśli przeczytałeś ten artykuł i niczego w tej kwestii nie zrobisz, to znajdziesz się zaledwie w połowie drogi. Korzystanie z przedstawionych tutaj technik obrony może pomóc zniechęcić napastników do atakowania haseł Twoich systemów.

Programów do rozszyfrowywania hashy powstało bardzo wiele. Opisałem tylko kilka najbardziej przydatnych i najpopularniejszych w przypadku systemów Windows. Należy mieć na uwadze, że jest to dopiero wierzchołek góry lodowej. Hasła mamy także w plikach Worda, PDF, pakerach, komunikatorach, sieciach Wi-Fi i Lan, bazach danych itd. Do każdej z tych grup powstały dedykowane aplikacje umożliwiające łamanie haseł. W razie konieczności należy samodzielnie przeprowadzić research za pomocą Google.

Dodatkowe informacje#

W celu poszerzenia (weryfikacji) wiedzy można sięgnąć do ogólnodostępnych zasobów WWW, z których sam korzystałem:

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Łamanie haseł w Windows (H1) Uwierzytelnianie (H2) Najpopularniejsze sposoby omijania haseł (H2) Metody łamania haseł przez programy (H2) Brute-force attack (H3) Mask attack (H3) Dictionary attack / Wordlist attack (H3) Hybrid attack (H3) Combinator Attack (H3) Permutation attack (H3) Toggle-case attack (H3) Inne techniki (H3) Rainbow tables (H3) Funkcja redukująca (reduction function) (H4) Wyliczanie wartości dla tęczowej tablicy (H4) Kompresja tęczowej tablicy (H4) Wyszukiwanie w tęczowej tablicy (H4) Zysk czasowy i objętościowy (H4) Wady tęczowych tablic (H4) Plik z hasłami w systemach Windows (SAM i SYSTEM) (H2) Windows 95/98/Me (H3) Winodws NT/2k/XP/Server 2003 (rodzina NT – New Technology) (H3) Wyciąganie plików z hasłami (H3) Więcej szczegółowych informacji (H3) LanMan (H4) NTLM (H4) SysKey (H4) Zarządzanie kontami i hasłami w systemach Windows (H2) Tworzenie dyskietki resetującej hasła użytkownika (H3) Kilka scenariuszy ataków (H3) Chwilowa gościna (H4) Tworzenie ukrytego konta użytkownika (H4) Dostęp do katalogu Administratora (H4) Domyślne hasła (H4) Konto SYSTEM w Windows XP (H4) Niebezpieczne logi (H4) Pseudo blokowanie Uruchom/CMD (H4) Podstawowa linia obrony (H3) Dostęp fizyczny do sprzętu (H4) Aktualizacje (H4) Wyłączanie LanMan (H4) Siła hasła (H4) Unikanie domyślnych wartości (H4) Monitoring i administracja (H4) Sprzęt i oprogramowanie (H2) Resetowanie hasła w Windows 7 (H3) Offline Windows Password & Registry Editor (H3) Hiren's BootCD (H3) PC Login Now! 2.0 (H3) Kon-Boot (H3) Ophcrack (H3) Wersja instalacyjna (H4) Krótki test (H4) Wersja LiveCD (H4) PwDump (H3) FgDump (H3) Bkreg/Bkhive/SAMDump2 (H3) Podsumowanie (H2) Dodatkowe informacje (H2)