Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
ICMP-Ghost-A-Fileless-x64-Assembly-C2-Agent — Dateiloses x64-Assembly-C2-Framework mit Dual-Channel-ICMP/DNS-Protokoll-Pivoting, direkter Syscall-Ausführung und ptrace-basierter Prozessinjektion für verdeckte Befehlsausführung und Datenextiltration. | Kitploit
Tools/GitHubGitHub/jm00nj/icmp-ghost-a-fileless-x64-assembly-c2-agent
Privilege EscalationExploit-FrameworksIDS/IPS-UmgehungShellcodePost-ExploitationCommand and ControlRed TeamingPayload-Entwicklung

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
GitHub
jm00nj/icmp-ghost-a-fileless-x64-assembly-c2-agent

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

Dateiloses x64-Assembly-C2-Framework mit Dual-Channel-ICMP/DNS-Protokoll-Pivoting, direkter Syscall-Ausführung und ptrace-basierter Prozessinjektion für verdeckte Befehlsausführung und Datenextiltration.

Repository anzeigenWebseite
88184vor 19 TagenVon Kitploit geprüft
root@kitploit:~
 ________  ___  ___  ________  ________  _________       ________  ________   
|\   ____\|\  \|\  \|\   __  \|\   ____\|\___   ___\    |\   ____\|\_____  \  
\ \  \___| \ \  \\\  \ \  \|\  \ \  \___|\|___ \  \_|    \ \  \___|\|____|\  \ 
 \ \  \  __ \ \   __  \ \  \\\  \ \_____  \   \ \  \      \ \  \     ____\_\  \
  \ \  \|\  \ \ \  \ \  \ \  \\\  \|____|\  \   \ \  \      \ \  \___|\____ \  \
   \ \_______\ \__\ \__\ \_______\____\_\  \   \ \__\      \ \______\\_________\
    \|_______|\|__|\|__|\|_______|\_________\   \|__|       \|______\|_________|
                                 \|_________|                                   

Dateiloser, reiner x64-Assembly-C2-Implantat, der eine Dual-Channel-Architektur (ICMP / DNS) nutzt. Null libc. Null Festplatte. Unsichtbar für standardmäßige EDR-Hooks.


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

Ghost-C2

Überblick

⭐️ Wenn du diese Forschung nützlich findest, ziehe bitte in Betracht, ihr einen Stern zu geben, um die weitere Entwicklung zu unterstützen

🚨 VOLLSTÄNDIGE TECHNISCHE FORSCHUNG & QUELLCODE: Dieses Repository ist eine Zusammenfassung. Für die vollständige architektonische Aufschlüsselung, W^X-Speicher-Evasion-Details und VTable-Implementierung besuche die offizielle Projektseite: ICMP-Ghost Technical Breakdown

Ghost-C2 ist ein Command-and-Control-Framework, das vollständig in reinem x64-Linux-Assembly ohne libc-Abhängigkeiten geschrieben ist. Jeder Vorgang läuft über direkte Syscalls. Es gibt keine Importtabellen, keine Dynamic-Linker-Artefakte und keine Schreibvorgänge auf die Festplatte.

Ursprünglich als roher ICMP-Stealth-Kanal konzipiert, führt Version 3.6.2 eine Dual-Channel-Protokoll-Pivoting-Architektur ein. Betreiber können den Kommunikationskanal des Implantats im laufenden Betrieb nahtlos zwischen stillen ICMP-Raw-Sockets und ausweichendem DNS-UDP-Tunneling umschalten. Das Implantat lebt ausschließlich im RAM und wird über einen benutzerdefinierten ptrace-basierten Loader in einen laufenden Systemprozess injiziert.

Dieses Projekt entstand, um zu erkunden, wie weit User-Space-Stealth und Netzwerkzustandssynchronisation gehen können, ohne den Kernel zu berühren.


Architektur

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

Komponenten

client.asm — Operator-Konsole

Das Terminal auf Angreiferseite. Verwaltet UI, dynamische Speicherverwaltung und Zielzustandssynchronisation. Kann Pakete entweder als ICMP-Echo-Requests oder DNS-TXT-Abfragen versenden. Lauscht auf fragmentierte Antworten, verhindert Pufferüberläufe und rekonstruiert die Ausgabe. Verfügt über ein Modul zur „Active Target Reconnection“, um verwaiste Sitzungen zu retten.

sniff.asm — PIC-Implantat-Agent

Das auf dem Zielsystem laufende Implantat. Wird als rohes Binärformat kompiliert (positionsunabhängig, ohne ELF-Header), sodass es in beliebige Speicheradressen injiziert werden kann. Es aktualisiert dynamisch seine interne VTable, um auf Basis von Operator-Pivot-Befehlen zwischen ICMP-Sniffing und UDP-DNS-Bindung umzuschalten.

Phantom_Loader/loader.asm — Injektions-Engine

Der Zustellmechanismus. Durchsucht /proc, findet einen Zielprozess anhand des Comm-Namens und injiziert den PIC-Shellcode mithilfe einer mehrstufigen ptrace-Zustandsmaschine. Beendet sich sauber nach der Injektion – hinterlässt keine Spuren.


Stealth- & Evasion-Techniken

Dual-Channel-Protokoll-Pivoting (ICMP ↔ DNS)

Ghost-C2 v3.6.2 erlaubt dem Betreiber, das Netzwerkprotokoll zu wechseln, ohne den Agent zu verlieren. Durch das Senden spezifischer Pivot-Befehle werden die VTables sowohl im Master als auch im Agent dynamisch überschrieben:

  • !D (Pivot zu DNS): Beide Knoten schließen ICMP-Sockets und initialisieren die Kommunikation über UDP-Port 53. Ideal, um strenge Layer-3-Filter zu umgehen, indem man sich in den Unternehmens-DNS-Verkehr einfügt.
  • !I (Pivot zu ICMP): Der Agent schließt UDP-Sockets, beendet Portbindungen und fällt zurück in stilles Raw-Socket-Sniffing. Perfekt für den „Phantom“-Stealth-Modus.

DPCM-RLE-Hybrid-x64-Kompressor

Die Datenübertragungs-Engine von Ghost-C2 nutzt eine hybride Kompressions- und Kodierungsschicht, die stark in x86-64-Assembly optimiert ist.

  • DPCM (Differential Pulse Code Modulation): Berechnet und sendet die mathematische Differenz (Delta) zwischen einem Referenzzeichen und den nachfolgenden Zeichen, wodurch die Datenentropie gesenkt wird.
  • RLE (Run-Length Encoding): Packt aufeinanderfolgende Leerzeichen und sich wiederholende Blöcke auf Bitebene.
  • Ergebnis: Reduziert die gesamte Datennutzlast um 40 % bis 55 %, wodurch der Netzwerk-Fußabdruck und die Anzahl injizierter Pakete minimiert werden.

ICMP-Protokoll-Nachahmung

Jedes ausgehende ICMP-Paket ist so strukturiert, dass es nicht von einem standardmäßigen Linux-ping zu unterscheiden ist:

  • Dynamische RDTSC-Zeitstempel imitieren struct timeval.
  • Exaktes Linux-iputils-Padding (0x10 bis 0x1F) umgeht einfache heuristische Firewalls.

Rollende XOR-Chiffre

Beide Richtungen werden mit einem sich progressiv verschiebenden QWORD-Schlüssel verschlüsselt. Dadurch bleibt die Shannon-Entropie niedrig (anders als bei AES, das etwa 8.0 erreicht und DPI-Anomalien auslöst). Rolling-XOR erzeugt Entropie, die wie natürlich verrauschte Daten aussieht. Keine kryptografischen Konstanten, keine S-Boxen, nichts, das YARA matchen könnte.

Asymmetrische Authentifizierung

