Was macht meine Applikation mit dem Domain Controller

Hallo zusammen, es gibt Neuigkeiten vom LDAP-Experten Herbert.

Wir erhalten oft die Frage, wie man nachvollziehen kann, was an LDAP-Kommunikation mit dem Domain Controller stattfindet. Von der Domain Controller Seite gibt es die Data Collector Sets, die jedoch keine Gesamtübersicht liefern, sondern auf den Einsatz zum Finden von Engpässen ausgerichtet sind. Darüber haben wir an dieser Stelle auch schon berichtet.

Der Netzwerk Monitor macht einen guten Job beim Parsen von LDAP, mit "Reassemble" auch bei großen Ergebnismengen. Aber immer öfter verschlüsseln Applikationen ihren LDAP-Verkehr. Und nicht immer kann man wie bei Exchange die Verschlüsselung abschalten. Ganz zu schweigen vom Chief Security Officer, der das auch zur Problemsuche nicht erlaubt.

Es gibt seit Widnows Vista auch Möglichkeiten auf der Client-Seite. Der Artikel beschreibt, wie das ETW Tracing aktiviert werden kann:
2221529 Event Tracing for LDAP in Windows Vista/2008

In meiner Erfahrung funktioniert das Verarbeiten der ETW-Dateien am besten mit XPERF. Die Ausgabe ist sehr umfangreich, in den meisten Fällen dürftet Ihr aber an den Start der interessanten Passagen mit Schlüsselwörtern finden können. Dem Tracing kann eine Verschlüsselung per LDAPS oder SASL nichts anhaben, denn es findet im LDAP Client selbst statt. Das Log enthält die Daten, die auf dem Netzwerk landen, als auch die unverschlüsselten Daten.

Der Präfix jeder Zeile ist Prozess-ID.Thread-ID::Zeitstempel [Provider] wie hier:
[0]08B0.0280::?2012?-?02?-?20 12:02:08.754 [Microsoft-Windows-LDAP-Client]

Ein Beispiel für Nutzdaten im Klartext (Query Response):
Unencrypted dump of Data received on connection 0x230ae0
30 84 00 00 1a c2 02 01 1b 64 84 00 00 1a b9 04 0........d......
3d 43 4e 3d 43 6f 6e 74 61 69 6e 65 72 2c 43 4e =CN=Container,CN
3d 53 63 68 65 6d 61 2c 43 4e 3d 43 6f 6e 66 69 =Schema,CN=Confi
67 75 72 61 74 69 6f 6e 2c 44 43 3d 68 65 72 62 guration,DC=herb
65 72 74 6d 2d 77 37 2c 44 43 3d 63 6f 6d 30 84 ertm-w7,DC=com0.
00 00 1a 74 30 84 00 00 00 15 04 02 63 6e 31 84 ...t0.......cn1.
00 00 00 0b 04 09 43 6f 6e 74 61 69 6e 65 72 30 ......Container0
84 00 00 00 2e 04 0d 70 6f 73 73 53 75 70 65 72 .......possSuper
69 6f 72 73 31 84 00 00 00 19 04 17 70 72 6f 74 iors1.......prot
6f 63 6f 6c 43 66 67 53 68 61 72 65 64 53 65 72 ocolCfgSharedSer
76 65 72 30 84 00 00 00 14 04 08 72 44 4e 41 74 ver0.......rDNAt
74 49 44 31 84 00 00 00 04 04 02 63 6e 30 84 00 tID1.......cn0..
00 00 26 04 0c 73 63 68 65 6d 61 49 44 47 55 49 ..&..schemaIDGUI
44 31 84 00 00 00 12 04 10 8b 7a 96 bf e6 0d d0 D1........z.....
11 a2 85 00 aa 00 30 49 e2 30 84 00 00 00 b6 04 ......0I.0......
13 73 79 73 74 65 6d 50 6f 73 73 53 75 70 65 72 .systemPossSuper
69 6f 72 73 31 84 00 00 00 9b 04 0c 6d 73 44 53 iors1.......msDS
2d 41 7a 53 63 6f 70 65 04 12 6d 73 44 53 2d 41 -AzScope..msDS-A
7a 41 70 70 6c 69 63 61 74 69 6f 6e 04 13 6d 73 zApplication..ms
44 53 2d 41 7a 41 64 6d 69 6e 4d 61 6e 61 67 65 DS-AzAdminManage
72 04 06 73 75 62 6e 65 74 04 06 73 65 72 76 65 r..subnet..serve
72 04 0b 6e 54 44 53 53 65 72 76 69 63 65 04 09 r..nTDSService..
64 6f 6d 61 69 6e 44 4e 53 04 0c 6f 72 67 61 6e domainDNS..organ
69 7a 61 74 69 6f 6e 04 0d 63 6f 6e 66 69 67 75 ization..configu
72 61 74 69 6f 6e 04 09 63 6f 6e 74 61 69 6e 65 ration..containe
72 04 12 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 61 r..organizationa

Das wird danach aber noch interpretiert:
[Microsoft-Windows-LDAP-Client]
DN is : 'CN=Container,CN=Schema,CN=Configuration,DC=herbertm-w7,DC=com'
Attribute 'cn' is 'Container'
Attribute 'possSuperiors' is 'protocolCfgSharedServer'
Attribute 'rDNAttID' is 'cn'
Attribute 'systemPossSuperiors' is :
 'msDS-AzScope'
 'msDS-AzApplication'
 'msDS-AzAdminManager'
 'subnet'
 'server'
 'nTDSService'
 'domainDNS'
 'organization'
 'configuration'
 'container'
 'organizationalUnit'

Je nach gewählten Flags, sind die Zeilen oben durch andere Tracing-Ausgaben unterbrochen. Die Klasse „DEBUG_HEAP“ ist zum Beispiel sehr aktiv, das dürfte die meisten Anwender dieses Traces jedoch sowieso nicht interessieren.

Bitte beachtet, dass es beim Tracing nicht mit den Tracelog-Kommandos getan ist. Per Registry-Eintrag muss man dem LDAP Client auch noch sagen, für welche Prozesse er aktiv sein soll.
Und natürlich auch noch der letzte Hinweis: Das funktioniert ab Windows Vista mit dem Microsoft LDAP Client. Bei 3rd Party Clients, wie in die Java Runtime integriert, muss man wieder eigene Wege suchen.

So, aber nun auf zum fröhlichen Analysieren der Applikationen! Denn man weiß nie warum die DCs immer so beschäftigt sind, seit LobApp 7.5 ausgerollt wurde, bis man sieht, dass im verschlüsselten Traffic ein solcher Filter versteckt ist: "(& (objectclass=user) (telephonenumbr=*43923))"

Euer

Herbert