
Framework C2 en assembly x64 sans fichier avec pivotement de protocole ICMP/DNS à double canal, exécution directe d'appels système et injection de processus basée sur ptrace pour une exécution furtive de commandes et une exfiltration de données.
________ ___ ___ ________ ________ _________ ________ ________
|\ ____\|\ \|\ \|\ __ \|\ ____\|\___ ___\ |\ ____\|\_____ \
\ \ \___| \ \ \\\ \ \ \|\ \ \ \___|\|___ \ \_| \ \ \___|\|____|\ \
\ \ \ __ \ \ __ \ \ \\\ \ \_____ \ \ \ \ \ \ \ ____\_\ \
\ \ \|\ \ \ \ \ \ \ \\\ \|____|\ \ \ \ \ \ \ \___|\____ \ \
\ \_______\ \__\ \__\ \_______\____\_\ \ \ \__\ \ \______\\_________\
\|_______|\|__|\|__|\|_______|\_________\ \|__| \|______\|_________|
\|_________|
Implant C2 sans fichier, purement en assembleur x64, utilisant une architecture à double canal (ICMP / DNS). Zéro libc. Zéro disque. Invisible pour les sondes EDR standards.
⭐️ Si vous trouvez cette recherche utile, merci de considérer lui donner une étoile pour soutenir son développement.
🚨 RECHERCHE TECHNIQUE COMPLÈTE & CODE SOURCE : Ce dépôt est un résumé. Pour la description architecturale complète, les détails d'évasion mémoire W^X et l'implémentation de la VTable, visitez la page officielle du projet : ICMP-Ghost Technical Breakdown
Ghost-C2 est un framework de commande et de contrôle entièrement écrit en assembleur x64 Linux pur, sans dépendance à libc. Chaque opération passe par des appels système directs. Il n'y a pas de tables d'import, pas d'artefacts de l'éditeur de liens dynamique et aucune écriture sur le disque.
Initialement construit comme un canal furtif brut ICMP, la version 3.6.2 introduit une architecture de pivotement de protocole à double canal. Les opérateurs peuvent basculer de manière transparente le canal de communication de l'implant entre les sockets brutes ICMP silencieuses et le tunneling UDP DNS furtif à la volée. L'implant réside exclusivement dans la RAM, injecté dans un processus système en cours via un chargeur personnalisé basé sur ptrace.
Ce projet a été développé pour explorer jusqu'où la furtivité en espace utilisateur et la synchronisation d'état réseau peuvent aller sans toucher au noyau.
┌─────────────────────────────────────────────────────────────┐
│ MACHINE OPÉRATEUR │
│ │
│ ┌──────────────┐ │
│ │ client.asm │ ← Terminal UI : Prompt IP/Domaine + Cmd │
│ │ (Console │ Chiffre la charge utile avec XOR │
│ │ Opérateur) │ rotatif │
│ │ │ Sync. état : mode ICMP / mode DNS │
│ └──────┬───────┘ │
│ │ │
└──────────┼──────────────────────────────────────────────────┘
│ Canal 1 : ICMP brut (Sans état, Sans port)
│ Canal 2 : DNS UDP Port 53 (Asymétrique)
┌──────────┼──────────────────────────────────────────────────┐
│ │ MACHINE CIBLE │
│ ▼ │
│ ┌──────────────┐ ┌─────────────────────────────────┐ │
│ │ loader.asm │────▶│ sniff.asm (PIC) │ │
│ │ (Chargeur │ │ Vit uniquement en RAM │ │
│ │ Fantôme) │ │ à l'intérieur d'un proc.│ │
│ └──────────────┘ └────────────────┬────────────────┘ │
│ │ │
│ 1. Scanne /proc pour le PID cible │ Écoute ICMP/DNS │
│ 2. ptrace ATTACH │ Valide Auth │
│ 3. Force mmap distant (RW) │ Déchiffre cmd │
│ 4. Injecte le shellcode PIC │ fork+execve │
│ 5. mprotect → RX │ memfd_create │
│ 6. Redirige RIP vers le shellcode │ Compresse (DPCM- │
│ 7. ptrace DETACH → se termine │ RLE) │
│ │ Chiffre & Fragm. │
│ │ Envoie Réponse │
└─────────────────────────────────────────┼───────────────────┘
│ Trafic Chiffré
▼
[ client.asm ]
Reçoit & Valide
Déchiffre Charge Utile
Décompresse (Hybride)
Réassemble & Affiche
client.asm — Console OpérateurLe terminal côté attaquant. Gère l'interface utilisateur, la gestion dynamique de la mémoire et la synchronisation de l'état de la cible. Peut envoyer des paquets sous forme de requêtes d'écho ICMP ou de requêtes DNS TXT. Écoute les réponses fragmentées, empêche les débordements de tampon et reconstruit la sortie. Dispose d'un module de "Reconnexion de cible active" pour récupérer des sessions orphelines.
sniff.asm — Agent Implant PICL'implant s'exécutant sur la cible. Compilé en binaire brut (indépendant de la position, sans en-têtes ELF) pour pouvoir être injecté dans des adresses mémoire arbitraires. Il met à jour dynamiquement sa VTable interne pour basculer entre l'écoute ICMP et la liaison UDP DNS en fonction des commandes de pivotement de l'opérateur.
Phantom_Loader/loader.asm — Moteur d'InjectionLe mécanisme de livraison. Scanne /proc, trouve un processus cible par son nom de comm, et injecte le shellcode PIC dans celui-ci via une machine d'état ptrace en plusieurs étapes. Se termine proprement après l'injection — ne laisse aucune trace.
Ghost-C2 v3.6.2 permet à l'opérateur de changer à chaud le protocole réseau sans perdre l'agent. En envoyant des commandes de pivotement spécifiques, les VTables du Maître et de l'Agent sont dynamiquement réécrites :
!D (Pivoter vers DNS) : Les deux nœuds ferment les sockets ICMP et initialisent la communication UDP sur le Port 53. Idéal pour contourner un filtrage strict de couche 3 en se fondant dans le trafic DNS d'entreprise.!I (Pivoter vers ICMP) : L'Agent ferme les sockets UDP, tue les liaisons de port et retourne en écoute silencieuse sur socket brute. Parfait pour le mode furtif "Fantôme".Le moteur de transmission de données de Ghost-C2 utilise une couche de compression et d'encodage hybride fortement optimisée en assembleur x86-64.