Impacket DumpNTLMInfo.py 徹底解説:NTLM情報収集の基本と実践

セキュリティツール

ネットワーク評価に役立つ情報収集ツール

ネットワークセキュリティ評価やペネトレーションテストにおいて、対象システムの情報を効率的に収集することは非常に重要です。Impacket スイートに含まれる DumpNTLMInfo.py は、特にWindows環境において、認証情報なしでNTLM認証モデルに基づいたリモートホストの情報を取得できる強力なツールです。この記事では、DumpNTLMInfo.py の基本的な使い方から応用的な活用方法までを詳しく解説します。😊

Impacket と DumpNTLMInfo.py とは?

Impacketについて

Impacketは、ネットワークプロトコルを扱うためのPythonクラスのコレクションです。Fortra社のCore Securityによってメンテナンスされており、ネットワークパケットの低レベルなプログラムアクセスを提供することに重点を置いています。特にSMB(1/2/3)やMSRPCなどのプロトコルについては、プロトコル自体の実装も含まれています。これにより、開発者はネットワークパケットをゼロから構築したり、生データから解析したりすることが容易になります。Impacketは、SMB, MSRPC, NTLM, Kerberos, LDAP, MSSQLなど、多様なプロトコルをサポートしています。多くのセキュリティ専門家やペネトレーションテスターにとって必須のツールキットとなっています。

ImpacketはGitHubリポジトリから入手可能です。

DumpNTLMInfo.pyの役割

DumpNTLMInfo.py は、Impacketスイートに含まれるサンプルスクリプトの一つです。このツールの主な目的は、ターゲットとなるリモートホストに対してNTLM認証ネゴシエーションを試み、その応答からホストに関する情報を抽出することです。特筆すべき点は、有効な認証情報(ユーザー名やパスワード)を必要とせずに情報を取得できる場合があることです。これは、SMBプロトコル(バージョン1、2、3)のネゴシエーションプロセスを利用して実現されます。

取得できる情報には、以下のようなものが含まれます:

  • NetBIOSコンピュータ名
  • NetBIOSドメイン名
  • DNSコンピュータ名
  • DNSドメイン名
  • DNSツリー名
  • OSのバージョン
  • SMBサーバーの時刻情報 (利用可能な場合)
  • SMBプロトコルの詳細 (ダイアレクトバージョン、署名オプションなど)

これらの情報は、ターゲット環境の構成を理解し、さらなる攻撃ベクトルや脆弱性を特定するための重要な手がかりとなります。例えば、OSのバージョン情報から既知の脆弱性を特定したり、ドメイン情報からActive Directory環境の構造を推測したりすることが可能です。

💡 ポイント: DumpNTLMInfo.py は、認証なしでターゲットシステムの基本的な情報を収集するための初期偵察フェーズで特に役立ちます。

前提条件とインストール

DumpNTLMInfo.py を使用するには、まずImpacketがシステムにインストールされている必要があります。ImpacketはPythonで書かれているため、Python(バージョン3推奨)がインストールされていることが前提です。

Pythonのインストール

お使いのシステムにPython 3がインストールされていない場合は、Python公式サイトからダウンロードしてインストールしてください。Linuxディストリビューション(Kali Linuxなど)を使用している場合は、通常、Python 3はプリインストールされています。

Impacketのインストール

Impacketのインストールにはいくつかの方法がありますが、pipx を使用する方法が推奨されています。pipx はPythonパッケージを隔離された環境にインストールし、依存関係の衝突を防ぐのに役立ちます。

pipx がインストールされていない場合は、まず pipx をインストールします:

python3 -m pip install --user pipx
python3 -m pipx ensurepath

その後、pipx を使用してImpacketの最新安定版をインストールします:

python3 -m pipx install impacket

開発版(最新の変更が含まれる可能性があるが不安定な場合もある)を試したい場合は、GitHubからリポジトリをクローンまたはダウンロードし、展開したディレクトリで以下のコマンドを実行します:

git clone https://github.com/fortra/impacket.git
cd impacket
python3 -m pipx install .

