Suchen Sie den Client, der für den Schannel-LDAP-Fehler verantwortlich ist

8

Irgendwo in unserem Netzwerk fragt ein ldap-Client unsere AD-Server ohne die richtigen CA-Informationen ab. Dies provoziert die (meiner Ansicht nach nutzlose) systemkritische (Quelle: Schannel) Ereignis-ID 36887 im Ereignisprotokoll der Domänencontroller:

Die folgende tödliche Warnung wurde empfangen: 46.

Wie kann ich den falsch konfigurierten Client finden?

natxo asenjo
quelle
Tritt dieser Fehler weiterhin auf? Oder ist es nur einmal passiert?
Felipe Donda
1
Es passiert immer wieder mit den LDAP-Servern am ersten Standardstandort, sodass der Client in diesen IP-Bereichen enthalten ist.
Natxo Asenjo

Antworten:

8

Eingebaut können Sie die Quelle der Nachricht nicht leicht finden.

Sie benötigen tcpdump, Microsoft Network Monitor oder Wireshark, um den Computer zu finden, der den Fehler verursacht. (Viele Threads sagten dasselbe, dort , dort oder dort (siehe im Kommentar die Antwort an George über tcpdump))

yagmoth555
quelle
2
Ich stimme eher zu und es ist scheiße ;-) (nicht dein Kommentar, die Situation). Eine andere Lösung wäre, die Schannel-Protokollierung vollständig zu deaktivieren. Dies kann jedoch unerwartete Auswirkungen haben.
Natxo Asenjo
@natxoasenjo Eine andere Sache, die ich gesehen habe, ist für ldap. Ich sehe einen Hinweis darauf, dass die Protokollierung über iis erfolgt. Vielleicht, um das iis-Protokollverzeichnis zu überprüfen, um die IP / Anfrage zu finden, die ausgeführt wurde, um die IP schneller finden zu können. (es wird ermöglichen, den Zeitstempel beider Protokolle zu vergleichen)
yagmoth555
Das war ein netter Vorschlag, aber die Webserver-Rolle ist in diesen Domänencontrollern (2008r2) nicht installiert.
Natxo Asenjo
3

Wenn Sie in der Lage sind, den zu DC fließenden Datenverkehr zur Analyse zu erfassen, können Sie die Paketsuche von Wireshark verwenden, um die präsentierten Zertifikate zu finden.

Dieser Wireshark-Filter sucht nach Zertifikataustausch und filtert alles heraus, was vom "LDAP-SSL-Test" ausgegeben wurde. Auf diese Weise können Sie Zertifikate finden, die nicht von Ihrer Domain ausgestellt wurden.

(ssl.handshake.type == 11) && !(x509sat.uTF8String == "LDAP SSL test")

Ich habe kein AD-Beispiel, an dem ich arbeiten könnte, sodass ein Standard-LDAP über TLS-PCAP von der Wireshark-Beispielseite verwendet wird.

Tim Fletcher
quelle
0

Ich habe sehr wenig Erfahrung mit der Windows / AD-Verwaltung, bin jedoch mit Linux vertraut. Ich dachte, ich würde eine Ablaufverfolgung und / oder Paketerfassung durchführen, das Programm im Debug-Modus ausführen usw. in einer ähnlichen Linux-Situation ... also fand ich Folgendes:

Wie können Sie LDAP-Verbindungen mit Active Directory verfolgen / debuggen?

Und das:

https://technet.microsoft.com/en-us/library/cc961809.aspx

Durch Erhöhen des Pegels werden die Details der Nachrichten und die Anzahl der ausgegebenen Nachrichten erhöht. Das Festlegen des Werts von Einträgen im Unterschlüssel Diagnose auf mehr als 3 kann die Serverleistung beeinträchtigen und wird nicht empfohlen. Das Anwendungsereignisprotokoll wird schnell gefüllt, wenn die Protokollierungsstufe erhöht wird.

Und das vielleicht:

https://msdn.microsoft.com/en-us/library/windows/desktop/dd815339(v=vs.85).aspx

