Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
ICMP-Ghost-A-Fileless-x64-Assembly-C2-Agent — Framework C2 in Assembly x64 fileless con pivoting di protocollo ICMP/DNS a doppio canale, esecuzione diretta di syscall e iniezione di processi basata su ptrace per un'esecuzione furtiva di comandi ed esfiltrazione di dati. | Kitploit
Strumenti/GitHubGitHub/jm00nj/icmp-ghost-a-fileless-x64-assembly-c2-agent
Escalation di PrivilegiFramework di ExploitEvasione IDS/IPSShellcodePost-ExploitCommand and ControlRed TeamingSviluppo Payload

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
GitHub
jm00nj/icmp-ghost-a-fileless-x64-assembly-c2-agent

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

Framework C2 in Assembly x64 fileless con pivoting di protocollo ICMP/DNS a doppio canale, esecuzione diretta di syscall e iniezione di processi basata su ptrace per un'esecuzione furtiva di comandi ed esfiltrazione di dati.

Vedi RepositorySito web
8818420 giorni faRevisionato da Kitploit
root@kitploit:~
 ________  ___  ___  ________  ________  _________       ________  ________   
|\   ____\|\  \|\  \|\   __  \|\   ____\|\___   ___\    |\   ____\|\_____  \  
\ \  \___| \ \  \\\  \ \  \|\  \ \  \___|\|___ \  \_|    \ \  \___|\|____|\  \ 
 \ \  \  __ \ \   __  \ \  \\\  \ \_____  \   \ \  \      \ \  \     ____\_\  \
  \ \  \|\  \ \  \ \  \ \  \\\  \|____|\  \   \ \  \      \ \  \___|\____ \  \
   \ \_______\ \__\ \__\ \_______\____\_\  \   \ \__\      \ \______\\_________\
    \|_______|\|__|\|__|\|_______|\_________\   \|__|       \|______\|_________|
                                 \|_________|                                   

Implant C2 fileless in puro Assembly x64 che utilizza un'architettura a doppio canale (ICMP / DNS). Zero libc. Zero disco. Invisibile agli hook EDR standard.


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

Ghost-C2

Panoramica

⭐️ Se trovi utile questa ricerca, considera di mettere una stella per supportare lo sviluppo futuro

🚨 RICERCA TECNICA COMPLETA E CODICE SORGENTE: Questa repository è un riepilogo. Per l'analisi architetturale completa, i dettagli sull'evasione della memoria W^X e l'implementazione della VTable, visita la pagina ufficiale del progetto: ICMP-Ghost Technical Breakdown

Ghost-C2 è un framework di command-and-control scritto interamente in Assembly x64 Linux puro, senza dipendenze da libc. Ogni operazione passa attraverso syscall dirette. Non ci sono tabelle di importazione, nessun artefatto del dynamic linker e nessuna scrittura su disco.

Nato originariamente come canale stealth ICMP raw, la versione 3.6.2 introduce un'architettura di Protocol Pivoting a doppio canale. Gli operatori possono passare senza problemi il canale di comunicazione dell'implant tra ICMP Raw Sockets silenziosi e DNS UDP Tunneling elusivo, al volo. L'implant vive esclusivamente in RAM, iniettato in un processo di sistema in esecuzione tramite un loader personalizzato basato su ptrace.

Questo progetto è stato realizzato per esplorare fino a che punto possono spingersi lo stealth nello spazio utente e la sincronizzazione dello stato di rete senza toccare il kernel.


Architettura

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

Componenti

client.asm — Console dell'Operatore

Il terminale lato attaccante. Gestisce l'interfaccia utente, la gestione dinamica della memoria e la sincronizzazione dello stato del target. Può inviare pacchetti sia come ICMP Echo Request che come query DNS TXT. Ascolta le risposte frammentate, previene i buffer overflow e ricostruisce l'output. Include un modulo di "Active Target Reconnection" per recuperare sessioni orfane.

sniff.asm — Agente Implant PIC

L'implant in esecuzione sul target. Compilato come binario raw (position-independent, senza header ELF) così da poter essere iniettato in indirizzi di memoria arbitrari. Aggiorna dinamicamente la sua VTable interna per passare dallo sniffing ICMP al binding UDP DNS in base ai comandi di pivot dell'operatore.

Phantom_Loader/loader.asm — Motore di Iniezione

