Przejdź do głównej zawartości

Linux RHS333 - KERBEROS (beta)

Kerberos to protokół uwierzytelniania w sieci . Zaprojektowany został w celu zapewnienia silnego uwierzytelniania dla aplikacji klient / serwer przy użyciu kryptografii klucza tajnego. Darmowa implementacja tego protokołu stworzona została na Massachusetts Institute of Technology (MIT). Wiele z używanych protokołów sieciowych nie posiada żadnych zabezpieczeń podczas przesyłania danych. Fakt ten jest wykorzystywany przez złośliwych hakerów używających narzędzia służące do podsłuchiwania ruchu sieciowego. Kerberos stanowi rozwiązanie zdecydowanie podwyższające bezpieczeństwo danych przesyłanych przez sieć. Umożliwia on zweryfikowanie tożsamości klienta, który chce się dostać do serwera i na odwrót - serwer może przedstawić się klientowi. Protokół ten umożliwia również szyfrowanie całej komunikacji zachowując przy tym integralność danych.


Kerberos jest systemem bezpiecznej autentykacji sieciowej bazującej na uwierzytelnianiu za pomocą uprawnień nazywanych biletami (ang. tickets) zabezpieczonymi przy użyciu sekretnego klucza szyfrującego. Stosując tego rodzaju mechanizm relacja zachodzi zazwyczaj w 3 punktach takich jak:

  • KDC - Key Distribution Center  (Centrum Dystrybucji Kluczy)
  • Serwer Aplikacyjny 
  • Klient (maszyny, terminale użytkowników)

Bilety wydawane są przez centralny serwer zwany KDC (Key Distribution Server). Lokalna domena składa się z wszystkich hostów używających tego samego KDC wystawiającego bilety, która można porównać do domeny NIS lub LDAP. Domyślnie domena DNS dla wszystkich członków nosi nazwę KERBEROS. Przykładowo domeną KERBEROS dla hostów w domenie example.com może być EXAMPLE.COM. 

Każdy host na którym działa usługa sieciowa wspierająca autentykacje kerberos nazywana jest serwerem aplikacji. Każdy serwer aplikacyjny oraz każdy użytkownik kerberosa posiada tożsamość i hasło do niego przypisane. W KDC przechowywane są hasła wszystkich użytkowników oraz usług działających w danej domenie. Użytkownicy początkowo logują się przy użyciu hasła, a następnie są im przydzielane bilety (tickets) utworzone przez KDC. Bilet taki umożliwia autentykacje użytkownika w domenie kerberosa oraz daje dostęp do konkretnej usługi na innym hoście na jakim dana usługa działa, zakładając, że host ten również znajduje się w domenie kerberos (realm). Dostęp do usługi możliwy jest bez ponownego podawania hasła. Przyjęto, że domena kerberosa określana jest mianem - królestwo kerberosa

PRINCIPALS


Principals - unikalna nazwa, identyfikator w królestwie kerberosa określająca użytkownika lub usługę sieciową. Principal składa się z trzech części: primary, instance, realm. Każdy principal posiada hasło zaszyfrowane kluczem, które musi być zapamiętany przez danego użytkownika. W przypadku usług ich hasła przechowywane są w pliku keytab. KDC zna wszystkie hasła. 

Każdy principal przybiera następującą formę: 

primary/instance@REALM

gdzie element "instance" jest opcjonalny, a jeżeli nie podano "REALM" przybiera on wartość zdefiniowaną w pliku : /etc/krb5.conf.

Dla użytkowników wartością "primary" są ich nazwy. Wartość "Instance" zazwyczaj nie występuję i  stosuję się ją do opisania ról lub rodzajów dostępu administratorskiego. 

testowy@EXAMPLE.COM
testowy/admin@EXAMPLE.COM

Powyższe formy "principals" mogą być użyte dla tego samego użytkownika, jednak z punktu widzenia Kerberosa posiadają oddzielne hasła. W pierwszej wersji zastosowano standardową autentykacje. Druga wersja ma zastosowanie gdy zachodzi potrzeba wykonać pracy z uprawnieniami administratora. 

Maszyna, która jest dostawcą usług - serwer aplikacyjny - również musi posiadać swoją bazę "principals". Tutaj jednak chodzi o "principals" określających usługi np.: 

http/host1.example.com@EXAMPLE.COM
ftp/host1.example.com@EXAMPLE.COM

Powyższe "principals" mogą należeć do usług httpd oraz ftp działających na maszynie host1. Host ten musi umożliwiać zalogowanie się do niego przez sieć przy użyciu sshd i rlogind. Usługi przechowują hasła w pliku keytab. 

AUTENTYKACJA


