
emp3r0r v4.15.0
自己修復型 Gossip Mesh C2、支援付きピア発見、クロスプラットフォーム BOF 実行、スクリプト可能なエージェント
emp3r0r
Linux と Windows 向けの自己修復型・メモリ常駐 C2 — リンクが切れても生き残り、ディスクに一切触れず、Win32 API をスクリプトで操るエージェント。
emp3r0r とは?
emp3r0r は、ステルス性と耐障害性が必須となる Linux および Windows 環境向けに構築されたポストエクスプロイトフレームワーク兼 C2 です。単一のサーバーへの安定した接続を前提とするのではなく、エージェントは自己修復型のメッシュを形成し、リンクが切れても動作し続けます。ターゲットに Python や PowerShell を要求する代わりに、すべてをメモリ内で実行します。そして、単一プラットフォームの手法に限定するのではなく、emp3r0r は Windows BOF、Linux オブジェクト、Starlark スクリプトを実行します — すべてファイルレスで、すべてプロセス内で。
主なハイライトと独自機能
🐍 スクリプト可能なエージェント(組み込み Starlark エンジン & Win32 API プロキシ)
すべてのエージェントは独自のスクリプトエンジンを搭載しているため、バイナリをコンパイルしたり配布したりすることなく、新しいポストエクスプロイトロジックを投入できます。
- スクリプトは完全にメモリ内で実行されます — ターゲットに Python、Bash、PowerShell は不要で、コマンドインタプリタも起動しません。
- ファイル I/O、HTTP、コマンド実行などをカバーする組み込み API のフルセットを、スクリプトコードから直接利用できます。
- Windows では、スクリプトがネイティブの Win32 関数を直接呼び出せます — エージェントがシステム DLL へ直接プロキシします。
- モジュールは小さな JSON マニフェストを伴う単なる Starlark ファイルなので、独自のモジュールを追加するのは簡単でファイルレスです。
これが重要な理由: エージェント機能の記述と拡張が、スクリプトを編集するのと同じくらい簡単になり、ターゲットにインタプリタや新しいバイナリを投入するフットプリントが一切ありません。
🔐 TOFU 暗号学的アイデンティティピンニング
エージェントは、あなたと初めて通信した時点で自身のアイデンティティを暗号鍵にバインドし、そのバインドは決して変わりません。
- 異なる資格情報での再登録はなりすましとして扱われ、拒否されます。
- エージェントの削除はオペレータの明示的な判断であり、盗まれた鍵が密かに行えることではありません。
これが重要な理由: セッションハイジャックやエージェントのクローン化はそもそも発生しません。あなたが通信するすべてのエージェントは、あなたが登録したそのエージェントです。
🔒 完全前方秘匿性(PFS)
すべての C2 およびピアリンクは、セッション由来の暗号鍵を用いた一時的な ECDH 鍵を使用します。
これが重要な理由: 長期鍵が後で漏洩したとしても、すでに通過したトラフィックの復号には使用できません。
🕸️ 自律型 P2P ゴシップメッシュネットワーク
エージェントは互いを発見し、ゴシップメッシュを通じてトラフィックを中継するため、1 つのリンクや 1 つのサーバーが消えてもオペレーションは崩壊しません。
- ピアはカモフラージュされた mTLS 1.3 または信頼性のある UDP(KCP)で接続し、すべてのホップが暗号化されます。
- トラフィックは死んだリレーを自動的に迂回します — オペレーション中に手動でプロキシを操作する必要はありません。
- C2 への直接アクセスがないセグメントでも、隣接ノードを通じて到達可能なままです。
これが重要な理由: ネットワークがあなたの代わりにピボットを行います。リンクを切断し、マシンを失い、あるいは C2 をブロックしても — エージェントは自力で再ルーティングします。
📂 P2P ファイルシステム
ファイルは C2 経由だけでなく、エージェント間で直接移動します。
- 転送は暗号化されたピアツーピアトンネルを経由するため、内部ネットワークがあなたのサーバーでボトルネックになることはありません。
- ファイルは暗号化されたブロブとしてエージェントのメモリにキャッシュされ、要求に応じてピアに提供されます。
- どのピアもファイルを持っていない場合、エージェントは C2 から自動的に取得します。
これが重要な理由: 配信は高速で、C2 チャネルからはほとんど見えません — 外向き通信が制限された環境に最適です。
📡 マルチプロトコルリスナー & プラグ可能なステージャー
エージェントを侵入させることは、それを生かし続けることと同じくらい真剣に扱われます。
- 信頼性のあるフレーミングとカスタマイズ可能な HTTP プロファイルを備えた HTTP、TCP、UDP リスナー。
- 直接 Linux システムコールで構築された約 2KB のステージャー — ターゲットに libc もツールチェーンも不要。
- プラグ可能なステージャートランスポートと自己展開型パッカーにより、初期アクセスをターゲットが許容するあらゆるチャネルに溶け込ませ、その過程で静的シグネチャマッチングを回避できます。
- ステージとエージェントのコードは読み取り/書き込み/実行の規律を守ります — RWX は決して使用しません。
これが重要な理由: 小さく適応性があり、メモリ衛生に優れた初期アクセスにより、そうでなければ手の届かないホストにも侵入できます。
🧩 ネイティブなクロスプラットフォーム BOF & PICO サポート(COFF、ELF & PICO)
コンパイル済みの C モジュールをどちらのプラットフォームでもプロセス内で実行します:
- 型付き引数パッキングを備えた Windows COFF/BOF バイナリ。
- エージェントのメモリに直接ロードされる Linux ELF 再配置可能オブジェクト。
- SilentMoonwalk コールスタックスプーフィングを備えた Crystal-Kit PICO モジュール。
- Kerbeus-BOF、Remote-OPs、および Situational Awareness スイートがすぐに使える状態で同梱されています。
これが重要な理由: BOF はそのローダーの性能次第です — emp3r0r は Linux と Windows の両方で、新しいプロセスも痕跡も残さずにプロセス内でそれらを実行します。
🧬 インメモリライブラリローダー(memmod)
ネイティブライブラリはエージェント自身のアドレス空間にマッピングされ、そこで呼び出されます — LoadLibrary も dlopen もなく、ファイルがディスクに触れることもありません。
memmodは Windows では PE DLL を、Linux では ELF.soをロードし、再配置、インポート、エクスポート呼び出しをプロセス内で処理します。- 実績ある上流の成果物を基盤としています:WireGuard の
memmodPE ローダー、および Sliver C2 / sliverarmory/reflektor の ELF ローダーと呼び出し機構。 memdepsはその上に位置します:宣言された依存関係は暗号化された memfs/C2 から解決され、それを必要とするオペレーションのためにのみマッピングされ、戻り時にアンマップされます。
これが重要な理由: ネイティブコードでエージェントを拡張するのに、新しいバイナリ、ローダーサービス、ディスク上のファイルは必要ありません。
🐧 Linux モジュール & eBPF
Linux モジュールは、カーネルにまで到達できる Starlark スクリプトです。エージェントは必要に応じて libbpf をマッピングし、その API を Go ベースのビルトインとしてスクリプトに公開するため、モジュールはコンパイラも子プロセスもなしに eBPF オブジェクトを列挙、アタッチ、破棄できます。
- ビルトインは libbpf を反映しています:
ebpf_progs、ebpf_maps、ebpf_links、ebpf_detach、ebpf_map_wipe、ebpf_code_offset、および長期間存続するebpf_uprobe_start/ebpf_uprobe_stop。 ssh_harvestは実例です:sshd内のパターンを特定し、長期間存続する uprobe をアタッチし、キャプチャした資格情報をライブでストリーミングし、--disableまで保持します — ptrace もブレークポイントもディスクもなし。- libbpf だけが選択肢ではありません:同じオンデマンドローダーが、モジュールが宣言または提供する任意の
.soを処理し、スクリプトはmem_load_libraryでバイトを直接マッピングできます。
これが重要な理由: カーネルレベルのトンレクラフトは、スクリプトと、エージェントが必要な間だけマッピングしてから破棄するライブラリの組み合わせです。
🔑 Windows トークン、Netonly セッション & Kerberos チケット(PTT)
Windows ホストに侵入したら、emp3r0r はツールを一切投入することなく、そのホスト上のユーザーに なりすます ことができます。
- 実行中の任意のプロセスからアクセストークンを窃取し、どこでも使用できます:Go モジュール、Starlark、BOF。
- モジュールの
--userフラグで使い捨ての netonly セッションを作成できます:エージェント自身のアイデンティティを保ち、外向きアクセスのためだけに対象ユーザーを借用します — 任意のパスワードが機能し、何も検証されません。 --ticketフラグで Kerberos チケットをインポートし、完全なパス・ザ・チケットを実現します:ローカルのアイデンティティは変わらないまま、ネットワーク上のアイデンティティがチケットのもの(例えばドメイン管理者)になります。- すべてのトークン対応モジュールは
--token、--user、--ticketを受け付けるため、アイデンティティの切り替えはフラグ 1 つです — 単一のコマンドでセッションを作成しチケットをロードすることも含めて。 - チケットはログオンセッションごとに存在するため、DA の素材は破棄可能なセッションに隔離されたままで、エージェントプロセス自体はクリーンに保たれます。
これが重要な理由: エージェントが一切動いていないマシンへのラテラルムーブメント — SMB 共有、サービス制御、CIFS — が、ディスク上のツールとしてではなく、借用したユーザーとして認証され、ワークフローの通常の一部になります。
🧦 SOCKS5 ピボッティング & オペレータ側 tun2socks
別のインプラントを消費せずにピボット:C2 は選択したエージェントを経由して中継する SOCKS5 プロキシを実行し、オペレータ側は透過 TUN デバイスでさらに一歩進められます。
socks_start 1080は、選択したエージェントを通じてトンネルする SOCKS5 エンドポイントを C2 上に提供します — proxychains や任意のツールをそこに向ければ、ターゲットネットワークの内部に入れます。tun2socks start --route 10.10.0.0/24は、指定したサブネットのみをそのプロキシ経由でルーティングする TUN デバイスを作成します — それ以外はすべて通常の接続を使い続けます。- 結果はエージェントから発信されたように見え、ツールごとのプロキシ設定は不要です。
これが重要な理由: エージェント側のネットワーク全体に透過的に到達できます — DC に curl し、任意のツールを使う — 外向き通信はオペレータのマシンではなく、ターゲットネットワークから来たように見えます。
🎭 プラグ可能な C2 トランスポート、uTLS JA3 回避 & CBOR プロトコル
- ビーコン形式の HTTP ポーリングまたはストリーミング HTTP/2 を選択できます — どちらも可鍛性のあるプロファイル付き。
- TLS フィンガープリントは uTLS でランダム化されるため、チャネルはネットワークテレメトリで目立ちません。
- 制御トラフィックはコンパクトな CBOR プロトコルで伝送されます — JSON より小さく、速く、解析が困難です。
これが重要な理由: C2 チャネルは通常のトラフィックのように見せかけられ、回線上で軽量に保たれます。
💾 暗号化されたメモリファーストストレージ
- エージェントのファイル操作は、メモリ内の AES-GCM 暗号化仮想ファイルシステムに対して実行されます。大きなデータは、識別可能なヘッダーのない暗号化ブロブとしてのみディスクに溢れます。
- P2P 対応エージェントは取得したものをキャッシュし、ピアと共有して、C2 トラフィックをさらに削減します。
これが重要な理由: ディスクさえも敵対的と見なされます — エージェントは発見されうる平文の痕跡を一切残しません。
クイックスタート
1. C2 サーバーのインストール
emp3r0r のビルドにはホスト上に Docker または Podman が必要です — ローカルの Go ツールチェーンは不要です。
git clone --depth=1 https://github.com/jm33-m0/emp3r0r.git && cd emp3r0r
./install.py
インストーラーは使い捨てコンテナ内ですべてをビルドし、オペレータキットを準備します。便利なフラグ:--lightweight(Linux/Windows amd64 のみ、最速)、--targets OS/ARCH,...、--debug、--skip-build。
サーバーを起動します:
emp3r0r server --c2-hosts 1.2.3.4 --http-port 12345 --operator-port 13377
2. オペレータマシンのセットアップ
tar --zstd -xpf emp3r0r-operator-kit.tar.zst
cd ./emp3r0r-operator-kit && ./install.py
サーバーが出力した WireGuard 資格情報を使用して接続します: