Jump to content
  • entries
    26
  • comments
    17
  • views
    20634

Βγάζοντας τον κέρβερο βόλτα…..Part 1


giotis

1524 views

 Share

Σε αυτό το blogpost που ήθελα από καιρό να κάνω θα σας παρουσιάσω τις βελτιώσεις του κέρβερου στα Windows 2012.

Για να κατανοήσουμε όμως αυτές τις αλλαγές θα πρέπει να γνωρίζουμε καλά τον κέρβερο και τι ακριβώς κάνει όταν τρέχει ανέμελα στο δίκτυό μας. Αν γνωρίζετε ήδη τη βασική λειτουργία τότε μπορείτε να περάσετε στην επόμενη ενότητα

Ιστορικά στοιχεία:

Ο Kerberos είναι ένα πρωτόκολλο κρυπτογράφησης που αναλαμβάνει να κρυπτογραφήσει τα μηνύματα που ανταλλάσουν οι υπολογιστές σε ένα δίκτυο για ταυτοποίηση των χρηστών. Η ημερομηνία σύλληψης της ιδέας τοποθετείται στα τέλη του 1978 όταν ξεκίνησε και η ιδέα του μοντέλου Client-Server και  βασίζεται πάνω σε μια εργασία των Roger Needham και Michael Schroeder οι οποίοι εργάζονταν στο ερευνητικό κέντρο της Xerox στο Palo Alto.

Στο νέο  μοντέλο χρήσης των υπολογιστών η πιστοποίηση των χρηστών ,εν αντιθέσει με τα «χαζά τερματικά» της εποχής που απλά πιστοποιούσαν  τους χρήστες  απευθείας στον Server, έπρεπε με κάποιον τρόπο να προστατευτούν οι κωδικοί των χρηστών. Οι Needham και Schroeder περιέγραψαν λοιπόν ένα σύστημα στο οποίο ποτέ οι κωδικοί των χρηστών δε θα περνούσαν στο δίκτυο σε απλό κείμενο έτσι ώστε κάποιος να τους διαβάσει, αν και αυτό οι ίδιοι το θεωρούσαν αδύνατο.

Χρειάστηκαν τέσσερα χρόνια για να αρχίσει η δημιουργία του πρώτου τέτοιου συστήματος όμως, μέσω του Project Athena το οποίο μελετούσε σχέδια εφαρμογών Client-Server για ακαδημαϊκή χρήση μαζί με το MIT. Οι πρώτες τρεις εκδόσεις του κέρβερου ήταν καθαρά για εσωτερική χρήση του και προτάσεις ανάπτυξης.

Η έκδοση 4 όμως έγινε διαθέσιμη στο κοινό στις 24 Ιανουαρίου του 1989 από το MIT και σε μικρό χρονικό διάστημα αρκετά έργα λογισμικού υιοθέτησαν το πρωτόκολλο.  Ο κέρβερος στην έκδοση όμως του MIT είχε ένα σημαντικό περιορισμό. Χρησιμοποιούσε κρυπτογράφηση DES την οποία οι αμερικάνικοι νόμοι δεν επέτρεπαν να εξαχθεί.  Το MIT προχώρησε στη δημιουργία μιας ειδικής έκδοσης η οποία στερούταν της κρυπτογράφησης DES αλλά μπορούσε να εξαχθεί.  Σύντομα ακόμη περισσότερες υλοποιήσεις του πρωτοκόλλου άρχισαν να κάνουν την εμφάνισή τους στον πλανήτη που απλά χρησιμοποίησαν άλλο πρωτόκολλο κρυπτογράφησης.

Σήμερα η έκδοση που χρησιμοποιείται είναι η 5 ,ενώ η έκδοση 4 θεωρείται απαρχαιωμένη.

Η υλοποίηση της Microsoft χρησιμοποιεί την έκδοση 5 και την κρυπτογράφηση RC4.

Στόχοι:

Τον κέρβερο δημιούργησε η ανάγκη για ασφάλεια ,ταυτοποίηση και Single Sign On. Ο στόχος του είναι να προσφέρει τα λεγόμενα τρία Α: Authentication πιστοποίηση δηλαδή των χρηστών,Authorization εξουσιοδότηση και Auditing έλεγχο . Αν και ο κέρβερος δεν προσφέρει εξουσιοδότηση ή έλεγχο η δυνατότητα να πιστοποιεί τους χρήστες έδωσε τη δυνατότητα στους προγραμματιστές να τα παρέχουν.

Επιπλέον λύνει το πρόβλημα της διαχείρισης  πολλαπλών βάσεων δεδομένων κωδικών μέσω μιας κεντρικής βάσης το Key Distribution Center.

Βασικές έννοιες

Κάθε εγκατάσταση του κέρβερου έχει την ιδιότητα του τομέα ,χρησιμοποιείται η ονομασία Realm ή Domain στα αγγλικά.

Ο κέρβερος επίσης χρησιμοποιεί την έννοια οντότητα. Κάθε υπολογιστής, χρήστης ή υπηρεσία αποτελεί μια οντότητα ένα Principal. Αυτή η οντότητα είναι συσχετισμένη με κάποιου είδους κλειδί ή κωδικό.

