NTLM     NTLM, cz. II

NTLM, cz. I Udostępnij na: Facebook

Autor: Marcin Szeliga

Opublikowano: 8 marca 2004 | Zaktualizowano: 4 maja 2004

Zawartość strony
Streszczenie  Streszczenie
Uwierzytelnienie  Uwierzytelnienie
Druga część artykułu  Druga część artykułu

Streszczenie

Bezpieczeństwo każdego systemu komputerowego zależy od zaimplementowanych w nim protokołów uwierzytelniania — metod potwierdzenie tożsamości użytkownika lub komputera. Ponieważ w systemach Windows obowiązuje reguła pojedynczej rejestracji — użytkownik może zalogować się do domeny przy użyciu jednego hasła lub karty inteligentnej, poczym będzie automatycznie uwierzytelniony przez każdy komputer w domenie, bezpieczeństwo danych uwierzytelniających ma kluczowe znaczenie dla bezpieczeństwa całego systemu.

Szczególnie ważne jest zabezpieczenie uwierzytelniania sieciowego — potwierdzania danych uwierzytelniających użytkownika dla usług sieciowych (w tym udostępnionych udziałów), do których ten użytkownik próbuje uzyskać dostęp. W systemach Windows tożsamość zdalnego użytkownika może zostać potwierdzona za pomocą jednej z poniższych metod:

  • Protokółu Kerberos v5
  • Certyfikatu klucza publicznego
  • Protokółu SSL/TLS (Secure Sockets Layer/Transport Layer Security)
  • Protokółu NTLM

Artykuł zawiera opis technologii NTLM, ze szczególnym uwzględnieniem jej słabych punktów i ma odpowiedzieć na pytanie Dlaczego należy uniemożliwić autoryzację NTLM?

 Do początku strony Do początku strony

Uwierzytelnienie

Uwierzytelnienie jest procesem weryfikacji tożsamości użytkownika lub komputera — sprawdzenia, czy rzeczywiście jest on tym, za kogo się podaje. Uwierzytelnienie spełnia dwie, kluczowe z punktu bezpieczeństwa systemu, funkcje:

  • Umożliwia identyfikację logującego się do systemu użytkownika,
  • Umożliwia sprawdzenie uprawnień użytkownika do zasobów i wykonywania określonych operacji

Najpowszechniejszym przykładem uwierzytelnienia jest logowanie się użytkownika do systemu.

Przebieg uwierzytelnienia

Uwierzytelnienie użytkownika nadzorowane jest przez proces systemowy Winlogon. Jednym z jego komponentów jest biblioteka msgina.dll (GINA — Graphical Identification and Authentication). Jej zadaniem jest wyświetlenie graficznego ekranu logowania i przekazanie podanych przez użytkownika danych do usługi dostawcy zabezpieczeń (SSP — Secure Service Provider).

Jedna z popularnych metod ataku polega na wyświetlenie fałszywego ekranu logowania — ekranu który wygląda identycznie z systemowym ale który oprócz przekazania identyfikatorów i haseł użytkowników do usługi SSP zapisuje je w pliku lub wysyła przez sieć pod wskazany adres. Atak polega na podmienieniu biblioteki msgina.dll, albo na uruchomieniu zamiast oryginalnego, fałszywego ekranu logowania. Aby wyświetlić własny ekran logowania wystarczy dodać do klucza rejestru SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon wartości typu REG_SZ wskazującą na przygotowaną bibliotekę GINA, np. GinaDLL = FakeGina.dll.

Domyślnie, przed podaniem identyfikatora i hasła użytkownik musi nacisnąć sekwencję klawiszy Ctrl+Alt+Delelete (SAS — Secure Attention Sequence). Ponieważ sekwencja Ctrl+Alt+Delelete może być odczytana tylko przez system Windows, informacje znajdujące się w oknie dialogowym logowania również mogą być odczytane tylko przez usługi systemowe. W rezultacie wrogie programy (np. konie trojańskie) nie będą w stanie przechwycić informacji uwierzytelniających użytkownika.

Po podaniu prawidłowego identyfikatora użytkownika i hasła GINA, poprzez lokalne wywołanie procedury (LPC — Local Procedure Call) przesyła je do podsystemu zabezpieczeń LSA (Local Security Authority).

Podsystem LSA przesyła podane dane do interfejsu SSPI (Security Support Provider Interface) przez który trafiają one do domyślnego dostawcy SSP.

