Tags: Active Directory, Verschlüsselung, Authentifizierung
Die Verwendung von unverschlüsseltem LDAP stellt ein Risiko dar. Es ermöglicht Angreifern das Ausnutzen einer Schwachstelle, um erhöhte Privilegien zu erlangen. Diese lassen sich wiederum für Man-In-The-Middle-Angriffe nutzen. Admins können ihre Systeme über mehrere LDAP-Einstellungen davor schützen.
Zur Behebung dieser Sicherheitslücke wollte Microsoft ursprünglich LDAP-Signing und Channel-Binding per Update generell aktivieren. Dieses Vorhaben ist nun aber einer ausdrücklichen Empfehlung gewichen, welche man dem Support-Dokument ADV190023 entnehmen kann.
Im Netz findet man einige Beiträge, welche LDAP-Signing mit LDAP over SSL (LDAPS) gleichsetzen. Es handelt sich dabei aber um ein zertifikatsbasiertes Protokoll, welches sich technisch von LDAP-Signing unterscheidet.
LDAPS behebt zwar ebenfalls die Gefahr einer möglichen Man-In-The-Middle-Attacke, Microsoft empfiehlt aber die Nutzung von LDAP-Signing und Channel-Binding. Die folgenden Abschnitte erklären die verschiedenen Techniken im Detail und grenzen sie voneinander ab.
LDAPS
Domain Controller und Clients stehen in ständigem Austausch. Dazu wird vorrangig das LDAP-Protokoll verwendet, welches über den Port 389 (TCP und UDP) kommuniziert. Hierüber schicken Clients Authentifizierungsanfragen an Domain Controller, Exchange Server fragen Mail-Adressen ab und Domänen-Admins verwalten das Active Directory über dieses Protokoll.
Es ist also naheliegend, den LDAP-Traffic zu verschlüsseln. LDAPS schützt die Verbindung durch die Nutzung von SSL-Zertifikaten. Anzumerken ist dabei, dass die verschlüsselte Version nicht über Port 389, sondern über 636 kommuniziert.
Ob die Verbindung per LDAPS möglich ist, kann mit dem Tool ldp.exe herausgefunden werden, welches Bestandteil der RSAT ist. Über den Port 389 prüft man zuerst, ob eine unverschlüsselte Verbindung zum Server abgewiesen wird. Auf Port 636 und einem Haken bei SSL kann die Kommunikation über LDAPS getestet werden.
Der Nachteil von LDAPS besteht darin, dass nicht alle Geräte damit kompatibel sind. Alte Telefonanlagen oder Legacy-Applikationen verwenden LDAP zur Authentifizierung und bieten dabei keine Unterstützung für die Kommunikation über SSL an.
Des Weiteren sind manche Administratoren, die kleine Infrastrukturen betreuen und sich nur selten auf Servern bewegen, nicht mit der Verwaltung von Zertifikaten vertraut und würden gerne einen einfacheren Weg der Absicherung bevorzugen.
Channel-Binding
Channel-Binding verbindet die Applikations- mit der Transportschicht. Dadurch wird ein eindeutiger Fingerabdruck für die LDAP-Kommunikation erzeugt.
Eine Unterbrechung, wie sie bei einem Man-in-the-Middle-Angriff der Fall wäre, führt zu einem Reconnect. Innerhalb der neuen Verbindung ist der bisherige Fingerabdruck nicht mehr gültig.
LDAP-Signing
LDAP-Signing versieht die LDAP-Verbindung mit einer digitalen Signatur. Sie stellt Authentizität und Integrität der übermittelten Daten sicher. Dies bedeutet, dass der Empfänger den Sender verifizieren und zusätzlich ermitteln kann, ob die Daten auf dem Weg manipuliert wurden.
Der Mechanismus lässt sich über die Registry der Clients und Server konfigurieren, in der Regel mittels Group Policy.
LDAP-Absicherung nach Empfehlung Microsofts
Wichtig bei der Implementierung dieser Best Practice ist das Einhalten der richtigen Reihenfolge. Zuerst müssen die Clients so konfiguriert werden, dass sie LDAP-Signing anfordern (dieses also optional nutzen können).
Sobald diese Einstellung per GPO gesetzt wurde, muss man nun warten, bis sich diese Änderung auf alle Clients auswirkt. Erst dann werden die Domain Controller so angepasst, dass sie eine Signatur erfordern. Abschließend erzwingt man LDAP-Signing auch auf den Clients. Hält man diese Abfolge nicht ein, dann kann sich im schlimmsten Fall kein Client mehr anmelden.
Konfiguration der Clients
Mittels einer neuen Gruppenrichtlinie passt man zuerst die Einstellung Netzwerksicherheit: Signaturanforderungen für LDAP-Clients (Englisch: Network security: LDAP client signing requirements) an.
Sie findet sich unter Computerkonfiguration => Richtlinien => Windows-Einstellungen => Sicherheitseinstellungen => Lokale Richtlinien => Sicherheitsoptionen (Englisch: Computer Configuration => Policies => Windows Settings => Security Settings => Local Policies => Security Options).
Die Option wird hierbei auf Signatur aushandeln (Engl: Negotiate Signing) gesetzt. Anschließend wartet man, bis sich die Einstellung auf alle Clients ausgewirkt hat.
Anpassen der Domain Controller
Sobald die Änderung alle Clients erreicht hat, legt man eine weitere Gruppenrichtlinie an. Im selben Pfad wie im Schritt zuvor wird nun Einstellung Domänencontroller: Signaturanforderungen für LDAP-Server (Englisch: Domain controller: LDAP server signing requirements) bearbeitet.
Dort wählt man die Option Signatur erforderlich (Englisch: Require Signing) aus. Anschließend verknüpft man das GPO mit dem Container Domänencontroller.
Finalisieren der Clients
Sind nun auch die Änderungen auf den DCs aktiv, so kann die Gruppenrichtlinie aus dem ersten Schritt so angepasst werden, dass auch die Clients LDAP-Signing verlangen.
Die Option Netzwerksicherheit: Signaturanforderungen für LDAP-Clients (Englisch: Network security: LDAP client signing requirements) ändert man nun einfach von Signatur aushandeln auf Signatur erforderlich (Englisch: Require Signing).
Aktivieren von Channel-Binding
Channel Binding konfiguriert man auf den Domain Controllern durch einen entsprechenden Eintrag in der Registry. Falls noch nicht vorhanden, legt man unter
HKLM:\System\CurrentControlSet\Services\NTDS\Parameters
einen neuer DWORD-Eintrag mit der Bezeichnung LdapEnforceChannelBinding an. Die Auswirkungen der Wertezuweisung sind wie folgt:
- DWORD-Wert 0: deaktiviert
- DWORD-Wert 1: aktiviert, falls unterstützt
- DWORD-Wert 2: immer aktiviert
Langfristig ist Wert 2 zu empfehlen, für die Übergangsphase kann aber die Option mit dem Wert 1 ein guter Kompromiss sein. Nach der Änderung muss der jeweilige Domain Controller neu gestartet werden.
Seit dem März-Update 2020 steht dafür die Gruppenrichtlinie Domänencontroller: Anforderungen an das LDAP-Serverkanal-Bindungstoken (Englisch: Domain controller: LDAP server channel binding token requirements) zur Verfügung. Dort kann man zwischen den Optionen Never, When supported und Always wählen.
LDAP-Signing und Channel-Binding sind nun aktiv. Mittels LDP kann man dies nun wieder überprüfen.
Nach einer erfolgreichen Verbindung über den Port 389 prüft man mit Hilfe der Bind-Option (erreichbar über Connection), ob die Konfiguration korrekt funktioniert. Dazu wählt man Simple Bind aus und gibt die Anmeldedaten eines Benutzers ein.
Hier sollte nun die Fehlermeldung Error <8>: ldap_simple_bind_s() failed: Strong Authentication Required erscheinen, welche die erfolgreiche Konfiguration bestätigt.
Täglich Know-how für IT-Pros mit unserem Newsletter
Philip Lorenz hat mehrjährige Erfahrung als Administrator im Datacenter-Umfeld. Hierbei liegen seine Schwerpunkte auf der Administration von Windows Server, der Betreuung von VMware-Produkten und Microsoft Azure.
// Kontakt: E-Mail, Xing, LinkedIn, Website //
Der Powershell-Expertenkurs von LearningIT knüpft direkt an den kostenlosen Grundkurs an. Er vermittelt in über 5 Stunden hochwertiges Wissen und Know-how. Dabei wird der Kurs immer um weitere Themen und Livescripting-Videos erweitert.
Mit dem Code "windowspro" sicherst du dir 10% Rabatt! - Zum Kurs
Verwandte Beiträge
- Netlogon: Domänen-Controller verweigern Verbindung zu unsicheren Geräten
- Mit ManageEngine SSH-Schlüssel automatisch verwalten
- Exchange 2019 CU14 aktiviert Extended Protection, HSTS-Support für 2016 und 2019 ab sofort
- Passwörter in PowerShell speichern
- Microsoft fasst alle Authentifizierungsmethoden des Azure AD in einer Policy zusammen
Weitere Links
2 Kommentare
Sollte ich zusätzlich noch LDAP über SSL/TLS aktivieren?
"Anzumerken ist dabei, dass die verschlüsselte Version nicht über Port 389, sondern über 636 kommuniziert."
Das ist nicht zutreffend LDAPv2 war zwar üblich über einen SSL Tunnel abzusichern welches üblicherweise über Port 636 lief aber das wurde nie standardisiert und ist mit LDAPv3 als deprecated anzusehen
https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol
LDAPv3 nutzt StartTLS (LDAP over TLS) auf Port 389 ist die einzige Standardisierte Zugriffsmethode für verschlüsselte LDAP (LDAP over TLS) Verbindungen
https://www.rfc-editor.org/rfc/rfc4511#page-40
LDAP over SSL (Port 636)