Mythos: LDAP-Traffic auf Port 389 ist unsicher

Es besteht noch immer die weit verbreitete Meinung, dass LDAP-Traffic über Port 389 zu Active Directory Domain Controllern generell sensible Informationen wie Userid und Passwort im Klartext übertragen werden. Dies ist allerdings nur der Fall, wenn der LDAP Simple Bind verwendet wird.

Aber schauen wir uns das Verhalten mal genauer an. Mit der .NET-Implementierung lassen sich netterweise die einzelnen Authentifizierungsarten als Parameter beim Aufruf mitgeben, so dass sich das Testsetup einfach abbilden lässt. https://docs.microsoft.com/en-us/dotnet/api/system.directoryservices.authenticationtypes?view=netframework-4.8

Test1 – Simple Bind

DE = new DirectoryEntry(ldappath, user, password, System.DirectoryServices.AuthenticationTypes.None);

Im Netzwerktraffic sieht man tatsächlich: Die Credentials werden im Klartext übertragen

Ldap: Bind Request, MessageID: 1, Version: 3
- LDAPMessage: Bind Request, MessageID: 1
  + ParserHeader:
  + MessageID: 1
  + OperationHeader: Bind Request, 0(0)
  - BindRequest: Version:3, Name:ldaptest@su-pen.local, UserName: P@ssw0rd, Authentication type = simple
   + Version: 3
   + Name: ldaptest@su-pen.local
   - Authentication: UserName: P@ssw0rd, Authentication type = simple
    + AuthenticationTypeHeader: Authentication type = simple
      SimpleAuthentication: P@ssw0rd

Der Simple-Bind funktioniert nicht mehr, wenn auf den Domain Controllern folgende Einstellung gesetzt ist:

Domain controller: LDAP server signing requirements -> Require signature

Test2 – AuthenticationType Secure – Nicht-Domänenmitglied

DE = new DirectoryEntry(ldappath, user, password, System.DirectoryServices.AuthenticationTypes.Secure);

(Die Defaulteinstellung seit .NET 2.0)

Die Analyse des Netzwerktraffics zeigt Unterschieden zwischen Domänenmitgliedern und domänenfremden Rechnern:

Bei Nicht-Mitgliedern erfolgt die Authentifizierung über NTLMv2


Ldap: Bind Request, MessageID: 12, Version: 3
- LDAPMessage: Bind Request, MessageID: 12
+ ParserHeader:
+ MessageID: 12
+ OperationHeader: Bind Request, 0(0)
- BindRequest: Version:3, Name:NULL, Authentication type = sasl
+ Version: 3
+ Name: NULL
- Authentication: Authentication type = sasl
+ AuthenticationTypeHeader: Authentication type = sasl
- Credentials:
+ Mechanism: GSS-SPNEGO
- Credentials:
- GSSSpnegoCredentials:
+ Header:
- GssApi:
+ Token: NTLM AUTHENTICATE MESSAGEVersion:v2, User: ldaptest@su-pen.local, Workstation: PERSEPHONE

Die nachfolgenden LDAP-Nutzdaten sind verschlüsselt.

Test3 – AuthenticationType Secure – Domänenmitglied

Bei Domänenmitgliedern wird für Authentifizierung und Verschlüsselung das sicherere Kerberos statt NTLM verwendet:

Ldap: Bind Request, MessageID: 11, Version: 3
- LDAPMessage: Bind Request, MessageID: 11
  + ParserHeader:
  + MessageID: 11
  + OperationHeader: Bind Request, 0(0)
  - BindRequest: Version:3, Name:NULL, PrincipalName: ldap/DC01-pen.su-pen.local, Authentication type = sasl
   + Version: 3
   + Name: NULL
   - Authentication: PrincipalName: ldap/DC01-pen.su-pen.local, Authentication type = sasl
    + AuthenticationTypeHeader: Authentication type = sasl
    - Credentials:
     - Mechanism: GSS-SPNEGO
      + AsnOctetStringHeader:
        OctetStream: GSS-SPNEGO
     - Credentials:
      - GSSSpnegoCredentials:
       + Header:
       - GssApi:
        - InitialContextToken:
         + ApplicationHeader:
         - ThisMech: SpnegoToken (1.3.6.1.5.5.2)
          - MechType: SpnegoToken (1.3.6.1.5.5.2)
           + AsnObjectIdentifierHeader:
             First: 43 (0x2B)
             Final: 6 (0x6)
             Final: 1 (0x1)
             Final: 5 (0x5)
             Final: 5 (0x5)
             Final: 2 (0x2)
         - InnerContextToken: 0x1
          - SpnegoToken: 0x1
           + ChoiceTag:
           - NegTokenInit:
            + SequenceHeader:
            + Tag0:
            + MechTypes: Prefer MsKerberosToken (1.2.840.48018.1.2.2)
            + Tag2:
            + OctetStringHeader:
            + MechToken: 0x1

Im Trace sieht man nach dem ersten Handshake, die notwendige Kerberos Authentifizierung  

 

Ein Gedanke zu „Mythos: LDAP-Traffic auf Port 389 ist unsicher“

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.