Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
ICMP-Ghost-A-Fileless-x64-Assembly-C2-Agent — 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. | Kitploit
Herramientas/GitHubGitHub/jm00nj/icmp-ghost-a-fileless-x64-assembly-c2-agent
Escalada de PrivilegiosFrameworks de ExploitsEvasión de IDS/IPSShellcodePost-ExplotaciónComando y ControlRed TeamingDesarrollo de Payloads

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
GitHub
jm00nj/icmp-ghost-a-fileless-x64-assembly-c2-agent

ICMP-Ghost-A-Fileless-x64-Assembly-C2-Agent

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.

Ver RepositorioSitio web
88184hace 20 díasRevisado por Kitploit
root@kitploit:~
 ________  ___  ___  ________  ________  _________       ________  ________   
|\   ____\|\  \|\  \|\   __  \|\   ____\|\___   ___\    |\   ____\|\_____  \  
\ \  \___| \ \  \\\  \ \  \|\  \ \  \___|\|___ \  \_|    \ \  \___|\|____|\  \ 
 \ \  \  __ \ \   __  \ \  \\\  \ \_____  \   \ \  \      \ \  \     ____\_\  \
  \ \  \|\  \ \  \ \  \ \  \\\  \|____|\  \   \ \  \      \ \  \___|\____ \  \
   \ \_______\ \__\ \__\ \_______\____\_\  \   \ \__\      \ \______\\_________\
    \|_______|\|__|\|__|\|_______|\_________\   \|__|       \|______\|_________|
                                 \|_________|                                   

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.


Arquitectura Lenguaje Protocolo Protocolo SO Versión Suricata Estrellas de GitHub Licencia de GitHub Tamaño del repositorio de GitHub

Ghost-C2

Resumen

⭐️ 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.


Arquitectura

ghost-c2-architecture
root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                      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

Componentes

client.asm — Consola del Operador

El 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 PIC

El 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ón

El 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.


Técnicas de Sigilo y Evasión

Pivoteo de Protocolo de Doble Canal (ICMP ↔ DNS)

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".

Compresor Híbrido DPCM-RLE x64

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.

  • DPCM (Modulación por Código de Pulsos Diferencial): Calcula y envía la diferencia matemática (Delta) entre un carácter de referencia y los siguientes, reduciendo la entropía de los datos.
  • RLE (Codificación por Longitud de Secuencia): Comprime espacios consecutivos y bloques repetitivos a nivel de bits.
  • Resultado: Reduce la carga útil total de datos entre un 40% y un 55%, minimizando la huella de red y el número de paquetes inyectados.

Mimetismo del Protocolo ICMP

Cada paquete ICMP saliente está estructurado para ser indistinguible de un ping estándar de Linux:

  • Marcas de tiempo RDTSC dinámicas imitan struct timeval.
  • El relleno exacto de iputils de Linux (0x10 a 0x1F) evade cortafuegos heurísticos básicos.

Cifrado XOR Rotatorio

Ambas direcciones están cifradas con una clave QWORD que se desplaza progresivamente. Esto mantiene la entropía de Shannon baja (a diferencia de AES, que puntúa ~8.0 y activa anomalías de DPI). El XOR rotatorio produce una entropía que parece datos ruidosos naturales. Sin constantes criptográficas, sin S-boxes, nada que YARA pueda detectar.

Autenticación Asimétrica

El implante ignora todos los paquetes ICMP donde ID + SEQ ≠ 45,000. El implante responde con paquetes donde ID + SEQ = 55,000. Esto evita confusiones con el eco del SO y filtra escáneres de internet o honeypots.

Ejecución Sin Archivos mediante memfd_create

La salida de los comandos nunca toca el disco. La salida del shell se captura mediante un archivo RAM anónimo (memfd_create), nombrado [shm] para mezclarse con las asignaciones de memoria compartida legítimas en /proc/PID/fd.

Inyección de Memoria W^X (Phantom Loader)

Derrota las mitigaciones modernas del kernel que prohíben la memoria RWX. El cargador utiliza un enfoque de dos fases (mmap remoto con RW → Inyectar → mprotect remoto con RX). Ninguna página es simultáneamente W y X.

Ofuscación de Syscalls sin Libc

Todos los números de syscall se dividen en dos instrucciones para derrotar el análisis estático y los escáneres simples basados en grep.


Armamento: Configuración y Construcción del Agente

Para mantener una estricta OPSEC, el agente de Ghost-C2 (sniff.asm) no utiliza configuraciones externas. Debes definir tu IP Maestra, Puerto y Dominio DNS Señuelo directamente dentro del código ensamblador antes de compilar e inyectar.

Paso 1: Configurar Variables de OPSEC

Abre sniff.asm y desplázate hasta el final del segmento .text. (Nota: Debido a que el agente es estrictamente Código Independiente de la Posición (PIC), no hay segmento .data. Todas las variables de configuración se almacenan en línea).

Modifica los siguientes valores para que coincidan con tu Servidor Maestro:

  • Dirección IP: Cambia db 127, 0, 0, 1 por la IP de tu Maestro.
  • Puerto UDP: Cambia dw 0xB414 (Puerto 5300) por tu puerto deseado en Orden de Bytes de Red (por ejemplo, 0x3500 para el Puerto 53).

Paso 2: Ensamblar a Shellcode Sin Procesar

root@kitploit:~
nasm -f bin sniff.asm -o shellcode.bin

Paso 3: Formatear el Shellcode

root@kitploit:~
python3 -c "data = open('shellcode.bin', 'rb').read(); lines = ['\tdb ' + ', '.join(f'0x{b:02x}' for b in data[i:i+12]) for i in range(0, len(data), 12)]; open('c2_payload.txt', 'w').write('\n'.join(lines))"

Paso 4: Cifrar la Carga Útil (XOR Rotatorio)

  1. Copia el contenido del archivo generado c2_payload.txt.
  2. Abre xor.py y reemplaza el contenido de la variable raw_asm con tu shellcode copiado.
  3. Ejecuta python3 xor.py y copia la salida cifrada.

Paso 5: Inyectar en el Cargador Fantasma

  1. Abre loader.asm.
  2. Localiza la etiqueta c2_payload:.
  3. Elimina el marcador de posición existente y pega tu shellcode cifrado directamente debajo de la etiqueta.
  4. (Opcional: Cambia el proceso de inyección objetivo modificando target db "cron", 10).

Paso 6: Compilar el Cargador Final

root@kitploit:~
nasm -f elf64 loader.asm -o loader.o
root@kitploit:~
ld loader.o -o loader

Ejecuta en la máquina objetivo con privilegios de superusuario (sudo ./loader). El agente ahora se ejecuta completamente sin archivos.


Configuración de la Consola del Operador (client.asm)

Antes de compilar la Consola Maestra, debes asegurarte de que sus perfiles de escucha y objetivo coincidan con la configuración de tu Agente. Abre client.asm y navega hasta la sección .data.

Paso 1: Configurar el Puerto de Escucha

Localiza master_bind_addr. Aquí es donde el Maestro escucha las balizas DNS entrantes.

Puerto UDP: Cambia dw 0xB414 para que coincida con el puerto al que tu Agente está enviando.

Nota: Esto debe estar en Orden de Bytes de Red. Para el Puerto 53, usa 0x3500.

Paso 2: Configurar el Puerto de Pivoteo/Reconexión

Localiza target_addr. Este puerto se utiliza cuando realizas un Pivoteo DNS (!D) o usas el módulo de Reconexión.

Alineación de Puerto: Cambia dw 0xB414 para que coincida con el puerto UDP en el que el Agente está escuchando. Si estos puertos no coinciden, se producirá un (Punto Muerto) ya que el Maestro estará gritando al vacío.

Paso 3: Construir la Consola

Una vez configurada, ensambla y enlaza el Maestro:

root@kitploit:~
nasm -f elf64 client.asm -o client.o
root@kitploit:~
ld client.o -o client

💡 Consejo OPSEC para Usuarios

Protip: Mantén siempre una "Hoja de Perfil" para tu operación. Si cambias el puerto a 0x3500 (Puerto 53) en sniff.asm, DEBES actualizar tanto master_bind_addr como target_addr en client.asm antes de que comience la operación.

Nota: La Consola del Operador requiere privilegios de superusuario para enlazar sockets sin procesar y el puerto UDP 53.

⚠️ CRÍTICO: Sincronización del Estado Operativo

Para garantizar un acceso persistente y evitar la pérdida de sesión, siempre pivotea el Agente de vuelta al Modo ICMP (!I) antes de finalizar tu sesión de la Consola Maestra.

La Lógica: ICMP es el "Canal Dorado" de Ghost-C2: no tiene estado, es pasivo y siempre alcanzable a través de la IP del Objetivo.

El Riesgo: El modo DNS depende de la sincronización dinámica del puerto UDP. Si la Consola Maestra se cierra mientras está en modo DNS, el Agente permanece "atrapado" en un estado de escucha UDP. Restablecer la conexión requeriría conocer el puerto efímero específico del Agente, que se pierde al reiniciar el Maestro.

Regla General

  1. !I (Cambiar a ICMP)
  2. Verificar el Símbolo del Sistema
  3. Ctrl+C (Salir del Maestro)

Resultados Empíricos

Probado en un entorno de laboratorio controlado contra inspección de tráfico activa:

PruebaResultado
Suricata v8.0.3 (conjunto de reglas Emerging Threats)✅ Evadido
Suricata v8.0.3 (reglas personalizadas de carga útil ICMP)✅ Evadido
Puerta de enlace DigitalOcean FRA1✅ 100% de éxito de exfiltración
Alertas generadas durante ~25KB de exfiltración0

