コンテンツにスキップ

Impacket CheckLDAPStatus.py

カテゴリ目次へ戻る / コマンド全体目次へ戻る

Domain Controller が LDAP 署名と LDAPS のチャネルバインディングを要求するか調べます。

項目内容
実装examples/CheckLDAPStatus.py
カテゴリActive Directory / LDAP / アカウント管理
規模128 行
配布setup.py の scripts=examples/*.py によりスクリプトとしてインストール

オプションの最新の定義は python examples/CheckLDAPStatus.py -h で確認できます。

引数説明
-dc-ipIP Address of a domain controller or a DNS resolver for the domain.(必須)
-domain(必須)
-debugTurn DEBUG output ON
-timeoutDNS timeout(既定値: 15)
-tsAdds timestamp to every logging output

CheckLDAP.list_dc() が対象 DC を確定し、run() が各 DC に対して LDAP signing と LDAPS CBT の検査を順に実行します。前者は LDAPConnection の bind 結果、後者は TLS 接続と channel binding を変えた認証結果から設定を判定します。timeout は DNS と接続の両方へ影響します。

このコマンドの判定対象は「LDAP port が開いているか」ではなく、Domain Controller が認証時に署名と TLS channel binding をどのように要求するかです。 LDAP signing は平文 LDAP session 上の SASL/NTLM bind に署名がない場合の応答を 観察し、server が未署名 bind を拒否するかどうかで判定します。LDAPS CBT は TLS server certificate から channel binding data を作る正常系と、CBT を 欠落・不一致にした認証試行を分け、返された LDAP status の差を見ます。

-domain だけが与えられた場合、list_dc() は DNS の SRV 情報から候補 DC を 作ります。-dc-ip はこの discovery を省き、検査対象を一台に固定します。 複数 DC を持つ domain では policy が一様とは限らないため、結果は domain 全体の属性ではなく「検査した各 DC の現在の応答」として扱う必要があります。

TLS handshake failure、資格情報の拒否、CBT policy による拒否は同じ失敗では ありません。check_ldaps_cbt() を変更するときは、OpenSSL の通信例外と LDAP result code を分離し、認証そのものが成立しない状態を「CBT 強制」と誤判定 しないことが重要です。

シンボル位置責務を追う入口
CheckLDAP30__init__()、list_dc()、run()、check_ldaps_cbt()、check_ldap_signing()
モジュール使用する主な名前
impacketversion
impacket.exampleslogger
impacket.ldap.ldapLDAPConnection, LDAPSessionError
import 名配布パッケージ経路・宣言状態
OpenSSLpyOpenSSL直接 import、宣言済み
dnsdnspython直接 import、直接依存には未宣言
  • 照会や認証の試行が中心です。実行回数が多いと監査ログやアカウントロック、対象の負荷に影響します。
  • 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。

impacket.ldap.ldap、OpenSSL、dns.resolver を使用します。主要責務は CheckLDAP に集約されています。dnspython は直接依存として宣言されていないため、配布方法を変更するときは注意が必要です。

  • 構文: python -m py_compile examples/CheckLDAPStatus.py
  • CLI: python examples/CheckLDAPStatus.py -h
  • 関連テスト: tests/SMB_RPC/test_ldap.py