ネットワーク侵入テストを加速する強力なツールをマスターしよう!
はじめに: NetExec (nxc) とは?
NetExec (通称 nxc
) は、ネットワークセキュリティ評価、特に大規模なActive Directory環境などにおけるペネトレーションテストやレッドチーム活動を効率化するために設計された強力なツールです。元々は広く利用されていた CrackMapExec (CME) からフォークして開発されました。CME の開発が停滞気味になったことを受け、コミュニティによって活発な開発が続けられています。
nxc
は、複数のホストに対して様々なプロトコル (SMB, WinRM, SSH, LDAP, MSSQL など) を用いて、認証情報の検証、権限昇格、コマンド実行、機密情報の探索といった操作を並行して実行できる点が大きな特徴です。これにより、セキュリティ専門家は短時間で広範囲なネットワークの脆弱性を評価し、攻撃経路を発見することが可能になります。
nxc
は CME の後継として、より多くの機能追加や改善、活発なメンテナンスが行われています。CME を利用していたユーザーは nxc
への移行を検討する価値があります。
主な用途としては以下のようなものが挙げられます。
- パスワードスプレー攻撃: よく使われるパスワードや特定のパスワードリストを用いて、多数のアカウントへのログイン試行。
- 共有フォルダの列挙とアクセス: SMBプロトコルを利用してアクセス可能な共有フォルダをリストアップし、内容を探索。
- リモートコマンド実行: WinRMやSSHを利用して、認証が成功したホスト上で任意のコマンドを実行。
- Active Directory情報の収集: LDAPプロトコルを用いて、ユーザー、グループ、コンピューターなどの情報を収集 (例: BloodHound用データ収集)。
- データベースへのアクセスと操作: MSSQLなどのデータベースサーバーに接続し、情報の取得やコマンド実行を試みる。
- 脆弱性スキャンと悪用: 特定の既知の脆弱性を突くモジュールを実行。
このブログでは、nxc
の基本的な使い方から、主要なプロトコルやモジュールの活用方法、実践的なコマンド例まで、幅広く解説していきます。
インストール方法
nxc
のインストール方法はいくつかありますが、公式で推奨されているのは pipx
を利用する方法です。pipx
は Python アプリケーションを独立した環境にインストール・管理するためのツールで、依存関係の衝突を防ぐことができます。
pipx を利用したインストール (推奨)
まず、システムに pipx
がインストールされていない場合は、インストールします。Python 3.7 以上が必要です。
ターミナルを再起動するか、指示に従ってパスを通した後、以下のコマンドで nxc
をインストールします。
注意: GitHubリポジトリから直接インストールするため、最新の開発版がインストールされます。安定版を求める場合は、リリースタグを指定することも可能です(ただし、公式ドキュメントでは上記の方法が推奨されています)。
アップデートは以下のコマンドで行えます。
Docker を利用したインストール
Docker を利用すると、ホスト環境を汚さずに nxc
を実行できます。Docker Hub で公式イメージが提供されているか、あるいは自分で Dockerfile を作成してビルドすることも可能です。公式ドキュメントやリポジトリで最新の Docker イメージ情報を確認してください。
(例: もし公式イメージ `ghcr.io/pennyw0rth/netexec` が存在する場合)
Poetry (開発者向け)
ソースコードから直接実行したり、開発に参加したりする場合は、Poetry を使用して依存関係を管理し、仮想環境を構築するのが一般的です。
基本的な使い方
nxc
の基本的なコマンド構文は以下のようになります。
プロトコル指定
最初に、対象とするプロトコルを指定します。代表的なプロトコルには以下のようなものがあります。
smb
: Windows ファイル共有、認証などwinrm
: Windows リモート管理 (PowerShell リモート実行)ssh
: Secure Shell (Linux/Unix サーバー管理)ldap
: Lightweight Directory Access Protocol (Active Directory 情報収集)mssql
: Microsoft SQL Serverrdp
: Remote Desktop Protocol (接続可否確認など)vnc
: Virtual Network Computing (接続可否確認など)ftp
: File Transfer Protocolwmi
: Windows Management Instrumentation (コマンド実行など)
ターゲット指定
次に、操作対象のホストを指定します。複数の形式で指定可能です。
- 単一 IP アドレス:
192.168.1.100
- ホスト名:
server.domain.local
- CIDR 表記:
192.168.1.0/24
- IP アドレス範囲:
192.168.1.100-150
- ファイルからの読み込み:
targets.txt
(ファイル内にIPアドレスやホスト名を列挙)
認証情報 (Credentials)
多くの操作では認証情報が必要です。nxc
では、ユーザー名とパスワード、またはハッシュ値 (NTLMハッシュなど) を用いた認証 (Pass-the-Hash) が可能です。
-u <username>
: ユーザー名を指定。複数指定可能。ファイルからの読み込みも可。-p <password>
: パスワードを指定。複数指定可能。ファイルからの読み込みも可。-H <hash>
: NTLMハッシュを指定。LMハッシュとNTLMハッシュをコロン区切りで指定 (LM:NTLM
)。LMハッシュがない場合は空にする (:NTLM
)。複数指定可能。ファイルからの読み込みも可。-d <domain>
: ドメイン名を指定。ローカルアカウントの場合は不要。--local-auth
: ローカルアカウントとして認証を試みる。--kerberos
: Kerberos 認証を使用する (kinit などで事前にチケット取得が必要)。
その他の共通オプション
他にも多くの便利なオプションがあります。
--timeout <seconds>
: 各接続のタイムアウト時間(デフォルト: なし)。--threads <number>
: 同時接続スレッド数(デフォルト: 100)。ネットワークやターゲットへの負荷を考慮して調整。--verbose
: 詳細なデバッグ情報を表示。--port <port>
: デフォルト以外のポートを指定。-M <module>
: 実行するモジュールを指定。-L
/--list-modules
: 利用可能なモジュールをリスト表示。-o <key=value>
: モジュールにオプションを渡す。
主要なプロトコルと機能
nxc
はプロトコルごとに特化した機能やモジュールを提供しています。ここでは特に利用頻度の高いプロトコルについて解説します。
SMB (Server Message Block)
Windows ネットワークにおいて最も基本的なプロトコルの一つです。ファイル共有や認証に利用されます。
- 接続確認と情報収集:
- 認証試行 (パスワードスプレー): –continue-on-success: 成功しても他のターゲットや認証情報での試行を継続します。
- NULLセッション / 匿名ログイン:
- 共有の列挙:
- ログインユーザーの列挙:
- パスワードポリシーの取得:
- SAM/LSA Secretsのダンプ (要管理者権限):
- コマンド実行 (psexec/smbexec/atexecなど):
WinRM (Windows Remote Management)
PowerShell Remoting を利用して Windows ホストをリモート管理するためのプロトコルです。HTTP (5985/tcp) または HTTPS (5986/tcp) を使用します。
- 接続確認:
- コマンド実行:
- PowerShell スクリプト実行:
-X <script.ps1>
オプションでローカルの PowerShell スクリプトを実行できます。 Mimikatzのようなツールの使用は、極めて高いリスクと法的・倫理的な問題を伴います。許可された範囲でのみ、細心の注意を払って使用してください。
SSH (Secure Shell)
主に Linux/Unix 系システムのセキュアなリモート接続・管理に使用されます (デフォルトポート: 22/tcp)。
- 接続確認と認証試行:
- コマンド実行:
LDAP (Lightweight Directory Access Protocol)
Active Directory (AD) 環境の情報を照会するために広く利用されます (デフォルトポート: 389/tcp, LDAPS: 636/tcp)。nxc
は LDAP を利用して AD の構造、ユーザー、グループ、コンピューター、ポリシーなどの情報を効率的に収集できます。
- 基本情報照会 (認証なし / 匿名バインド):
- 認証ありでの情報照会:
- ユーザー列挙:
- グループ列挙:
- ドメイン管理者などの特権グループメンバー列挙:
- 制約のない委任 (Unconstrained Delegation) が設定されたオブジェクトの検索:
-M
やフィルター条件はバージョンによって異なる可能性があります。詳細は--list-modules
やヘルプで確認してください。)
(注: モジュール - BloodHound用データ収集:
nxc
は BloodHound で利用可能な形式で AD 情報を収集するモジュールを備えています。 収集された JSON ファイルは BloodHound にインポートして、攻撃経路や権限関係を視覚化できます。
MSSQL (Microsoft SQL Server)
Microsoft SQL Server データベースへの接続と操作を行います (デフォルトポート: 1433/tcp)。
- 接続確認と認証試行:
- SQLクエリ実行:
- xp_cmdshell によるコマンド実行 (要権限):
- リンクサーバー (Linked Servers) の悪用:
nxc
はリンクサーバーを経由して他のサーバーへアクセスしたり、コマンド実行を試みるモジュールも備えています (例:mssql_enum_linked_servers
,mssql_exec_linked
)。
モジュールシステム
nxc
の強力な機能の多くは、モジュールシステムによって提供されています。モジュールは特定のタスクを実行するためのスクリプトやコード片です。
利用可能なモジュールの確認
特定のプロトコルで利用可能なモジュールは -L
または --list-modules
オプションで確認できます。
リストにはモジュール名とその簡単な説明が表示されます。
モジュールの実行
モジュールを実行するには -M <module_name>
オプションを使用します。
モジュールオプション
多くのモジュールは、動作をカスタマイズするためのオプションを受け付けます。-o <KEY=VALUE>
形式で指定します。利用可能なオプションは、モジュールのヘルプ (nxc <proto> -M <module> --module-info
) や、場合によってはソースコードを確認する必要があります。
ヒント: モジュールの名前や機能は nxc
のバージョンアップによって変更される可能性があります。常に -L
や --module-info
で最新情報を確認するようにしましょう。
以下は、よく使われるモジュールの例です(プロトコルによって利用可否が異なります)。
モジュール名 | プロトコル例 | 説明 |
---|---|---|
bloodhound |
ldap, smb | Active Directory の情報を収集し、BloodHound 用の JSON ファイルを出力します。 |
spider_plus |
smb | アクセス可能な共有フォルダ内を再帰的に探索し、指定されたパターンやキーワードに一致するファイル名や内容を検索します。機密情報(パスワードが書かれたファイルなど)の発見に役立ちます。 |
kerberoast |
ldap | サービスプリンシパル名 (SPN) が設定されたユーザーアカウントを検索し、その Kerberos サービスチケット (TGS) を要求して出力します。これらのチケットはオフラインでクラック試行が可能です。 |
asreproast |
ldap | Kerberos 事前認証 (Pre-Authentication) が不要なユーザーアカウント (DONT_REQ_PREAUTH フラグ) を検索し、AS-REP レスポンスを取得します。これもオフラインでのパスワードクラックが可能です。 |
secretsdump |
smb, winrm | ターゲットの SAM データベース、LSA Secrets、NTDS.dit (DC の場合) からハッシュや機密情報をダンプします。管理者権限が必要です。 |
mimikatz |
smb, winrm | ターゲット上で Mimikatz を実行し、メモリ上の認証情報(平文パスワード、ハッシュ、Kerberos チケットなど)を取得します。非常に強力ですが、検知されやすいです。 |
get_privs |
smb | 現在のユーザーが持つ権限 (SeDebugPrivilege など) を確認します。 |
enum_dns |
mssql | MSSQL サーバーから DNS 情報を取得しようと試みます。 |
PetitPotam |
smb | PetitPotam 脆弱性 (CVE-2021-36942) を利用して、ターゲットサーバーに強制的に NTLM 認証を開始させ、中間者攻撃 (NTLM Relay) に繋げるためのモジュールです。2021年7月頃に公開され、注意喚起されました。 |
zerologon |
smb | Zerologon 脆弱性 (CVE-2020-1472) をチェックまたは悪用するモジュールです。ドメインコントローラーのパスワードリセットに繋がる重大な脆弱性で、2020年8月頃に PoC が公開され、大きな影響を与えました。 |
実践的なコマンド例
これまでの知識を組み合わせて、より実践的なシナリオでの nxc
の利用例を見ていきましょう。
シナリオ1: パスワードスプレーと権限確認
ネットワーク 192.168.10.0/24
内の Windows ホストに対して、よくあるパスワード Summer2024!
を使ってユーザー svc_backup
と admin
でログインを試み、成功した場合はローカル管理者権限を持っているか確認します。
--local-auth
: ローカルアカウントとして認証します。ドメイン環境の場合は-d <DOMAIN>
を指定します。--admin-check
: 認証成功後、そのユーザーがターゲットホストの Administrators グループに所属しているかを確認します。成功すると(Pwn3d!)
と表示されることがあります。
シナリオ2: BloodHound 用データの収集
ドメインコントローラー DC01.megacorp.local
に対して、ドメインユーザー lowuser
(パスワード Welcome1
) の権限で BloodHound 用のデータを収集します。収集対象はデフォルト (All) とします。
-M bloodhound
: BloodHound モジュールを指定。-o collection=All
: 全ての情報を収集します (デフォルト)。--zip
: 出力される JSON ファイルを zip 形式で圧縮します。
実行後、カレントディレクトリ(または nxc
のログディレクトリ)に *.zip
ファイルが生成されるので、これを BloodHound GUI にドラッグ&ドロップしてインポートします。
シナリオ3: 共有フォルダから機密情報を探索
ファイルサーバー FILESRV
上の共有フォルダ backup
と users
を、ユーザー scan_user
(パスワード ScanP@ss
) の権限で探索し、ファイル名または内容に “password”, “secret”, “config”, “.xml”, “.ini” が含まれるファイルをリストアップします。検索対象は 5MB 以下のファイルに限定します。
-M spider_plus
: ファイル探索モジュール。-o SHARE=backup,users
: 探索対象の共有名を指定。-o PATTERN=...
: 検索するキーワードをカンマ区切りで指定。-o REGEX=...
: 検索する正規表現を指定(ファイル拡張子など)。-o MAX_SIZE=...
: 検索対象ファイルの最大サイズをバイト単位で指定 (5MB = 5 * 1024 * 1024 = 5242880)。
シナリオ4: WinRM 経由でのシステム情報収集
servers.txt
にリストされたサーバー群に対して、管理者アカウント (localadmin
/ Adm1nPass
) を用いて WinRM で接続し、各サーバーの IP 設定、ホスト名、およびインストールされている Hotfix の一覧を取得します。
-x "..."
: 実行するコマンドを指定。複数のコマンドは&
で連結できます。
出力とログ
nxc
は実行結果を標準出力に表示するだけでなく、ログファイルとしても保存します。これにより、後で結果を確認したり、他のツールと連携したりすることが容易になります。
デフォルトでは、実行結果は ~/.nxc/logs/
ディレクトリ以下に保存されます。ログディレクトリの構造は通常、以下のようになっています。
ログの出力形式や保存場所は、設定ファイル (~/.nxc/nxc.conf
) やコマンドラインオプションで変更することも可能です。
特に重要なのは、取得に成功した認証情報 (クレデンシャル) です。nxc
は成功した認証情報を内部データベース (~/.nxc/nxc.db
) に保存し、nxc creds
サブコマンドで管理できます。
このデータベースに保存された認証情報は、次回の nxc
実行時に自動的に利用されることがあります(例えば、あるホストで取得した認証情報が、別のホストへのアクセスに使える場合など)。この挙動は非常に便利ですが、意図しない操作に繋がる可能性もあるため注意が必要です。
nxc.db
は SQLite データベースファイルなので、sqlite3
コマンドラインツールや DB Browser for SQLite などを使って直接内容を確認・操作することも可能です。
注意点と倫理的利用
nxc
は非常に強力なツールであり、その能力はペネトレーションテストやセキュリティ評価において絶大な効果を発揮します。しかし、その強力さゆえに、悪用された場合の影響も甚大です。
nxc
を使用する際は、必ず対象となるシステムの所有者から明示的な許可を得てください。許可なく他者のシステムにアクセスしたり、脆弱性を試したりする行為は、法律によって厳しく罰せられる可能性があります(不正アクセス禁止法など)。倫理的な観点からも、許可された範囲と目的を超えた利用は絶対に行わないでください。
- 影響範囲の理解: 大規模なネットワークに対して不用意にスキャンや攻撃を行うと、ネットワーク帯域の逼迫、サーバーの過負荷、サービスの停止などを引き起こす可能性があります。特に、
--threads
オプションの値は慎重に設定してください。 - 検知とログ:
nxc
の操作の多くは、ターゲットシステムやネットワーク機器のログに記録されます。セキュリティ監視システム (SIEM, EDR など) によって検知され、アラートが上がる可能性が高いです。テストを行う際は、ブルーチーム(防御側)と連携し、テスト期間や内容について事前に通知・調整することが推奨されます。 - ツールの誤用: パスワードスプレー、ハッシュのダンプ、リモートコマンド実行などの機能は、攻撃者にとっても有用なものです。これらの機能の仕組みと危険性を理解し、防御策(複雑なパスワードポリシー、多要素認証、最小権限の原則、ログ監視強化など)を検討・実装することが重要です。
- 最新情報の追跡:
nxc
は活発に開発されており、新しい機能やモジュールが追加されたり、既存の挙動が変更されたりすることがあります。GitHub リポジトリや公式ドキュメントを定期的に確認し、最新の情報を把握するように努めましょう。
nxc
を責任ある態度で、知識と倫理観を持って利用することで、組織のセキュリティ体制強化に大きく貢献できます。
まとめ
NetExec (nxc
) は、現代のネットワークペネトレーションテストにおいて非常に強力で効率的なツールです。CrackMapExec からのフォークとして誕生し、活発な開発コミュニティによって日々進化しています。
本記事では、以下の点について解説しました。
nxc
の概要と CME との関係pipx
を使った推奨インストール方法- 基本的なコマンド構文 (プロトコル、ターゲット、認証情報)
- SMB, WinRM, SSH, LDAP, MSSQL といった主要プロトコルでの具体的な利用方法
- 強力なモジュールシステムとその活用例 (BloodHound, spider_plus など)
- 実践的なシナリオに基づいたコマンド例
- ログと認証情報の管理方法
- 利用上の注意点と倫理的な考慮事項
nxc
を使いこなすことで、広範囲なネットワークに対するセキュリティ評価を迅速かつ効果的に行うことができます。ただし、その強力な機能を悪用することなく、常に法的・倫理的な規範を遵守し、許可された範囲内で責任を持って使用することが不可欠です。
ぜひ、nxc
を自身のスキルセットに加え、より安全なネットワーク環境の構築に役立ててください!
nxc
の詳細については、公式の GitHub リポジトリ やドキュメントを参照することをお勧めします。