NTLM, cz. I     NTLM

NTLM, cz. II Udostępnij na: Facebook

Autor: Marcin Szeliga

Opublikowano: 4 maja 2004

Zawartość strony
Streszczenie  Streszczenie
Algorytmy szyfrowania  Algorytmy szyfrowania
Hasła LM i NTLM  Hasła LM i NTLM
Przechowywanie haseł  Przechowywanie haseł
Przesyłanie haseł  Przesyłanie haseł
Zasady tworzenia poprawnych haseł  Zasady tworzenia poprawnych haseł
Konfiguracja protokołów uwierzytelniania  Konfiguracja protokołów uwierzytelniania

Streszczenie

Przed przeczytaniem tego artykułu zachęcamy do zapoznania się z jego pierwszą częścią.

Siódma z dziesięciu niezmiennych reguł bezpieczeństwa opracowanych przez kierownika Microsoft Security Response Center, Scotta Culpa, głosi „Zaszyfrowane dane są co najwyżej tak bezpieczne jak klucz deszyfrujący”. Innymi słowy, bezpieczeństwo każdego szyfrogramu zależy nie tylko od jakości algorytmu szyfrowania (głownie liczby cykli szyfrowania) ale również od rozmiaru i typu klucza szyfrującego. W przypadku protokołu LM poziom bezpieczeństwa oferowany przez algorytm DES został wielokrotnie obniżony poprzez dobranie krótkich i mało zróżnicowanych kluczy.

 Do początku strony Do początku strony

Algorytmy szyfrowania

Zanim poznamy sposób uwierzytelniania użytkowników lub komputerów za pomocą protokołu NTLM powinniśmy zapoznać się z wykorzystywanymi w tym procesie algorytmami szyfrowania.

DES

Opracowany w latach 70. w laboratoriach firmy IBM algorytm DES (ang. Data Encryption Standard) szyfruje 64 bitowe bloki danych (odpowiadające 8 literom ASCII z dodanym bitem parzystości) za pomocą klucza o długości 56 bitów. Wynikiem działania algorytmu jest blok 64 bitów szyfrogramu.

Algorytm DES:

  • należy do grupy jawnych (ogólnie znanych) algorytmów,
  • jest symetryczny - do szyfrowania i deszyfrowania wykorzystywany jest ten sam klucz,
  • do szyfrowania i deszyfrowania wykorzystuje kombinacje dwóch podstawowych technik kryptograficznych: mieszania i rozpraszania,
  • wykonuje wyłącznie operacje logiczne na liczbach nie dłuższych niż 64 bitowe.

Działanie algorytmu polega na 16 krotnym powtórzeniu operacji podstawienia i permutacji z użyciem klucza. Taka pojedyncza kombinacja nazywana jest rundą. W trakcie kolejnych rund powtarzane są te same obliczenia przeprowadzane na wynikach poprzedniej rundy z użyciem specjalnego klucza rundy Ki. Dodatkowo, przed pierwszą i po ostatniej rundzie przeprowadzana jest permutacja bitów (rys. 1).

Rysunek 1. Algorytm DES

Rysunek 1. Algorytm DES

Szyfrowanie danych przebiega następująco:

  1. Po przeprowadzanie początkowej permutacji 64 bitowy blok tekstu jawnego jest dzielony na lewą i prawą połowę.

  2. Na otrzymanych 32 bitowych blokach 16-krotnie wykonywana jest funkcja f w ramach której dane są łączone z kolejnymi kluczami rundy:

    • w każdej rundzie następuje przesunięcie bitów klucza i wybranie 48 bitowego klucza rundy,
    • prawa połowa bloku danych wejściowych jest, poprzez permutację z rozszerzeniem, uzupełniana do długości 48 bitów, a następnie łączona za pomocą bitowej sumy modulo 2 z 48 bitami poddanego permutacji klucza rundy,
    • dokonywane jest podstawienie nowego 32 bitowego bloku danych,
    • kolejna permutacja kończy daną rundę algorytmu, a otrzymany blok danych jest łączony, poprzez obliczenie bitowej sumy modulo 2, z lewą połową w wyniku czego otrzymujemy kolejną prawą połowę bloku (poprzednia prawa połowa staje się nową lewą połową).
  3. Po 16 rundzie lewa i prawa połowa bloku są łączone i na otrzymanym bloku danych przeprowadzana jest, będąca odwrotnością permutacji początkowej, permutacja końcowa.

Słabym punktem algorytmu DES jest niewielka długość wykorzystywanego do szyfrowania i deszyfrowania klucza — sprawdzenie wszystkich 72 057 594 037 927 936 (256) kombinacji nie jest już zadaniem przekraczającym możliwości współczesnych komputerów. Udowodniły to wyniki regularnie przeprowadzanego przez firmę RSA DSI konkursu polegającego na złamaniu szyfrogramu metodą pełnego przeglądu (poprzez sprawdzanie wszystkich możliwych kluczy):

  • rok 1997 - odczytanie szyfrogramu zajęło 96 dni,
  • rok 1998 - odczytanie szyfrogramu komputerom sieci Distributed.Net zajęło 41 dni, a komputery sieci Electronic Frontier Foundation złamały inny szyfrogram w ciągu 56 godzin,
  • rok 1999 - połączona moc obliczeniowa pozwoliła komputerom sieci Distributed.Net oraz Electronic Frontier Foundation sprawdzać 245 bilionów kluczy na sekundę i złamać szyfrogram w czasie 22 godzin.

MD 4

