Secure LDAP στους Domain Controllers? Πως γίνεται?

Η επόμενη εβδομάδα θα με βρει στη Σουηδία όπου θα πρέπει να εξηγήσω στους μαθητές μου εκεί όλα τα ωραία που μπορούμε να κάνουμε με το Active Directory και φυσικά ελπίζω ότι αυτά που θα τους πω θα τους βοηθήσουν και στις αντίστοιχες πιστοποιήσεις. Προλαβαίνω λοιπόν να σας εξηγήσω σε αυτό το post πως θα μπορούσαμε να βελτιώσουμε την ασφάλεια στο –ήδη αρκετά ασφαλές για τις περισσότερες περιπτώσεις – Active Directory.

Γνωρίζουμε ήδη ότι η επικοινωνία των Domain Controllers βασίζεται στο πρωτόκολλο LDAP, το οποίο μας προσφέρει και μια πιο “secure” μορφή του, το λεγόμενο LDAPS. Αρκετά χρήσιμο σε περιπτώσεις όπου θέλουμε να κρυπτογραφήσουμε ακόμα περισσότερο την επικοινωνία μέσα στο δίκτυό μας, ώστε να αποφύγουμε τα δυσάρεστα περιστατικά sniffing με κάποιο από τα γνωστά προγράμματα.

Χρησιμοποιούμε λοιπόν τα γνωστά πρωτόκολλα SSL/TLS που στην περίπτωση του Active Directory μιλάμε για LDAP over SSL. Με αυτό τον τρόπο θα καταφέρουμε να έχουμε μια ασφαλή επικοινωνία μεταξύ των clients του domain μας και των domain controllers.

Τι χρειαζόμαστε;
Θα πρέπει να χρησιμοποιήσουμε ένα X509 certificate σε όλους τους domain controllers μας. Αυτό το πιστοποιητικό θα μας εξασφαλίσει ότι οι DCs θα ακούν και θα δέχονται SSL connections για την LDAP κίνηση αλλά θα είναι επίσης χρήσιμο και για τους Global Catalogs. Πρόκειται για ένα Server Certificate που θα χρησιμοποιείται για Server Authentication στους clients. Θα μπορούσαμε να επεκτείνουμε την λογική μας ώστε να έχουμε και client authentication με πιστοποιητικά σε όλους τους clients, αλλά μάλλον είναι υπερβολή. Τεχνικά πάντως είναι δυνατό.

Το πιστοποιητικό μαζί με το private key θα πρέπει να είναι αποθηκευμένο στο Personal Certificate Store σε όλους τους DCs. Εύκολα μπορούμε να δούμε το Store μέσα από μια MMC κονσόλα στον DC:

dc1

Το πιστοποιητικό που θα χρησιμοποιήσουμε για το LDAPS πρέπει να έχει:

  • Στο Enhanced Key Usage να περιέχει το Server Authentication Object Identifier 1.3.6.1.5.5.7.3.1.
  • To FQDN του DC πρέπει να αναφέρεται είτε στο Common Name του Subject είτε στο DNS entry του SAN

Με διπλό κλικ πάνω στο πιστοποιητικό μπορούμε να αναζητήσουμε αυτές τις πληροφορίες για να διαπιστώσουμε ότι έχουμε το σωστό πιστοποιητικό:

dc2 

Φυσικά δεν ξεχνάμε ότι μέσα στο store του DC πρέπει να υπάρχει και το σωστό private key που ταιριάζει στο πιστοποιητικό, κάτι που το βλέπουμε στο General Tab του πιστοποιητικού, ελέγχοντας για το κείμενο “You have a private key that corresponds to this certificate.”:

dc3

Το private key δεν θα πρέπει να έχει το strong private key protection ενεργοποιημένο, η οποία ευτυχώς είναι και η default συμπεριφορά. Με την εντολή “certutil –verifystore MY” βλέπουμε όντως ότι έχουμε έγκυρο πιστοποιητικό και από command prompt:

dc4

Πως αποκτά ο DC ένα LDAPS πιστοποιητικό;
Αρχικά αυτό γίνεται αυτόματα όταν μέσα στο domain σας εγκαταστήσετε ένα Enterprise Root Certification Authority, αλλά είναι καλύτερα να μην χρησιμοποιήσετε αυτό, αλλά να εκδώσετε ένα νέο. Η διαδικασία είναι η εξής:

  • Δημιουργία ενός custom certificate template για LDAPS certificates
  • Ενεργοποίηση του template σε όλους τους CA (αν έχουμε πολλούς)
  • Χειροκίνητη έκδοση πιστοποιητικών για όλους τους DCs

Το πρώτο βήμα γίνεται πάλι μέσα από μια MMC κονσόλα προσθέτοντας το snap-in για τα certificate templates, διαδικασία που πρέπει να την κάνετε πάνω στον CA. Διαλέγουμε κάποιο από τα ήδη υπάρχοντα certificate templates, πχ. το Kerberos Authentication template (το οποίο περιέχει ήδη το Server Authentication OID που αναφέραμε παραπάνω) και επιλέγουμε Duplicate Template:

dc5

Στο παράθυρο διαλόγου που θα εμφανιστεί αφήνουμε την default επιλογή (Windows Server 2003 Enterprise) και πατάμε ΟΚ. Αλλάζουμε την ονομασία του template σε κάτι όπως πχ. LDAPS και προσέχουμε τις επιλογές στο Request Handling Tab να μαρκάρουμε το private key ως exportable, ώστε να μπορέσουμε να κάνουμε import το πιστοποιητικό στο NTDS Certificate Store. Επίσης προσέξτε τις επιλογές και στο Subject Name Tab:

dc6

dc7

Το επόμενο βήμα είναι να προσθέσουμε το template μέσα στο Certificate templates container. Αυτό γίνεται από την κονσόλα Certification Authority του CA επιλέγοντας όπως στην εικόνα και μετά διαλέγοντας το νέο template που δημιουργήσαμε:

dc8

dc9

Το επόμενο βήμα είναι να πάμε στους υποψήφιους DCs και να ζητήσουμε πιστοποιητικό:

dc10

dc11

Έχουμε σχεδόν τελειώσει, αρκεί να βεβαιωθούμε ότι έχουμε σύνδεση με LDAPS, κάτι που μπορούμε να το δούμε με το γνωστό εργαλείο ldp. Παρατηρείστε την αλλαγμένη θύρα 636 για το LDAPS και την επιλογή SSL:

dc12

Εάν τα έχουμε κάνει όλα σωστά, θα πρέπει να έχουμε την ένδειξη “Host supports SSL”:

dc13

Επιλέξτε Connection – Bind και OK. Θα πρέπει να δείτε το username με το οποίο έχετε κάνει authentication.

Έτσι λοιπόν έχουμε μια ακόμα βελτίωση σε ότι αφορά την ασφάλεια του Active Directory.

3 Comments on “Secure LDAP στους Domain Controllers? Πως γίνεται?

  1. Εξαιρετικό άρθρο, Χρήστο. Μια παρατήρηση μόνο: το exportable private key είναι χρήσιμο σαν επιλογή μόνο αν σκοπεύουμε να ζητήσουμε το πιστοποητικό από άλλο server από αυτόν στον οποίο τελικά θα το εγκαταστήσουμε. Αν το ζητήσουμε από τον ίδιο, καλό είναι να μην το έχουμε σαν επιλογή στο certificate template για μεγαλύτερη ασφάλεια (έτσι ώστε να μη μπορεί να εξαχθεί).

Leave a Reply