Architektura systemu Kerberos w wersji MIT Athena

Główne składowe systemu
Schemat nazewnictwa
Autentyfikacja typu ( user-to-host )
Czynności administracyjne
Interakcja z innymy systemami Kerberos
Kerberos z praktycznego punktu widzenia
Autentyfikacja typu ( user-to-user )
Problemy otwarte
Wykorzystana literatura

Główne składowe systemu





Schemat nazewnictwa

W systemie Kerberos serwery usługowe oraz użytkownicy posiadają nazwę.

Postać nazwy w Kerberos 4 :
name.instance@realm


Postać nazwy w Kerberos 5 :
component/component/component@realm

W praktyce trzeci component nie jest używany. Przyjęto kowencję nadawać składowej realm nazwę domeny z DNS zapisaną wielkimi literami.


Autentyfikacja typu ( user-to-host )

W wersji Kerberos 4 ( początkowo projektowany protokół ) jest założenie, że usługi systemowe są udostępniane na serwerach bezpiecznych, komunikacja z tymi serwerami odbywa się ze stacji roboczych o wolnym dostępie oraz przez sieć o której bezpieczeństwie nie wolno nic zakładać. Spowodowane jest to koniecznością pamiętania klucza prywatnego danej usługi w pamięci serwera usługi.






Schemat komunikacji typu "user-to-host"

Na następnych rysunkach wygodne są następujące oznaczenia :
c -> klient

s -> serwer

addr -> sieciowy adres klienta

life -> czas ważności biletu

Kerberos -> serwer autentyfikacji

KDBM -> serwer administracji

tgs, TGS ( and. Ticket Grating Service ) -> serwer wydający kluczy sesji dla poczczególnych usług, wymaga okazania TGT (ang. Ticket-Granting-Ticket ) wydawanego przez Kerberos

Kx -> klucz prywatny x

Kx,y -> klucz sesji dla x i y

{abc}Kx -> abc zakodowane kluczem x

Tx,y -> bilet x dla korzystania z y

Ax -> poświadczenie dla x




Bilet i poświadczenie w systemie Kerberos


Główny cel biletu - bezpieczne dostarczanie danych identyfikujących użytkownika do końcowego serwera

Główny cel poświadczenia - wyposażenie serwera w informacje konieczne dla sprawdzenia czy bilet został wysłany przez użytkownika wspomnianego w bilecie

Bilet może być wykorzystany WIELE RAZY.
Poświadczenie może być wykorzystane TYLKO RAZ.

Ciekawe rodzaje biletów :

Problem delegowania autentyfikacji : Klient ma dostęp do usług serwera N2 i chce żeby serwer N1 miał taki sam dostęp do usług serwera N2 jak klient, nie patrząc na to w jakiej relacji są serwer N1 i serwer N2.

Rozwiązanie 1 : klient pobiera bilet do serwera N2 i podaje go serwerowi N1 - niewygodne powinien zawsze znać nazwę serwera N2, co w większości aplikacji jest wyznaczane dynamicznie. Bilety używane w tym przypadku mają ustawioną flagę proxy.

Rozwiązanie 2 : klient wysyła do serwera N1 swój TGT, który powinien być forwardable.

Różnica pomiędzy biletami proxy a forwardable polega na niemożliwości delegowania biletu proxy w przypadku gdy jest on TGT. Bilety proxy są rzadziej stosowane w praktyce.




Schemat autentyfikacji przy pomocy Kerberos od strony wewnętrznej




Schemat autentyfikacji przy pomocy Kereros od strony zewnętrznej
  1. Żądanie biletu dla TGS
  2. Bilet dla TGS ( TGT )
  3. Żądanie biletu dla serwera
  4. Bilet dla serwera
  5. Żądanie obsługi zamówienia dla serwera

Czynności administracyjne

W implementacji zakłada się, że zmieniana może być zawartość tylko i wyłącznie bazy na maszynie Master, ale autentyfikacja może się odbywać jak i na Master tak i na Slave.



Schemat obsługi żądań autentyfikacji



Schemat obsługi żądań administracyjnych



Schemat obsługi żądania zmiany hasła lub dodawania/usunięcia użytkownika


  1. Żądanie biletu dla KDBM
  2. Pobranie biletu
  3. Żądanie kpasswd lub kadmin
  4. Ewentualna aktualizacja danych ( zależnie od autoryzacji )
  5. Zpisanie log'u ( następuje zawsze )
Uwaga : korzystanie z usługi KDBM odbywa się bezpośrednio ( bez udziału TGS ). Użytkownik powinien wprowadzić hasło jak w przypadku żądania biletu dla TGS. Spowodowane jest podnoszeniem stopnia bezpieczeństwa.




Schemat propagowania głównej bazy danych

Zalety :
  • Wzrost wydajności : autentyfikacja możliwa gdy przynajmniej jedna z maszyn posiadających kopię danych jest w aktywnym stanie
  • Prawie całkowite usunięcie możliwości powstania wąskiego gardła systemu ( centralizacja )