Das Implantat ignoriert alle ICMP-Pakete, bei denen ID + SEQ ≠ 45,000. Das Implantat antwortet mit Paketen, bei denen ID + SEQ = 55,000. Dies verhindert OS-Echo-Verwirrung und filtert Internet-Scanner oder Honeypots aus.

Dateilose Ausführung mittels memfd_create

Die Befehlsausgabe berührt nie die Festplatte. Die Shell-Ausgabe wird über eine anonyme RAM-Datei (memfd_create) erfasst, die als [shm] benannt ist, um sich in legitime Shared-Memory-Zuordnungen in /proc/PID/fd einzufügen.

W^X-Speicherinjektion (Phantom Loader)

Überwindet moderne Kernel-Härtungen, die RWX-Speicher verbieten. Der Loader verwendet einen zweiphasigen Ansatz (Remote mmap mit RW → Injizieren → Remote mprotect mit RX). Keine Seite ist jemals gleichzeitig W und X.

Libc-freie Syscall-Verschleierung

Alle Syscall-Nummern werden auf zwei Anweisungen aufgeteilt, um statische Analyse und einfache grep-basierte Scanner zu besiegen.


Weaponization: Konfiguration & Erstellung des Agents

Um strenge OPSEC zu gewährleisten, verwendet der Ghost-C2-Agent (sniff.asm) keine externen Konfigurationen. Du musst die Master-C2-IP, den Port und die Decoy-DNS-Domain direkt im Assembly-Code definieren, bevor du kompilierst und injizierst.

Schritt 1: OPSEC-Variablen konfigurieren

Öffne sniff.asm und scrolle ganz nach unten zum .text-Segment. (Hinweis: Da der Agent strikt positionsunabhängiger Code (PIC) ist, gibt es kein .data-Segment. Alle Konfigurationsvariablen sind inline gespeichert).

Ändere die folgenden Werte, damit sie zu deinem Master-Server passen:

  • IP-Adresse: Ändere db 127, 0, 0, 1 in die IP deines Masters.
  • UDP-Port: Ändere dw 0xB414 (Port 5300) in den gewünschten Port in Network Byte Order (z. B. 0x3500 für Port 53).

Schritt 2: Zu Raw-Shellcode assemblieren

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

Schritt 3: Den Shellcode formatieren

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

Schritt 4: Die Payload verschlüsseln (Rolling XOR)

  1. Kopiere den Inhalt der erzeugten c2_payload.txt.
  2. Öffne xor.py und ersetze den Inhalt der Variable raw_asm durch deinen kopierten Shellcode.
  3. Führe python3 xor.py aus und kopiere die verschlüsselte Ausgabe.

Schritt 5: In den Phantom Loader injizieren

  1. Öffne loader.asm.
  2. Suche das Label c2_payload:.
  3. Lösche den vorhandenen Platzhalter und füge deinen verschlüsselten Shellcode direkt unter dem Label ein.
  4. (Optional: Ändere den Ziel-Injektionsprozess, indem du target db "cron", 10 anpasst).

Schritt 6: Den finalen Loader kompilieren

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

Führe ihn auf dem Zielsystem mit Root-Rechten aus (sudo ./loader). Der Agent läuft nun vollständig dateilos.


Konfiguration der Operator-Konsole (client.asm)

Bevor du die Master-Konsole kompilierst, musst du sicherstellen, dass ihre Listener- und Zielprofile mit der Konfiguration deines Agents übereinstimmen. Öffne client.asm und navigiere zum .data-Bereich.

Schritt 1: Listener-Port konfigurieren

Suche master_bind_addr. Hier lauscht der Master auf eingehende DNS-Beacons.

UDP-Port: Ändere dw 0xB414, damit er dem Port entspricht, an den dein Agent sendet.

Hinweis: Dies muss in Network Byte Order erfolgen. Für Port 53 verwende 0x3500.

Schritt 2: Pivot-/Reconnect-Port konfigurieren

