Impacket Net 徹底解説: Windowsネットワーク探索の頼れる相棒 💻

セキュリティツール

Windows環境でのネットワーク探索と対話をシンプルにする強力なツール

はじめに: Impacket とは?

Impacketは、ネットワークプロトコルを扱うためのPythonクラスの集合です。低レベルのパケットアクセスを提供することに焦点を当てており、特にSMB (Server Message Block) や MSRPC (Microsoft Remote Procedure Call) といったWindowsネットワークで中心的な役割を果たすプロトコルについては、その実装自体を提供しています。これにより、開発者やセキュリティ専門家は、ネットワークパケットを一から構築したり、生のデータから解析したりすることが容易になります。

Impacketは、単なるライブラリにとどまらず、その機能を活用した多くの便利なサンプルツール(スクリプト)を提供しています。これらのツールは、リモートサービスの実行、Kerberos認証の操作、Windows認証情報のダンプ、パケットスニッフィング、リレー攻撃など、多岐にわたるタスクを実行できます。

この記事では、Impacketのツール群の中でも特に便利な impacket-net (または net.py) に焦点を当て、その使い方や機能を詳しく解説していきます。 ✨

Impacketは元々SecureAuthによって作成され、現在はFortra’s Core Securityによってメンテナンスされています。オープンソースとして開発されており、GitHubリポジトリから入手可能です。

Impacketのインストール

Impacketを利用するには、まずPython環境が必要です。Pythonがインストールされていることを確認したら、以下の方法でImpacketをインストールできます。

安定版をインストールする最も簡単な方法はpip (またはシステム全体へのインストールにはpipx) を使うことです。

# pipxを使用する場合 (推奨)
python3 -m pipx install impacket

# pipを使用する場合 (仮想環境内推奨)
python3 -m pip install impacket

Kali Linuxなどのペネトレーションテスト用ディストリビュションでは、標準でImpacketのスクリプト群がインストールされている場合もあります (impacket-scripts パッケージなど)。

最新の変更を試したい場合は、GitHubリポジトリから直接クローンまたはダウンロードし、展開したディレクトリで以下のコマンドを実行します。

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

Dockerイメージを利用することも可能です。まずイメージをビルドします。

docker build -t "impacket:latest" .

その後、以下のコマンドでコンテナを実行し、Impacketツールを使用できます。

docker run -it --rm "impacket:latest"

impacket-net の基本

impacket-net は、Windows標準の net.exe コマンドラインユーティリティの代替となるツールです。RPCプロトコルを利用することで、リモートコンピュータから net.exe と同様の機能を利用可能にします。これにより、LinuxやmacOS環境からWindowsネットワーク内の情報を収集したり、設定を変更したりすることが容易になります。 🛡️

基本的な構文は以下のようになります。

impacket-net <認証情報> <ターゲット> <コマンド> [コマンド引数] [オプション]
  • 認証情報: ターゲットシステムへの接続に必要な認証情報。形式は [ドメイン名/]ユーザー名[:パスワード] です。
    • パスワードの代わりにNTLMハッシュ (-hashes LMHASH:NTHASH) やKerberosチケット (-k オプションと KRB5CCNAME 環境変数)、AESキー (-aesKey) も使用できます。
    • パスワードを省略 (-no-pass) すると、パスワードなしでの接続や、NTLMハッシュ、Kerberosチケットでの接続を試みます。
  • ターゲット: 接続先のコンピュータ名またはIPアドレス。
  • コマンド: 実行したい操作を指定します。 user, group, share, file, session, time などがあります。
  • コマンド引数: コマンドに応じて必要な追加情報 (ユーザー名、グループ名、共有名など)。
  • オプション: 接続方法やデバッグ出力などを制御します。
    • -debug: デバッグ情報を表示します。
    • -target-ip <IPアドレス>: ターゲットのIPアドレスを明示的に指定します (名前解決ができない場合に有用)。
    • -port <ポート番号>: 接続先のSMB/RPCポートを指定します (通常は445または139)。
    • -dc-ip <IPアドレス>: ドメインコントローラーのIPアドレスを指定します (Kerberos認証などで必要)。
注意: ターゲットシステムに対する操作には、適切な権限が必要です。許可なくシステムにアクセスしたり、情報を取得したりすることは違法となる可能性があります。必ず許可された範囲で、倫理的にツールを使用してください。

主要なコマンドと使用例

impacket-net は多様なコマンドを提供しており、Windowsネットワーク管理や調査に役立ちます。以下に主要なコマンドとその使用例を示します。