W przypadku systemów Windows 2000 i nowszych, domyślnym dostawcą SSP jest usługa Kerberos. Jeżeli z jakiegoś powodu usługa Kerberos nie może potwierdzić tożsamości użytkownika (na przykład z powodu braku dostępu do odpowiedniego dla użytkownika centrum dystrybucji kluczy KDC, korzystania ze starszej wersji systemu operacyjnego klienta, czy niewłaściwej konfiguracji systemu) dane użytkownika zostają przesłane do kolejnego dostawcy SSP — usługi NT LAN Manager (NTLM).

Jeżeli potwierdzone ma zostać tożsamość lokalnego klienta dane uwierzytelniające przesyłane są w ramach lokalnego procesu MSV1_0 do bazy SAM i tam są sprawdzane z zaszyfrowaną listą haseł. W takim przypadku nie są one przesyłane przez sieć i nie mogą zostać przechwycone. Jeżeli jednak potwierdzona ma zostać tożsamość zdalnego klienta dane uwierzytelniające przesyłane są poprzez sieć i sprawdzana z bazą SAM kontrolera domeny lub zdalnego komputera klienckiego. W tym przypadku przesyłane w ramach procesu uwierzytelnienia dane mogą zostać przechwycone a na podstawie przechwyconych danych możliwe jest poznanie jawnej postaci hasła użytkownika.

Protokoły uwierzytelniania sieciowego

W lokalnych sieciach Microsoft Windows tożsamości użytkownika może zostać potwierdzona przy użyciu następujących protokołów:

  • LM — ten umożliwiający przechwytywanie i deszyfrowanie haseł protokół powinien być wykorzystywany tylko, jeżeli w sieci znajdują się komputery działające pod kontrolą systemu MS-DOS.

  • NTLM — domyślny protokół systemów autoryzacji Windows NT nie powinien w ogóle być wykorzystywany.

  • NTLM v2 — gwarantujący podstawowy poziom bezpieczeństwa, w tym uwierzytelnianie wzajemne, protokół NTLM powinien być wykorzystywany w sieciach, w których znajdują się komputery pracujące pod kontrolą systemów Windows 95/98/Me lub NT. Aby umożliwić uwierzytelnianie przy użyciu tego protokołu należy:

    • w przypadku systemów Windows 9x zainstalować program klienta AD (program DSClient.exe znajduje się w folderze CLIENTS\WIN9X na płycie instalacyjnej systemu Windows 2000),
    • w przypadku systemu NT 4.0 zainstalować pakiet SP 4 lub późniejszy.
  • Kerberos v5 — domyślny protokół autoryzacji systemów Windows 2000 i późniejszych, należących do domeny Microsoft Windows. W przeciwieństwie do opracowanego przez firmę Microsoft protokołu NTLM, protokół Kerberos w wersji 5. jest implementacją standardu opisanego w dokumencie RFC 1510.

Uwierzytelnianie poprzez przesłanie wezwania i odpowiedzi

Protokoły NT i NTLM do potwierdzenia tożsamości użytkownika używają techniki przesłania zaszyfrowanego hasła w postaci komunikatów wyzwania i odpowiedzi. W obu przypadkach do zaszyfrowania hasła wykorzystywana jest funkcja mieszająca, co teoretycznie ma uniemożliwić odtworzenie hasła na podstawie przechwyconych komunikatów wyzwania lub odpowiedzi.

Szyfrowanie jest specyficznym kodowaniem, w którym wymagane jest, aby kod nie ujawniał informacji źródłowych danych. W tym celu koder, nazywany szyfratorem lub enkryptorem, używa dodatkowej informacji — klucza — do stworzenia zaszyfrowanej postaci danych (nazywanej również szyfrogramem lub kryptogramem). Rozkodowanie danych wymaga użycia klucza, który został wykorzystany do zaszyfrowania jawnej postaci danych. Klucz powinny znać tylko osoby lub programy, dla których szyfrowane dane są przeznaczone. Wynika z tego, że znajomość algorytmu szyfrowania nie wystarcza do rozkodowania szyfrogramu.

Funkcje mieszające