Suche target_addr. Dieser Port wird verwendet, wenn du einen DNS-Pivot (!D) durchführst oder das Reconnect-Modul nutzt.

Port-Ausrichtung: Ändere dw 0xB414, damit er dem UDP-Port entspricht, auf dem der Agent lauscht. Wenn diese Ports nicht übereinstimmen, kommt es zum (Deadlock), da der Master ins Leere schreit.

Schritt 3: Konsole bauen

Nach der Konfiguration assemblieren und linken:

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

💡 OPSEC-Tipp für Anwender

Protipp: Bewahre für deine Operation immer ein „Profile Sheet“ auf. Wenn du den Port in sniff.asm auf 0x3500 (Port 53) änderst, MUSST du vor Operationsbeginn sowohl master_bind_addr als auch target_addr in client.asm aktualisieren.

Hinweis: Die Operator-Konsole benötigt Root-Rechte, um Raw-Sockets und UDP-Port 53 zu binden.

⚠️ KRITISCH: Operative Zustandssynchronisation

Um dauerhaften Zugriff zu gewährleisten und Sitzungsverluste zu vermeiden, pivote den Agent vor dem Beenden deiner Master-Konsolen-Sitzung immer zurück in den ICMP-Modus (!I).

Die Logik: ICMP ist der „Goldene Kanal“ von Ghost-C2 – er ist zustandslos, passiv und über die Ziel-IP immer erreichbar.

Das Risiko: Der DNS-Modus basiert auf dynamischer UDP-Port-Synchronisation. Wenn die Master-Konsole im DNS-Modus geschlossen wird, bleibt der Agent in einem UDP-Hörzustand „gefangen“. Eine Wiederverbindung würde erfordern, den spezifischen ephemeren Port des Agents zu kennen, der beim Neustart des Masters verloren geht.

Faustregel

  1. !I (Zu ICMP wechseln)
  2. Eingabeaufforderung verifizieren
  3. Ctrl+C (Master beenden)

Empirische Ergebnisse

Getestet in einer kontrollierten Laborumgebung mit aktiver Verkehrsinspektion:

TestErgebnis
Suricata v8.0.3 (Emerging-Threats-Regelsatz)✅ Umgangen
Suricata v8.0.3 (Benutzerdefinierte ICMP-Payload-Regeln)✅ Umgangen
DigitalOcean-FRA1-Gateway✅ 100 % Exfiltration-Erfolg
Bei ~25 KB Exfiltration erzeugte Alerts0

Syscall-Referenz

Ghost-C2 interagiert direkt mit dem Linux-Kernel:


Roadmap

✅ Abgeschlossen in v3.6.3

  • RFC-1035-konforme DNS-Header (Transaction ID, QTYPE A, QDCOUNT)
  • Base32-RFC-4648-Kodierung (ersetzt rohes Hex)
  • Per-Paket-Domain-Rotation (5-Einträge-CDN-Pool)
  • Wireshark-Warnungen „Malformed Packet“ eliminiert

v3.6.4 — DNS-Antwortsimulation

  • Master und Agent werden nach jeder Abfrage synthetische A-Record-Antworten zurückgeben (QR=1, RCODE=0, ANCOUNT=1)
  • Eliminiert die Anomalie unbeantworteter Abfragen, die von ML-basiertem NDR erkannt wird (Darktrace, ExtraHop)
  • Verbleibende Lücke zwischen regelbasiertem Bypass und vollständiger ML-Evasion

v4.0 — Autoritatives DNS-Routing & asynchrones Beaconing

  • Payloads über öffentliche ISP-DNS-Caches zu einem C2-autoritativen Nameserver leiten (echte DNS-Infrastruktur)
  • Randomisierter Nonce vor jeder Subdomain-Abfrage, um DNS-Caching-Drops zu verhindern
  • Vollständiges asynchrones Jitter mit variablen Beacon-Intervallen

