Impacket checkMSSQLStatus.py
SQL Server へのログイン応答を比較し、TLS チャネルバインディングの要求状態を調べます。
| 項目 | 内容 |
|---|---|
| 実装 | examples/checkMSSQLStatus.py |
| カテゴリ | MSSQL / Exchange / MQTT |
| 規模 | 154 行 |
| 配布 | setup.py の scripts=examples/*.py によりスクリプトとしてインストール |
CLI と入力
Section titled “CLI と入力”オプションの最新の定義は python examples/checkMSSQLStatus.py -h で確認できます。
| 引数 | 説明 |
|---|---|
target | [[domain/]username[:password]@] |
-port | Port MSSQL (default: 1433) |
-debug | Turn DEBUG output ON |
-ts | Adds timestamp to every logging output |
-hashes | NTLM hashes |
-no-pass | Don’t ask for password (useful with -k) |
-k | Use Kerberos authentication (ccache via KRB5CCNAME) |
-aesKey | AES key for Kerberos (128 or 256 bits) |
-dc-ip | IP of the domain controller |
-target-ip | IP of the target (overrides target name resolution) |
詳細な処理フロー
Section titled “詳細な処理フロー”TDS pre-login を行い、server の encryption 設定に従って TLS connection を確立します。channel binding が正しい場合、欠落した場合、不正な場合の login を組み立て、server 応答を比較して policy を判定します。SQL/Windows authentication と接続 option は target parser で解決します。
仕組みの詳細
Section titled “仕組みの詳細”MSSQL の channel binding は、TLS channel とその上で行う Windows/NTLM authentication を結び付けます。client は server certificate を基に channel binding data を作り、NTLM authenticate message の AV pair/MIC 計算へ含めます。 server が CBT を検証する設定なら、別 TLS channel から持ってきた値や欠落値を 拒否できます。
_new_conn() は各試行で TDS pre-login から新しい TCP/TLS session を作ります。
同じ TLS session を再利用すると CBT 条件を独立に比較できないためです。
pre-login の encryption negotiation を読み、必要な場合に socket を TLS で
包んだ後、正常、不正、欠落した binding 条件で login token を送ります。
結果判定は一回の login 成否だけでなく、条件間の応答差を使います。credential 自体が誤っている、SQL login しか許可されない、TLS certificate/handshake が 失敗した状態では CBT policy を判定できません。TDS error token と接続切断を 保持し、「強制」「非強制」「判定不能」を分けることが重要です。
主要な実装要素
Section titled “主要な実装要素”| シンボル | 位置 | 責務を追う入口 |
|---|---|---|
MSQLCBTCheck | 24 | __init__()、run() |
Impacket 内部
Section titled “Impacket 内部”| モジュール | 使用する主な名前 |
|---|---|
impacket | version |
impacket.examples | logger |
impacket.examples.utils | parse_target |
impacket.tds | MSSQL, TDS_ENCRYPT_OFF, TDS_ENCRYPT_REQ |
出力・副作用・必要権限
Section titled “出力・副作用・必要権限”- 照会や認証の試行が中心です。実行回数が多いと監査ログやアカウントロック、対象の負荷に影響します。
失敗経路と後始末
Section titled “失敗経路と後始末”- 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。
実装を変更するとき
Section titled “実装を変更するとき”impacket.tds.MSSQL、TDS encryption 定数、TLS/NTLM helper に依存します。MSQLCBTCheck._new_conn() が試行ごとの状態を分離し、_login() / run() が比較を行います。試行間で TLS/session state を再利用しないことが重要です。
- 構文:
python -m py_compile examples/checkMSSQLStatus.py - CLI:
python examples/checkMSSQLStatus.py -h - 関連テスト:
tests/misc/test_tds.py