Kali Linuxなどのペネトレーションテスト用ディストリビューションでは、Impacketがプリインストールされているか、パッケージマネージャ (apt) を通じて簡単にインストールできる場合があります。

sudo apt update
sudo apt install python3-impacket impacket-scripts

ただし、パッケージマネージャ版は最新版ではない可能性があるため、最新機能を利用したい場合は pipx でのインストールが推奨されます。

⚠️ 注意

Windows環境で pip install impacket を実行すると、Windows Defenderなどのセキュリティソフトウェアが impacket\dpapi.pyDumpNTLMInfo.py を脅威として検出し、インストールが失敗することがあります(2024年7月頃の報告あり)。この場合、一時的に該当ファイルや一時フォルダ(%TEMP%)、インストール先スクリプトフォルダを除外設定に追加する必要があるかもしれません。作業完了後は必ず除外設定を元に戻してください。

インストールが完了すると、impacket-DumpNTLMInfo (または環境によっては DumpNTLMInfo.py) コマンドが利用可能になります。

基本的な使い方

DumpNTLMInfo.py の基本的な構文は非常にシンプルです。

impacket-DumpNTLMInfo [オプション] <ターゲット>

ここで <ターゲット> は、調査対象のリモートホストのIPアドレスまたはホスト名です。

シンプルな実行例

ターゲットホスト 192.168.1.100 の情報を取得するには、以下のコマンドを実行します。

impacket-DumpNTLMInfo 192.168.1.100

このコマンドは、デフォルトでSMBプロトコル(通常はポート445)を使用してターゲットに接続し、NTLMネゴシエーションを開始して情報を収集します。

出力例と解説

成功すると、以下のような形式で情報が出力されます(内容はターゲットの設定により異なります)。

Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies

[*] Target: 192.168.1.100
[*] Querying target for info...

Target: 192.168.1.100
NetBIOS_Computer_Name: WIN-SERVER-2019
NetBIOS_Domain_Name: WORKGROUP
DNS_Computer_Name: Win-Server-2019.example.local
DNS_Domain_Name: example.local
DNS_Tree_Name: example.local
OS_Version: 10.0 (Build 17763) (Service Pack 0)
Challenge: b'\x01\x23\x45\x67\x89\xab\xcd\xef'
Server Time: 2025-04-01 06:20:00 UTC
SMBv1 Dialect: False
SMBv2/3 Dialect: True
SMBv2 Signing: Enabled
SMBv2 Encryption: Disabled
  • NetBIOS_Computer_Name: ターゲットホストのNetBIOS名。
  • NetBIOS_Domain_Name: ターゲットホストが所属するNetBIOSドメイン名またはワークグループ名。
  • DNS_Computer_Name: ターゲットホストの完全修飾ドメイン名(FQDN)。
  • DNS_Domain_Name: ターゲットホストが所属するDNSドメイン名。
  • DNS_Tree_Name: ターゲットホストが所属するDNSツリー名(通常はDNSドメイン名と同じ)。
  • OS_Version: ターゲットホストのOSバージョン情報。メジャーバージョン、マイナーバージョン、ビルド番号、サービスパック情報などが含まれます。
  • Challenge: NTLM認証プロセスで使用されるチャレンジ(ランダムなバイト列)。
  • Server Time: SMBサーバーから取得した時刻情報(利用可能な場合)。協定世界時(UTC)で表示されることが多いです。
  • SMBv1 Dialect: SMBv1プロトコルがサポートされているかどうか。
  • SMBv2/3 Dialect: SMBv2またはSMBv3プロトコルがサポートされているかどうか。
  • SMBv2 Signing: SMBv2/3のメッセージ署名が有効か (Enabled)、必須か (Required)、無効か (Disabled)。
  • SMBv2 Encryption: SMBv3の暗号化がサポートされているか。

これらの情報は、ターゲットシステムの基本的なプロファイルを把握するのに役立ちます。

コマンドオプション

DumpNTLMInfo.py は、より詳細な制御を行うためのいくつかのコマンドラインオプションを提供しています。-h または --help オプションで利用可能なオプションのリストを確認できます。

impacket-DumpNTLMInfo -h