Die Ablaufverfolgung verwendet die Ereignisverfolgung für Windows (ETW). Installieren Sie das Microsoft Windows SDK von der MSDN Downloads-Site, um die mit Windows Server 2008 R2 verfügbaren Ablaufverfolgungstools zu nutzen.

Eine Google-Suche zeigt auch Ergebnisse zum Durchführen von Traces und dergleichen bei Windows-Diensten an, aber auch hier bin ich mit nichts davon vertraut. Ich würde mir vorstellen, dass es sehr schwierig sein könnte, den Netzwerkverkehr allein zu beobachten, da Sie nur Verkehr sehen und wahrscheinlich nicht wissen, wonach Sie suchen sollen, und Sie nicht wirklich sehen, was innerhalb des Dienstes passiert.

Ich habe keine Ahnung, welche Art von Ausgabe von der Durchführung eines Trace auf ldap oder der Verwendung eines der genannten Tools / Methoden zu erwarten ist, aber es scheint einen Versuch wert zu sein.

Viel Glück

Ryan Babchishin
quelle
0

Wenn Sie kein Paket-Sniffing möchten, würde ich ein Powershell-Skript auf allen Computern empfehlen, die eine sichere LDAP-Verbindung testen und protokollieren, wer fehlschlägt. Sie können vom Domänencontroller aus eine Remoteverbindung zu den Clients herstellen oder ein clientseitiges Skript erstellen, das Fehler auf einem Dateiserver protokolliert.

Die Idee des Skripts ist es, eine sichere LDAP-Verbindung zu simulieren. Es verwendet ein .net-Framework, das nativ unter Windows 7 SP1 oder höher verfügbar ist.

Wenn Sie remote vom DC aus ausgeführt werden möchten, sieht das Skript folgendermaßen aus (erfordert eine Berechtigung für Remote-Powershell, die gemäß diesem Artikel https://www.briantist.com/how-to/powershell-remoting-group- ausgeführt werden kann). Politik / ):

Import-Module ActiveDirectory
$domain = "contoso.com"
$user = "Administrator"
$password = "P@ssw0rd"
$IPFilter = "192.168.1.*"

$scriptblock = {
   write-host "$(hostname) - " -NoNewLine
   try {
      $LDAPS = New-Object adsi ("LDAP://$($args[0]):636",$args[1],$args[2],'SecureSocketsLayer')
      Write-Host "Secure LDAP Connection succeeded."
   } Catch {
      Write-Host "Secure LDAP Connection failed." -foregroundcolor red
   }
}

$Computers = Get-ADComputer -filter * -Properties IPv4Address | Where{ $_.IPv4Address -like $IPFilter}

foreach($Computer in $Computers)
{
   try {
      $session = New-PSSession $Computer.Name -ErrorAction Stop
      Invoke-Command -Session $session -ScriptBlock $scriptblock -ArgumentList $domain,$user,$password
   }catch{
      Write-Host "Connection to $($Computer.Name) failed." -foregroundcolor red
   }
}

Oder wenn Sie ein lokales Skript möchten, das sich bei einem Remote-Server anmeldet:

$domain = "contoso.com"
$user = "Administrator"
$password = "P@ssw0rd"
$LogFile = "\\fileserver\logs\ldapconnection.log"

try {
   $LDAPS = New-Object adsi ("LDAP://$domain:636",$user,$password,'SecureSocketsLayer')
   "$(hostname) - Secure LDAP Connection succeeded."  | Out-File $LogFile -Append
} Catch {
   "$(hostname) - Secure LDAP Connection failed."  | Out-File $LogFile -Append
}

Ausgabe einer Remote-Versionsausführung (rote sind Offline-Clients):

Geben Sie hier die Bildbeschreibung ein

Felipe Donda
quelle
Danke für das Skript. Unsere Infrastruktur ist eine Mischung aus Windows- und Linux-Clients, sodass dies nur einen Teil davon abdeckt. Gute Idee.
Natxo Asenjo