Kerberos autentifikacija – Prvi deo

Kerberos je autentifikacioni protokol razvijen u MIT-u (Massachusetts Institute of Technology). Naziv je dobio po troglavom psu, čuvaru podzemnog sveta, iz Grčke mitologije. Ovaj protokol se temelji na simetričnom Needham–Schroeder protokolu. Postoji nekoliko verzija protokola. Prve tri verzije su bile interne, korišćene samo u okviru MIT-a. Četvrta verzija je bila javno dostupna, krajem 1980-e, glavni tvorci su bili Steve Miller i Clifford Neuman. Malo kasnije, 1993. godine Neuman i Kohl su objavili petu verziju sa namerom da prevaziđu postojeća ograničenja i probleme bezbednosti. Vlasti u Sjedinenim Američkim Državama klasifikovale su kerberos kao pomoćnu vojnu opremu, na američkoj listi za oružje i zabranile njen izvoz, jer je koristio algoritam za dešifrovanje podataka. 2007-e godine MIT formira kerberos konzorcijum kako bi postigao kontinuirani razvoj. Neki od sponzora osnivača su Oracle, Apple inc, Google, Microsoft i neke od akademskih institucija. Implementacija sistema postaje slobodno dostupna i implementirana je na svim operativnim sistemima.

Šta je Kerberos?

Mnogi od protokola na internetu ne pružaju nikakvu sigurnost, što mogu da iskoriste hakeri. Zato su aplikacije koje šalju nešifrovanu lozinku preko mreže izuzetno ranjive. Neki sajtovi koriste firewall da bi rešili probleme sa mrežnom sigurnošću. Firewall pretpostavlja da su svi spolja “loši momci” što nije dobra pretpostavka. Zaštitni zidovi imaju značajan nedostatak u tome što ograničavaju način na koji korisnici mogu koristiti internet. Na mnogim mestima ova ogranicenja su jednostavno nerealna i neprihvatljiva. MIT je kreirao kerberos kao rešenje za ove probleme sa mrežnom sigurnošću. Projektovan je da pruži jaku autentifikaciju za klijent/server aplikacije pomoću kriptografije tajnim ključem. Nakon što klijent i server koriste kerberos kako bi potvrdili svoj identitet oni takođe mogu da šifruju svoje komunikacije da bi osigurali integritet privatnosti i integritet podataka. MIT obezbeđuje kerberos u izvornom obliku tako da svako ko ga želi koristiti može sam pogledati kod i uveriti se u njegovu pouzdanost. Kerberos je vrlo dobro rešenje za mrežne bezbednosne probleme. On pruža alate za autentifikaciju i snažnu kriptografiju preko mreže kako bi vam pomogao oko zaštite informacionog sistema u celom preduzeću. Jedna od najznačajnijih funkcionalnosti ovog protokola je Single Sign On, koja korisnicima omogućuje da se samo jednom prijave na sistem i nakon toga u skladu sa dozvolama imaju pristup svim resursima u sistemu. Dakle, uz pomoć Kerberos protokola otklanja se ubotreba korisničkih lozinki i smanjuje se vreme potebno za pristup pojedinim servisima. Od izuzetne važnosti je što ovaj protokol korisničke šifre nikad ne šalje preko mreže u čistom tekstualnom obliku što ga čini sigurnim u odnosu na napade praćenjem i analizom mrežnog prometa. Neke verzije Windows operativnog sistema ovaj protokol koriste za autentifikaciju korisnika i često se pogrešno smatra kao Microsoft-ovim proizvodom. Kao testnu platformu u ovom dokumentu smo koristili Linux verziju 16.04 .

Osnovne karakteristike

Kerberos protokol se definiše kao potpuno siguran, baziran na centralnom entitetu za autentifikaciju kojem svi drugi entiteti u potpunosti veruju. Taj centrali entitet u Kerberos sastavu se naziva KDC server (Key Distribution Center). On u sebi sadrži sve autentifikacijske parametre svih entiteta u Kerberos sistemu i zasniva se na master/slave arhitekturi. Ulogu KDC servera može obavljati više servera kako bi se izbegao prestanak rada usled otkaza glavnog (master) računara. Kao što smo već rekli, korisničke lozinke nikada se ne šalju preko mreže u čistom tekstualnom obliku, već u tu svrhu se koriste specijalne kriptovane poruke ograničenog trajanja (tickets). Njih generiše KDC server na zahtev korisnika koji želi pristupiti određenom resursu u Kerberos sistemu. Single-sign-on funkcionalnost podrazumeva proces u kome se korisnik samo jednom prijavljuje u sismem, posle čega mu je dozvoljen pristup svim mrežnim servisima koji podržavaju Kerberos protokol. Nakon početne prijave u sismtem, korisnicima je pristup svim mrežnim resursima u potpunosti transparentan što znatno oklakšava rad u distribuiranim okruženjima. Uz Kerberos protokol su vezani brojni pojmovi koji su specifični za ovaj sistem i ključni za njegovo razumevanje. U nastavku će biti objašnjeni najvažniji pojmovi koji će znato olakšati implementaciju.