コマンド 説明 使用例 (例: ターゲット 192.168.1.100, ドメイン MYDOMAIN, ユーザー admin, パスワード Password123)
user ユーザーアカウントの管理 (一覧表示、追加、削除、情報表示など)。
# ユーザー一覧表示
impacket-net user MYDOMAIN/admin:Password123@192.168.1.100

# 特定ユーザーの情報表示
impacket-net user guest MYDOMAIN/admin:Password123@192.168.1.100 info

# 新規ユーザー追加
impacket-net user newuser MyPassword /add MYDOMAIN/admin:Password123@192.168.1.100

# ユーザー削除
impacket-net user olduser /delete MYDOMAIN/admin:Password123@192.168.1.100
group グループの管理 (一覧表示、メンバー表示、追加、削除など)。ローカルグループとドメイングループの両方を扱えます。
# ドメイングループ一覧表示
impacket-net group '' /domain MYDOMAIN/admin:Password123@192.168.1.100

# ローカルグループ一覧表示
impacket-net group MYDOMAIN/admin:Password123@192.168.1.100

# 特定グループのメンバー表示 (ローカルのAdministrators)
impacket-net group Administrators MYDOMAIN/admin:Password123@192.168.1.100

# 特定グループのメンバー表示 (ドメインのDomain Admins)
impacket-net group 'Domain Admins' /domain MYDOMAIN/admin:Password123@192.168.1.100

# グループにユーザーを追加 (ローカルのAdministratorsにnewuserを追加)
impacket-net group Administrators newuser /add MYDOMAIN/admin:Password123@192.168.1.100

# グループからユーザーを削除 (ローカルのAdministratorsからolduserを削除)
impacket-net group Administrators olduser /delete MYDOMAIN/admin:Password123@192.168.1.100
share 共有フォルダの管理 (一覧表示、追加、削除など)。
# 共有一覧表示
impacket-net share MYDOMAIN/admin:Password123@192.168.1.100

# 新規共有追加 (例: myshare を C:\sharepath で共有)
impacket-net share myshare=C:\\sharepath /add MYDOMAIN/admin:Password123@192.168.1.100

# 共有削除
impacket-net share myshare /delete MYDOMAIN/admin:Password123@192.168.1.100
session アクティブなSMBセッションの一覧表示と削除。
# セッション一覧表示
impacket-net session MYDOMAIN/admin:Password123@192.168.1.100

# 特定のコンピュータからのセッションを削除 (例: 192.168.1.50から)
# impacket-net session \\\\192.168.1.50 /delete MYDOMAIN/admin:Password123@192.168.1.100
# (注: 削除機能は実装状況による可能性があります)
file リモートサーバー上の共有ファイルに関する情報を表示します。特定の共有上の開かれているファイルをリストしたり、特定のIDを持つファイルを閉じたりできます。
# 開かれているファイルの一覧表示
impacket-net file MYDOMAIN/admin:Password123@192.168.1.100

# 特定の共有 (例: C$) 上のファイル情報表示
impacket-net file C$ MYDOMAIN/admin:Password123@192.168.1.100

# 特定IDのファイルを閉じる (例: ID 12345)
# impacket-net file 12345 /close MYDOMAIN/admin:Password123@192.168.1.100
# (注: 閉じる機能は実装状況による可能性があります)
time リモートサーバーの現在時刻を表示します。
impacket-net time MYDOMAIN/admin:Password123@192.168.1.100
computer ドメイン内のコンピュータアカウントを管理します (一覧表示、追加、削除など)。主にドメインコントローラーに対して使用します。
# ドメインコンピュータ一覧表示 (DCに対して実行)
# impacket-net computer '' /domain MYDOMAIN/admin:Password123@<DC_IP>

# コンピュータアカウント追加 (DCに対して実行)
# impacket-net computer newpc$ /add MYDOMAIN/admin:Password123@<DC_IP>
(注: このコマンドは主にDCに対して意味を持ちます)

これらのコマンドは、Windowsネットワークの状況把握、設定変更、セキュリティ評価など、様々な場面で役立ちます。特に、Linux環境からWindowsドメインを管理・調査する必要がある場合に強力なツールとなります。 🔑

応用的な使い方とシナリオ

impacket-net の基本的なコマンドに加えて、オプションを組み合わせたり、他のImpacketツールと連携させたりすることで、より高度な操作が可能です。

パスワードが不明でも、ユーザーのNTLMハッシュ(LMハッシュとNTハッシュのペア)が分かっていれば、-hashes オプションを使って認証できます。これは、Pass-the-Hash (PtH) と呼ばれる攻撃手法(または管理者にとっては正当な管理手法)の一部です。

