Dlaczego warto używać Kerberos zamiast NTLM w IIS?

40

Jest to coś, na co tak naprawdę nigdy nie byłem w stanie odpowiedzieć tak dobrze, jak lubię: Jaka jest prawdziwa zaleta używania uwierzytelniania Kerberos w IIS zamiast NTLM?

Widziałem wiele osób, które naprawdę mają problemy z konfiguracją (w tym ja) i nie byłem w stanie wymyślić dobrego powodu, aby z niego skorzystać. Muszą być jednak pewne znaczące zalety, w przeciwnym razie nie warto byłoby tego robić, prawda?

Infotekka
źródło

Odpowiedzi:

66

Tylko z perspektywy Windows:

NTLM

  • współpracuje zarówno z klientami zewnętrznymi (spoza domeny), jak i wewnętrznymi
  • współpracuje zarówno z kontami domeny, jak i kontami użytkowników lokalnych w polu IIS
    • przy użyciu kont domeny tylko serwer wymaga bezpośredniej łączności z kontrolerem domeny (DC)
    • używając kont lokalnych nigdzie nie potrzebujesz łączności :)
    • nie musisz być zalogowany jako dany użytkownik, aby użyć poświadczenia
    • Bok : to nie tak, że często dla DC być przytłoczeni ciężkim serwerze NTLM (IIS, Exchange, TMG / ISA, etc) z tomu wniosków NTLM (aby złagodzić: MaxConcurrentAPI, AuthPersistSingleRequest(fałsz) ., Szybciej DCS) ( Self premia referencyjna ).
  • wymaga połączenia klienta tylko z serwerem IIS (na porcie witryny, nic więcej, tzn. wszystko dzieje się przez HTTP (lub HTTPS)).
  • może przechodzić z serwera proxy nośną HTTP podtrzymania ów
    • możesz być w stanie używać TLS / SSL do obejścia innych
  • wymaga wielu uwierzytelnień w obie strony z małymi pakietami
    • (wzór logu to 401,2, 401,1, 200 z nazwą użytkownika)
  • nie może być stosowany w scenariuszach, w których wymagane jest uwierzytelnianie podwójnego skoku
    • tzn. dane uwierzytelniające użytkownika mają być przekazywane do usługi na innym komputerze
  • obsługuje starszych klientów (<Win2000)
  • Jest podatny na rozbieżności poziomu autoryzacji LM (niedopasowane lmcompatibilitylevel)
  • jest używany jako zapasowy przez pakiet Negotiate, jeśli Curb zawiedzie.
    • ( nie „jeśli odmówiono dostępu z Curb”, Curb musi się zepsuć, aby można było użyć NTLM - zwykle wygląda to tak, jakby nie dostać biletu. Jeśli klient dostanie bilet i nie jest doskonały, nie spowoduje to cofnięcia się.)

Kerberos

  • pracuje obecnie klientów przyłączonych do domeny tylko
    • wymaga połączenia klienta z AD DC (tcp / udp 88) ORAZ serwerem (bilety są pobierane przez klienta z DC za pośrednictwem portu Curb, a następnie dostarczane do serwera za pomocą HTTP)
  • może być w stanie przejść przez proxy, ale patrz punkt DC powyżej: nadal musisz być w tej samej sieci co aktywny DC, podobnie jak serwer .

    • więc teoretycznie, jeśli masz domenę, w której klienci podłączeni do Internetu czatują bezpośrednio z podłączonym do sieci DC, jest to wykonalne. Ale nie rób tego, chyba że już to wiedziałeś.
    • W scenariuszach z odwrotnym proxy (ISA / TMG) serwer przejścia protokołu musi znajdować się w tej sieci, tj. Nie jest klientem ... ale wtedy klient nie jest tak naprawdę tym, który robi bit Kerberos (koniecznie - pomyśl Forms auth to Curb przejście).
  • bilet jest długowieczny (10 godzin), co oznacza mniej komunikacji DC w czasie jego trwania - i, aby podkreślić: może to zaoszczędzić tysiące do milionów żądań na klienta w tym czasie - ( AuthPersistNonNTLMwciąż jest rzeczą; weryfikacja PAC Kerberos była kiedyś rzeczą)

  • wymaga jednej podróży w obie strony w celu uwierzytelnienia, ale rozmiar ładunku uwierzytelniania jest stosunkowo duży (zwykle 6-16K) ( 401 , {(zakodowany) rozmiar tokena} 200 )
  • można go używać z (proszę zawsze ograniczonym ) delegowaniem, aby umożliwić uwierzytelnianie systemu Windows użytkownika łączącego się z następną usługą
    • na przykład, aby umożliwić UserAdostęp do IIS i używać tego samego konta użytkownika, gdy IIS uzyskuje dostęp do SQL Server, jest to „przekazanie uwierzytelnienia”.
    • ( Ograniczone w tym kontekście oznacza „ale nic więcej”, np. Exchange lub inne okno SQL)
  • jest obecnie podstawowym pakietem bezpieczeństwa do uwierzytelniania negocjacyjnego
    • co oznacza, że ​​członkowie domeny Windows wolą go, kiedy mogą go zdobyć
  • wymaga rejestracji nazw SPN , co może być trudne. Zasady, które pomagają .
  • wymaga użycia nazwy jako celu, a nie adresu IP
  • powodów, dla których krawężnik może zawieść:
    • używając adresu IP zamiast nazwy
    • nie zarejestrowano nazwy SPN
    • zarejestrowano zduplikowane nazwy SPN
    • Nazwa SPN zarejestrowana na niewłaściwym koncie ( KRB_ERR_AP_MODIFIED)
    • brak połączenia DNS / DC klienta
    • ustawienie proxy klienta / strefa lokalnego intranetu nieużywana dla witryny docelowej