以下は、主要なオプションとその説明です。

オプション 説明
target (必須) ターゲットのホスト名またはIPアドレスを指定します。
-h, --help ヘルプメッセージを表示して終了します。
-debug デバッグ出力を有効にします。プロトコルレベルの詳細情報が表示され、問題解決に役立ちます。
-target-ip <ip address> ターゲットマシンのIPアドレスを明示的に指定します。ターゲットとしてNetBIOS名を指定し、名前解決ができない場合に便利です。
-port <destination port> 接続先のポート番号を指定します。SMBのデフォルトは445ですが、異なるポートでサービスが動作している場合に変更します。RPCを指定した場合、デフォルトは135になることがあります。
-protocol [protocol] 使用するプロトコルを指定します (SMB または RPC)。デフォルトは SMB です。ポート135が指定された場合は通常RPCが使われます。

現行バージョン(例:Impacket 0.12.0)では、認証関連のオプション(-hashes, -no-pass, -k, -aesKey など)はヘルプメッセージには表示されますが、DumpNTLMInfo.py の主な目的は認証なしでの情報収集であるため、通常は使用されません。

実践的な使用例

単一ホストへの実行

最も基本的な使い方です。

impacket-DumpNTLMInfo 192.168.1.100

または、ホスト名で指定します。

impacket-DumpNTLMInfo fileserver.example.local

ターゲットIPアドレスの明示指定

NetBIOS名 `FILESRV01` の名前解決がローカルでできないが、IPアドレス `192.168.1.150` がわかっている場合:

impacket-DumpNTLMInfo FILESRV01 -target-ip 192.168.1.150

これにより、ツールは指定されたIPアドレスに接続しつつ、ターゲット名として `FILESRV01` を使用してネゴシエーションを試みます。

カスタムポートの使用

もしターゲットのSMBサービスが標準の445番ポートではなく、4445番ポートで動作している場合:

impacket-DumpNTLMInfo 192.168.1.120 -port 4445

Impacket 0.12.0以降では、-port オプションが正しく機能するよう修正されています。

RPCプロトコルの使用

通常、ポート135 (RPC Endpoint Mapper) をターゲットにする場合、RPCプロトコルが使用されます。明示的にRPCを指定することも可能です。

impacket-DumpNTLMInfo 192.168.1.130 -port 135 -protocol RPC

ただし、DumpNTLMInfo.py は主にSMBネゴシエーションからの情報抽出に焦点を当てているため、RPC経由で得られる情報は限定的かもしれません。

複数ターゲットへのスクリプト実行

DumpNTLMInfo.py 自体には複数ターゲットを一括で処理する機能はありませんが、シェルスクリプトなどを利用してリスト内のホストに対して順番に実行することが可能です。

例えば、targets.txt というファイルにIPアドレスが一行ずつ記述されている場合:

# targets.txt の内容例
# 192.168.1.100
# 192.168.1.101
# 192.168.1.102

# シェルスクリプトでの実行例 (Bash)
while IFS= read -r target; do
  echo "[*] Querying: $target"
  impacket-DumpNTLMInfo "$target"
  echo "----------------------------------------"
done < targets.txt

これにより、リスト内の各ホストに対してツールを実行し、結果をまとめて確認できます。

デバッグモードでの実行

接続エラーが発生する場合や、プロトコルの詳細な動作を確認したい場合は、-debug オプションが役立ちます。

impacket-DumpNTLMInfo 192.168.1.100 -debug

これにより、送受信されるパケットの詳細や内部処理のログが表示されます。

セキュリティ上の考慮事項と対策

DumpNTLMInfo.py は、攻撃者が初期偵察段階でターゲットネットワークに関する情報を収集するためによく使用するツールの一つです。認証情報なしでOSバージョンやドメイン情報などが漏洩することは、攻撃者にとって有利な情報となります。

