
emp3r0r v4.7.1
自愈型 Gossip Mesh C2,具备辅助对等点发现、跨平台 BOF 执行与可脚本化代理。
emp3r0r
具有辅助对等发现、跨平台 BOF 执行和可脚本化代理的自愈 Gossip 网状 C2。
什么是 emp3r0r?
emp3r0r 是一个面向 Linux 和 Windows 目标环境的高级零信任后渗透框架和命令与控制(C2)系统。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 配置文件。独立监听器支持可选 TLS(
-tls),在未提供证书/密钥对时自动生成自签名证书。 - 独立 C 下载器 Stager: 使用直接、不依赖 libc 的 Linux 系统调用构建,兼容各种发行版,无符号错误。
- 加密 Stage 投递: 监听器使用从操作员提供的密钥派生的 RC4 密钥加密暂存载荷;stager 在反射加载前于内存中解密。
- 可插拔 Stager 传输: 模块化传输系统允许操作员放入自定义 C 传输模块(
transport_<name>.c)。内置独立选项包括通过原始系统调用实现的 HTTP、TCP 和 UDP,以及动态库传输(例如通过运行时符号解析的libcurl)。- 优势: 通过将流量无缝混入合法系统通道(如原生
libcurl或自定义协议实现)来绕过出口过滤和网络检测,而无需修改核心 stager 逻辑。
- 优势: 通过将流量无缝混入合法系统通道(如原生
- 可插拔自解包加壳器: 可扩展的 stub 和加壳器模块接口(
pack_<name>.py+unpack_stub_<name>.c)。操作员可以编写自定义加壳/混淆算法(内置选项包括 RC4 流加密和贪婪 LZSS 压缩),并自动进行运行时头部修补。- 优势: 通过使用唯一密钥或算法加密/压缩 Stage 0 载荷,打破静态 AV/EDR YARA 规则和签名匹配,自解包到读写内存中,然后在执行前翻转为读执行。
- 极小载荷体积: 虽然 emp3r0r 代理二进制文件未压缩时约为 20MB,但此 stager 仅为 2KB;它从 emp3r0r 监听器获取的类 sRDI 载荷约为 8MB(从 ELF 共享对象格式的代理二进制文件压缩而来)。
- 灵活格式: 可编译为原始位置无关 shellcode(
.bin)、自解包加壳 shellcode(packed)、独立 ELF 可执行文件或共享对象(.so)。 - 内存加固: 以读写方式分配阶段内存,去混淆载荷,然后在反射加载前强制读执行。自解包器从不映射 RWX(读写 → 解包 → 读执行),可变 stager 状态位于专用的读写页面中,而非可写代码中。
🧩 原生跨平台 BOF 与 PICO 支持(COFF、ELF 与 PICO)
在 Windows 和 Linux 目标上执行内存中二进制模块:
- Windows COFF 加载器: 以类型化参数打包(
int、short、cstr、wstr、binary)无文件运行 Windows BOF 二进制文件。 - Linux ELF 对象加载器: 在 Linux 上将 ELF 可重定位目标文件(
.o)直接加载到代理内存中。 - Crystal-Kit PICO 模块与栈欺骗: 集成 PICO(位置无关代码对象)加载器和加壳器,配备 SilentMoonwalk 调用栈失同步欺骗器,实现高级规避。
- 捆绑 BOF 套件: 内置支持 Kerbeus-BOF、Remote-OPs 和态势感知(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 模式: 灵活的 beaconing(
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.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
注意:如果使用 root 用户而非标准 sudo 安装,当前用户可能无法启动 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 支持其持续开发。