Autentizačné systémy

Matej Buday, 255699@mail.muni.cz

Obsah

Kerberos

Čo to je?

Kerberos je sieťový protokol umožňujúci vzájomnú autentifikáciu klienta a serveru. Vyžaduje tretiu, dôveryhodnú, stranu. Protokol je vhodný na nasadenie na nezabezpečených sietiach, nakoľko zaručuje integritu posielaných dát a bráni sa útokom typu replay. Bol vyvinutý na MIT v druhej polovici osemdesiatych rokov ako vedľajší produkt projektu Athena. Jeho meno pochádza z gréckej mytológie, kde označuje trojhlavého psa strážiaceho východ z podsvetia. Spolu s protokolom bola na MIT vytvorená (takmer) rovnomenná aplikácia využívajúca tento protokol. Vzhľadom na to, že zákony Spojených Štátov neumožňovali "vývvoz" kryptografie(a Kerberos obsahoval DES) vznikla vo Švédsku(KTH) jeho non-US alternatíva nazývaná KTH-KRB. Posledná "Európska" implementácia tohto protokolu(vo verzii 5) sa nazýva Heimdal.

Ako funguje?

Kerberos je trojstranný protokol, kde vystupuje klient, server a ďalší, dôveryhodný, server. Tento sa nazýva Key Distribution Center(KDC) a logicky sa delí na dve hlavné časti: Authentication Server (AS) a Ticket Granting Server (TGS). KDC pozná heslá všetkých užívateľov a služieb na spravovanej sieti.

Klient sa autentifikuje voči KDC tak, že kontaktuje AC a vyžiada si nový ticket, ktorý ho v budúcnosti bude oprávňovať k získaniu ticketov pre jednotlive služby. AC si pošle klientovi správy, ktore obsahujú Session Key, ktorý je zašifrovaný hashovaným heslom z databázy KDC a spomínaný Ticket Granting Ticket, ktorý je zašifrovaný privátym kľúčom TGS. Ticket Granting Ticket sa skladá z id klienta, jeho sieťovej adresy, session key a časovej platnosti tiketu. Klient si pomocou svojho zahashovaného hesla(zadaného užívateľom) rozšifruje správu obsahujúcu session key.
V prípade, že chce klient pristúpiť k nejakej službe, tak kontaktuje TGS poslaním (stále) zašifrovaného TGT, id služby, ktorej sa dožaduje a svoje id spolu s timestampom zašifrované pomocou Session Key. TGS si teraz môže prečítať obsah TGT. Pomocou Session Key(ktorý bol obsiahnutý v TGT) si odšifruje druhú správu. Následne odošle klientovi Client-Service Ticket, ktorý obsahuje id klienta, jeho adresu, dobu platnosti a client-server session key zakryptovanú pomocou tajného kľúča služby. Ďalej mu pošle client-server session key zašifrovaný pomocou pôvodného Session Key. Teraz sa klient potrebuje autentifikovať voči samotnej službe - Pošle jej tiket, ktorý na autentifikáciu k tejto službe dostal a svoje id spolu s timestampom zašifrované pomocou client-server session key, ktorý si dokázal prečítať pomocou Session Key. Služba si pomocou svojho privátneho kľúča prečíta tiket a pomocou informácií v ňom si pozre aj druhú časť správy. Na záver pošle správu obsahujúcu timestamp+1 zašifrovanú pomocou client-server key. Klient si skontroluje, či je timestamp správne zvýšený a následne zaháji využívanie samotnej služby.
-- celý tento postup sa da v zrozumiteľnejšej forme nájsť na wikipedia.org

Konfigurácia

Základná konfigurácia Kerberosa(Heimdal) sa nachádza v dvoch súboroch: - krb5.conf - obsahuje nastavenia Kerberosa, definíciu a nastavenia realmov, umiestnenie súboru kdc.conf, ... - kdc.conf - definuje vlastnosti realmov, umiestnenia súborov s užívatelmi, ...

krb5.conf

[libdefaults]
 default_realm = FI.MUNI.CZ
 dns_lookup_realm = false
 dns_lookup_kdc = false
 forwardable = true

[appdefaults]
   forwardable = true
   forward = true
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }
 
[realms]
 FI.MUNI.CZ = {
  kdc = krb.fi.muni.cz:88
  kdc = krb1.fi.muni.cz:88
  admin_server = krb.fi.muni.cz:749
  default_domain = fi.muni.cz
 }