Funkcje mieszające (ang. Hash function, nazywane też funkcjami skrótu) są funkcjami jednokierunkowymi, czyli niemożliwe powinno być odtworzenie oryginalnych danych na podstawie znajomości wyliczonego za ich pomocą ciągu bajtów. Z tego powodu funkcje te doskonale nadają się do sprawdzenia, czy oryginalne dane nie zostały zmodyfikowane. Dodatkowym zabezpieczeniem przed odtworzeniem oryginalnych danych jest fakt tworzenia przez funkcje mieszających zbioru danych wynikowych o ściśle określonej, niezależnej od liczby danych źródłowych, wielkości. W ten sposób niemożliwe jest określenie wielkości zbioru danych źródłowych na podstawie przechwyconej wartości funkcji mieszającej.

W systemach Windows stosowane są następujące funkcje mieszające:

  • MD4 (Message Digest Algorithm 4) — zdefiniowana w dokumencie RFC 1320 szybka, ale nie uważana już za bezpieczną funkcja tworząca wyniki o długości 128 bitów.
  • MD5 (Message Digest Algorithm 5)— zdefiniowana w dokumencie RFC 1321 szybka i stosunkowo bezpieczna funkcja tworząca wyniki o długości 128 bitów.
  • SHA-1 (Secure Hash Algorithm) — stosunkowo wolna funkcja tworząca wyniki o długości 160 bitów. Funkcja ta jest standardem wykorzystywanym przez agencje rządowe Stanów Zjednoczonych Ameryki Północnej.
Algorytmy symetryczne

Do generowania jednoznacznie identyfikujących zbiór bajtów wartości mogą być również wykorzystywane symetryczne algorytmy szyfrowania — algorytmy które albo używają tego samego klucza do szyfrowania i do deszyfrowania wiadomości, albo klucz deszyfrujący da się bezpośrednio wyprowadzić z klucza szyfrującego. Wynika z tego, że poznanie klucza służącego do zakodowania danych umożliwi także ich odszyfrowanie. Ze względu na liczbę jednorazowo kodowanych danych, algorytmy te można dodatkowo podzielić na algorytmy:

  • strumieniowe, kodujące jedną jednostkę informacji (bit) w tym samym czasie,
  • blokowe, kodujące zbiór informacji (wiele bitów) w tym samym czasie.

W systemach Windows stosowane są następujące algorytmy symetryczne:

  • DES (Data Encryption Standard) — stosunkowo wolny i nie gwarantujący wysokiego poziomu zabezpieczeń algorytm był (do wersji Windows XP) podstawą innych stosowanych w systemach Windows algorytmów szyfrowania. Na przykład, technologia EFS do szyfrowania plików korzysta ze zmodyfikowanej wersji tego algorytmu o nazwie DESX.
  • 3DES — stosowany między innymi do szyfrowania pakietów protokołu IPSec protokół jest jednym z najwolniejszych algorytmów symetrycznych, ale gwarantuje wysoki poziom bezpieczeństwa danych.
  • RC4 — (Rivest’s Cipher) niezwykle szybki algorytm szyfrowania strumieniowego danych poprzez wykonywanie na nich operacji XOR z wygenerowanymi liczbami pseudolosowymi. W sieciach Windows wykorzystywany jest min. do szyfrowania danych przesyłanych poprzez sieci bezprzewodowe.

Zaletą algorytmów symetrycznych jest ich szybkość oraz możliwość dopasowania długości klucza (a więc pośrednio ich szybkości) i oferowanego przez nie poziomu zabezpieczeń do konkretnych wymagań użytkowników. Z tego powodu algorytmy symetryczne stosowane są głownie do szyfrowania dużych zbiorów danych.

Natomiast ich wadą jest przede wszystkim konieczność udostępnienia wszystkim użytkownikom systemu odpowiednich kluczy. W przypadku większej grupy użytkowników liczba kluczy, którymi każdy z nich musi się posługiwać w celu szyfrowania wiadomości dostępnej dla tylko jednego, wybranego użytkownika, szybko osiąga liczbę uniemożliwiającą w praktyce zarządzanie tymi kluczami. Liczbę potrzebnych kluczy można obliczyć, korzystając ze wzoru n(n-1)/2, gdzie n jest liczbą użytkowników systemu — aby każdy z grupy 50 użytkowników mógł nadawać i odbierać szyfrogramy z każdym z pozostałych użytkowników, należy wygenerować 1225 kluczy. Kolejną wadą algorytmów symetrycznych jest brak zabezpieczenia przed przechwyceniem i możliwością podszycia się pod uwierzytelnionego użytkownika za pomocą odsyłania przechwyconych, choć niezrozumiałych, szyfrogramów.