# LMハッシュは空、NTハッシュが aad3b435b51404eeaad3b435b51404ee の場合
impacket-net user MYDOMAIN/admin -hashes :aad3b435b51404eeaad3b435b51404ee@192.168.1.100

NTLMハッシュは、impacket-secretsdump などのツールで取得できる場合があります。

Kerberosチケット(通常は ccache ファイル形式)があれば、-k オプションと環境変数 KRB5CCNAME を使って認証できます。ドメインコントローラーのIPアドレス (-dc-ip) が必要になることが多いです。

# KRB5CCNAMEにチケットファイルパスを設定
export KRB5CCNAME=/path/to/ticket.ccache

# -k オプションで接続 (パスワード不要)
impacket-net user MYDOMAIN/admin -k -dc-ip <DC_IP>@192.168.1.100

Kerberosチケットは、impacket-getTGTimpacket-getST などのツールで取得できます。

ターゲットのホスト名を指定しても、DNSやNetBIOS名前解決がうまくいかない場合があります。そのような場合は、-target-ip オプションでIPアドレスを直接指定すると接続できることがあります。

impacket-net user MYDOMAIN/admin:Password123@TARGET_HOSTNAME -target-ip 192.168.1.100

impacket-net 自体には複数ターゲットを一度に処理する機能は組み込まれていませんが、シェルスクリプトなどと組み合わせることで、複数のホストに対して同じコマンドを効率的に実行できます。

#!/bin/bash
TARGETS=("192.168.1.100" "192.168.1.101" "server01.mydomain.local")
USERNAME="MYDOMAIN/admin"
PASSWORD="Password123"

for target in "${TARGETS[@]}"; do
  echo "--- Checking time on ${target} ---"
  impacket-net time ${USERNAME}:${PASSWORD}@${target}
  echo ""
done

impacket-net で得られた情報(例: 共有リスト、ユーザーリスト)は、他のImpacketツールへの入力として活用できます。

  • impacket-smbclient: 共有フォルダへの接続、ファイル操作
  • impacket-secretsdump: 認証情報のダンプ
  • impacket-psexec, impacket-wmiexec, impacket-atexec, impacket-dcomexec: リモートコマンド実行
  • impacket-lookupsid: SIDからユーザー情報を探索
  • impacket-GetUserSPNs: サービスプリンシパル名を持つユーザーを列挙 (Kerberoasting用)

例えば、impacket-net share でアクセス可能な共有を見つけ、impacket-smbclient でその共有に接続してファイルを探索する、といった連携が可能です。

注意点とベストプラクティス

  • 権限の確認: 常に実行する操作に必要な権限があるかを確認してください。不必要な管理者権限の使用は避け、最小権限の原則に従うことが望ましいです。
  • ログの監視: impacket-net の活動は、ターゲットシステムのセキュリティログ(イベントログなど)に記録される可能性があります。特に監査が有効になっている環境では、実行した操作が記録されていることを認識しておきましょう。
  • 認証情報の安全な管理: スクリプトやコマンド履歴に平文のパスワードやハッシュを残さないように注意してください。可能であればKerberosチケットや、パスワード入力を求めるインタラクティブな方法を使用します。
  • 法的・倫理的な配慮: 繰り返しになりますが、ツールの使用は必ず許可された範囲内で行ってください。ペネトレーションテストなどの正当な目的以外での不正利用は厳禁です。
  • バージョンの確認: Impacketは活発に開発されています。最新の機能や修正を利用するために、定期的にバージョンアップを検討しましょう。ただし、バージョンによって挙動が変わる可能性もあるため、重要な環境で使用する前にはテストを行うことが推奨されます。
  • エラーハンドリング: 接続エラーや権限不足など、コマンドが失敗する場合もあります。出力メッセージをよく読み、原因を特定してください。-debug オプションが役立つことがあります。

まとめ

impacket-net は、Impacketスイートの中でも特に汎用性が高く、Windowsネットワーク環境のリモート管理や情報収集において非常に強力なツールです。Windows標準の net.exe コマンドの機能をリモートから、かつクロスプラットフォームで利用できる点は大きな利点です。

ユーザー、グループ、共有、セッションなどの情報を効率的に取得・管理できるため、システム管理者、ネットワーク管理者、そしてセキュリティ専門家にとって欠かせないツールの一つと言えるでしょう。他のImpacketツールと組み合わせることで、さらに高度なネットワーク探索やペネトレーションテストが可能になります。

ただし、その強力さゆえに、使用には十分な注意と責任が伴います。常に適切な権限と許可のもとで、倫理的にツールを活用するように心がけましょう。 💪

この記事が impacket-net の理解と活用の一助となれば幸いです。 😊

コメント

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