Referencia de Syscalls

Ghost-C2 interactúa directamente con el kernel de Linux:


Hoja de Ruta

✅ Completado en v3.6.3

  • Encabezados DNS conformes a RFC 1035 (ID de Transacción, QTYPE A, QDCOUNT)
  • Codificación Base32 RFC 4648 (reemplaza el hex sin procesar)
  • Rotación de dominio por paquete (grupo CDN de 5 entradas)
  • Eliminadas las advertencias de "Paquete Malformado" de Wireshark

v3.6.4 — Simulación de Respuesta DNS

  • El maestro y el agente devolverán respuestas de registro A sintéticas (QR=1, RCODE=0, ANCOUNT=1) después de cada consulta
  • Elimina la anomalía de consulta sin respuesta detectada por NDR basado en ML (Darktrace, ExtraHop)
  • Brecha restante entre la evasión basada en reglas y la evasión completa de ML

v4.0 — Enrutamiento DNS Autoritativo y Balizamiento Asíncrono

  • Enrutar las cargas útiles a través de cachés DNS públicas de ISP a un servidor de nombres autoritativo C2 (infraestructura DNS real)
  • Nonce aleatorio antepuesto a cada consulta de subdominio para evitar caídas de caché DNS
  • Jitter asíncrono completo con intervalos de baliza variables

v4.x — Investigación de Evasión de MAC

  • Evasión de procesos confinados por AppArmor/SELinux mediante ejecución basada en ROP (Living off the Land)
  • Derrota dinámica de ASLR para eliminar dependencias de mprotect

¿Por qué no un TTY Interactivo?

La ausencia de un PTY es una decisión arquitectónica, no una limitación:

  • Integridad del protocolo: ICMP y DNS son sin estado/asimétricos. Emular una entrega ordenada similar a TCP para un flujo TTY inflaría la base de código y destruiría el diseño ligero.
  • Sigilo volumétrico: Un shell interactivo genera tráfico por cada pulsación de tecla, creando un pico de frecuencia detectable.
  • Superficie EDR: Asignar un PTY requiere llamadas a /dev/ptmx e ioctl que los EDR monitorean intensamente.

Ghost-C2 es un implante de ejecución de comandos y exfiltración de hiper-sigilo. La interactividad sacrifica la invisibilidad por la conveniencia; este proyecto eligió la invisibilidad.


Contribuciones

Por diseño, las solicitudes de extracción y los forks son estrictamente ignorados. La arquitectura de este proyecto es mantenida directamente por el autor. Si encuentras un error, un fallo lógico o tienes una sugerencia de funcionalidad, por favor abre un Issue. Mantenlo objetivo y técnico.


Recursos

  • Blog / Artículo Técnico: netacoding.com/posts/icmp-ghost
  • Autor: github.com/JM00NJ
  • Recurso Relacionado: netacoding.com/posts/compressdpcm-rle

💖 Apoya el Proyecto

Ghost-C2 está construido con pasión, sudor y ensamblador x64 puro. Si este proyecto te ayudó a comprender la evasión de bajo nivel, el mimetismo de protocolos, o simplemente hizo más fluidas tus operaciones de red teaming, ¡considera apoyar el desarrollo!

👉 Conviértete en Patrocinador en GitHub


⚖️ Descargo de Responsabilidad y Licencia (AGPL-3.0)

Ghost-C2 se desarrolla estrictamente con fines educativos, de ingeniería inversa e investigación de ciberseguridad autorizada.

A partir de la versión 3.6.1 en adelante, este proyecto está licenciado bajo la GNU Affero General Public License v3.0 (AGPLv3). Cualquier entidad que interactúe o modifique este software a través de una red debe divulgar su código fuente completo según lo exigido por la licencia. La explotación comercial o integración en plataformas de código cerrado/propietario está estrictamente prohibida.

Copyright (c) 2026 JM00NJ (commSync). Todos los derechos reservados.

El autor no es responsable de ningún uso ilegal o daño causado por esta herramienta. Úsala bajo tu propio riesgo.

Descargar herramienta
SyscallNúmeroUso
sys_socket41Creación de socket ICMP/UDP sin procesar
sys_recvfrom45Captura pasiva de paquetes ICMP/UDP
sys_sendto44Transmisión de respuesta ICMP/UDP
sys_bind49Enlace de puerto UDP DNS
sys_memfd_create319Archivo RAM anónimo para salida
sys_dup233Redirección de stdout/stderr
sys_execve59Ejecución de comandos shell
sys_fork57Aislamiento de procesos
sys_ptrace101Inyección de procesos + anti-debug
sys_getdents64217Análisis del directorio /proc
sys_mmap9Asignación de memoria remota
sys_mprotect10Cambio de permisos W^X