
Бесфайловый C2-фреймворк на ассемблере x64 с двухканальным пивотингом по протоколам ICMP/DNS, прямым выполнением системных вызовов и внедрением в процессы на основе ptrace для скрытого выполнения команд и эксфильтрации данных.
________ ___ ___ ________ ________ _________ ________ ________
|\ ____\|\ \|\ \|\ __ \|\ ____\|\___ ___\ |\ ____\|\_____ \
\ \ \___| \ \ \\\ \ \ \|\ \ \ \___|\|___ \ \_| \ \ \___|\|____|\ \
\ \ \ __ \ \ __ \ \ \\\ \ \_____ \ \ \ \ \ \ \ ____\_\ \
\ \ \|\ \ \ \ \ \ \ \\\ \|____|\ \ \ \ \ \ \ \___|\____ \ \
\ \_______\ \__\ \__\ \_______\____\_\ \ \ \__\ \ \______\\_________\
\|_______|\|__|\|__|\|_______|\_________\ \|__| \|______\|_________|
\|_________|
Бесфайловый C2-имплант на чистом x64 Assembly, использующий двухканальную архитектуру (ICMP / DNS). Ноль libc. Ноль на диске. Невидим для стандартных EDR-хуков.
⭐️ Если вы считаете это исследование полезным, пожалуйста, поставьте звёздочку, чтобы поддержать дальнейшую разработку
🚨 ПОЛНОЕ ТЕХНИЧЕСКОЕ ИССЛЕДОВАНИЕ И ИСХОДНЫЙ КОД: Этот репозиторий — краткая сводка. Полное описание архитектуры, детали обхода памяти W^X и реализация VTable доступны на официальной странице проекта: ICMP-Ghost Technical Breakdown
Ghost-C2 — это C2-фреймворк, написанный полностью на чистом x64 Linux Assembly без зависимостей от libc. Каждая операция выполняется через прямые системные вызовы. Нет таблиц импорта, нет артефактов динамического линковщика и нет записи на диск.
Изначально созданный как скрытый ICMP-канал, версия 3.6.2 представляет архитектуру двухканального переключения протоколов (Dual-Channel Protocol Pivoting). Оператор может на лету переключать канал связи импланта между бесшумными raw-сокетами ICMP и маскирующимся DNS UDP-туннелированием. Имплант живёт исключительно в RAM, внедряясь в работающий системный процесс с помощью кастомного загрузчика на основе ptrace.
Этот проект создан, чтобы исследовать, насколько далеко можно продвинуться в скрытности пользовательского пространства и синхронизации состояния сети, не затрагивая ядро.
┌─────────────────────────────────────────────────────────────┐
│ 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
client.asm — консоль оператораАтакующая терминальная сторона. Обрабатывает интерфейс, динамическое управление памятью и синхронизацию состояния цели. Может отправлять пакеты как ICMP Echo Request, так и DNS TXT-запросы. Слушает фрагментированные ответы, предотвращает переполнение буфера и восстанавливает вывод. Содержит модуль «Active Target Reconnection» для восстановления потерянных сессий.
sniff.asm — PIC-имплантИмплант, работающий на цели. Скомпилирован как «сырой» бинарник (позиционно-независимый, без ELF-заголовков), поэтому может быть внедрён в произвольные адреса памяти. Динамически обновляет внутренний VTable для переключения между сниффингом ICMP и привязкой UDP DNS по командам оператора на переключение протокола.
Phantom_Loader/loader.asm — механизм внедренияМеханизм доставки. Сканирует /proc, находит целевой процесс по имени comm и внедряет PIC-шеллкод в него с помощью многоступенчатого ptrace-конечного автомата. После внедрения корректно завершает работу, не оставляя следов.
Ghost-C2 v3.6.2 позволяет оператору «горячо» менять сетевой протокол без потери агента. При отправке специальных команд переключения VTable как на стороне Master, так и на стороне Agent динамически перезаписываются:
!D (переключение на DNS): Оба узла закрывают ICMP-сокеты и инициализируют связь через UDP-порт 53. Идеально для обхода строгой фильтрации Layer 3 за счёт маскировки под корпоративный DNS-трафик.!I (переключение на ICMP): Агент закрывает UDP-сокеты, убивает привязки портов и возвращается в режим бесшумного сниффинга raw-сокетов. Идеально для «фантомного» режима скрытности.Движок передачи данных Ghost-C2 использует гибридный уровень сжатия и кодирования, сильно оптимизированный на x86-64 Assembly.