encuentre al cliente responsable del error schannel ldap

8

En algún lugar de nuestra red, un cliente ldap consulta nuestros servidores AD sin la información de CA adecuada. Esto provoca el (en mi punto de vista inútil) ID de evento crítico (fuente: schannel) 36887 en el registro de eventos de los controladores de dominio:

Se recibió la siguiente alerta fatal: 46.

¿Cómo puedo localizar al cliente mal configurado?

natxo asenjo
fuente
¿Este error sigue ocurriendo? ¿O simplemente sucedió una vez?
Felipe Donda
1
sigue sucediendo a los servidores ldap en el primer sitio predeterminado, por lo que el cliente está contenido en esos rangos de ip.
natxo asenjo

Respuestas:

8

Incorporado no puede encontrar fácilmente la fuente del mensaje.

Necesita tcpdump, microsoft network monitor o wireshark para encontrar la máquina que está causando el error. (muchos hilos dijeron lo mismo, allí , allí o allí (Vea en el comentario la respuesta a George sobre tcpdump))

yagmoth555
fuente
2
Tiendo a estar de acuerdo, y apesta ;-) (no es tu comentario, la situación). Otra solución sería desactivar por completo el registro de canales, pero eso puede tener efectos inesperados.
natxo asenjo
@natxoasenjo Otra cosa que vi es para ldap. Veo la referencia de que el registro se realiza a través de iis, tal vez para verificar el directorio de registro de iis para encontrar la IP / solicitud realizada para poder encontrar la ip más rápido. (permitirá comparar la marca de tiempo de ambos registros)
yagmoth555
fue una buena sugerencia, pero la función de servidor web no está instalada en estos controladores de dominio (2008r2).
natxo asenjo
3

Si puede capturar el tráfico que fluye a DC para su análisis, puede usar la búsqueda de paquetes de Wireshark para encontrar los certificados que se presentan.

Este filtro Wirehark busca el intercambio de certificados y filtra cualquier cosa emitida por "Prueba LDAP SSL", esto le permitirá encontrar certificados no emitidos por su dominio.

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

No tengo un ejemplo de AD en el que trabajar, por lo que se está utilizando un LDAP estándar sobre TLS pcap de la página de muestras de Wirehark.

Tim Fletcher
fuente
0

Tengo muy poca experiencia con la administración de Windows / AD, sin embargo, estoy cómodo con Linux. Pensé en hacer un rastreo y / o captura de paquetes, ejecutar el programa en modo de depuración, etc. en una situación similar de Linux ... así que encontré esto:

¿Cómo rastrear / depurar conexiones LDAP en Active Directory?

Y esto:

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

Aumentar el nivel aumenta el detalle de los mensajes y la cantidad de mensajes emitidos. Establecer el valor de las entradas en la subclave Diagnóstico en mayor que 3 puede degradar el rendimiento del servidor y no se recomienda. El registro de eventos de la aplicación se llena rápidamente cuando aumenta el nivel de registro.

Y esto tal vez:

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

El seguimiento utiliza el seguimiento de eventos para Windows (ETW). Para aprovechar las herramientas de rastreo disponibles con Windows Server 2008 R2, instale el SDK de Microsoft Windows desde el sitio de descargas de MSDN.

Una búsqueda en Google también arroja resultados al realizar seguimientos y similares en los servicios de Windows, pero nuevamente, no estoy familiarizado con ninguno de ellos. Me imagino que ver solo el tráfico de red podría ser muy difícil, porque solo está viendo tráfico y probablemente no sabe qué buscar y realmente no está viendo lo que sucede dentro del servicio.

No tengo idea de qué tipo de salida esperar de realizar un seguimiento en ldap o usar cualquiera de las herramientas / métodos mencionados, pero parece que vale la pena intentarlo.

Buena suerte

Ryan Babchishin
fuente
0

Si no desea rastrear paquetes, recomendaría un script de PowerShell en todas las computadoras que prueban una conexión ldap segura y registran quién falla. Puede conectarse de forma remota a los clientes desde el Controlador de dominio o puede crear un script del lado del cliente que registre fallas en un servidor de archivos.

La idea del script es simular una conexión ldap segura. Utiliza .NET Framework que viene de forma nativa en Windows 7 sp1 o superior.

En caso de que desee ejecutar de forma remota desde el DC, el script se vería así (requiere permiso para PowerShell remoto que se puede lograr siguiendo este artículo https://www.briantist.com/how-to/powershell-remoting-group- política / ):

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
   }
}

O si desea un script local que inicie sesión en un servidor remoto:

$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
}

Salida de una ejecución de versión remota (las rojas son clientes fuera de línea):

ingrese la descripción de la imagen aquí

Felipe Donda
fuente
gracias por el guion Nuestra infraestructura es una combinación de clientes Windows y Linux, por lo que esto solo cubriría una parte de ella. Buena idea, sin embargo.
natxo asenjo