Για κάθε τομέα αν αναπαραστήσουμε μια οντότητα θα βρεθούμε με τη μορφή :

username@REALM για τους χρήστες  

παράδειγμα giotis@domain8.local

host/ Fully-qualified-domain-name@REALM για τους υπολογιστές    

παράδειγμα  host/server.domain8.local@domain8.local

service/Fully-qualified-domain-name@REALM για τις υπηρεσίες

παράδειγμα MSSQLSvc/server.domain8.local@domain8.local

Βασική λειτουργία

Το Key Distribution Center είναι ο «πυρήνας» της λειτουργίας του πρωτοκόλλου. Αποτελείται από τρία τμήματα και τον Authenticator:

Τη βάση δεδομένων ,η οποία στην περίπτωση της Microsoft είναι το Active Directory.

Toν Authentication Server (AS),ο οποίος είναι υπεύθυνος για το λεγόμενο TGT (Ticket-granting-Ticket) . Το TGT είναι το πρώτο εισιτήριο που παίρνει η κάθε οντότητα όταν συνδέεται στο δίκτυο

Στην ουσία η οντότητα δεν χρειάζεται να αποδείξει την ταυτότητά της στον Authentication Server. Ο Authentication Server δίνει εισιτήρια σε όποιον τα ζητήσει. Τα εισιτήρια αυτά κρυπτογραφούνται με τον κωδικό της οντότητας που  βρίσκει στη βάση και αποστέλλονται στη μνήμη cache του τερματικού που συνδέεται. Αν η οντότητα γνωρίζει τον σωστό κωδικό τότε μπορεί να διαβάσει τα περιεχόμενα του εισιτηρίου που δεν είναι τίποτα άλλο από ένα εισιτήριο κρυπτογραφημένο με τον κωδικό του AS. Με αυτόν τον τρόπο διασφαλίζεται η ακεραιότητα του TGT  αφού δεν μπορεί κανείς εκτός από τον AS να διαβάσει τι ακριβώς γράφει.

 

 

Το εισιτήριο αυτό θα χρησιμοποιηθεί για να αποκτήσει πρόσβαση η οντότητα  σε υπηρεσίες που χρησιμοποιούν τον κέρβερο. Με μία μόνο συναλλαγή (το γνωστό Single Sign On ) έτσι αποκτά πρόσβαση στη διαδικασία η οποία θα του επιτρέψει ή όχι την πρόσβαση.

 Τον Ticket Granting Server, ο οποίος παίρνει μια αίτηση από κάθε οντότητα σε μορφή εισιτηρίου και το TGT της οντότητας, συγκρίνει το TGT με αυτό του AS και αν ταιριάζει του επιστρέφει ένα εισιτήριο για την υπηρεσία που ζήτησε.

Τον Authenticator ο οποίος πιστοποιεί πως η οντότητα που ζητάει κάτι από τον κέρβερο είναι όντως αυτή που ισχυρίζεται. Για να το καταφέρει αυτό δημιουργεί ένα πακέτο από τον κωδικό του χρήστη και την ώρα . Το πακέτο αυτό ονομάζεται Pre-authentication Data. Αυτή είναι και η βασική προυπόθεση των 5 λεπτών διαφοράς στα ρολόγια μεταξύ των υπολογιστών. Αν υπάρχει μεγαλύτερη διαφορά ώρας ο κέρβερος απορρίπτει την αίτηση.

 

Αυτά τα εισιτήρια που μοιράζονται από το KDC δεν ισχύουν για πάντα ούτε και για όλες τις υπηρεσίες . Έτσι κάθε φορά που μια οντότητα θα ζητήσει εισιτήριο θα πρέπει να βρει το KDC. Πάντα θα πρέπει να εκτελείται τουλάχιστον μια  υπηρεσία KDC στο δίκτυό μας για τη σωστή λειτουργία.

Από τη μέχρι τώρα περιγραφή μπορεί κανείς να καταλάβει τι είναι περίπου είναι ο κέρβερος . Μια υπηρεσία η οποία απλά ΠΙΣΤΟΠΟΙΕΙ πως η κάθε οντότητα είναι όντως αυτή που ισχυρίζεται στο δίκτυο. Η Microsoft εκμεταλλευόμενη ένα πεδίο που ορίζει το RFC 1510 εν ονόματι authorization data αποστέλλει μαζί με το TGT και πληροφορίες για το χρήστη που αντλεί από την βάση του Active Directory όπως τα SID και τα RID.

Μπορούμε να καταλάβουμε επίσης την έννοια του Single-sign on.

Η καθημερινή λειτουργία του κέρβερου.

Για να καταλάβουμε τι συμβαίνει με τον κέρβερο θα πρέπει να κατανοήσουμε την παρακάτω εικόνα:

ic195542.gif

 

