encontra o cliente responsável pelo erro ldap do schannel

8

em algum ponto de nossa rede, um cliente ldap está consultando nossos servidores de AD sem as informações adequadas de CA. Isso provoca o (na minha opinião, inútil) sistema de identificação crítico (fonte: schannel) 36887 no log de eventos dos controladores de domínio:

The following fatal alert was received: 46.

Como posso localizar o cliente mal configurado?

    
por natxo asenjo 07.09.2016 / 14:57

4 respostas

8

Incorporado você não consegue encontrar facilmente a origem da mensagem.

Você precisa do tcpdump, do microsoft monitor de rede ou do wireshark para encontrar a máquina que está causando o erro. (muitos thread disse o mesmo, , ou there (Veja no comentário a resposta para o George sobre o tcpdump))

    
por 12.09.2016 / 20:36
3

Se você conseguir capturar o tráfego que flui para o DC para análise, poderá usar a pesquisa de pacotes do Wireshark para encontrar os certificados apresentados.

Este filtro wireshark procura por troca de certificados e filtra qualquer coisa emitida por "teste SSL LDAP", isso permitiria encontrar certificados não emitidos pelo seu domínio.

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

Eu não tenho um exemplo de AD para trabalhar, de modo que esteja usando um LDAP padrão sobre TLS pcap da página de amostras do wireshark.

    
por 18.09.2016 / 18:01
0

Eu tenho pouca experiência com administração do Windows / AD, mas estou confortável com o Linux. Eu pensei em fazer um rastreamento e / ou captura de pacotes, rodar o programa no modo de depuração, etc ... em uma situação Linux similar ... então eu achei isto:

Como você rastreia / depura conexões LDAP contra Active Directory?

E isso:

link

Increasing the level increases the detail of the messages and the number of messages emitted. Setting the value of entries in the Diagnostics subkey to greater then 3 can degrade server performance and is not recommended. The application event log fills up quickly when the logging level is increased.

E isso talvez:

link

Tracing uses Event Tracing for Windows (ETW). To take advantage of the tracing tools available with Windows Server 2008 R2, install the Microsoft Windows SDK from the MSDN Downloads site.

Uma pesquisa no google também mostra resultados na execução de rastreamentos e em serviços do Windows, mas, novamente, não estou familiarizado com nada disso. Eu imagino que assistir ao tráfego de rede sozinho pode ser muito difícil, porque você só está vendo tráfego e provavelmente não sabe o que procurar e você não está realmente vendo o que está acontecendo dentro do serviço.

Eu não tenho ideia de que tipo de saída esperar da execução de um rastreamento no ldap ou usando qualquer uma das ferramentas / métodos mencionados, mas parece que vale a pena tentar.

Boa sorte

    
por 17.09.2016 / 21:36
0

Se você não quer sniffing de pacotes, eu recomendaria um script powershell em todos os computadores testando uma conexão ldap segura e registrando quem falha. Você poderia se conectar remotamente aos clientes do Controlador de Domínio ou criar um script do lado do cliente que registrasse falhas em um servidor de arquivos.

A ideia do script é simular uma conexão ldap segura. Ele usa a estrutura .net que vem originalmente no windows 7 sp1 ou superior.

Caso você queira executar remotamente a partir do DC, o script será semelhante a este (requer permissão para o powershell remoto que pode ser obtido seguindo este artigo link ):

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

Ou se você quiser um script local que faça login em um 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
}

Saída de uma execução de versão remota (os vermelhos são clientes off-line):

    
por 19.09.2016 / 21:33