web-dev-qa-db-ja.com

schannel ldapエラーの原因となっているクライアントを見つける

ネットワークのどこかで、LDAPクライアントが適切なCA情報なしでADサーバーにクエリを実行しています。これは、ドメインコントローラーのイベントログで(私の見解では役に立たない)システムクリティカル(ソース:schannel)イベントID 36887を引き起こします。

次の致命的なアラートを受け取りました:46。

正しく構成されていないクライアントを見つけるにはどうすればよいですか?

8
natxo asenjo

組み込みでは、メッセージのソースを簡単に見つけることができません。

エラーの原因となっているマシンを見つけるには、tcpdump、Microsoftネットワークモニター、またはWiresharkが必要です。 (多くのスレッドが同じことを言った therethere または there (コメントでtcpdumpに関するGeorgeへの回答を参照))

8
yagmoth555

DCに流れるトラフィックを分析のためにキャプチャできる場合は、Wiresharkのパケット検索を使用して、提示されている証明書を見つけることができます。

このWiresharkフィルターは、証明書の交換を探し、「LDAP SSLテスト」によって発行されたものをすべて除外します。これにより、ドメインによって発行されていない証明書を見つけることができます。

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

私が取り組むADの例がないので、wiresharkのサンプルページにある標準のLDAP over TLS pcapを使用しています。

3
Tim Fletcher

Windows/AD管理の経験はほとんどありませんが、Linuxには慣れています。トレースやパケットキャプチャを実行したり、プログラムをデバッグモードで実行したりするなど、同様のLinuxの状況で...と思ったので、これを見つけました。

Active Directoryに対してLDAP接続をどのように追跡/デバッグしますか?

この:

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

レベルを上げると、メッセージの詳細と出力されるメッセージの数が増えます。 Diagnosticsサブキーのエントリの値を3より大きい値に設定すると、サーバーのパフォーマンスが低下する可能性があるため、お勧めしません。ロギングレベルを上げると、アプリケーションイベントログがすぐにいっぱいになります。

そしてこれは多分:

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

トレースでは、Windowsのイベントトレース(ETW)を使用します。 Windows Server 2008 R2で利用可能なトレースツールを利用するには、MSDNダウンロードサイトからMicrosoft Windows SDKをインストールします。

グーグル検索はまた、Windowsサービス上でトレースなどを実行した結果を表示しますが、繰り返しますが、そのいずれにも詳しくありません。ネットワークトラフィックだけを監視することは非常に難しいと思います。トラフィックを確認しているだけで、何を調べればよいかわからず、サービス内で何が起こっているのか実際には確認できないからです。

LDAPでトレースを実行したり、前述のツールやメソッドを使用したりするとどのような出力が期待できるかはわかりませんが、試してみる価値はあるようです。

幸運を

0
Ryan Babchishin

パケットスニッフィングが不要な場合は、すべてのコンピューターでpowershellスクリプトを使用して、安全なLDAP接続をテストし、失敗したユーザーを記録することをお勧めします。ドメインコントローラーからクライアントにリモートで接続することも、ファイルサーバーに障害を記録するクライアント側スクリプトを作成することもできます。

スクリプトのアイデアは、安全なLDAP接続をシミュレートすることです。 Windows 7 sp1以降でネイティブに付属する.netフレームワークを使用します。

DCからリモートで実行する場合、スクリプトは次のようになります(リモートPowerShellの権限が必要です。この記事に従ってください https://www.briantist.com/how-to/powershell- remoting-group-policy / ):

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
}

リモートバージョン実行の出力(赤いバージョンはオフラインクライアントです):

enter image description here

0
Felipe Donda