1. Kerberos authentication service request (KRB_AS_REQ)

                Ξεκινώντας η διαδικασία η κάθε οντότητα δημιουργεί μια αίτηση προς το AS του KDC για ένα TGT με το οποίο θα επικοινωνεί με το KDC στις μελλοντικές συναλλαγές.

2. Kerberos authentication service response (KRB_AS_REP)

                Το Authorization Service δημιουργεί ένα TGT και ένα κλειδί για να μπορεί να μιλήσει η οντότητα με το TGS και το αποστέλλει σε αυτή. To TGT είναι κρυπτογραφημένο με το κλειδί του KDC οπότε μόνο το KDC μπορεί να διαβάσει τα περιεχόμενα.

3. Kerberos ticket-granting service request (KRB_TGS_REQ)

                Όταν η οντότητα θα χρειαστεί πρόσβαση σε κάποια υπηρεσία τότε θα δημιουργήσει μια αίτηση προς το TGS η οποία θα περιλαμβάνει το TGT ,τον Authenticator για να βεβαιωθεί ο  TGS πως πραγματικά είναι αυτή η οντότητα που το ζητά και το όνομα της υπηρεσίας (SPN-Service Principal Name). Αυτό το εισιτήριο είναι κρυπτογραφημένο με το κλειδί της οντότητας που το γνωρίζει μόνο η οντότητα και ο KDC διασφαλίζοντας τα περιεχόμενα του αν κάποιος το υποκλέψει.

4. Kerberos ticket-granting service response (KRB_TGS_REP)

                Αν το TGT και ο Authenticator είναι σωστά τότε το TGS φτιάχνει ένα εισιτήριο για την υπηρεσία που περιέχει και το κλειδί του χρήστη  και το επιστρέφει στην οντότητα.Αυτό το κλειδί είναι κρυπτογραφημένο με το κλειδί που μοιράζεται η υπηρεσία με το KDC.

5. Kerberos application server request (KRB_AP_REQ)

                Η οντότητα πλέον έχει ένα εισιτήριο για την υπηρεσία το οποίο το στέλνει μαζί με τον Authenticator στην υπηρεσία που θέλει να συνδεθεί. Η υπηρεσία εξετάζει το εισιτήριο. Για να το αποκρυπτογραφήσει χρησιμοποιεί το κλειδί που μοιράζεται με το KDC διασφαλίζοντας έτσι τα περιεχόμενα του εισιτηρίου αν το υποκλέψει κάποιος στην πορεία.

Όπως καταλαβαίνεται κανείς ,εκτός από αυτούς που πρέπει , δεν έχει πρόσβαση στα περιεχόμενα των εισιτηρίων διασφαλίζοντας την πιστοποίηση της κάθε οντότητας.

Έξτρα κεφάλαιο: Windows Logon

                Κάθε φορά που ένας χρήστης θέλει να συνδεθεί σε έναν υπολογιστή συμβαίνει η παρακάτω διαδικασία:

ic195543.gif

 

Μόλις ο χρήστης πατήσει Control-Alt και Delete (η διαδικασία ονομάζεται  Secure Attention Sequence),εμφανίζεται η εικόνα της GINA (Graphical Identification and Authentication).Εκεί ο χρήστης συμπληρώνει τα στοιχεία του και η βιβλιοθήκη της GINA τα περνάει στο LSA (Local Security Authority)

Το LSA απλά τα περνάει στο SSPI που με τη σειρά του το περνάει στον Security Provider του κέρβερου διότι είναι η προεπιλογή. Αν το όνομα της υπηρεσίας που ζητάει να συνδεθεί η οντότητα (χρήστης) είναι το ίδιο με το όνομα του υπολογιστή τότε ο κέρβερος το περνάει στο NTLM Security Provider. Αν είναι τομέας τότε ο κέρβερος αναλαμβάνει να επικοινωνήσει με το KDC για να αποκτήσει ένα TGT και επίσης ένα Service Ticket για να συνδεθεί στο τερματικό.

Ο χρήστης όταν συνδέεται στο τερματικό συνδέεται αποδεικνύοντας την ταυτότητά του μέσω του εισιτηρίου (Authentication) που του έστειλε ο KDC. Αυτό το κλειδί είναι κρυπτογραφημένο με το κλειδί της οντότητας του τερματικού που βρίσκεται στη βάση του Active Directory.

Έπειτα το LSA αποφασίζει αν ο χρήστης έχει δικαίωμα να συνδεθεί (Authorization) και αναλόγως παρέχει ή όχι πρόσβαση.

Η χρησιμότητα του DNS

                Για να καταλάβει ο κέρβερος που βρίσκεται το KDC χρειάζεται το DNS το οποίο τον κατευθύνει προς τη μεριά του. Για αυτό το λόγο αν η υπηρεσία του DNS δεν είναι σωστά εγκατεστημένη και παραμετροποιημένη τόσο στον Server που φιλοξενεί KDC (τον Active Directory Domain Controller δηλαδή) όσο και στο τερματικό.

 

Τώρα που κατανοήσαμε τον κέρβερο μπορούμε να δούμε τις αλλαγές στον Server 2012

 

 

 Share

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...