Jednokierunkowe funkcje mieszania (skrótu) są przekształceniem, które na podstawie bloku danych o dowolnej długości (nazywanego wiadomością) generuje unikalną i charakterystyczną wartość (sygnaturę nazywaną również „odciskiem palca”).

Podstawowe cechy funkcji mieszania to:

  • wrażliwość na zmiany w oryginalnym tekście (jeden zmieniony bit wiadomości powinien spowodować zmianę wszystkich bitów sygnatury),
  • małe prawdopodobieństwo kolizji — wyliczenia dla dwóch różnych wiadomości identycznych sygnatur — stosunkowo duże prawdopodobieństwo wystąpienia kolizji jest słabym punktem obu algorytmów MD,
  • nieodwracalność (niemożliwość odtworzenia wiadomości na podstawie znanej sygnatury).

Opracowana przez firmę RSA Data Security funkcja MD4 zwraca 128 bitową sygnaturę wiadomości o dowolnej długości.

Wyliczanie sygnatury przebiega następująco:

  1. Do wiadomości zostaje dodany ustawiony bit (bit o wartości 1) i tyle zer, żeby długość wiadomości odpowiadała 448 modulo 512 (dodane zostanie co najwyżej 511 nieustawionych bitów).

  2. Do wiadomości zostaje dodana 64 bitowa liczba b określająca długość oryginalnej wiadomości (jeżeli długość oryginalnej wiadomości przekraczała 2 305 843 009 213 693 952 bajtów, dodane zostaną jedynie 64 młodsze bity liczby b).

  3. Otrzymana wiadomości (o wielkości będącej wielokrotnością 512 bitów) jest dzielona na cztero bajtowe (32 bitowe) słowa.

  4. Do wyliczenia sygnatury wykorzystywane są cztery 32 bitowe bufory A,B,C i D i trzy funkcje wywoływane z trzema 32 bitowymi argumentami, zwracające jedno 32 bitowe słowo:

    • F(X,Y,Z) = (X AND Y) OR (NOT X AND Z) ‘jeżeli X to Y w przeciwnym razie Z
    • G(X,Y,Z) = (X AND Y) OR (X AND Z) OR (Y AND Z) ‘jeżeli co najmniej dwa z trzech bitów wejściowych są ustawione wynikiem będzie 1, w przeciwnym razie funkcja zwraca 0
    • H(X,Y,Z) = X XOR Y XOR Z ‘alternatywa wykluczająca zwracająca 0 dla takiej samej liczby danych wejściowych co 1.
  5. Do poszczególnych słów wiadomości zostają dodane wyliczone w poszczególnych rundach wartości (X oznacza kopię słowa, a L<<s przesunięcie w lewo liczby L o s bitów):

    • runda 1 — A = (A + F(B,C,D) + X[k]) << s wywołana 16 razy z następującymi argumentami:
      [ABCD 0 3] [DABC 1 7] [CDAB 2 11] [BCDA 3 19]
      [ABCD 4 3] [DABC 5 7] [CDAB 6 11] [BCDA 7 19]
      [ABCD 8 3] [DABC 9 7] [CDAB 10 11] [BCDA 11 19]
      [ABCD 12 3] [DABC 13 7] [CDAB 14 11] [BCDA 15 19],
    • runda 2 — A = (A + G(B,C,D) + X[k] + 5A827999) << s wywołana 16 razy z następującymi argumentami (stała 5A827999 reprezentuje zapisany w postaci liczby szesnastkowej pierwiastek kwadratowy liczby 2):
      [ABCD 0 3] [DABC 4 5] [CDAB 8 9] [BCDA 12 13]
      [ABCD 1 3] [DABC 5 5] [CDAB 9 9] [BCDA 13 13]
      [ABCD 2 3] [DABC 6 5] [CDAB 10 9] [BCDA 14 13]
      [ABCD 3 3] [DABC 7 5] [CDAB 11 9] [BCDA 15 13],
    • runda 3 — A = (A + H(B,C,D) + X[k] + 6ED9EBA1) << s wywołana 16 razy z następującymi argumentami (stała 6ED9EBA1 reprezentuje zapisany w postaci liczby szesnastkowej pierwiastek kwadratowy liczby 3):
      [ABCD 0 3] [DABC 8 9] [CDAB 4 11] [BCDA 12 15]
      [ABCD 2 3] [DABC 10 9] [CDAB 6 11] [BCDA 14 15]
      [ABCD 1 3] [DABC 9 9] [CDAB 5 11] [BCDA 13 15]
      [ABCD 3 3] [DABC 11 9] [CDAB 7 11] [BCDA 15 15]
  6. Sygnaturą wiadomości są otrzymane wartości słów A,B,C i D; najmniej znaczące (najmłodsze) bajty sygnatury odpowiadają bajtom słowa A, najstarsze — słowa D.

MD 5

Opracowana przez tą samą firmę funkcja MD5 jest nieco wolniejszą ale bezpieczniejszą wersją funkcji MD4. Funkcja MD5 również zwraca 128 bitową sygnaturę wiadomości o dowolnej długości.

