Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
ICMP-Ghost-A-Fileless-x64-Assembly-C2-Agent — Framework C2 em Assembly x64 sem arquivos com pivô de protocolo ICMP/DNS de canal duplo, execução direta de syscall e injeção de processo baseada em ptrace para execução furtiva de comandos e exfiltração de dados. | Kitploit
Ferramentas/GitHubGitHub/jm00nj/icmp-ghost-a-fileless-x64-assembly-c2-agent
Escalada de PrivilégiosFrameworks de ExploraçãoEvasão de IDS/IPSShellcodePós-ExploraçãoComando e ControleRed TeamingDesenvolvimento de Payloads

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
GitHub
jm00nj/icmp-ghost-a-fileless-x64-assembly-c2-agent

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

Framework C2 em Assembly x64 sem arquivos com pivô de protocolo ICMP/DNS de canal duplo, execução direta de syscall e injeção de processo baseada em ptrace para execução furtiva de comandos e exfiltração de dados.

Ver RepositórioSite
88184há 19 diasRevisado pelo Kitploit
root@kitploit:~
 ________  ___  ___  ________  ________  _________       ________  ________   
|\   ____\|\  \|\  \|\   __  \|\   ____\|\___   ___\    |\   ____\|\_____  \  
\ \  \___| \ \  \\\  \ \  \|\  \ \  \___|\|___ \  \_|    \ \  \___|\|____|\  \ 
 \ \  \  __ \ \   __  \ \  \\\  \ \_____  \   \ \  \      \ \  \     ____\_\  \
  \ \  \|\  \ \  \ \  \ \  \\\  \|____|\  \   \ \  \      \ \  \___|\____ \  \
   \ \_______\ \__\ \__\ \_______\____\_\  \   \ \__\      \ \______\\_________\
    \|_______|\|__|\|__|\|_______|\_________\   \|__|       \|______\|_________|
                                 \|_________|                                   

Implant C2 fileless, puro Assembly x64, utilizando uma arquitetura de Canal Duplo (ICMP / DNS). Zero libc. Zero disco. Invisível para hooks padrão de EDR.


Architecture Language Protocol Protocol OS Version Suricata GitHub stars GitHub license GitHub repo size

Ghost-C2

Visão Geral

⭐️ Se você considera esta pesquisa útil, por favor, considere dar uma estrela para apoiar o desenvolvimento contínuo

🚨 PESQUISA TÉCNICA COMPLETA & CÓDIGO FONTE: Este repositório é um resumo. Para a análise arquitetural completa, detalhes de evasão de memória W^X e implementação da VTable, visite a página oficial do projeto: ICMP-Ghost Technical Breakdown

Ghost-C2 é um framework de comando e controle escrito inteiramente em Assembly puro x64 Linux, sem dependências de libc. Cada operação passa por chamadas de sistema diretas. Não há tabelas de importação, artefatos de linker dinâmico ou gravações em disco.

Originalmente construído como um canal stealth bruto de ICMP, a versão 3.6.2 introduz uma arquitetura de Pivô de Protocolo de Canal Duplo. Operadores podem alternar perfeitamente o canal de comunicação do implante entre ICMP Raw Sockets silencioso e DNS UDP Tunneling evasivo em tempo real. O implante vive exclusivamente na RAM, injetado em um processo do sistema em execução através de um loader personalizado baseado em ptrace.

Este projeto foi construído para explorar o quanto a stealth em espaço de usuário e a sincronização de estado de rede podem chegar sem tocar no kernel.


Arquitetura

ghost-c2-architecture
root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                      MÁQUINA DO OPERADOR                    │
│                                                             │
│   ┌──────────────┐                                          │
│   │  client.asm  │  ← Terminal UI: Prompt IP/Domain + Cmd   │
│   │  (Console do │    Criptografa payload com XOR Rotativo  │
│   │   Operador)  │    Sincronização de Estado: modo ICMP    │
│   │              │    / modo DNS                            │
│   └──────┬───────┘                                          │
│          │                                                  │
└──────────┼──────────────────────────────────────────────────┘
           │  Canal 1: ICMP Raw (Sem estado, Sem porta)
           │  Canal 2: DNS UDP Porta 53 (Assimétrico)