Komunikaty wyzwania i odpowiedzi NTLM

Hasło użytkownika jest podstawą (kluczem) do wyliczenia hasła sesji LM i NTLM. Proces wyliczania i przechowywania haseł zależy od wykorzystywanego protokołu:

  • Hasła LM dzielone są na dwie części, po siedem znaków każda. Następnie wszystkie litery obu części hasła konwertowane są na duże litery i tak zmodyfikowane hasło zostaje zaszyfrowane algorytmem DES. Zaszyfrowane hasło przechowywane jest w chronionym obszarze rejestru lokalnego systemu, ale istnieje wiele dostępnych w Internecie programów, które umożliwiają jego odczytanie i złamanie.
  • Hasła NTLM zostają zaszyfrowane algorytmem MD4 i zapisane w chronionym obszarze rejestru lokalnego systemu. Odczytanie i deszyfrowanie hasła również nie jest ani specjalnie trudne ani czasochłonne.
  • Hasła NTLM v2 zostają zaszyfrowane algorytmem MD5 przy użyciu klucza o długości 128 bitów i zapisane w chronionym obszarze rejestru lokalnego systemu. Chociaż ich odczytanie nadal jest możliwe, to złamanie wymaga zaangażowanie dużej mocy obliczeniowej i dysponowania odpowiednią ilością czasu.

Algorytm DES, sposób wyliczania haseł NTLM i techniki kryptograficzne zostały dokładnie opisane w punkcie „Zaszyfrowane dane są co najwyżej tak bezpieczne jak klucz deszyfrujący”.

Wymiana komunikatów wyzwania i odpowiedzi wygląda następująco:

  • Użytkownik próbuje uzyskać dostęp do zasobów serwera.
  • Serwer wysyła do klienta pseudolosowy, ośmiobajtowy komunikat wyzwania.
  • Klient szyfruje odebrany komunikat przy użyciu skrótu hasła LM/NTLM i odsyła szyfrogram odpowiedzi do serwera.
  • Serwer deszyfruje odebrany komunikat odpowiedzi przy użyciu skrótu hasła LM/NTLM i porównuje wynik z wysłanym komunikatem wyzwania. Jeżeli są identyczne, tożsamość zdalnego użytkownika zostaje potwierdzona i w zależności od nadanych mu uprawnień uzyskuje on lub nie dostęp do żądanych zasobów.

Mimo że hasło użytkownika systemu Windows nie jest przesyłane poprzez sieć w żadnej, nawet zaszyfrowanej postaci, to na podstawie przechwyconych komunikatów odpowiedzi możliwe jest nie tylko odszyfrowanie haseł sesji LM/NTLM, ale i haseł użytkownika. Właśnie dlatego wysyłanie przez system Windows informacji uwierzytelniających zalogowanego użytkownika podczas każdej próby dostępu do udostępnionych w sieci zasobów stanowi takie zagrożenie dla bezpieczeństwa.

Słabym punktem systemów Windows NT bez zainstalowanego pakietu SP4 i systemów z serii 9x okazało się wysyłanie niezaszyfrowanego, choć wyprowadzonego z zaszyfrowanej postaci hasła, komunikatu odpowiedzi — na jego podstawie możliwe jest odtworzenie oryginalnej, zaszyfrowanej postaci hasła LM lub NTLM. Techniki przechwytywania i łamania komunikatów odpowiedzi opisane zostały w dalszej części artykułu.

Dopiero wersja 2. technologii NTLM wykorzystuje na tyle skomplikowaną funkcję szyfrowania ciągu LM zaszyfrowanym hasłem, że odtworzenie na podstawie przechwyconej odpowiedzi zaszyfrowanej postaci hasła LM jest praktycznie niemożliwe.

 Do początku strony Do początku strony

Druga część artykułu

W części drugiej artykułu poruszone zostaną m.in. tematy: Algorytmy szyfrowania (DES, MD4, MD5), Hasła LM i NTLM, Techniki odczytania haseł, Przesyłanie haseł, Zasady tworzenia poprawnych haseł, Konfiguracja protokołów uwierzytelniania.

Druga część artykułu jest już dostępna - zachęcamy do jej przeczytania.


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     NTLM, cz. II