Il meccanismo di consegna. Scansiona /proc, trova un processo target tramite il nome comm e vi inietta la shellcode PIC usando una macchina a stati ptrace multistadio. Termina in modo pulito dopo l'iniezione — non lascia tracce.


Tecniche di Stealth ed Evasione

Protocol Pivoting a Doppio Canale (ICMP ↔ DNS)

Ghost-C2 v3.6.2 consente all'operatore di cambiare a caldo il protocollo di rete senza perdere l'agente. Inviando specifici comandi di pivot, le VTable sia nel Master che nell'Agente vengono sovrascritte dinamicamente:

  • !D (Pivot a DNS): Entrambi i nodi chiudono i socket ICMP e inizializzano la comunicazione UDP sulla Porta 53. Ideale per bypassare un filtraggio Layer 3 rigoroso mimetizzandosi nel traffico DNS aziendale.
  • !I (Pivot a ICMP): L'Agente chiude i socket UDP, elimina i binding di porta e torna allo sniffing silenzioso su Raw Socket. Perfetto per la modalità stealth "Phantom".

Compressore Ibrido DPCM-RLE x64

Il motore di trasmissione dati di Ghost-C2 utilizza un layer ibrido di compressione e codifica pesantemente ottimizzato in Assembly x86-64.

  • DPCM (Differential Pulse Code Modulation): Calcola e invia la differenza matematica (Delta) tra un carattere di riferimento e quelli successivi, abbassando l'entropia dei dati.
  • RLE (Run-Length Encoding): Impacchetta spazi consecutivi e blocchi ripetuti a livello di bit.
  • Risultato: Riduce il payload dati complessivo dal 40% al 55%, minimizzando l'impronta di rete e il numero di pacchetti iniettati.

Mimica del Protocollo ICMP

Ogni pacchetto ICMP in uscita è strutturato per essere indistinguibile da un ping Linux standard:

  • I timestamp dinamici RDTSC imitano struct timeval.
  • Il padding iputils Linux esatto (da 0x10 a 0x1F) bypassa i firewall euristici di base.

Cifrario Rolling XOR

Entrambe le direzioni sono cifrate con una chiave QWORD che si sposta progressivamente. Questo mantiene bassa l'entropia di Shannon (a differenza di AES, che raggiunge ~8.0 e innesca anomalie DPI). Il Rolling XOR produce un'entropia che appare come dati naturalmente rumorosi. Nessuna costante crittografica, nessuna S-box, nulla che YARA possa intercettare.

Autenticazione Asimmetrica

L'implant ignora tutti i pacchetti ICMP in cui ID + SEQ ≠ 45,000. L'implant risponde con pacchetti in cui ID + SEQ = 55,000. Questo previene la confusione dell'eco del sistema operativo e filtra gli scanner internet o gli honeypot.

Esecuzione Fileless tramite memfd_create

L'output dei comandi non tocca mai il disco. L'output della shell viene catturato tramite un file anonimo in RAM (memfd_create), chiamato [shm] per mimetizzarsi tra i mapping legittimi di memoria condivisa in /proc/PID/fd.

Iniezione di Memoria W^X (Phantom Loader)

Sconfigge le moderne mitigazioni del kernel che vietano la memoria RWX. Il loader utilizza un approccio a due fasi (Remote mmap con RW → Inietta → Remote mprotect con RX). Nessuna pagina è mai simultaneamente W e X.

Offuscamento delle Syscall senza Libc

Tutti i numeri di syscall sono suddivisi tra due istruzioni per sconfiggere l'analisi statica e i semplici scanner basati su grep.


Weaponizzazione: Configurazione e Compilazione dell'Agente

Per mantenere uno stretto OPSEC, l'agente Ghost-C2 (sniff.asm) non utilizza configurazioni esterne. Devi definire IP, Porta e Dominio DNS Decoy del tuo Master C2 direttamente nel codice assembly prima di compilare e iniettare.

Passo 1: Configura le Variabili OPSEC

