
Framework C2 en ensamblador x64 sin archivos con pivoteo de protocolo ICMP/DNS de doble canal, ejecución directa de syscall e inyección de procesos basada en ptrace para ejecución sigilosa de comandos y exfiltración de datos.
________ ___ ___ ________ ________ _________ ________ ________
|\ ____\|\ \|\ \|\ __ \|\ ____\|\___ ___\ |\ ____\|\_____ \
\ \ \___| \ \ \\\ \ \ \|\ \ \ \___|\|___ \ \_| \ \ \___|\|____|\ \
\ \ \ __ \ \ __ \ \ \\\ \ \_____ \ \ \ \ \ \ \ ____\_\ \
\ \ \|\ \ \ \ \ \ \ \\\ \|____|\ \ \ \ \ \ \ \___|\____ \ \
\ \_______\ \__\ \__\ \_______\____\_\ \ \ \__\ \ \______\\_________\
\|_______|\|__|\|__|\|_______|\_________\ \|__| \|______\|_________|
\|_________|
Implante C2 sin archivos, en ensamblador x64 puro, que utiliza una arquitectura de doble canal (ICMP/DNS). Sin libc. Sin disco. Invisible para los hooks estándar de EDR.
⭐️ Si encuentras útil esta investigación, por favor considera darle una estrella para apoyar el desarrollo continuo
🚨 INVESTIGACIÓN TÉCNICA COMPLETA Y CÓDIGO FUENTE: Este repositorio es un resumen. Para obtener el desglose arquitectónico completo, los detalles de evasión de memoria W^X y la implementación de la VTable, visita la página oficial del proyecto: ICMP-Ghost Technical Breakdown
Ghost-C2 es un framework de comando y control escrito completamente en ensamblador Linux x64 puro, sin dependencias de libc. Cada operación se realiza mediante syscalls directas. No hay tablas de importación, artefactos del enlazador dinámico ni escrituras en disco.
Originalmente construido como un canal sigiloso ICMP sin procesar, la versión 3.6.2 introduce una arquitectura de Pivoteo de Protocolo de Doble Canal. Los operadores pueden cambiar sin problemas el canal de comunicación del implante entre sockets ICMP sin procesar silenciosos y túneles UDP DNS evasivos sobre la marcha. El implante reside exclusivamente en RAM, inyectado en un proceso del sistema en ejecución mediante un cargador personalizado basado en ptrace.
Este proyecto se construyó para explorar hasta dónde pueden llegar el sigilo en el espacio de usuario y la sincronización del estado de la red sin tocar el kernel.
┌─────────────────────────────────────────────────────────────┐
│ OPERATOR MACHINE │
│ │
│ ┌──────────────┐ │
│ │ client.asm │ ← Terminal UI: Prompt IP/Domain + Cmd │
│ │ (Operator │ Encrypts payload with Rolling XOR │
│ │ Console) │ State Sync: ICMP mode / DNS mode │
│ └──────┬───────┘ │
│ │ │
└──────────┼──────────────────────────────────────────────────┘
│ Channel 1: Raw ICMP (Stateless, Port-less)
│ Channel 2: DNS UDP Port 53 (Asymmetric)
┌──────────┼──────────────────────────────────────────────────┐
│ │ TARGET MACHINE │
│ ▼ │
│ ┌──────────────┐ ┌─────────────────────────────────┐ │
│ │ loader.asm │────▶│ sniff.asm (PIC) │ │
│ │ (Phantom │ │ Lives in RAM only │ │
│ │ Loader) │ │ inside host process │ │
│ └──────────────┘ └────────────────┬────────────────┘ │
│ │ │
│ 1. Scans /proc for target PID │ Listens ICMP/DNS │
│ 2. ptrace ATTACH │ Validates Auth │
│ 3. Force remote mmap (RW) │ Decrypts command │
│ 4. Inject PIC shellcode │ fork+execve │
│ 5. mprotect → RX │ memfd_create │
│ 6. Redirect RIP → shellcode │ Compress(DPCM-RLE)│
│ 7. ptrace DETACH → exits │ Encrypt & Frag. │
│ │ Sends Reply │
└─────────────────────────────────────────┼───────────────────┘
│ Encrypted Traffic
▼
[ client.asm ]
Receives & Validates
Decrypts Payload
Decompresses (Hybrid)
Reassembles & Prints
client.asm — Consola del OperadorEl terminal del lado del atacante. Maneja la interfaz de usuario, la gestión dinámica de memoria y la sincronización del estado del objetivo. Puede enviar paquetes como solicitudes de eco ICMP o consultas DNS TXT. Escucha respuestas fragmentadas, previene desbordamientos de búfer y reconstruye la salida. Incluye un módulo de "Reconexión Activa de Objetivo" para rescatar sesiones huérfanas.
sniff.asm — Agente Implante PICEl implante que se ejecuta en el objetivo. Compilado como un binario sin procesar (independiente de la posición, sin encabezados ELF) para poder ser inyectado en direcciones de memoria arbitrarias. Actualiza dinámicamente su VTable interna para cambiar entre la captura de paquetes ICMP y el enlace UDP DNS según los comandos de pivoteo del operador.
Phantom_Loader/loader.asm — Motor de InyecciónEl mecanismo de entrega. Escanea /proc, encuentra un proceso objetivo por su nombre de comm e inyecta el shellcode PIC en él mediante una máquina de estados ptrace de múltiples etapas. Sale limpiamente después de la inyección, sin dejar rastro.
Ghost-C2 v3.6.2 permite al operador intercambiar en caliente el protocolo de red sin perder el agente. Al enviar comandos de pivoteo específicos, las VTables tanto del Maestro como del Agente se sobrescriben dinámicamente:
!D (Pivotar a DNS): Ambos nodos cierran los sockets ICMP e inicializan la comunicación UDP Puerto 53. Ideal para evadir filtrados estrictos de Capa 3 mezclándose con el tráfico DNS corporativo.!I (Pivotar a ICMP): El Agente cierra los sockets UDP, elimina los enlaces de puerto y vuelve a la captura silenciosa de Raw Socket. Perfecto para el modo sigiloso "Fantasma".El motor de transmisión de datos de Ghost-C2 utiliza una capa híbrida de compresión y codificación altamente optimizada en ensamblador x86-64.