找到负责schannel ldap错误的客户端


8

ldap客户端在我们网络中的某个地方查询我们的AD服务器时没有正确的CA信息。这会在域控制器的事件日志中引发(我认为无用)系统严重(源:schannel)事件ID 36887:

收到以下致命警报:46。

如何找到配置错误的客户端?


这个错误持续发生吗?还是只发生一次?
费利佩·丹达

1
它总是在默认的第一个站点的ldap服务器上发生,因此客户端包含在这些ip范围内。
natxo asenjo

Answers:


8

内置的消息源很难找到。

您需要tcpdump,Microsoft网络监视器或Wireshark查找导致错误的计算机。(多线程告诉相同,没有(在注释中看到答案乔治tcpdump的))


2
我倾向于同意,这很糟糕;-)(不是您的评论,情况)。另一个解决方案是完全关闭信道记录,但这可能会产生意想不到的影响。
natxo asenjo

@natxoasenjo我看到的另一件事是ldap,我看到参考是通过iis完成日志记录的,也许是检查iis日志目录以找到ip /请求完成的,以便能够更快地找到ip。(它将允许比较两个日志的时间戳)
yagmoth555

这是一个很好的建议,但是在这些域控制器(2008r2)中未安装Web服务器角色。
natxo asenjo

3

如果您能够捕获流向DC的流量以进行分析,则可以使用Wireshark的数据包搜索来找到要提供的证书。

该wireshark筛选器用于寻找证书交换,并过滤掉由“ LDAP SSL测试”发布的所有内容,这将使您能够查找非您的域发布的证书。

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

我没有可处理的AD示例,因此可以使用wireshark示例页面中基于TLS pcap的标准LDAP。


0

我对Windows / AD管理的经验很少,但是对Linux很满意。我以为我会进行跟踪和/或数据包捕获,以调试模式运行程序,等等...在类似的Linux情况下...所以我发现了这一点:

如何针对Active Directory跟踪/调试LDAP连接?

和这个:

https://technet.microsoft.com/zh-CN/library/cc961809.aspx

增加级别会增加消息的详细信息和发出的消息数量。将“诊断”子项中的条目的值设置为大于3可能会降低服务器性能,因此不建议这样做。当增加日志记录级别时,应用程序事件日志会迅速填满。

这可能是:

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

跟踪使用Windows事件跟踪(ETW)。要利用Windows Server 2008 R2附带的跟踪工具,请从MSDN下载站点安装Microsoft Windows SDK。

谷歌搜索还会在Windows服务上执行跟踪等结果,但是同样,我对此并不熟悉。我想单靠观看网络流量可能会非常困难,因为您只看到流量,并且可能不知道要查找什么,并且您并没有真正看到服务中正在发生的事情。

我不知道在ldap上执行跟踪或使用提到的任何工具/方法会期望什么样的输出,但是似乎值得尝试一下。

祝好运


0

如果您不希望数据包嗅探,我会在所有测试安全ldap连接并记录谁失败的计算机中推荐一个powershell脚本。您可以从域控制器远程连接到客户端,也可以使客户端脚本将失败记录在文件服务器上。

该脚本的主旨是模拟安全的ldap连接。它使用Windows 7 sp1或更高版本上的.net框架。

如果您想从DC远程运行,该脚本将如下所示(需要获得远程Powershell的权限,可以在本文https://www.briantist.com/how-to/powershell-remoting-group-之后实现政策/):

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

或者,如果您希望使用本地脚本登录到远程服务器:

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

远程版本执行的输出(红色版本是脱机客户端):

在此处输入图片说明


感谢您的脚本。我们的基础架构是Windows和Linux客户端的混合体,因此仅涵盖其中一部分。不过好主意。
natxo asenjo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.