Apri sniff.asm e scorri fino in fondo al segmento .text. (Nota: poiché l'agente è strettamente Position Independent Code (PIC), non esiste un segmento .data. Tutte le variabili di configurazione sono memorizzate inline).

Modifica i seguenti valori per allinearli al tuo Master Server:

  • Indirizzo IP: Cambia db 127, 0, 0, 1 con l'IP del tuo Master.
  • Porta UDP: Cambia dw 0xB414 (Porta 5300) con la porta desiderata in Network Byte Order (es. 0x3500 per la Porta 53).

Passo 2: Assembla come Shellcode Raw

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

Passo 3: Formatta la 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: Cifra il Payload (Rolling XOR)

  1. Copia il contenuto del c2_payload.txt generato.
  2. Apri xor.py e sostituisci il contenuto della variabile raw_asm con la shellcode copiata.
  3. Esegui python3 xor.py e copia l'output cifrato.

Passo 5: Inietta nel Phantom Loader

  1. Apri loader.asm.
  2. Individua l'etichetta c2_payload:.
  3. Elimina il segnaposto esistente e incolla la shellcode cifrata direttamente sotto l'etichetta.
  4. (Opzionale: cambia il processo target di iniezione modificando target db "cron", 10).

Passo 6: Compila il Loader Finale

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

Esegui sulla macchina target con privilegi di root (sudo ./loader). L'agente ora è in esecuzione completamente fileless.


Configurazione della Console dell'Operatore (client.asm)

Prima di compilare la Console Master, devi assicurarti che il listener e i profili target siano allineati con la configurazione del tuo Agente. Apri client.asm e vai alla sezione dell'area .data.

Passo 1: Configura la Porta del Listener

Individua master_bind_addr. È qui che il Master resta in ascolto dei beacon DNS in arrivo.

Porta UDP: Cambia dw 0xB414 per allinearla alla porta verso cui il tuo Agente sta inviando.

Nota: Deve essere in Network Byte Order. Per la Porta 53, usa 0x3500.

Passo 2: Configura la Porta di Pivot/Riconnessione

Individua target_addr. Questa porta viene usata quando esegui un DNS Pivot (!D) o usi il modulo Reconnect.

Allineamento delle Porte: Cambia dw 0xB414 per allinearla alla porta UDP su cui l'Agente è in ascolto. Se queste porte non coincidono, si verificherà un (Deadlock) perché il Master starà gridando nel vuoto sbagliato.

Passo 3: Compila la Console

Una volta configurata, assembla e linka il Master:

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

💡 Suggerimento OPSEC per gli Utenti

Consiglio da pro: tieni sempre una "Scheda di Profilo" per la tua operazione. Se cambi la porta a 0x3500 (Porta 53) in sniff.asm, DEVI aggiornare sia master_bind_addr che target_addr in client.asm prima che l'operazione inizi.

Nota: La Console dell'Operatore richiede privilegi di root per bindare raw socket e la porta UDP 53.

⚠️ CRITICO: Sincronizzazione dello Stato Operativo

Per garantire un accesso persistente e prevenire la perdita della sessione, riporta sempre l'Agente in Modalità ICMP (!I) prima di terminare la sessione della Console Master.

La Logica: ICMP è il "Golden Channel" di Ghost-C2—è stateless, passivo e sempre raggiungibile tramite l'IP del Target.

Il Rischio: la modalità DNS si basa sulla sincronizzazione dinamica delle porte UDP. Se la Console Master viene chiusa mentre è in modalità DNS, l'Agente rimane "intrappolato" in uno stato di ascolto UDP. Ristabilire la connessione richiederebbe di conoscere la porta effimera specifica dell'Agente, che viene persa al riavvio del Master.

Regola Pratica

  1. !I (Passa a ICMP)
  2. Verifica il Prompt dei Comandi
  3. Ctrl+C (Esci dal Master)

Risultati Empirici

Testato in un ambiente di laboratorio controllato contro l'ispezione attiva del traffico:

TestRisultato
Suricata v8.0.3 (ruleset Emerging Threats)✅ Bypassato
Suricata v8.0.3 (regole payload ICMP personalizzate)✅ Bypassato
Gateway DigitalOcean FRA1✅ 100% di successo nell'exfiltration
Avvisi generati durante l'exfiltration di ~25KB0

Riferimento delle Syscall

Ghost-C2 interagisce direttamente con il kernel Linux:


Roadmap

✅ Completato in v3.6.3

  • Header DNS conformi a RFC 1035 (Transaction ID, QTYPE A, QDCOUNT)
  • Codifica Base32 RFC 4648 (sostituisce l'hex raw)
  • Rotazione del dominio per pacchetto (pool CDN a 5 voci)
  • Eliminati gli avvisi "Malformed Packet" di Wireshark

v3.6.4 — Simulazione di Risposta DNS

  • Master e agente restituiranno risposte sintetiche con record A (QR=1, RCODE=0, ANCOUNT=1) dopo ogni query
  • Elimina l'anomalia delle query senza risposta rilevata dagli NDR basati su ML (Darktrace, ExtraHop)
  • Divario rimanente tra bypass basato su regole ed evasione ML completa

v4.0 — Routing DNS Autoritativo e Beaconing Asincrono

  • Instradare i payload attraverso le cache DNS pubbliche degli ISP verso un name server autoritativo C2 (vera infrastruttura DNS)
  • Nonce casuale anteposto a ogni query di sottodominio per prevenire gli scarti dovuti al caching DNS
  • Jitter asincrono completo con intervalli di beacon variabili

v4.x — Ricerca sul Bypass MAC

  • Bypass dei processi confinati da AppArmor / SELinux tramite esecuzione basata su ROP (Living off the Land)
  • Sconfitta dinamica dell'ASLR per eliminare le dipendenze da mprotect

Perché Nessuna TTY Interattiva?

L'assenza di una PTY è una decisione architetturale, non una limitazione:

  • Integrità del protocollo: ICMP e DNS sono stateless/asimmetrici. Emulare una consegna ordinata stile TCP per uno stream TTY appesantirebbe il codebase e distruggerebbe il design leggero.
  • Stealth volumetrico: Una shell interattiva genera traffico per ogni tasto premuto, creando un picco di frequenza rilevabile.
  • Superficie EDR: Allocare una PTY richiede chiamate /dev/ptmx e ioctl che gli EDR monitorano pesantemente.

Ghost-C2 è un implant di esecuzione comandi ed exfiltration iper-stealth. L'interattività scambia l'invisibilità con la comodità — questo progetto ha scelto l'invisibilità.


Contributi

Per scelta progettuale, Pull Request e Fork vengono rigorosamente ignorati. L'architettura di questo progetto è mantenuta direttamente dall'autore. Se trovi un bug, un difetto logico o hai un suggerimento per una funzionalità, apri una Issue. Mantienila obiettiva e tecnica.


Risorse

  • Blog / Analisi Tecnica: netacoding.com/posts/icmp-ghost
  • Autore: github.com/JM00NJ
  • Risorsa Correlata: netacoding.com/posts/compressdpcm-rle

💖 Supporta il Progetto

Ghost-C2 è costruito con passione, sudore e puro Assembly x64. Se questo progetto ti ha aiutato a capire l'evasione di basso livello, la mimica dei protocolli, o ha semplicemente reso più fluide le tue operazioni di red teaming, considera di supportare lo sviluppo!

👉 Diventa uno Sponsor su GitHub


⚖️ Disclaimer e Licenza (AGPL-3.0)

Ghost-C2 è sviluppato rigorosamente per scopi educativi, reverse engineering e ricerca cybersecurity autorizzata.

A partire dalla versione 3.6.1 in poi, questo progetto è concesso in licenza GNU Affero General Public License v3.0 (AGPLv3). Qualsiasi soggetto che interagisca con o modifichi questo software tramite rete deve divulgare il proprio codice sorgente completo come richiesto dalla licenza. Lo sfruttamento commerciale o l'integrazione in piattaforme proprietarie/closed-source è severamente vietato.

Copyright (c) 2026 JM00NJ (commSync). Tutti i diritti riservati.

L'autore non è responsabile per qualsiasi uso illegale o danno causato da questo strumento. Usalo a tuo rischio.

Scarica lo strumento
SyscallNumeroUtilizzo
sys_socket41Creazione socket raw ICMP / UDP
sys_recvfrom45Cattura passiva di pacchetti ICMP/UDP
sys_sendto44Trasmissione risposte ICMP/UDP
sys_bind49Binding della porta UDP DNS
sys_memfd_create319File anonimo in RAM per l'output
sys_dup233Redirezione stdout/stderr
sys_execve59Esecuzione comandi shell
sys_fork57Isolamento del processo
sys_ptrace101Iniezione nel processo + anti-debug
sys_getdents64217Parsing della directory /proc
sys_mmap9Allocazione di memoria remota
sys_mprotect10Cambio dei permessi W^X