Powoduje problem utrzymywania kopii danych na maszynach Slave w stanie spójnym ( zgodnym z Master ).

Problem jest rozwiązany - baza z Master jest w całości przesyłana przez każdą godzinę do Slave.

Algorytm propagowania :
  1. Program kprop na maszynie Master wylicza sumę kontrolną bazy
  2. Przesyła sumę kontolną zakodowaną kluczem Master'a, który jest współdzielony przez Master i Slave, do programu nasłuchowującego kpropd na maszynie Slave, po czym przesyła dane z bazy ( każdy rekord w bazie jest zakodowany kluczem Master'a )
  3. kpropd po otrzymaniu danych oblicza sumę kontrolną i porównuje z otrzymaną. W przypadku zgodności wzbogaca lokalną bazę o otrzymane dane

Kerberos z praktycznego punktu widzenia

Użytkownik

Gwarantowana prawie całkowita przezroczystość - użytkownik nie musi nic wiedzieć o istnieniu Kerberos w systemie : Co pogarsza przezroczystość :

Programista

Programista tworzący aplikację dla systemu z Kerberos może i powinien :

Administrator

Czynności związane z uruchamianiem systemu :
  1. Inicializacja bazy danych
  2. Rejestracja poszczegónych elementów systemu ( użytkowników, usług )
  3. Wystartowanie serwerów administrowania i autentyfikacji
  4. W przypadku istnienia maszyn Slave wystartowanie demonów propagowania danych
  5. Teraz administrator manipuluje systemem korzystając z programu kadmin
Jako przykład - proces dodawania usługi do systemu :
  1. Zarejestruj usługę w bazie przydzielając jej klucz prywatny ( losowo generowany )
  2. Zainstaluj dany klucz razem z pewnymi administracyjnymi danymi na maszynie usługi ( uaktualniając plik /etc/srvtab, który autentyfikuje serwer w podobny sposób jak hasło identyfikuje użytkownika )
Teraz widać czemu maszyny udostępniające usługi muszą być bezpieczne.

Administrator powinien pamiętać o tworzeniu kopii zapasowych

Uwaga : dodawanie systemu Kerberos do już istniejącego systemu jest zadaniem nie banalnym ( problem tworzenia kluczy dla elementów )

Interakcja z innymi systemami Kerberos


Możliwa jest interakcja pomiędy różnymi systemami używającymi Kerberosa. Administratorzy powinni wymienić się kluczami dla szyfrowania biletów - podzielić tajemnicę.



Schemat żądania usługi z innego systemu
  1. Żądanie biletu do usługi ze zdalnego królewstwa od lokalnego TGS
  2. Zwrot TGT do TGS ze zdalnego królewstwa zaszyfrowanego kluczem dzielonym
  3. Ządanie biletu do usługi ze zdalnego królewstwa od zdalnego TGS
  4. Uprawnienie "obcego" klienta do usługi lokalnej
  5. Wysłanie żądania do usługi zdalnej
  6. Otrzymanie odpowiedzi na zapytanie

Jak efektywnie połączyć N systemów ?

Istnieją dwie metody :
  1. Przydział każdej parze systemów klucza - niewygodne ( O(N2) kluczy )
  2. Tranzytywna autentyfikacja ( tylko w Kerberos 5 ) polega na zdefiniowaniu ścieżek w systemie "idąc" którymi dochodzimy do żądanego systemu ( O(N) kluczy ). Jedną ze znanych metod tworzenia ścieżek jest grupowanie w chierarchię

Operacja "łączenia systemów jest bezpieczna" - kluczy do usługi z danego systemu wydaje tylko i wyłącznie TGS z danego systemu. W Kerberos 5 domyślnie ustawione jest ignorowanie żądań z innych systemów ( musisz dodać ewentualnego klienta z zewnętrznego systemu do listy dostępu danego systemu ).

Autentyfikacja typu ( user-to-user )

User-to-user jest protokołem zaimplementowanym w Kerberos 5. Pozwala on na udostępnianie w niebezpiecznej sieci bezpiecznych aplikacji na potencjalnie podejrzałych maszynach. W user-to-host dla udostępnienia usługi na maszynie zakładano że jest ona bezpieczna, bo przechowuje się w jej pamięci trwałej przez dość długi okres klucz prywatny danej usługi. Takie ograniczenie jest zbyt silne dla rzeczywistych potrzeb użytkowników. Przepowadzone badania wykazały, że w praktyce o wiele więcej razy występuje konieczność komunikacji user-to-user, niż user-to-host. Naprzykład użytkownik chce udostępnić usługi nfs lub ftp. Protokół udostępnia możliwość wystartowania serwera na stacji roboczej o dostępie swobodnym bez konieczności przechowywania klucza serwera w pamięci stacji. Jako klucza serwera używa się klucza sesji klienta dla TGT ( Kc,tgt ), którego czas istnienia jest mały.

W celu obejrzenia teoretycznego materiału na temat komunikacji user-to-user odsyłam do pracy :