攻撃者による悪用シナリオ

  • 脆弱性スキャンの効率化: OSバージョン情報から、そのバージョンに存在する既知の脆弱性を特定し、攻撃対象を絞り込むことができます。
  • 環境構成の把握: ドメイン名やコンピュータ名から、Active Directory環境の構造や命名規則を推測し、さらなる攻撃(例: Kerberoasting, AS-REP Roasting)の準備に利用される可能性があります。
  • SMB設定の確認: SMB署名の有効/無効状態を確認し、無効であればNTLMリレー攻撃(例: ntlmrelayx.pyを使用)の可能性を探ることがあります。SMBv1が有効であれば、古い脆弱性(例: EternalBlue)が悪用されるリスクも考えられます。

2024年2月には、攻撃グループ「TA577」が、フィッシングメールに添付したHTMLファイルから外部SMBサーバーへ接続させ、DumpNTLMInfo.py のようなツール(Impacketが使用された可能性が高いと報告されています)を用いてNTLMv2チャレンジ/レスポンスをキャプチャし、NTLMハッシュを窃取しようとする攻撃キャンペーンが観測されました。これは、情報収集だけでなく、認証情報そのものを狙う攻撃にもつながる可能性を示唆しています。

緩和策と対策

DumpNTLMInfo.py のようなツールによる情報収集のリスクを低減するためには、以下のような対策が考えられます。

  • SMBv1の無効化: SMBv1は古いプロトコルであり、多くの既知の脆弱性が存在します。可能な限り無効化することが強く推奨されます。
    # PowerShellでSMBv1サーバー機能を無効化する例
    Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol-Server
  • SMB署名の強制: SMB署名を有効化(可能であれば必須化)することで、NTLMリレー攻撃のリスクを大幅に低減できます。これはグループポリシーなどで設定可能です。 グループポリシーパス: Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Security Options
    • Microsoft network client: Digitally sign communications (always) -> Enabled
    • Microsoft network server: Digitally sign communications (always) -> Enabled
  • ファイアウォールによるアクセス制御: 不要なネットワークからのSMB(ポート445, 139)やRPC(ポート135)へのアクセスを制限します。特に境界ファイアウォールで外部からのインバウンドSMB/RPC通信をブロックすることは基本です。内部ネットワークにおいても、セグメンテーションを行い、必要な通信のみを許可するように設定します。
  • ホストベースファイアウォールの活用: Windows Defender Firewallなどのホストベースファイアウォールを使用して、信頼されていないネットワークからのSMBアクセスを制限します。
  • NetBIOS over TCP/IP (NetBT) の無効化: NetBIOS名に関連する情報漏洩を防ぐために、特に不要であればNetBTを無効化することを検討します(DHCPサーバーまたはネットワークアダプターのプロパティで設定可能)。
  • 監視と検出: ネットワーク侵入検知システム(NIDS)やセキュリティ情報イベント管理(SIEM)システムで、異常なSMBネゴシエーション試行や外部へのSMB/RPC通信を監視し、アラートを設定します。
  • PetitPotam対策: NTLMリレー攻撃を誘発する手法(例: PetitPotam, 2021年発見)への対策として、AD CSサーバーでNTLM認証を無効化する、EPA (Extended Protection for Authentication) を有効にする、SMB署名を強制するなどの対策が有効です。
🛡️ 重要: これらの対策は、DumpNTLMInfo.py による情報収集だけでなく、より広範なSMB/NTLM関連の攻撃に対する防御策としても有効です。多層的な防御アプローチを取ることが重要です。

まとめ

Impacketの DumpNTLMInfo.py は、ネットワーク評価やペネトレーションテストの初期段階において、ターゲットシステムに関する基本的な情報を認証なしで収集するためのシンプルかつ効果的なツールです。OSバージョン、ドメイン情報、SMB設定などの情報を明らかにすることで、さらなる調査や攻撃パスの特定に役立ちます。

一方で、攻撃者にとってもこのツールは有用であり、情報漏洩はセキュリティリスクにつながります。SMBv1の無効化、SMB署名の強制、ファイアウォールによる適切なアクセス制御、不要なサービスの無効化などの対策を講じることで、このような偵察活動のリスクを低減することが重要です。

ツールの機能を理解し、防御策を適切に実施することで、より安全なネットワーク環境を維持することができます。🔐

コメント

タイトルとURLをコピーしました