Kerberos realm i principali

Svaki entitet Kerberos sistema, bez obzira da li se radi o korisniku, mrežom servisu ili nečem trećem opisan je određenim imenom u bazi KDC servera, koji se naziva principal. Svaki principal jedinstveno opisuje entitet u Kerberos sistemu i ima odgovarajuću strukturu definisanu specifikacijom protokola. Takođe, svaki principal poseduje tajni ključ koji je poznat KDC serveru i entitetu o čijem ključu se radi. Ovaj tajni ključ se koristi za enkripciju poruka u postupku autentifikacije.

Opšti sadržaj principala je sledeći:

identity/instance@realm

1) IDENTITY – Opisuje ime Kerberos entiteta (korisničko ime, mrežni servis, računar). Ovo polje je obavezno.
2) INSTANCE – Ovo polje bliže opisuje Kerberos entitet i može se shavtiti kao opis grupe kojoj odgovarajući entitet pripada. Za korisničke račune instance polje može označavati grupu u koju pripada korisnik. Kod principala koji opisuju mrežne servise ovaj deo sadrži ime računara na kome je pokrenut servis. Na ovaj način se razlikuju isti servisi pokrenuti na različitim računarima. Ovo polje nije obavezno.
3) REALM – Svaka posebna instalacija Kerberos sistema definiše jedinstveni realm koji opisuje sistem i koji se razlikuje od bilo kojeg drugog Kerberos okruženja. Ovo polje najčešće odgova DNS imenu organizacije i uvek se piše velikim slovima.

Navešćemo nekoliko primera principala, kako bi dodatno pojasnili opisani koncept:

• milos@EXAMPLE.COM – Korisnik milos u Kerberos realm-u EXAMPLE.COM
• milos/admin@EXAMPLE.COM – Korisnik milos spada u administratorsku grupu
• host/test.example.com@EXAMPLE.COM – Principal koji opisuje računar

Key Distribution Center (KDC)

Kao što je ranije pomenuto KDC server predstavlja jezgro Kerberos sistema i njegova dostupnost neophodna je za funkcionisanje celog sistema. On se sastoji od tri različite komponente.

  • Baza sa svim principalima unutar definisanog Kerberos realma sa svim pripadajućim tajnim ključevima
  • Autentication Server (AS)
  • Ticket Granting Server (TGS)

Kao što smo već rekli KDC sadrži tajne ključeve svih korisnika sistema stoga je potrebno obratiti pažnju o njegovoj zaštiti. Kompromitovanje KDC servera predstavlja veliki rizik i zato ugrožava sigurnost celog sistema. Kako se jedan Kerberos realm najčešće nalazi na više KDC servera koji osiguravaju funkcionalnost sistema u slučaju pada jednog od njih, visok nivo bezbednosti potrebno je održavati na svim serverima sistema. Od izuzetnog značaja je i međusobna sinhronizacija kako bi se na svakom od njih nalazili najsvežiji podaci.

Uloga Autentication Server-a je da korisnicima koji žele da se prijave u Kerberos sistem izda TGT kartu (Ticket-Granting Ticket). Prilikom inicijalne prijave u sistem, AS generise odgovarajucu TGT kartu koja je kriptovana tajnim kljucem koji je poznat samo korisniku i KDC serveru. Ako proces autentifikacije uspešno dektriptuje kartu sifrom koju je korisnik uneo, dobijena karta se čuva lokalno kako bi se koristila za pristup ostalim mrežnim resursima.

Ticket Granting Server je zadužen za izdavanje dodatnih karata za pristup mrežnim resursima. Za dobijanje odgovarajuće karte klijent TGS serveru prosleđuje TGT kartu dobijenu od AS servera i ime resursa kojem želi pristupiti. Nakon što TGS proveri da li je TGT karta dostupna, korisniku se šalje TGS karta kojom je moguće ostvariti pristup traženom mrežnom resursu.

Kerberos karte

Podaci koje sadrži svaka karta navedeni su u nastavku:

• Ime principala koji zahteva pristup
• Ime principala kojem se zahteva pristup
• Vremenska oznaka
• Vreme trajanja karte
• Lista IP adresa sa kojih je moguća upotreba karte
• Tajni ključ za komunikaciju sa zatraženim resursom

Kerberos karte imaju dve osnovne funkcije, da se potvrdi identitet entiteta koji zahteva pristup odredjenom resursu i da se uspostavi sesijski ključ koji će se koristiti za enkripciju podataka tokom komunikacije. Vremenska oznaka i vreme trajanja karte su takođe bitni parametri Kerberos komunikacije. Njihovom upotrebom sistem se štiti od napada u kojim neovlašćeni korisnik koristi ranije zabeležen mrežni promet sa ciljem neovlašćenog pristupa sistemu. Za ovu zaštitu Kerberos koristi dva mehanizma.