Podczas gdy jesteśmy przy tym:

Podstawowy

  • potrafi multi-hop. Ale robi to, ujawniając swoją nazwę użytkownika i hasło bezpośrednio w docelowej aplikacji internetowej
    • które mogą zrobić z nimi wszystko, co zechce. Cokolwiek .
    • „Och, czy administrator domeny właśnie użył mojej aplikacji? Czy właśnie przeczytałem ich e-mail? Potem zresetowałem hasło? A. Szkoda
  • wymaga zabezpieczenia warstwy transportowej (tj. TLS / SSL) dla każdej formy bezpieczeństwa.
    • a następnie zobacz poprzedni numer
  • współpracuje z dowolną przeglądarką
    • (ale patrz pierwszy numer )
  • wymaga uwierzytelnienia w jedną stronę ( 401 , 200 )
  • może być używany w scenariuszach z wieloma przeskokami, ponieważ system Windows może wykonywać interakcyjne logowanie przy użyciu podstawowych poświadczeń
    • Aby to LogonTypeosiągnąć, może być konieczne skonfigurowanie (domyślnie zmieniono na zwykły tekst sieciowy między 2000 a 2003 r., Ale może być źle pamiętany)
    • ale znowu , zobaczyć pierwszy numer .
    • Masz wrażenie, że pierwszy numer jest naprawdę, naprawdę ważny? To jest.

Podsumowując:

Ograniczenie może być trudne do skonfigurowania, ale istnieje mnóstwo przewodników ( moich ), które próbują uprościć proces, a narzędzia znacznie się poprawiły od 2003 do 2008 roku ( SetSPNmogą wyszukiwać duplikaty, co jest najczęstszym problemem łamania ; używaj,SETSPN -S kiedy tylko zobaczysz wskazówki, jak używać -A, a życie będzie szczęśliwsze).

Ograniczona delegacja jest warta kosztów przyjęcia.

TristanK
źródło
2
Technicznie rzecz biorąc, klienci Curb nie muszą być przyłączeni do domeny / dziedziny, z której chcą korzystać. Tak długo, jak mają one łączność z kontrolerem domeny, możesz wykonywać takie czynności, jak używanie run z flagą / netonly i uruchamianie procesu w kontekście użytkownika domeny, który nadal pobiera prawidłowy TGT, jeśli kontrolery domeny można znaleźć za pomocą wyszukiwania DNS . Nawet jeśli system DNS zostanie uszkodzony, możesz technicznie obejść go za pomocą wskazówek rejestru za pomocą programu ksetup.exe. Możesz zrobić podobne rzeczy również z klientem Linux. Oczywiście są to jednak przypadki skrajne.
Ryan Bolger,
10
  • Kerberos ma reputację szybszego i bezpieczniejszego mechanizmu uwierzytelniania niż NTLM.
  • Historycznie łatwiej było się połączyć z serwerami proxy niż NTLM, ze względu na charakter NTLM oparty na połączeniu.
  • To powiedziawszy, jak zauważyłeś, Kerberos jest trudniejszy do uruchomienia i działa i wymaga połączenia z AD, które nie zawsze jest praktyczne.

