schannel ldap 오류를 담당하는 클라이언트를 찾습니다. 컨트롤러의 이벤트 로그에서 (무의미한)

네트워크 어딘가에 ldap 클라이언트가 적절한 CA 정보없이 AD 서버를 쿼리합니다. 이것은 도메인 컨트롤러의 이벤트 로그에서 (무의미한) 시스템 크리티컬 (소스 : schannel) 이벤트 ID 36887을 유발합니다.

다음과 같은 치명적인 경고가 수신되었습니다. 46.

잘못 구성된 클라이언트를 찾으려면 어떻게해야합니까?



답변

내장 메시지의 소스를 쉽게 찾을 수 없습니다.

오류를 발생시키는 기계를 찾으려면 tcpdump, Microsoft 네트워크 모니터 또는 wireshark가 필요합니다. (많은 스레드가 똑같이, 거기 , 거기 또는 거기에 말했다 (tcpdump에 대한 George의 답변 참조)


답변

분석을 위해 DC로 흐르는 트래픽을 캡처 할 수 있으면 Wireshark의 패킷 검색을 사용하여 제시된 인증서를 찾을 수 있습니다.

이 wireshark 필터는 인증서 교환을 찾고 “LDAP SSL 테스트”에서 발행 한 모든 것을 필터링하여 도메인에서 발행하지 않은 인증서를 찾을 수 있도록합니다.

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

wireshark 샘플 페이지에서 표준 LDAP over TLS pcap을 사용하는 AD 예제가 없습니다.


답변

Windows / AD 관리에 대한 경험이 거의 없지만 Linux에 익숙합니다. 비슷한 리눅스 상황에서 추적 및 / 또는 패킷 캡처를 수행하고 디버그 모드 등에서 프로그램을 실행하는 등의 방법을 생각했습니다.

Active Directory에 대한 LDAP 연결을 어떻게 추적 / 디버그합니까?

이:

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

레벨을 높이면 메시지의 세부 사항과 생성 된 메시지 수가 증가합니다. 진단 하위 키의 항목 값을 3보다 크게 설정하면 서버 성능이 저하 될 수 있으므로 권장하지 않습니다. 로깅 수준이 증가하면 응용 프로그램 이벤트 로그가 빠르게 채워집니다.

그리고 이것은 아마도 :

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

추적은 ETW (Windows 용 이벤트 추적)를 사용합니다. Windows Server 2008 R2에서 사용 가능한 추적 도구를 이용하려면 MSDN 다운로드 사이트에서 Microsoft Windows SDK를 설치하십시오.

Google 검색은 Windows 서비스에서 추적 등을 수행 한 결과도 나타나지만 다시는 익숙하지 않습니다. 네트워크 트래픽 만 보는 것이 매우 어려울 수 있습니다. 트래픽 만보고 무엇을 찾아야할지 모르고 실제로 서비스 내에서 무슨 일이 일어나고 있는지 알지 못하기 때문입니다.

ldap에서 추적을 수행하거나 언급 된 도구 / 방법을 사용하여 어떤 출력을 기대할 수 있을지 모르겠지만 시도해 볼 가치가있는 것 같습니다.

행운을 빕니다


답변

패킷 스니핑을 원하지 않으면 모든 컴퓨터에서 보안 LDAP 연결을 테스트하고 실패한 사람을 기록하는 powershell 스크립트를 사용하는 것이 좋습니다. 도메인 컨트롤러에서 클라이언트에 원격으로 연결하거나 파일 서버에서 오류를 기록하는 클라이언트 쪽 스크립트를 만들 수 있습니다.

스크립트의 아이디어는 안전한 LDAP 연결을 시뮬레이션하는 것입니다. Windows 7 sp1 이상에서 기본적으로 제공되는 .net 프레임 워크를 사용합니다.

DC에서 원격으로 실행하려는 경우 스크립트는 다음과 같습니다 (이 문서 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
}

원격 버전 실행 결과 (빨간색 버전은 오프라인 클라이언트 임) :

여기에 이미지 설명을 입력하십시오


답변