Don Davis, Ralph Swick, "Workstation Services and Kerberos Authentication at Project Athena" ftp://athena-dist.mit.edu/pub/ATHENA/kerberos/doc/user2user.ps

Tutaj wyświetlę tylko najważniejze aspekty tej pracy.

Kliencka część aplikacji user-to-user jest całkowicie rozwiązana przez protokół user-to-host.
Dla uniknięcia szeregu problemów i pzejrzystośi rozwišzania zapostulowano następujące aksjomaty :
  1. Serwer Kerberos jest bezstanowy
  2. Nie wolno dodać często zmienającego się stanu do bazy danych Kerberos
  3. Kerberos może przeprowadzić tylko jedną tranzakcję w czasie danego połączenia
  4. Przeciążenie serwera Kerberos jest niedopuszczalne
  5. Nie istnieje kluczy o nieskończonym czasie istnienia
Oczywistym wydaje się wysłać przez TGS do użytkownika żądającego usługę komunikat postaci

{ Kc,s, .., { Tc,s }Ks,tgs }Kc,tgs


ale dla spełnienia aksjomatów trzeba trochę pomyśleć.

Przykład : Jak dostarczyć do TGS dwa TGT wraz z ich poświadczeniami ( jak zdobyć autentyfiktor usługi, pobranie samego TGT usługi jest bezpieczne ) ?

Autorzy protokołu user-to-user zrobili relaksację ograniczeń na komunikowanie się z TGS. Mianowicie, pokazali redundancje autentyfikatora dla TGS. Najpierw tworzono prostą analagię pomiędzy elementami uwierzytelniającymi dla TGS a zwykłą usługą, teraz - analogia z serwerem uwierzytelniającym Kerberos. Użytkownik autentyfikuje sam siebie przez zastosowanie klucza prywatnego do pakietu z TGT.

Główny cel systemu Kerberos - nie autentyfikacja elementów systemu, a dostarczanie usług dla autentyfikacji jednych elementów systemu przez inne.


Dla przejrzystości oznaczmy przez tc,s wsystkie elementy biletu oprócz nazwy klienta, czyli :

tc,s = { Kc,s, timestamp, life, servername, address IP }




Protokół user-to-user


Wadą protokołu jest niemożliwość działania serwera autonomicznie, operator usługi powinien co jakiś czas odświeżać TGT. Aplikacje korzystające z protokołu powinny same decydować jak obsłużyć żądanie usługi. Dla serwera Kerberos stacje godne zaufania i nie są takie same.

Problemy otwarte

  1. Optymalny czas istnienia biletu ?
  2. Problem zastępcy. W jaki sposób autentyfikowany użytkownik może pozwolić serwerowi zdalnemu korzystać z usług systemu w jego imieniu ?
    Przykład : użytkownik jest zalogowany na jednej stacji, loguje się na zdalnią i chce żeby podczas wykonywania programu na maszynie zdalniej miał możliwość korzystania z usług do których miał dostęp na początkowej stacji
  3. Jak zmniejszyć ryzyko padnięcia ofiarą "niewłaściwego" korzystania ze stacji roboczej ( podmiana oprogramowania na stacji roboczej, np. : login przekierowuje hasło do cracker'a ) ?
Możliwe rozwiązania :
  1. Wybieramy kompromis pomiędzy bezpieczeństwem a efektywnością. Długi czas istnienia biletu - wzrost przezroczystości, krótki - większy stopień bezpieczeństwa
  2. Problem jest częściowo rozwiązany w Kerberos 5 przez wprowadzenie rodzaju biletów forwardable ( z ustawioną flagą TKT_FLG_FORWARDABLE ). Odpowiedzialność za pozwolenie na akceptację przez serwer autentyfikacji takich biletów leży na administratorze .
  3. Spełnienie założenia : KLUCZ UŻYTKOWNIKA NIGDY NIE OPUSZCZA SYSTEMU O KTÓRYM UZYTKOWNIK WIE, ŻE JEST BEZPIECZNY. W praktyce szerokie zastosowanie znajdują SmartCards

Wykorzystana literatura

  1. Jennifer G. Steiner, Clifford Neuman, Jeffrey I. Schiller, 1988. "Kerberos : An Authentication Service for Open Neworks".
  2. Don Davis, Ralph Swick, 1989. "Workstation Services and Kerberos Authentication at Project Athena" .
  3. G. Coulouris, J. Dollimore, T. Kindberg, 1998. "Systemy rozproszone, podstawy i projektowanie."
  4. Steven M. Bellovin, and Michael Merrit, 1991. "Limitations of the Kerberos Authentication System."
  5. John T. Kohl, B. Clifford Neuman, Theodore Y. Ts'o, 1992. "The Evolution of the Kerberos Authentication Service".
  6. Kerberos FAQ.
  7. S.P. Miller, B.C. Newman, J.I. Schiller, J.H. Saltzer, 1988. "Kerberos Authentication and Authorization System" ( Athena technical Plan ).