Innym podejściem byłoby ustawienie uwierzytelniania negotiatei używanie obu zamiast jednego zamiast drugiego.

nedm
źródło
9

Od Microsoft Application Verifier , który wykrywa typowe błędy programistów. Jednym z tych błędów jest użycie NTLM :

NTLM to przestarzały protokół uwierzytelniania z wadami, które potencjalnie zagrażają bezpieczeństwu aplikacji i systemu operacyjnego. Najważniejszą wadą jest brak uwierzytelnienia serwera, który może pozwolić osobie atakującej oszukać użytkowników w celu połączenia się z sfałszowanym serwerem. W następstwie braku uwierzytelnienia serwera aplikacje korzystające z NTLM mogą być również podatne na atak zwany „odbiciem”. Ten ostatni pozwala atakującemu na przejęcie rozmowy uwierzytelniającej użytkownika na legalnym serwerze i wykorzystanie go do uwierzytelnienia atakującego na komputerze użytkownika. Luki NTLM i sposoby ich wykorzystania są celem zwiększenia aktywności badawczej w społeczności bezpieczeństwa.

Chociaż Kerberos jest dostępny od wielu lat, wiele aplikacji wciąż jest napisanych tak, aby używały tylko NTLM. To niepotrzebnie zmniejsza bezpieczeństwo aplikacji. Kerberos nie może jednak zastąpić NTLM we wszystkich scenariuszach - głównie w tych, w których klient musi się uwierzytelnić w systemach, które nie są przyłączone do domeny (być może najczęściej jest to sieć domowa). Pakiet zabezpieczeń Negotiate pozwala na kompromis kompatybilny wstecz, który używa Kerberos, gdy tylko jest to możliwe, i powraca do NTLM tylko wtedy, gdy nie ma innej opcji. Zmiana kodu na użycie Negotiate zamiast NTLM znacznie zwiększy bezpieczeństwo naszych klientów, jednocześnie wprowadzając niewiele lub żadną zgodność aplikacji. Sama negocjacja nie jest srebrną kulą - zdarzają się przypadki, gdy atakujący może zmusić do przejścia na NTLM, ale są one znacznie trudniejsze do wykorzystania. Jednak jednym natychmiastowym ulepszeniem jest to, że aplikacje napisane w celu prawidłowego użycia Negocjacji są automatycznie odporne na ataki refleksyjne NTLM.

W ramach ostatniego ostrzeżenia przed użyciem NTLM: w przyszłych wersjach Windows możliwe będzie wyłączenie korzystania z NTLM w systemie operacyjnym. Jeśli aplikacje mają silną zależność od NTLM, po prostu nie uda się ich uwierzytelnić, gdy NTLM jest wyłączony.

Ian Boyd
źródło
3
Fantastyczny cytat. Dodał do zakładek.
Michael-O,
4

Powinieneś dodać bardzo ważny punkt:

Kerberos jest standardowym i otwartym protokołem w Uniksie od ponad 20 lat, podczas gdy NTLM jest czysto zastrzeżonym rozwiązaniem firmy Microsoft i znanym tylko Microsoft.

Michael-O
źródło
Jest znany prawie wszystkim komputerowym (Mac i Windows) i (nowoczesnym) przeglądarkom mobilnym. Więc nie tylko „Microsoft”.
Aardvark
Nie, tylko z powodu inżynierii odwrotnej. NTLM nie jest otwarty, nie jest publicznie udokumentowany przez Microsoft. Jest to więc bezcelowy mechanizm bezpieczeństwa.
Michael-O,
Nie wiem co w tym jest, ale: msdn.microsoft.com/en-us/library/cc236621.aspx
thinkOfaNumber
@thinkOfaNumber, to znaczy, potwierdzono, został wydany wiele lat temu, chociaż nie jest dostępna żadna pełna funkcja implementacji NTLM typu open source. Pomyśl dlaczego nie?
Michael-O,
1

Kerberos jest wymagany, jeśli musisz podszyć się pod użytkownika, aby uzyskać dostęp do zasobów, które nie znajdują się na serwerze iis.

Greg Askew
źródło