Początkowe fazy wyliczania sygnatury są identyczne z algorytmem MD4:

  1. Do wiadomości zostaje dodany ustawiony bit (bit o wartości 1) i tyle zer, żeby długość wiadomości odpowiadała 448 modulo 512 (dodanych zostanie co najwyżej 511 nieustawionych bitów).

  2. Do otrzymanej wiadomości zostaje dodana 64 bitowa liczba b określająca długość oryginalnej wiadomości (jeżeli długość oryginalnej wiadomości przekraczała 2 305 843 009 213 693 952 bajty dodane zostaną jedynie 64 młodsze bity liczby b).

  3. Otrzymana wiadomości (o wielkości będącej wielokrotnością 512 bitów) jest dzielona na 4 bajtowe (32 bitowe) słowa.

  4. Do wyliczenia sygnatury wykorzystywane są cztery 32 bitowe bufory A,B,C i D; 64 elementowa tablica T zawierającą wartości bezwzględne całkowitej części iloczynu sinusa wyrażonej w radianach liczby i stałej 4 294 967 296; oraz cztery funkcje wywoływane z trzema 32 bitowymi argumentami i zwracające jedno 32 bitowe słowo:

    • F(X,Y,Z) = (X AND Y) OR (NOT X AND Z) ‘jeżeli X to Y w przeciwnym razie Z
    • G(X,Y,Z) = (X AND Z) OR (Y AND NOT Z) ‘jeżeli ustawiony jest bit X i przynajmniej jeden z pozostałych bitów wynikiem funkcji będzie 1, w przeciwnym razie funkcja zwraca 0. Zmieniona funkcja G generuje mniej symetryczne wyniki niż jej odpowiednik wykorzystany w algorytmie MD4
    • H(X,Y,Z) = X XOR Y XOR Z ‘alternatywa wykluczająca zwracająca 0 dla takiej samej liczby danych wejściowych co 1
    • I(X,Y,Z) = Y XOR (X OR NOT Z) ‘funkcja zwraca 0 dla takiej samej liczby danych wejściowych co 1.
  5. Do poszczególnych słów wiadomości zostają dodane wyliczone w poszczególnych rundach wartości (X oznacza kopię słowa, a L<<s przesunięcie w lewo liczby L o s bitów):

    • runda 1 — A = B + ((A + F(B,C,D) + X[k] + T[i]) << s) wywołana 16 razy z następującymi argumentami:
      [ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
      [ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
      [ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
      [ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]
    • runda 2 — A = B + ((A + G(B,C,D) + X[k] + T[i]) << s) wywołana 16 razy z następującymi argumentami:
      [ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
      [ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
      [ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
      [ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
    • runda 3 — A = B + ((A + H(B,C,D) + X[k] + T[i]) << s) wywołana 16 razy z następującymi argumentami:
      [ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
      [ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
      [ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
      [ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
    • runda 4 — A = B + ((A + I(B,C,D) + X[k] + T[i]) << s) wywołana 16 razy z następującymi argumentami:
      [ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
      [ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
      [ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
      [ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
  6. Sygnaturą wiadomości są otrzymane wartości słów A,B,C i D; najmniej znaczące (najmłodsze) bajty sygnatury odpowiadają bajtom słowa A, najstarsze — słowa D.

 Do początku strony Do początku strony

Hasła LM i NTLM

Słabość (podatność na próby kryptoanalizy) haseł LM i NTLM wynika z następujących powodów:

  • Hasła są ucinane do pierwszych 14 znaków.
  • Hasła krótsze niż 14 znakowe są uzupełniane spacjami do długości 14 znaków.
  • Litery w haśle zamieniane są na wielkie (nie dotyczy haseł NTLM).
  • Hasła są przechowywane w dwóch siedmioznakowych łańcuchach znaków.
  • Identyczne hasła użytkownika dają w wyniku zawsze takie sama hasła LM i NTLM. Na przykład, hasło użytkownika „TajneHasło” zawsze zostanie zapisane jak hasło LM —04AF64DA0E316E34EDF23E1CD2453F35 i NTLM — 3091CC9D08BB6B9670C7FD67FAD8F0BC.

Taki sposób tworzenia haseł oznacza, że ich złamanie sprowadza się do odgadnięcia dwóch, składających się z wielkich liter siedmioznakowych haseł. Ponieważ liczba operacji wymaganych do złamania hasła metodą pełnego przeglądu wzrasta geometrycznie wraz z jego długością, każdy łańcuch siedmioznakowy jest przynajmniej o rząd wielkości łatwiejszy do złamania niż pojedynczy łańcuch czternastoznakowy (czyli przy założeniu 27 różnych znaków haseł LM należy sprawdzić jedynie 27^7 + 27^7 zamiast 27^14 możliwości). Dodatkowo dopełnianie każdego łańcucha spacjami i wyeliminowanie z niego małych liter zdecydowanie upraszcza atak.

 Do początku strony Do początku strony

Przechowywanie haseł

W domyślnie skonfigurowanych systemach NT, 2000 oraz XP hasła LM przechowywane są w pliku SAM oraz w chronionym obszarze rejestru systemowego (w przypadku kontrolera domeny hasła LM przechowywane są w bazie AD jako fragment klucza użytkownika).

Znajdujący się w folderze %SystemRoot%\System32\Config plik SAM jest dodatkowo w całości szyfrowany za pomocą Narzędzia klucza systemowego (Syskey).

Szyfrowanie pliku SAM w przypadku systemu Windows NT 4 wymaga zainstalowania poprawki SP 4 lub późniejszej i uruchomienia programu SYSKEY.

Program ten może działać w trzech trybach:

  1. Przechowaj klucz uruchomienia lokalnie (tryb domyślny) — Kluczem systemowym będzie wygenerowany przez komputer losowy klucz, którego zaszyfrowana odwracalnie wersja będzie przechowywana na lokalnym komputerze.
  2. Przechowaj klucz uruchomienia na dyskietce — Kluczem systemowym będzie wygenerowany przez komputer losowy i zapisany na dyskietce klucz. Do uruchomienia systemu niezbędna będzie dyskietka zawierająca ten klucz.
  3. Uruchamianie z hasłem — Kluczem systemowym będzie wygenerowany przez komputer losowy klucz, którego zaszyfrowana wersja będzie przechowywana na komputerze lokalnym. Klucz będzie dodatkowo chroniony nie zapisywanym na lokalnym komputerze hasłem. W trakcie uruchamiania systemu użytkownik będzie musiał podać to hasło.

Techniki odczytania haseł

Zdobycie przez nieupoważnioną osobę hasła pozwoli jej na przeprowadzenie jednego z najtrudniejszych do wykrycia ataków — udane zdarzenie logowania użytkownika nie zostanie odnotowane przez system wykrywania włamań, a nawet jeżeli włączona została inspekcja takich zdarzeń, informacja o udanym zalogowaniu użytkownika do systemu prawdopodobnie nie zwróci uwagi administratora.

Uruchomienie innego niż domyślny systemu operacyjnego

Nawet najlepszy system operacyjnych chroni dane dopiero od momentu jego włączenia — wykorzystując tę trywialną prawdę, możemy skutecznie zaatakować każdy komputer klasy PC, do którego mamy fizyczny dostęp. Wystarczy zmienić sekwencję startową w ustawieniach BIOS-u i uruchomić komputer z przygotowanej dyskietki albo płyty CD.

Przygotowany nośnik może np. zawierać pliki niezbędne do uruchomienia systemu DOS oraz jeden z wielu dostępnych programów pozwalających odczytywać z poziomu tego systemu dyski sformatowane w systemie NTFS — pozowali on nam na skopiowanie wszystkich (w tym pliku SAM) plików znajdujących się na dyskach twardych komputera. Możemy też np. podmienić automatycznie uruchamiany po pewnym czasie wyświetlania ekranu logowania i działający w kontekście konta systemowego plik Logon.scr na np. plik cmd.exe. W efekcie po ponownym uruchomieniu systemu wystarczy chwilę poczekać, aby wyświetlony został działający z uprawnieniami konta systemowego wiersz polecenia.

Możliwe jest również uruchomienie konsoli odzyskiwania systemu Windows 2000 na komputerze z domyślną instalacją systemu Windows XP. W takim przypadku użytkownik nie zostanie poproszony o podanie hasła administratora i automatycznie uzyskuje nieograniczony dostęp do plików systemowych.

Możemy również skorzystać z programu który umożliwia modyfikowanie plików rejestru systemowego, w tym pliku SAM, a więc umożliwia np. zmianę hasła dowolnego użytkownika systemu Windows NT/2000/XP. Autorem takiego programu jest Petter Nordahl-Hagen, a ponieważ program ten pełni również funkcje dysku startowego do zdobycia z jego pomocą nieograniczonego dostępu do komputera wystarczy kilka minut.

Uruchomienie domyślnego systemu operacyjnego

Plik SAM jest w czasie normalnej pracy zablokowany przez system operacyjny i może zostać skopiowany jedynie, gdy komputer zostanie uruchomiony z innym niż domyślnym systemem. Jeżeli jednak posiadamy uprawniania administratora komputera możemy odczytać zawartość chronionego obszaru pamięci operacyjnej w której przechowywane są m.in. nazwy i hasła użytkowników. Jednym z najpopularniejszych programów tego typu są kolejne wersje programu PwDump (trzecia wersja pozwala użytkownikom mającym uprawnienia administratora na automatyczne nawiązanie sesji z wybranym komputerem i odczytanie informacji o użytkownikach zdalnego systemu). Zdobyty plik z hasłami zostanie następnie rozszyfrowany za pomocą jednego z wielu programów (zadanie to realizują zarówno programy komercyjne np. L0phtcrack jak i darmowe, np. John the Ripper) deszyfrujących hasła LM.

Zabezpieczenie systemu

Najskuteczniejszym zabezpieczeniem przed zdobyciem haseł LM jest wyłączenie ich generowania i przechowywania w systemie. Wyłączenie przechowywania tych haseł jest możliwe w systemach Windows 2000 i nowszych.

W systemie Windows 2000 z zainstalowanym dodatkiem Service Pack 2 lub późniejszym należy utworzyć klucz rejestru HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA\NoLMHash.

Wyłączenie przechowywania haseł LM na kontrolerze domeny spowoduje że hasła LM nie będą tworzone i przechowywane w bazie Active Directory.

W systemach Windows XP i 2003 ten sam efekt uzyskamy włączając opcję Zasady zabezpieczeń lokalnych/Zasady lokalne/Opcje zabezpieczeń/Zabezpieczenia sieci: Nie przechowuj wartości mieszania (hash) programu LAN Manager dla następnej zmiany hasła.

Po wprowadzeniu powyższych zmian należy ponownie uruchomić system operacyjny. Ponieważ nowe ustawiania nie spowodują usunięcie już istniejących haseł LM należy wymusić zmianę haseł przez wszystkich użytkowników.

Jeżeli niemożliwe jest wyłączenie tworzenia haseł LM należy ograniczyć fizyczny dostęp do:

  1. Komputerów, zarówno stacjonarnych jak przenośnych, szczególnie ważne jest ograniczenie dostępu niepowołanych osób do serwerów pełniących funkcje kontrolera domeny,
  2. Aktywnych urządzeń sieciowych, takich jak routery i przełączniki,
  3. Kabli sieciowych lub innego nośnika, za pośrednictwem którego wymieniane są dane pomiędzy komputerami,
  4. Nośników kopii zapasowych danych i obrazów systemów operacyjnych,
  5. Płyt z wersjami instalacyjnymi oprogramowania.

Najtrudniej jest ograniczyć dostęp do stacji roboczych — w tym przypadku możemy jedynie utrudnić przejęcie kontroli nad systemem poprzez:

  1. Uniemożliwienie uruchomienia komputera (w szczególności wyświetlenia ekranu ustawień systemu BIOS) bez podania hasła systemu BIOS,
  2. Umożliwienie uruchamiania komputera wyłącznie z określonego dysku twardego i jednoczesne uniemożliwienie wykrycia przez system BIOS innego niż oryginalny dysku,
  3. Sprzętowe lub programowe zablokowanie stacji dyskietek i napędów CD,
  4. Wymontowanie nieużywanych napędów CD i stacji dyskietek,
  5. Wymaganie podania hasła przed uzyskaniem dostępu do dysków zgodnych ze standardem Serial-ATA,
  6. Skonwertowanie dysku do nierozpoznawanej przez systemy DOS postaci dynamicznej,
  7. Zmianę domyślnego trybu działania narzędzia klucza systemowego i wymaganie do uruchomienia systemu albo podania dodatkowego hasła albo posłużenia się dyskietką,
  8. Sprzętowe szyfrowanie wszystkich zapisanych na dysku danych.

Ponadto należy włączyć inspekcję następujących zdarzeń kluczy rejestru HKEY_LOCAL_MACHINE\SAM oraz HKEY_LOCAL_MACHINE\Security

  • badanie wartości,
  • ustawianie wartości,
  • zapisywanie DAC,
  • kontrola odczytu.

Do ustawiania zasad inspekcji kluczy rejestru należy użyć narzędzia systemowego regedt32.

 Do początku strony Do początku strony

Przesyłanie haseł

Równie groźne dla bezpieczeństwa systemu co zdobycie przez niepowołane osoby kopii pliku SAM lub przechowywanej w pamięci operacyjnej listy haseł LM jest przechwycenie przez nie przesyłanych w sieci komunikatów wyzwania i odpowiedzi protokołu LM. Mimo że same hasło użytkownika systemu Windows nie jest przesyłane poprzez sieć w żadnej, nawet zaszyfrowanej postaci, to na podstawie przechwyconych haseł sesji LM możliwe jest nie tylko odszyfrowanie haseł LM, ale i hasła użytkownika.

Skoro pierwsze 8 bajtów hasła LM/NTLM jest wyliczone na podstawie pierwszych siedmiu liter hasła, a drugie 8 bajtów na podstawie liter od 8 do 14, a hasło użytkownika nie zostało przed podzieleniem w jakikolwiek sposób zmodyfikowane, możemy niezależnie atakować oba łańcuchy znaków. Sprawdzenie nawet wszystkich możliwych kombinacji ośmiu bajtów dla współczesnych komputerów nie byłoby żadnym problemem, analizując sposób generowania komunikatu odpowiedzi zauważymy, że w rzeczywistości zadanie to jest jeszcze prostsze.

Przeanalizujmy sposób przesyłania przykładowego hasła użytkownika — ciągu znaków „windows”. Sygnaturą (hasłem LM) tego hasła będzie ciąg znaków 4EFC971E2C6A11F0AAD3B435B51404EE .

Jeżeli hasło użytkownika nie przekracza 7 liter drugie osiem bajtów zawsze będzie równe AAD3B435B51404EE.

Podczas przesyłania komunikatów wezwania – odpowiedzi LM poprzez sieć przesyłane będą następujące dane:

  1. Komputer klienta wysyła do serwera losowy, 8 bajtowy komunikat wyzwania — np. 0001020304050607.

  2. Serwer odczytuje hasło LM użytkownika i uzupełnia je pięcioma zerami otrzymując ciąg 4EFC971E2C6A11F0AAD3B435B51404EE0000000000.

  3. Otrzymany ciąg jest dzielony na trzy grupy po 7 bajtów: 4EFC971E2C6A11, F0AAD3B435B514 i 04EE0000000000.

  4. Otrzymane w ten sposób klucze wykorzystane są, po dodaniu bajtu parzystości, do zaszyfrowania algorytmem DES otrzymanego komunikatu wyzwania:

    • tekst — 0001020304050607, klucz — 4EFC971E2C6A11, niech szyfrogramem będzie ciąg AAAAAAAAAAAAAAAA,
    • tekst — 0001020304050607, klucz — F0AAD3B435B514, niech szyfrogramem będzie ciąg BBBBBBBBBBBBBBBB,
    • tekst — 0001020304050607, klucz — 04EE0000000000, niech szyfrogramem będzie ciąg CCCCCCCCCCCCCCCC.
  5. Otrzymane szyfrogramy są łączone (AAAAAAAABBBBBBBBCCCCCCCC) i wysyłane jako komunikat odpowiedzi do komputera klienckiego.

    Taki sposób łączenia szyfrogramów w komunikat odpowiedzi powoduje, że hasła krótsze niż 8 znakowe mogą zostać złamane już po kilkuset próbach a więc w czasie kilku sekund.

  6. Komputer kliencki w taki sam sposób wylicza wartość komunikatu odpowiedzi i porównuje ją z odpowiedzią otrzymaną z serwera.

Techniki przechwycenia haseł

Podczas próby uzyskania dostępu do zasobów zdalnego komputera system Windows przesyła poprzez sieć dane uwierzytelniające użytkownika. Dlatego skutecznymi sposobami na przechwycenie haseł LM są:

  1. Pasywne podsłuchiwanie przesyłanych danych (umożliwia to min. czwarta wersja programu L0phtCrack ,
  2. Udostępnienie w sieci zasobu i gromadzenie haseł użytkowników próbujących uzyskać do niego dostęp (umożliwia to np. program ScoopLM),
  3. Podszycie się pod zaufany serwer i gromadzenie haseł użytkowników próbujących połączyć się z fałszywym serwerem (umożliwia to np. program SMBRelay).

Zabezpieczenie komunikacji

Najlepszym zabezpieczeniem przed przechwyceniem haseł LM jest zablokowanie tego protokołu uwierzytelniania. O wiele bezpieczniejszy (choć w specyficznych warunkach umożliwiający deszyfracje haseł) protokół Kerberos może jednak zostać wykorzystany tylko, gdy spełnione są wszystkie poniższe warunki:

  1. Na obu komputerach (klienckim i serwerze) zainstalowany jest system Windows 2000 lub nowszy,
  2. Oba komputery mają poprawnie zarejestrowaną nazwę domenową lub nazwę NetBIOS,
  3. Oba komputery należą do tej samej domeny lub zaufanych domen w obrębie pojedynczego lasu, a w przypadku domeny działającej w trybie Windows 2003 — z obrębu zaufanego lasu lub zaufanej, zewnętrznej domeny Kerberos,
  4. Do nawiązania połączenia wykorzystana została nazwa zdalnego systemu, a nie jego adres IP

Jeżeli niemożliwe jest uwierzytelnianie przy pomocy protokołu Kerberos należy zmniejszyć ryzyko zdobycia haseł LM poprzez:

  1. Podzielenie sieci za pomocą przełączników na niezależne segmenty.
  2. Systematyczne sprawdzanie, czy nie zostały ujawnione kolejne słabe punkty używanego aktywnego osprzętu sieciowego (informacje te umieszczane są na stronach producentów tych urządzeń, pojawiają się również na listach dyskusyjnych poświęconych bezpieczeństwu).
  3. Wdrożenie restrykcyjnej polityki dotyczącej haseł umożliwiających zdalną konfigurację urządzeń sieciowych. Dostęp do wielu urządzeń domyślnie chronionych jest hasłem producenta — lista tych haseł jest stale aktualizowana i publikowana w Internecie, dostęp do urządzeń niektórych producentów domyślnie nie wymaga podania żadnego hasła. W obu przypadkach należy natychmiast zmienić hasło na skomplikowane, co najmniej 12-znakowe własne hasło. Ponadto hasła urządzeń sieciowych powinny być zmieniane równie często, co hasła użytkowników systemu.
  4. Bezpieczną konfigurację aktywnego osprzętu sieciowego.
  5. Aktualizację oprogramowania zainstalowanego na aktywnych urządzeniach sieciowych.
  6. Wykrywanie i usuwanie kart sieciowych działających w trybie mieszanym (ang. Promiscuous),
  7. Szyfrowanie danych przesyłanych do ważnych serwerów (w tym kontrolerów domeny) protokołem IPSec,
  8. W przypadku systemów uniemożliwiających szyfrowania IPSec (systemy Windows z serii 9x) możemy uchronić się przed atakami polegającymi na podszywaniu się pod zaufane serwery podpisując pakiety SMB.

 Do początku strony Do początku strony

Zasady tworzenia poprawnych haseł

Równie ważne, jeżeli nie ważniejsze, od bezpiecznej konfiguracji protokołów uwierzytelniania jest wymuszenie tworzenia przez użytkowników poprawnych haseł i nauczenie ich podstawowych zasad ochrony haseł. Technologia nie jest panaceum i nie istnieje żadna poprawka eliminująca błędy związane z niefrasobliwymi czy nieprzeszkolonymi użytkownikami.

Wymagaj tworzenia silnych haseł

Złamanie każdego hasła metodą pełnego przeglądu kluczy jest tylko kwestią czasu i zaangażowanego w ten proces sprzętu. Jedynym sposobem obrony przed takim atakiem jest tworzenie haseł, których złamanie w określonym czasie (np. w ciągu 21 dni po których użytkownik musi zmienić hasło) jest mało prawdopodobne.

Znacznie częściej programy łamiące hasła stosują atak słownikowy. Ponieważ algorytmy szyfrowania haseł są znane, narzędzia te po prostu porównują sygnatury wszystkich słów w słowniku, w tym nazw i imion użytkowników, oraz ich różnych permutacji, ze skrótem hasła. Wynika z tego że każde hasło które przypomina jakiś wyraz w dowolnym języku, jest podatne na atak słownikowy.

Popularna metoda tworzenia haseł polega na zastępowaniu określonych liter w wyrazie znakami alfanumerycznymi i specjalnymi. Na przykład, hasło „password” może zostać zastąpione ciągiem „pa$$w0rd”. Takie permutacje nie chronią już przed atakami słownikowymi — prawdopodobieństwo złamania tak zmodyfikowanego hasła jest jedynie minimalnie niższe niż hasła oryginalnego — dostępne są (np. na stronie http://www.openwall.com) zawierające tak zmodyfikowane słowa słowniki.

Zasady tworzenia haseł powinny nakazywać użytkownikom tworzenie hasła na podstawie losowego ciągu znaków, np. tytułu książki lub piosenki, potocznego zwrotu lub sentencji. Poprzez złączenie dłuższej frazy w hasło użytkownicy mogą wygenerować odpowiednio długie i skomplikowane hasła, z odpowiednimi kombinacjami znaków alfanumerycznych i znaków specjalnych, i w konsekwencji zabezpieczyć się przed atakami słownikowymi. A jeżeli pierwotną frazę było łatwo zapamiętać, to samo powinno dotyczyć utworzonego na jej podstawie hasła.

Wymóc stosowanie silnych haseł możemy korzystając z narzędzia Passfilt (w systemie Windows NT4 z zainstalowanym pakietem SP3 lub SP4 wymagająca zarejestrowania biblioteka znajduje się w folderze %SystemRoot%\system32) albo konfigurując Zasady haseł (systemy Windows 2000, XP oraz 2003). Wybierając Zasady zabezpieczeń lokalnych/Zasady konta/Zasady haseł możemy ustawić następujące opcje:

  1. Hasło musi spełniać wymagania co do złożoności. Parametr określa, czy hasła muszą spełniać wymagania złożoności. Wymagania te są narzucane przy tworzeniu i zmianie hasła. Jeżeli opcja jest włączona, hasło musi spełniać następujące wymagania minimalne:

    1. Nie może zawierać w całości lub w części nazwy konta użytkownika

    2. Musi mieć co najmniej 6 znaków

    3. Musi zawierać znaki z trzech spośród czterech następujących grup:

      • wielkie litery alfabetu angielskiego (od A do Z)
      • małe litery alfabetu angielskiego (od a do z)
      • cyfry (od 0 do 9)
      • znaki specjalne (np.: , !, $, #, %)
  2. Wymuszaj tworzenie historii haseł (w zakresie od 0 do 24). Parametr określa liczbę unikalnych haseł, które muszą być wykorzystane dla konta danego użytkownika, zanim system pozwoli na ponowne użycie starego hasła. Ustalenie wartości parametru na 0 umożliwia ciągłe używanie tego samego hasła. Ustalenie jej na 24 oznacza wymuszenie użycia 24 różnych haseł, zanim ponownie zostanie użyte pierwsze z nich. Ta opcja pozwala na podniesienie poziomu bezpieczeństwa przez zapewnienie, że stare hasła nie są wciąż na nowo używane. Aby zachować skuteczność działania tej opcji należy wykluczyć możliwość natychmiastowej zmiany hasła przez skonfigurowanie minimalnego okresu ważności hasła.

  3. Maksymalny okres ważności hasła (w zakresie od 0 do 999 dni). Parametr określa liczbę dni, przez jaką hasło może być używane, zanim system wymusi jego zmianę. Wartość 0 oznacza że ważność hasła nie wygaśnie nigdy.

  4. Minimalny okres ważności hasła (w zakresie od 0 do 999 dni). Parametr określa liczbę dni przez jaką musi być używane hasło, zanim użytkownik będzie mógł je zmienić. Minimalny okres ważności hasła musi być mniejszy niż maksymalny okres ważności hasła. Należy określić minimalny okres ważności hasła na wartość większą niż 0 w przeciwnym razie wymuszanie tworzenia historii haseł będzie nieskuteczne (użytkownik zmuszony do zmiany hasła zmieni je wielokrotnie, aż ponownie będzie mógł korzystać z tego samego hasła co poprzednio). Jeżeli wymuszanie tworzenia historii haseł ustawione jest na 0, użytkownik nie musi wymyślać nowego hasła. Z tego powodu, wymuszanie tworzenia historii ma domyślnie wpisaną wartość 1.

  5. Minimalna długość hasła (w zakresie od 0 do 14 znaków). Parametr określa najmniejszą ilość znaków jaką może zawierać hasło dla konta użytkownika. Wartość 0 oznacza że użytkownicy nie muszą posługiwać się hasłami. W celu zapewniania skutecznej ochrony wartość tego parametru nie powinna być mniejsza niż 12.

  6. Zapisz hasła korzystając z szyfrowania odwracalnego. Parametr określa czy systemy Windows 2000, 2003 lub XP Professional będą przechowywały hasła korzystając z szyfrowania odwracalnego. Opcja ta zapewnia wsparcie dla aplikacji, których protokół uwierzytelnienia wymaga znajomości hasła użytkownika. Przechowywanie haseł zapisanych z użyciem szyfrowania odwracalnego jest równoważne z zapisaniem ich w formie jawnego tekstu. W związku z tym opcja powinna zostać włączona tylko jeżeli korzyści z używania danej aplikacji przewyższają potencjalne straty związane z ujawnieniem haseł.

Chroń hasła

Stosowanie silnych haseł nie zabezpiecza przed zdobyciem haseł od nie znających zasad bezpieczeństwa i nie przestrzegających procedur ochrony haseł użytkowników. W dobrze skonstruowanej polityce powinny zostać uwzględnione zakazy udostępniania hasła innym osobom, zapisywania ich w sposób umożliwiający niepowołany dostęp do nich i nakaz należytego zabezpieczenia plików zawierających hasła służące do automatycznego uwierzytelnienia. Należy także wymusić wygasanie haseł, co sprawia, że słabe hasła, które z jakichś przyczyn nie zostały wyeliminowane przez inne polityki, są używane jedynie przez krótki okres czasu. Należy uniemożliwić ponowne posługiwania się starymi hasłami. Dobrą praktyką jest uprzedzanie użytkowników o kończącym się wkrótce okresie ważności ich hasła. Gdy na ekranie pojawia się komunikat „Twoje hasło wygasło i musi zostać zmienione”, użytkownicy prawdopodobnie utworzą słabsze niż powinni hasło.

Monitoruj konta użytkowników

Zabezpieczenie systemu nie sprowadza się do jego poprawnej konfiguracji, ale polega na ciągłym monitorowaniu jego pracy i usuwaniu zauważonych słabych punktów. Szczególną uwagę należy poświecić 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.

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. Hasła kont w kontekście zabezpieczeń których uruchomione zostały usługi systemowe, hasła użytkowników do serwerów WWW i FTP, hasło konta komputera (o ile komputer należy do domeny) i hasła ostatnio logujących się do systemu użytkowników zapisane są w chronionym kluczu rejestru HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets, przy czym hasła kont w kontekście których działają usługi systemowe zapisane są jawnym tekstem! W efekcie każda osoba które ma uprawniania do odczytania tego klucza (domyślnie klucz jest dostępny jedynie dla podsystemu zabezpieczeń LSASS) może poznać hasła chroniące te konta. Jednym z dostępnych w Internecie programów który wykonuje to zadanie jest LsaDump2.

    Jeżeli jest to możliwe uruchamiaj usługi systemowe w kontekście zabezpieczeń specjalnych kont lokalnego komputera, np. konta System. Jeżeli wymagane jest uruchomienie usługi w kontekście konta domenowego maksymalnie ogranicz uprawnienia takiego konta. W żadnym wypadku nie uruchamiaj usług systemowych w kontekście konta należącego do grupy administratorów domeny.

  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 (ang. 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.

 Do początku strony Do początku strony

Konfiguracja protokołów uwierzytelniania

Jeżeli konieczne jest uwierzytelnianie za pośrednictwem protokołu LM, należy ustawić odpowiednio wysoki poziom jego zabezpieczenia. Konfigurując zasadę Zabezpieczenia sieci: poziom uwierzytelniania LAN Manager, można to zrobić na poziomie domeny, jednostki organizacyjnej lub pojedynczych komputerów. Możliwy jest wybór jednego z sześciu poziomów zabezpieczenia:

  • Wyślij odpowiedź typu LM i NTLM, domyślne ustawienie, na podstawie którego nie jest wykorzystywane uwierzytelnianie NTLM v2.
  • Wyślij LM i NTLM — użyj zabezpieczeń NTLM v2 po uzgodnieniu, klienci używają protokołu LM lub NTLM, chyba że serwer umożliwia autoryzację za pośrednictwem protokołu NTLM v2.
  • Wyślij tylko odpowiedź NTLM, klienci używają protokołu NTLM, chyba że serwer umożliwia autoryzację za pośrednictwem protokołu NTLM v2.
  • Wyślij tylko odpowiedź NTLM v2, klienci używają do autoryzacji protokołu NTLM v2 i o ile serwer umożliwia to, tworzą bezpieczny kanał komunikacji z serwerem.
  • Wyślij tylko odpowiedź NTLM v2\odrzuć LM, klienci używają do autoryzacji protokołu NTLM v2 i o ile serwer umożliwia to, tworzą bezpieczny kanał komunikacji z serwerem, natomiast kontrolery domeny odrzucają próbę autoryzacji za pośrednictwem protokołu LM.
  • Wyślij tylko odpowiedź NTLM v2\odmów odpowiedzi typu LM i NTLM, klienci używają do autoryzacji protokołu NTLM v2 i o ile serwer umożliwia to, tworzą bezpieczny kanał komunikacji z serwerem, natomiast kontrolery domeny odrzucają próbę autoryzacji za pośrednictwem protokołu LM i NTLM.

Powyższe ustawienia wpływają na wartość klucza rejestru HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA\LMCompatibilityLevel która domyślnie wynosi 0, co odpowiada najmniej bezpiecznemu ustawieniu Wyślij odpowiedź typu LM i NTLM.

Jeżeli w sieci występują wyłącznie systemy Windows NT z zainstalowanym pakietem Service Pack 4 lub nowsze, aby zapobiec przesyłaniu haseł LM poprzez sieć należy ustawić wartość omawianej opcji na 3 (Wyślij tylko odpowiedź NTLM v2) na wszystkich stacjach klienckich oraz 5 (Wyślij tylko odpowiedź NTLM v2\odmów odpowiedzi typu LM i NTLM) na wszystkich kontrolerach domeny. W przypadku systemów Windows 95 i 98 konieczne jest wcześniejsze zainstalowanie programu Directory Services Client (program DSClient.exe znajduje się m.in. w folderze CLIENTS\WIN9X na płycie instalacyjnej systemu Windows 2000). Po jego zainstalowaniu tworzona jest wartość rejestru LMCompatibility której możemy ustawić na 0 lub 3.

W sieciach w których wykorzystywany jest protokół NTLM należy również wymusić podpisywanie przesyłanych pakietów protokołu SMB (trzeba się liczyć z około 10-15% spadkiem wydajności sieci). Możemy to zrobić włączając zasady Klient sieci Microsoft: Podpisuj cyfrowo komunikację (zawsze) i Serwer sieci Microsoft: Podpisuj cyfrowo komunikację (zawsze). Wymuszając podpisywanie pakietów SMB należy pamiętać, że oba komputery wymieniające dane muszą podpisać pakiet, inaczej próba przesłania danych zakończy się niepowodzeniem.


Marcin Szeliga Marcin Szeliga (MCP+I, MCSE, MCDBA, MCSD, MCT)
Bezpieczeństwem systemów komputerowych zajmuje się od 1994 roku. Od roku 1999 pracuje jako wykładowca i szkoleniowiec prowadząc zajęcia z technologii firmy Microsoft. Jest również autorem kilkunastu książek i podręczników z różnych dziedzin informatyki, w tym kompendium "Bezpieczeństwo w sieciach Windows".
 Do początku strony Do początku strony

NTLM, cz. I     NTLM