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


8

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

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

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


このエラーは引き続き発生しますか?それとも一度だけ起こったのですか?
フェリペDonda

1
デフォルトの最初のサイトにあるLDAPサーバーで引き続き発生するため、クライアントはそれらのIP範囲に含まれます。
natxo asenjo 2016

回答:


8

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

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


2
私は同意する傾向があり、それは;-)(あなたのコメントではなく、状況)を吸います。もう1つの解決策は、schannelのログ収集を完全にオフにすることですが、これにより予期しない影響が生じる可能性があります。
natxo asenjo 2016

@natxoasenjoもう1つ私が見たのはldapのログです。ロギングはiisを介して行われているとのことです。おそらく、iisログディレクトリをチェックして、ip / requestが完了していることを確認して、ipをより速く見つけることができます。(両方のログのタイムスタンプを比較できるようになります)
yagmoth555

これは良い提案でしたが、これらのドメインコントローラー(2008r2)にはWebサーバーの役割がインストールされていません。
natxo asenjo 2016

3

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

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

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

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


0

私は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

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

スクリプトのアイデアは、安全な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 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.