v4.x — MAC-Bypass-Forschung

  • AppArmor-/SELinux-beschränkten Prozess-Bypass per ROP-basierter Ausführung (Living off the Land)
  • Dynamische ASLR-Überwindung, um mprotect-Abhängigkeiten zu eliminieren

Warum kein interaktives TTY?

Das Fehlen einer PTY ist eine architektonische Entscheidung, keine Einschränkung:

  • Protokollintegrität: ICMP und DNS sind zustandslos/asymmetrisch. Die Emulation einer TCP-ähnlichen geordneten Zustellung für einen TTY-Stream würde die Codebasis aufblähen und das schlanke Design zerstören.
  • Volumetrische Tarnung: Eine interaktive Shell erzeugt bei jedem Tastendruck Datenverkehr und erzeugt so einen erkennbaren Frequenzanstieg.
  • EDR-Angriffsfläche: Die Zuweisung einer PTY erfordert /dev/ptmx- und ioctl-Aufrufe, die von EDRs stark überwacht werden.

Ghost-C2 ist ein hyperstealthy Implantat zur Befehlsausführung und Exfiltration. Interaktivität tauscht Unsichtbarkeit gegen Bequemlichkeit – dieses Projekt hat sich für Unsichtbarkeit entschieden.


Mitwirken

Beabsichtigt werden Pull Requests und Forks strikt ignoriert. Die Architektur dieses Projekts wird direkt vom Autor gepflegt. Wenn du einen Fehler, einen Logikfehler oder einen Feature-Wunsch findest, öffne bitte ein Issue. Bleibe objektiv und technisch.


Ressourcen

  • Blog / Technischer Artikel: netacoding.com/posts/icmp-ghost
  • Autor: github.com/JM00NJ
  • Verwandte Ressource: netacoding.com/posts/compressdpcm-rle

💖 Projekt unterstützen

Ghost-C2 wurde mit Leidenschaft, Schweiß und reinem x64-Assembly gebaut. Wenn dir dieses Projekt geholfen hat, Low-Level-Evasion, Protokoll-Nachahmung zu verstehen oder deine Red-Teaming-Operationen reibungsloser zu machen, erwäge, die Entwicklung zu unterstützen!

👉 Werde Sponsor auf GitHub


⚖️ Haftungsausschluss & Lizenz (AGPL-3.0)

Ghost-C2 wird streng für Bildungszwecke, Reverse Engineering und autorisierte Cybersicherheitsforschung entwickelt.

Ab Version 3.6.1 steht dieses Projekt unter der GNU Affero General Public License v3.0 (AGPLv3). Jede Entität, die mit dieser Software über ein Netzwerk interagiert oder sie modifiziert, muss ihren vollständigen Quellcode offenlegen, wie es die Lizenz vorschreibt. Kommerzielle Ausbeutung oder Integration in proprietäre/Closed-Source-Plattformen ist strikt untersagt.

Copyright (c) 2026 JM00NJ (commSync). Alle Rechte vorbehalten.

Der Autor ist nicht verantwortlich für eine illegale Nutzung oder Schäden, die durch dieses Tool verursacht werden. Nutzung auf eigene Gefahr.

Tool herunterladen
SyscallNummerVerwendung
sys_socket41Erstellung von Raw-ICMP-/UDP-Sockets
sys_recvfrom45Passive ICMP/UDP-Paketerfassung
sys_sendto44Senden von ICMP/UDP-Antworten
sys_bind49UDP-DNS-Portbindung
sys_memfd_create319Anonyme RAM-Datei für Ausgabe
sys_dup233stdout/stderr-Umleitung
sys_execve59Ausführung von Shell-Befehlen
sys_fork57Prozessisolierung
sys_ptrace101Prozessinjektion + Anti-Debugging
sys_getdents64217/proc-Verzeichnisparsing
sys_mmap9Remote-Speicherzuteilung
sys_mprotect10W^X-Berechtigungswechsel