Na Centrum Dystrybucji Kluczy składają się : 
  1. Authentication Serwer (AS) - przyznaje TGT klientom, którzy chcą skorzystać z usług dostępnych w ramach środowiska zabezpieczonego przez Kerberos
  2. Ticket-Granting-Service (TGS) - usługa przyznająca bilety (tickets) na podstawie TGT
TGT - jest to specjalny bilet (token) jaki zostaje przyznany dla klienta (principal) z potwierdzona tożsamością w środowisku Kerberos. Bilet ten daje możliwość klientowi wnioskowanie o kolejne bilety do poszczególnych usług

Przebieg autoryzacji 

  • Użytkownik wpisuje login i podaje hasło 
  • Usługa do jakiej klient się loguję wysyła zapytanie o TGT dla tego "principala" do KDC
  • KDC odsyła usłudze TGT zaszyfrowane hasłem użytkownika
  • Jeżeli usługa może odszyfrować hasło zawarte w TGT hasłem podanym przez użytkownika to użytkownik zostanie zalogowany do danej usługi. 

Tak więc przy pierwszym logowaniu użytkownik udostępnia swoją nazwę użytkownika i hasło jakim autoryzuję się z usłudze Kerberos. Następuję konwersja nazwy użytkownika do postaci "principal" i następnie wysłane zostaje żądanie do KDC o bilet TGT dla użytkownika umożliwiający mu wnioskowanie o kolejne bilety do wybranych usług. KDC tworzy klucz do zaszyfrowanej sesji , który używany będzie jako TGT.  Jedną kopie utrzymuje lokalnie, drugą z kopii szyfruję hasłem użytkownika i odsyła do klienta.


  • Klient wysyła żądanie o bilet dla danej usługi do KDC używając otrzymanego wcześniej TGT
  • KDC odsyła do klienta dwie identyczne kopie 
    • Jedna kopia zaszyfrowana jest przy użyciu TGT
    • Druga kopia zaszyfrowana jest hasłem usługi 
  • Klient odsyła do usługi 
    • Bilet zaszyfrowany hasłem usługi 
    • Znacznik czasu zaszyfrowany przy użyciu biletu
Klient używa aktualnego TGT, którym odszyfrowuje pierwszą kopie biletu. Następnie tworzy autentykator poprzez zaszyfrowanie aktualnego znacznika czasu przy użyciu uprzednio odszyfrowanego biletu. Klient odsyła drugą zaszyfrowaną hasłem usługi kopie biletu wraz z autentykatorem do docelowej usługi.

Usługa po otrzymaniu biletu odszyfrowuje go własnym hasłem, jakie przechowywane jest w pliku keytab. Jako, że jedynie usługa oraz KDC znają hasło usługa ma pewność, że bilet pochodzi z KDC. Dalej w usłudze zachodzi proces odszyfrowania autentykatora przy użyciu odszyfrowanego biletu. Jeżeli operacja przebiegnie poprawnie usługa ma pewność, że klient mógł odszyfrować otrzymany od niej bilet hasłem zgodnym z tym jakie znajduje się w KDC.  


BILET i AUTENTYKATOR

Bilet umożliwia klientowi dostęp do danego serwisu. Bilet składa się z : 
  1. Nazwa serwera
  2. Nazwa klienta
  3. Adres IP klienta
  4. Znacznik czasu (timestamp)
  5. Czas życia biletu 
  6. Klucz sesji
Bilet działa tak długo jak zastało to określone w jego czasie życia i może być w tym czasie wykorzystany wielokrotnie. 

Autentykator ma za zadanie potwierdzić, że dany bilet jest prawdziwy. Autentykator tworzony jest za każdym razem gdy klient chce uzyskać dostęp do danej usługi. W autentykatorze znajdują się : 
  1. Nazwa klienta
  2. Adres IP klienta
  3. Znacznik czasu klienta
Autentykator zaszyfrowany zostaje kluczem sesji. Znacznik czasu jaki znajduje się w autentykatorze stanowi zabezpieczenie przed zautomatyzowanymi (w pętli ) atakami. W związku z tym wszystkie hosty znajdujące się w królestwie (realm) Kerberosa muszą mieć dokładną synchronizację czasu (NTP). 

ELEMENTY USŁUGI KERBEROS


  1. Pakiety
    • krb5-server
    • krb5-libs
  2. Usługi
    • krb5kdc - (/usr/kerberos/sbin/krb5kdc) - Usługa dystrybucji kluczy 
    • kadmind - (/usr/kerberos/sbin/kadmind) - Usługa administracyjnej bazy danych
    • kpropd - (/usr/kerberos/sbin/kpropd) - Usługa utrzymania bazy danych na serwerach slave
  3. Porty
    • UDP : 88, 464
    • TCP : 88, 749, 754
  4. Pliki konfiguracyjne
    • /etc/krb5.conf - Główny plik konfiguracyjny
    • /var/kerberos/krb5kdc/
      • kdc.conf - specyfikacja konfiguracji serwera
      • kadm5.acl - kontrola dostępu do bazy administracyjnej
      • kpropd.acl - uprawnienia maszyn slave
      • principal - baza danych usługi Kerberos
  5. Powiązane zagadnienia 
    • krb5-workstation
    • pam_krb5
    • ntp