[domain_realm]
 .example.com = FI.MUNI.CZ
 example.com = FI.MUNI.CZ
 
 [logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log
 
zdroj: archiv referatov
libdefaults
Contains default values used by the Kerberos V5 library.
appdefaults
Contains default values that can be used by Kerberos V5 applications.
realms
Contains subsections keyed by Kerberos realm names. Each subsection describes realm-specific information, including where to find the Kerberos servers for that realm.
domain_realm
Contains relations which map domain names and subdomains onto Kerberos realm names. This is used by programs to determine what realm a host should be in, given its fully qualified domain name.
logging
Contains relations which determine how Kerberos programs are to perform logging.
login
Contains default values used by the Kerberos V5 login program.
capaths
Contains the authentication paths used with direct (nonhierarchical) cross-realm authentication. Entries in this section are used by the client to determine the intermediate realms which may be used in cross-realm authentication. It is also used by the end-service when checking the transited field for trusted intermediate realms.

kdc.conf

[kdcdefaults]
    kdc_ports = 88

[realms]
    dsdoe.ornl.gov = {
        profile = /etc/krb5.conf
        database_name = /krb5/var/krb5kdc/principal
        admin_database_name = /krb5/var/krb5kdc/kadm5_adb
        admin_database_lockfile = /krb5/var/krb5kdc/kadm5_adb.lock
        admin_keytab = FILE:/krb5/var/krb5kdc/kadm5.keytab
        acl_file = /krb5/var/krb5kdc/kadm5.acl
        key_stash_file = /krb5/var/krb5kdc/.k5stash
        kdc_ports = 88
        kadmind_port = 749
        max_life = 10h 0m 0s
        max_renewable_life = 7d 0h 0m 0s
        master_key_type = des-cbc-crc
        supported_enctypes = des-cbc-crc:normal des:v4 
    }
zdroj: archiv referatov
kdcdefaults
Contains default values for overall behavior of the KDC.
realms
Contains subsections keyed by Kerberos realm names. Each subsection describes realm-specific information, including where to find the Kerberos servers for that realm.
logging
Contains relations which determine how Kerberos programs are to perform logging.

databáza

V databáze sa nachádzajú informácie o jednotlivých nodách v spravovanej sieti. Pre databázu si vytvoríme adresár

#mkdir /var/heimdal
Ďalej si pomocou programu kstash nastavíme master key, ktorým bude databáza šifrovaná.
     # kstash
     Master key:
     Verifying password - Master key:
Vytvorenú databázu zinicializujeme programom kadmin. Parametrom -l ho spustime na lokálny realm. Novú nodu(principal) pridáme príkazom add. Pomocou delete môžme principal zmazať.
     # kadmin -l
     kadmin> init MY.REALM
     Realm max ticket life [unlimited]:
     Realm max renewable ticket life [unlimited]:
     kadmin> add me
     Max ticket life [unlimited]:
     Max renewable life [unlimited]:
     Attributes []:
     Password:
     Verifying password - Password:
 
Následne môžme spustiť oboch daemonov a vyskúšať si vyžiadanie tiketu pomocou príkazu kinit.

Prispôsobenie systému

V programe kadmin si príkazom ext vytvoríme tab súbor pre zvolený principal. Ten spolu s konfiguráciu krb5.conf nahráme na požadovaný server, kde majú bežat kerberizované služby. Klient, ktorý chce tieto služby využívať musí taktiež disponovať konfiguračným súborom.
-Keďže jednou z najväčších slabín kerberosu je jeho single-point-of-failure, tak umožňuje fungovanie na viacerých strojoch súčastne pričom databáza je replikovaná.

PAM

PAM (Pluggable Authentication Modules) je sada knižníc, ktorá integruje viaceré nízko-úrovňové autentizačné mechanizmy do jedného API. Pôvodne bol PAM vyvinutý v Sun Microsystems. V súčasnosti je podporovaný vo vačšine UNIXových systémov, napr. AIX, HP-UX, Solaris, Linux, FreeBSD, MacOS X a NetBSD. Pokiaľ viem, tak nie je podporovaný v Slackware a OpenBSD.
Keďže PAM uplatňuje modulárny princíp, je jednoduché napríklad pridať nový spôsob autentizácie (čítačku odtlačkov prstov) či zmeniť spôsob autentizácie v nejakom programe (chcem overovať heslá pomocou Kerbera namiesto /etc/shadow).
Celý systém sa skladá z troch súčastí: Knižnica libpam - oproti nej sú linkované programy, ktoré chcú PAM využívať PAM moduly - poskytujú konkrétne autentizačné mechanizmy. Moduly sa zvyčajne nachádzajú v adresári /lib/security (Solaris a niektoré UNIXy /usr/lib/security) a do pamäte sú zavádzané dynamicky
Stará sa o:
auth -- autentizace account -- accounting session -- ... password -- zmena hesla

konfigurácia

Nachádza sa v súbore /etc/pam.conf (prípadne /etc/pam.d/*) format:

service type control module-path module-args

type

account - ako overiť existenciu a platnosť užívateľského účtu, práva k danej službe a pod.
auth - ako overiť identitu užívateľa
password - zmeny hesiel (ako heslo zmeniť, ako overiť, či je dostatočne silné a pod.)
session - definuje, čo sa má stať pred udelením oprávnenia a po jeho odobratí. Napr. pripojenie domovského adresára užívateľa, auditing a pod.

control

required - zlyhanie modulu spôsobí zlyhanie autentizácie, ale až po skončení ostatných zreťazených modulov
requisite - zlyhanie modulu spôsobí okamžité zlyhanie autentizácie
sufficient - úspech tohoto modulu postačuje na úspešnú autentizáciu (pokiaľ predtým nezlyhal modul s "required")
optional - úspech alebo zlyhanie tohoto modulu sa berie do úvahy iba vtedy, ak je to jediný modul daného typu asociovaného s touto službou.

moduly

Literatura