┌──────────┼──────────────────────────────────────────────────┐
│          │             MÁQUINA ALVO                         │
│          ▼                                                  │
│   ┌──────────────┐     ┌─────────────────────────────────┐  │
│   │  loader.asm  │────▶│         sniff.asm (PIC)         │  │
│   │  (Loader     │     │         Vive apenas na RAM      │  │
│   │   Fantasma)  │     │         dentro do processo      │  │
│   └──────────────┘     │         hospedeiro              │  │
│                         └────────────────┬────────────────┘  │
│                                         │                   │
│   1. Escaneia /proc por PID alvo        │ Escuta ICMP/DNS   │
│   2. ptrace ATTACH                      │ Valida Autentica. │
│   3. Força mmap remoto (RW)             │ Descriptografa    │
│   4. Injeta shellcode PIC               │ comando           │
│   5. mprotect → RX                      │ fork+execve       │
│   6. Redireciona RIP → shellcode        │ memfd_create      │
│   7. ptrace DETACH → sai                │ Comprime(DPCM-RLE)│
│                                         │ Criptografa &     │
│                                         │ Fragmenta         │
│                                         │ Envia Resposta    │
└─────────────────────────────────────────┼───────────────────┘
                                          │  Tráfego Criptografado
                                          ▼
                                   [ client.asm ]
                                   Recebe & Valida
                                   Descriptografa Payload
                                   Descomprime (Híbrido)
                                   Remonta & Imprime

Componentes

client.asm — Console do Operador

O terminal do lado do atacante. Lida com UI, gerenciamento dinâmico de memória e sincronização de estado do alvo. Pode enviar pacotes como Echo Requests ICMP ou consultas DNS TXT. Escuta respostas fragmentadas, previne estouros de buffer e reconstrói a saída. Possui um módulo de "Reconexão Ativa de Alvo" para resgatar sessões órfãs.

sniff.asm — Agente Implant PIC

O implante em execução no alvo. Compilado como um binário bruto (independente de posição, sem cabeçalhos ELF) para que possa ser injetado em endereços de memória arbitrários. Ele atualiza dinamicamente sua VTable interna para alternar entre sniffing ICMP e bind UDP DNS com base em comandos de pivô do operador.

Phantom_Loader/loader.asm — Motor de Injeção

O mecanismo de entrega. Escaneia /proc, encontra um processo alvo pelo nome comm e injeta o shellcode PIC nele usando uma máquina de estados ptrace de múltiplos estágios. Sai limpo após a injeção — não deixa rastros.


Técnicas de Stealth & Evasão

Pivô de Protocolo de Canal Duplo (ICMP ↔ DNS)

Ghost-C2 v3.6.2 permite que o operador troque o protocolo de rede a quente sem perder o agente. Ao enviar comandos de pivô específicos, as VTables tanto no Mestre quanto no Agente são sobrescritas dinamicamente:

  • !D (Pivô para DNS): Ambos os nós fecham sockets ICMP e inicializam comunicação UDP Porta 53. Ideal para contornar filtragem estrita de Camada 3, misturando-se ao tráfego DNS corporativo.
  • !I (Pivô para ICMP): O Agente fecha sockets UDP, mata bindings de porta e retorna ao sniffing silencioso de Raw Socket. Perfeito para modo stealth "Fantasma".

Compressor Híbrido DPCM-RLE x64

O motor de transmissão de dados do Ghost-C2 utiliza uma camada híbrida de compressão e codificação fortemente otimizada em Assembly x86-64.

  • DPCM (Modulação por Código de Pulso Diferencial): Calcula e envia a diferença matemática (Delta) entre um caractere de referência e os subsequentes, reduzindo a entropia dos dados.
  • RLE (Codificação Run-Length): Empacota espaços consecutivos e blocos repetitivos no nível de bits.
  • Resultado: Reduz a carga útil total de dados em 40% a 55%, minimizando a pegada de rede e o número de pacotes injetados.

Mimetismo de Protocolo ICMP

Cada pacote ICMP de saída é estruturado para ser indistinguível de um ping Linux padrão:

  • Timestamps RDTSC dinâmicos imitam struct timeval.
  • Padding exato do iputils do Linux (0x10 a 0x1F) contorna firewalls heurísticos básicos.

Cifra XOR Rotativa

Ambas as direções são criptografadas com uma chave QWORD que se desloca progressivamente. Isso mantém a entropia de Shannon baixa (diferente do AES, que atinge ~8.0 e dispara anomalias de DPI). XOR rotativo produz entropia que parece dados naturalmente ruidosos. Sem constantes criptográficas, sem S-boxes, nada para o YARA corresponder.

Autenticação Assimétrica

O implante ignora todos os pacotes ICMP onde ID + SEQ ≠ 45.000. O implante responde com pacotes onde ID + SEQ = 55.000. Isso evita confusão de eco do sistema operacional e filtra scanners de internet ou honeypots.

Execução Fileless via memfd_create

A saída do comando nunca toca o disco. A saída do shell é capturada através de um arquivo RAM anônimo (memfd_create), nomeado [shm] para se misturar a mapeamentos de memória compartilhada legítimos em /proc/PID/fd.