GŁÓWNY PLIK KONFIGURACYJNY /etc/krb5.conf


Głównym plikiem konfiguracyjnym usługi Kerberos jest /etc/krb5.conf. W pliku tym przechowywane są informację dotyczące ustawień oraz lokalizacji KDC. Standardowo plik znajduje się w lokalizacji /etc/ można to jednak zmienić stosując ustawienie zmiennej środowiskowej KRB5_CONFIG.

Sekcje pliku krb5.conf :

  • [libdefoults] - kontrola domyślnych bibliotek Kerberos. 
  • [realms] -  ustawienia dotyczące "królestwa" (domeny) Kerberosa.
  • [domain-realm] - ustawienia określające mapy połączeń do zdalnych hostów w domenie
  • [capaths] - ścieżki uwierzytelniania dla nie hierarchicznej strefy krzyżowej
  • [appdefaults] - ustawienia Kerberos dla wybranych aplikacji i usług
  • [plugins] - kontrola ustawień dodatkowych modułów
Najważniejszą z sekcji głównego pliku jest [libdefaults], kontrolująca domyślnie używane biblioteki Kerberosa. Następna istotną pozycją jest [realms] gdzie znajdują się ustawienia "królestwa" oraz [domain_realm] czyli konfiguracja połączeń zdalnych hostów.

Domyślnie plik /etc/krb5.conf ma postać :

[root@station1 ~]# vim /etc/krb5.conf

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = EXAMPLE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 EXAMPLE.COM = {
  kdc = kerberos.example.com
  admin_server = kerberos.example.com
 }

[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM

INSTALACJA KDC ( CENTRUM DYSTRYBUCJI KLUCZY)


W systemie muszą znaleźć się odpowiednie pakiety krb5-server oraz krb5-libs. Podstawowe ustawienia realizowane są w pliku /etc/krb5.conf. Ustawienia dodatkowe konfigurujemy w /var/kerberos/krb5kdc/kdc.conf gdzie możemy kontrolować różne specyficzne ustawienia. Pozostaje jeszcze ustawienie kontroli dostępu, co można zrobić w pliku /var/kerberos/krb5kdc/kadm5.acl.

Krok 1 - instalacja wymaganych pakietów.

#  yum install krb5-server
#  yum install krb5-libs

Potrzebna będzie jeszcze baza Kerberosa którą musimy utworzyć. 

Krok 2 - Utworzenie bazy Kerberosa

Do tworzenia bazy stosujemy narzędzie kdb5_util, które pozwala administratorowi na wykonywanie niskopoziomowych operacji dotyczących bazy danych Kerberos. 

# kdb5_util create -r REALM -s 

przykład:

# kdb5_util create -r station1.example.com -s  


UWAGA !

Jeżeli wykonujemy to w celach edukacyjnych czy też testowych możemy długo czekać na prompt wołający o podanie hasła do bazy. Dzieje się tak dlatego, że potrzebne są losowe dane generowane na podstawie operacji dyskowych lub sieciowych i tego rodzaje operacje muszą mieć miejsce w systemie. Na maszynie postawionej np.: w VirtualBox nie wiele będzie się działo i musimy wywołać takie operacje sztucznie. 

Wywołanie takie może mieć postać : 

# for i in `seq 1 10000`; do echo $i > dupa$i; sync; sync; done

Po wykonaniu powyższej operacji zostaniemy poproszeni o podanie głównego hasła bazy :

# kdb5_util create -r STATION1.EXAMPLE.COM -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'STATION1.EXAMPLE.COM',
master key name 'K/M@STATION1.EXAMPLE.COM'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:
Re-enter KDC database master key to verify:

Krok 3 - Edycja pliku kdc.conf

W pliku /var/kerberos/krb5kdc/kdc.conf edytujemy sekcję [realms] :

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
STATION1.EXAMPLE.COM = {
  master_key_type = aes256-cts
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal

Krok 5 - Konfiguracja w pliku kadm5.acl




Komentarze

Najczęściej czytane w tym miesiącu

50 popularnych pytań dotyczących systemu Linux zadawanych na rozmowach kwalifikacyjnych. (Pytania & Odpowiedzi)

Jak dodać użytkownika w systemie Windows z poziomu konsoli CMD? (net user, net localgroup)

Generowanie testowych plików o określonej wielkości