Svaki zahtev korisnika sadrži vremensku oznaku koju generiše računar klijenta prilikom formiranja zahteva. Nakon prihvatanja zahteva KDC server upoređuje lokalno vreme sa vremenskom oznakom u primljenom zahtevu i proverava vremensku razliku sa maksimalnom dozvolenjom koja je 5 minuta (inicijalno). Ukoliko nije, zahtev se odbija. Sve karte izdane od Kerberos servera sadrže vreme trajanja karte u kojem se ista može iskoristiti. Kada ovo vreme istekne karta više nije dostupna.

Kerberos komunikacija

Opis Kerberos komunikacije koji sledi, vezan je za Kerberos 5, poslednju verziju protokola.

KRB_AS_REQ zahtev

Postupak autentifikacije korisnik započinje slanjem KRB_AS_REQ zahteva KDC (AS) serveru. Ova poruka se šalje u tekstualnom obliku i sadrži sledeće elemente.

  • Ime principala Kerberos klijenta koji pokreće zahtev
  • Vremensku oznaku (lokalno vreme klijenta)
  • Ime principala TGS servera (krbtgt)
  • Zahtevano vreme trajanja karte

KRB_AS_REP odgovor

Posle primanja zahteva korisnika, AS server u lokalnoj bazi proverava postojanje korisničkog principala i ukoliko postoji vraća mu odgovor koji je kriptovan tajnim ključem koji KDC server deli sa korisnikom. Na ovaj način dobijeni odgovor može dekriptovati samo korisnik koji poseduje odgovarajući tajni ključ. Osim postojanja principala, KDC server proverava vreme u dobijenom zahtevu i uporedjuje ga sa lokalnim vremenom kako bi se sistem zaštitio od pomenutih napada. KRB_AS_REP odgovor se sastoji iz dva dela. Prvi je kriptovan tajnim ključem korisnika i sadrži sledeće elemente:

  • Sesijski ključ koji će klijent u nastavku komunikacije koristiti za razmenu poruka sa TGS serverom
  • Ime principala TGS servera (krbtgt)
  • Vreme trajanja karte

Dekriptovanjem prvog dela poruke klijent dolazi do sesijskog ključa koji će koristiti za enkripciju budućih poruka koje razmenjuje sa TGS serverom. Drugi deo poruke sadrzi TGT kartu koja je kriptovana tajnim ključem koji KDC server deli sa TGS serverom. To znači da ovaj deo poruke korisnik nije u mogućnosti dekriptovati. Kriptovanu TGT kartu korisnik ce sačuvati u svoju lokalnu cache memoriju i iskoristiti je prilikom zahteva za pristupom ostalim mrežnim resursima. Sve vreme dok je TGT karta dostupna klijent ne mora unositi korisničku lozinku za pristup ostalim mrežnim resursima. Posle isteka TGT karte, klijent ponovo od AS servera mora zatražiti novu TGT kartu generisanjem KRB_AS_REQ.

Sadržaj kriptovane TGT karte je sledeći:

  • Sesijski ključ
  • Ime principala klijenta
  • Vreme trajanja karte
  • Vremensku oznaku KDC servera
  • IP adresa klijenta (dobijena iz AS_REQ zahteva)

KRB_TGS_REQ

Nakon primanja KRB_AS_REP poruke, korisnik svjim tajnim ključem pokušava dekriptovati prvi deo poruke koji sadrži sesijski ključ za komunikaciju sa TGS serverom. Ako je dekriptovanje uspešno, korisnik u cache memoriji čuva sesijski ključ i dobijenu TGT kartu. Klijent još nema pristup nijednom mrežnom resursu. On samo poseduje TGT kartu i sesijski ključ koji će mu omogućiti da od TGS servera zatraži pristup željenom resursu. Zahtev za pristup resursu se sastoji od:

  • Ime principala resursa kojem klijent želi pristupiti
  • Traženo vreme trajanja karte
  • TGT karta
  • Autentikator

KRB_TGS_REP

Slično kao i kod KRB_TGT_REP pri primanju zahteva klijenta KDC server formira odgovor koji će sadžati novi sesijski ključ koji ce klijent koristiti za razmenu poruka sa resursom kojem se zahteva pristup. Format odgovora je identican kao kod KRB_TGT_REP samo što ova poruka sadrži sesijski ključ za razmenu poruka sa zahtevanim resursom i TGS kartu za pristup navedenom resursu. Takođe, poruka se sastoji iz dva dela. Prvi deo je kriptovan sesijskim ključem i sastoji se od sledećih elemenata.

  • Ime principala resursa kojem klijent želi pristupiti
  • Vreme trajanja karte
  • Sesijski ključ za razmenu poruka sa resursom kojem se zahteva pristup

Ovaj deo poruke mogu samo dekriptovati samo KDC (AS) server i klijent. Drugi deo poruke je TGS karta za pristup zatraženom resursu. Ova karta je kriptovana tajnim ključem koji dele KDC server i resurs kojem je zatražen pristup. TGS karta sadrži sledeće elemente:

  • Sesijski ključ za razmenu poruka sa resursom kojem se zahteva pristup
  • Ime principala klijenta
  • Vreme trajanja karte
  • Vremenska oznaka KDC servera
  • IP adresa korisnika