Injeção de Memória W^X (Loader Fantasma)

Derrota mitigações modernas do kernel que proíbem memória RWX. O loader usa uma abordagem de duas fases (mmap remoto com RW → Injetar → mprotect remoto com RX). Nenhuma página é simultaneamente W e X.

Ofuscação de Syscall sem Libc

Todos os números de syscall são divididos em duas instruções para derrotar análise estática e scanners simples baseados em grep.


Weaponização: Configurando e Compilando o Agente

Para manter OPSEC estrito, o agente Ghost-C2 (sniff.asm) não usa configurações externas. Você deve definir seu IP Mestre C2, Porta e Domínio DNS Isca diretamente no código assembly antes de compilar e injetar.

Passo 1: Configurar Variáveis OPSEC

Abra sniff.asm e role até o final do segmento .text. (Nota: Como o agente é estritamente Código Independente de Posição (PIC), não há segmento .data. Todas as variáveis de configuração são armazenadas inline).

Modifique os seguintes valores para corresponder ao seu Servidor Mestre:

  • Endereço IP: Altere db 127, 0, 0, 1 para o IP do seu Mestre.
  • Porta UDP: Altere dw 0xB414 (Porta 5300) para a porta desejada em Ordem de Byte de Rede (ex.: 0x3500 para Porta 53).

Passo 2: Montar para Shellcode Bruto

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

Passo 3: Formatando o 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))"

Passo 4: Criptografar o Payload (XOR Rotativo)

  1. Copie o conteúdo do c2_payload.txt gerado.
  2. Abra xor.py e substitua o conteúdo da variável raw_asm pelo seu shellcode copiado.
  3. Execute python3 xor.py e copie a saída criptografada.

Passo 5: Injetar no Loader Fantasma

  1. Abra loader.asm.
  2. Localize o rótulo c2_payload:.
  3. Exclua o placeholder existente e cole seu shellcode criptografado diretamente abaixo do rótulo.
  4. (Opcional: Altere o processo alvo de injeção modificando target db "cron", 10).

Passo 6: Compilar o Loader Final

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

Execute na máquina alvo com privilégios de root (sudo ./loader). O agente agora está rodando completamente fileless.


Configurando o Console do Operador (client.asm)

Antes de compilar o Console Mestre, você deve garantir que seu ouvinte e perfis de alvo estejam alinhados com a configuração do seu Agente. Abra client.asm e navegue até a seção .data.

Passo 1: Configurar Porta do Ouvinte

Localize master_bind_addr. É aqui que o Mestre escuta por beacons DNS de entrada.

Porta UDP: Altere dw 0xB414 para corresponder à porta para a qual seu Agente está enviando.

Nota: Isso deve estar em Ordem de Byte de Rede. Para Porta 53, use 0x3500.

Passo 2: Configurar Porta de Pivô/Reconexão

Localize target_addr. Esta porta é usada quando você realiza um Pivô DNS (!D) ou usa o módulo de Reconexão.

Alinhamento de Porta: Altere dw 0xB414 para corresponder à porta UDP na qual o Agente está ouvindo. Se essas portas não corresponderem, ocorrerá o (Deadlock), pois o Mestre estará gritando no vazio errado.

Passo 3: Compilar o Console

Uma vez configurado, monte e linke o Mestre:

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

💡 Dica OPSEC para Usuários

Dica profissional: Sempre mantenha uma "Folha de Perfil" para sua operação. Se você alterar a porta para 0x3500 (Porta 53) no sniff.asm, você DEVE atualizar tanto master_bind_addr quanto target_addr no client.asm antes do início da operação.

Nota: O Console do Operador requer privilégios de root para vincular raw sockets e porta UDP 53.

⚠️ CRÍTICO: Sincronização de Estado Operacional

Para garantir acesso persistente e evitar perda de sessão, sempre retorne o Agente ao Modo ICMP (!I) antes de encerrar sua sessão do Console Mestre.

A Lógica: ICMP é o "Canal Dourado" do Ghost-C2 — ele é sem estado, passivo e sempre alcançável via IP Alvo.

O Risco: O modo DNS depende de sincronização dinâmica de porta UDP. Se o Console Mestre for fechado enquanto estiver no modo DNS, o Agente permanece "preso" em um estado de escuta UDP. Restabelecer a conexão exigiria conhecer a porta efêmera específica do Agente, que é perdida ao reiniciar o Mestre.

Regra Geral

  1. !I (Mudar para ICMP)
  2. Verificar Prompt de Comando
  3. Ctrl+C (Sair do Mestre)

Resultados Empíricos

Testado em ambiente de laboratório controlado contra inspeção de tráfego ativa:

TesteResultado
Suricata v8.0.3 (conjunto de regras Emerging Threats)✅ Bypassado
Suricata v8.0.3 (regras ICMP personalizadas de payload)✅ Bypassado
Gateway DigitalOcean FRA1✅ 100% de sucesso na exfiltração
Alertas gerados durante exfiltração de ~25KB0

Referência de Syscalls

Ghost-C2 interage diretamente com o kernel Linux:


Roadmap

✅ Concluído na v3.6.3

  • Cabeçalhos DNS conformes com RFC 1035 (Transaction ID, QTYPE A, QDCOUNT)
  • Codificação Base32 RFC 4648 (substitui hex bruto)
  • Rotação de domínio por pacote (pool de 5 entradas CDN)
  • Avisos de "Pacote Malformado" do Wireshark eliminados

v3.6.4 — Simulação de Resposta DNS

  • Mestre e agente retornarão respostas sintéticas de registro A (QR=1, RCODE=0, ANCOUNT=1) após cada consulta
  • Elimina anomalia de consulta não respondida detectada por NDR baseado em ML (Darktrace, ExtraHop)
  • Lacuna restante entre bypass baseado em regras e evasão total de ML

v4.0 — Roteamento DNS Autoritativo & Beacon Assíncrono

  • Roteie payloads através de caches DNS públicos de ISP para um servidor de nomes autoritativo C2 (infraestrutura DNS real)
  • Nonce aleatório prefixado a cada consulta de subdomínio para evitar quedas de cache DNS
  • Jitter assíncrono completo com intervalos de beacon variáveis

v4.x — Pesquisa de Bypass MAC

  • Bypass de processo confinado por AppArmor / SELinux via execução baseada em ROP (Living off the Land)
  • Derrota dinâmica de ASLR para eliminar dependências de mprotect

Por que nenhum TTY Interativo?

A ausência de um PTY é uma decisão arquitetural, não uma limitação:

  • Integridade de protocolo: ICMP e DNS são sem estado/assimétricos. Emular entrega ordenada estilo TCP para um fluxo TTY inflaria a base de código e destruiria o design leve.
  • Stealth volumétrico: Um shell interativo gera tráfego para cada tecla pressionada, criando um pico de frequência detectável.
  • Superfície EDR: Alocar um PTY requer chamadas a /dev/ptmx e ioctl que EDRs monitoram intensamente.

Ghost-C2 é um implante de execução de comandos e exfiltração hiper-stealth. Interatividade troca invisibilidade por conveniência — este projeto escolheu a invisibilidade.


Contribuindo

Por design, Pull Requests e Forks são estritamente ignorados. A arquitetura deste projeto é mantida diretamente pelo autor. Se você encontrar um bug, falha lógica ou tiver uma sugestão de funcionalidade, abra uma Issue. Mantenha-a objetiva e técnica.


Recursos

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

💖 Apoie o Projeto

Ghost-C2 é construído com paixão, suor e Assembly x64 puro. Se este projeto ajudou você a entender evasão de baixo nível, mimetismo de protocolo, ou apenas tornou suas operações de red team mais suaves, considere apoiar o desenvolvimento!

👉 Torne-se um Patrocinador no GitHub


⚖️ Aviso Legal & Licença (AGPL-3.0)

Ghost-C2 é desenvolvido estritamente para fins educacionais, engenharia reversa e pesquisa autorizada em segurança cibernética.

A partir da versão 3.6.1 em diante, este projeto está licenciado sob a GNU Affero General Public License v3.0 (AGPLv3). Qualquer entidade que interaja ou modifique este software através de uma rede deve divulgar seu código fonte completo, conforme exigido pela licença. Exploração comercial ou integração em plataformas proprietárias/de código fechado é estritamente proibida.

Copyright (c) 2026 JM00NJ (commSync). Todos os Direitos Reservados.

O autor não é responsável por qualquer uso ilegal ou dano causado por esta ferramenta. Use por sua conta e risco.

Baixar ferramenta
SyscallNúmeroUso
sys_socket41Criação de socket ICMP Raw / UDP
sys_recvfrom45Captura passiva de pacotes ICMP/UDP
sys_sendto44Transmissão de resposta ICMP/UDP
sys_bind49Vinculação de porta UDP DNS
sys_memfd_create319Arquivo RAM anônimo para saída
sys_dup233Redirecionamento de stdout/stderr
sys_execve59Execução de comando shell
sys_fork57Isolamento de processo
sys_ptrace101Injeção de processo + anti-debug
sys_getdents64217Parseamento de diretório /proc
sys_mmap9Alocação remota de memória
sys_mprotect10Troca de permissão W^X