Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
ICMP-Ghost-A-Fileless-x64-Assembly-C2-Agent — Бесфайловый C2-фреймворк на ассемблере x64 с двухканальным пивотингом по протоколам ICMP/DNS, прямым выполнением системных вызовов и внедрением в процессы на основе ptrace для скрытого выполнения команд и эксфильтрации данных. | Kitploit
Инструменты/GitHubGitHub/jm00nj/icmp-ghost-a-fileless-x64-assembly-c2-agent
Повышение привилегийФреймворки для эксплойтовОбход IDS/IPSШелл-кодПост-эксплуатацияКомандование и УправлениеRed TeamingРазработка Полезной Нагрузки

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
GitHub
jm00nj/icmp-ghost-a-fileless-x64-assembly-c2-agent

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

Бесфайловый C2-фреймворк на ассемблере x64 с двухканальным пивотингом по протоколам ICMP/DNS, прямым выполнением системных вызовов и внедрением в процессы на основе ptrace для скрытого выполнения команд и эксфильтрации данных.

РепозиторийСайт
8818419 дней назадПроверено Kitploit
root@kitploit:~
 ________  ___  ___  ________  ________  _________       ________  ________   
|\   ____\|\  \|\  \|\   __  \|\   ____\|\___   ___\    |\   ____\|\_____  \  
\ \  \___| \ \  \\\  \ \  \|\  \ \  \___|\|___ \  \_|    \ \  \___|\|____|\  \ 
 \ \  \  __ \ \   __  \ \  \\\  \ \_____  \   \ \  \      \ \  \     ____\_\  \
  \ \  \|\  \ \  \ \  \ \  \\\  \|____|\  \   \ \  \      \ \  \___|\____ \  \
   \ \_______\ \__\ \__\ \_______\____\_\  \   \ \__\      \ \______\\_________\
    \|_______|\|__|\|__|\|_______|\_________\   \|__|       \|______\|_________|
                                 \|_________|                                   

Бесфайловый C2-имплант на чистом x64 Assembly, использующий двухканальную архитектуру (ICMP / DNS). Ноль libc. Ноль на диске. Невидим для стандартных EDR-хуков.


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

Ghost-C2

Обзор

⭐️ Если вы считаете это исследование полезным, пожалуйста, поставьте звёздочку, чтобы поддержать дальнейшую разработку

🚨 ПОЛНОЕ ТЕХНИЧЕСКОЕ ИССЛЕДОВАНИЕ И ИСХОДНЫЙ КОД: Этот репозиторий — краткая сводка. Полное описание архитектуры, детали обхода памяти 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.

Этот проект создан, чтобы исследовать, насколько далеко можно продвинуться в скрытности пользовательского пространства и синхронизации состояния сети, не затрагивая ядро.


Архитектура

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

Компоненты

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-конечного автомата. После внедрения корректно завершает работу, не оставляя следов.


Техники скрытности и обхода

Двухканальное переключение протоколов (ICMP ↔ DNS)

Ghost-C2 v3.6.2 позволяет оператору «горячо» менять сетевой протокол без потери агента. При отправке специальных команд переключения VTable как на стороне Master, так и на стороне Agent динамически перезаписываются:

  • !D (переключение на DNS): Оба узла закрывают ICMP-сокеты и инициализируют связь через UDP-порт 53. Идеально для обхода строгой фильтрации Layer 3 за счёт маскировки под корпоративный DNS-трафик.
  • !I (переключение на ICMP): Агент закрывает UDP-сокеты, убивает привязки портов и возвращается в режим бесшумного сниффинга raw-сокетов. Идеально для «фантомного» режима скрытности.

Гибридный x64-компрессор DPCM-RLE

Движок передачи данных Ghost-C2 использует гибридный уровень сжатия и кодирования, сильно оптимизированный на x86-64 Assembly.

  • DPCM (Differential Pulse Code Modulation): Вычисляет и передаёт математическую разность (дельту) между опорным символом и последующими, снижая энтропию данных.
  • RLE (Run-Length Encoding): Упаковывает подряд идущие пробелы и повторяющиеся блоки на битовом уровне.
  • Результат: сокращает общий объём полезной нагрузки на 40–55%, уменьшая сетевой след и количество внедряемых пакетов.

Имитация протокола ICMP

Каждый исходящий ICMP-пакет структурирован так, чтобы его нельзя было отличить от стандартного Linux ping:

  • Динамические RDTSC-метки времени имитируют struct timeval.
  • Точное заполнение Linux iputils (0x10 – 0x1F) обходит базовые эвристические файрволы.

Шифр Rolling XOR

Оба направления шифруются прогрессивно сдвигаемым QWORD-ключом. Это сохраняет низкую энтропию Шеннона (в отличие от AES с показателем ~8.0, вызывающим аномалии DPI). Rolling XOR даёт энтропию, похожую на естественный шум. Никаких криптографических констант, никаких S-блоков — YARA не за что зацепиться.

Асимметричная аутентификация

Имплант игнорирует все ICMP-пакеты, где ID + SEQ ≠ 45,000. Имплант отвечает пакетами, где ID + SEQ = 55,000. Это предотвращает путаницу с эхо-ответами ОС и отсеивает интернет-сканеры и honeypot-ловушки.

Бесфайловое выполнение через memfd_create

Вывод команд никогда не касается диска. Вывод оболочки захватывается через анонимный RAM-файл (memfd_create), названный [shm], чтобы сливаться с легитимными отображениями общей памяти в /proc/PID/fd.

Внедрение в память W^X (Phantom Loader)

Обходит современные защитные механизмы ядра, запрещающие RWX-память. Загрузчик использует двухфазный подход (Remote mmap с RW → Inject → Remote mprotect с RX). Ни одна страница никогда не является одновременно W и X.

Обфускация системных вызовов без libc

Все номера системных вызовов разделены на две инструкции для обхода статического анализа и простых сканеров на основе grep.


Подготовка к применению: настройка и сборка агента

Для соблюдения строгих требований OPSEC агент Ghost-C2 (sniff.asm) не использует внешние конфигурации. Вы должны определить IP-адрес Master C2, порт и фиктивный DNS-домен непосредственно в ассемблерном коде перед компиляцией и внедрением.

Шаг 1: Настройка переменных OPSEC

Откройте sniff.asm и прокрутите до самого низа сегмента .text. (Примечание: поскольку агент является строго позиционно-независимым кодом (PIC), сегмента .data не существует. Все конфигурационные переменные хранятся инлайн.)

Измените следующие значения в соответствии с вашим Master-сервером:

  • IP-адрес: Замените db 127, 0, 0, 1 на IP вашего Master.
  • UDP-порт: Замените dw 0xB414 (порт 5300) на нужный порт в сетевом порядке байт (например, 0x3500 для порта 53).

Шаг 2: Сборка в «сырой» шеллкод

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

Шаг 3: Форматирование шеллкода

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

Шаг 4: Шифрование полезной нагрузки (Rolling XOR)

  1. Скопируйте содержимое сгенерированного c2_payload.txt.
  2. Откройте xor.py и замените содержимое переменной raw_asm на скопированный шеллкод.
  3. Выполните python3 xor.py и скопируйте зашифрованный вывод.

Шаг 5: Внедрение в Phantom Loader

  1. Откройте loader.asm.
  2. Найдите метку c2_payload:.
  3. Удалите существующий заполнитель и вставьте зашифрованный шеллкод прямо под метку.
  4. (Необязательно: измените процесс-цель для внедрения, изменив target db "cron", 10).

Шаг 6: Компиляция финального загрузчика

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

Выполните на целевой машине с root-правами (sudo ./loader). Теперь агент работает полностью бесфайлово.


Настройка консоли оператора (client.asm)

Перед компиляцией консоли Master убедитесь, что профили её слушателя и цели совпадают с конфигурацией агента. Откройте client.asm и перейдите к области .data.

Шаг 1: Настройка порта прослушивания

Найдите master_bind_addr. Здесь Master прослушивает входящие DNS-маяки.

UDP-порт: Замените dw 0xB414 на порт, на который отправляет ваш агент.

Примечание: порт должен быть указан в сетевом порядке байт. Для порта 53 используйте 0x3500.

Шаг 2: Настройка порта переключения/переподключения

Найдите target_addr. Этот порт используется при DNS-переключении (!D) или использовании модуля Reconnect.

Согласование портов: Измените dw 0xB414, чтобы он совпадал с UDP-портом, который слушает агент. Если порты не совпадают, возникает (Deadlock): Master будет кричать не туда.

Шаг 3: Сборка консоли

После настройки соберите и слинкуйте Master:

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

💡 Совет по OPSEC для пользователей

Совет: всегда держите «профильный лист» для вашей операции. Если вы меняете порт на 0x3500 (порт 53) в sniff.asm, вы ОБЯЗАНЫ обновить и master_bind_addr, и target_addr в client.asm до начала операции.

Примечание: консоль оператора требует root-прав для привязки raw-сокетов и UDP-порта 53.

⚠️ КРИТИЧЕСКИ ВАЖНО: синхронизация состояния операции

Чтобы обеспечить постоянный доступ и не потерять сессию, всегда переключайте агента обратно в режим ICMP (!I) перед завершением сессии консоли Master.

Логика: ICMP — это «золотой канал» Ghost-C2 — он не имеет состояния, пассивен и всегда доступен через IP цели.

Риск: режим DNS полагается на динамическую синхронизацию UDP-портов. Если консоль Master закрыта в режиме DNS, агент остаётся «запертым» в состоянии прослушивания UDP. Для восстановления соединения потребуется знать конкретный эфемерный порт агента, который теряется при перезапуске Master.

Практическое правило

  1. !I (переключение на ICMP)
  2. Проверьте приглашение командной строки
  3. Ctrl+C (выход из Master)

Экспериментальные результаты

Протестировано в контролируемой лабораторной среде с активной инспекцией трафика:

ТестРезультат
Suricata v8.0.3 (набор правил Emerging Threats)✅ Обход
Suricata v8.0.3 (пользовательские правила ICMP-полезной нагрузки)✅ Обход
Шлюз DigitalOcean FRA1✅ 100% успешная эксфильтрация
Оповещений при эксфильтрации ~25 КБ0

Справочник системных вызовов

Ghost-C2 взаимодействует напрямую с ядром Linux:


Дорожная карта

✅ Завершено в v3.6.3

  • DNS-заголовки, совместимые с RFC 1035 (Transaction ID, QTYPE A, QDCOUNT)
  • Кодирование Base32 по RFC 4648 (заменяет сырой hex)
  • Ротация доменов для каждого пакета (пул из 5 CDN-записей)
  • Устранены предупреждения Wireshark «Malformed Packet»

v3.6.4 — симуляция DNS-ответов

  • Master и агент будут возвращать синтетические ответы A-записей (QR=1, RCODE=0, ANCOUNT=1) после каждого запроса
  • Устраняет аномалию безответных запросов, обнаруживаемую NDR на основе машинного обучения (Darktrace, ExtraHop)
  • Оставшийся разрыв между обходом на основе правил и полным обходом с помощью ML

v4.0 — авторитативная DNS-маршрутизация и асинхронный маяк

  • Маршрутизация полезной нагрузки через публичные DNS-кэши провайдеров к авторитативному C2-неймсерверу (реальная DNS-инфраструктура)
  • Случайный nonce перед каждым запросом поддомена для предотвращения выпадения из DNS-кэша
  • Полный асинхронный джиттер с переменными интервалами маяков

v4.x — исследование обхода MAC

  • Обход процессов, ограниченных AppArmor/SELinux, через ROP-исполнение (Living off the Land)
  • Динамический обход ASLR для устранения зависимостей от mprotect

Почему нет интерактивного TTY?

Отсутствие PTY — это архитектурное решение, а не ограничение:

  • Целостность протокола: ICMP и DNS не имеют состояния / асимметричны. Эмуляция упорядоченной доставки, как в TCP, для TTY-потока раздула бы кодовую базу и разрушила лёгкую архитектуру.
  • Объёмная скрытность: Интерактивная оболочка генерирует трафик на каждое нажатие клавиши, создавая заметный всплеск частоты.
  • Поверхность EDR: Выделение PTY требует /dev/ptmx и вызовов ioctl, за которыми EDR-системы пристально следят.

Ghost-C2 — это сверхскрытный имплант для выполнения команд и эксфильтрации. Интерактивность обменивает невидимость на удобство — этот проект выбрал невидимость.


Вклад в проект

По замыслу, Pull Request'ы и форки строго игнорируются. Архитектура этого проекта поддерживается непосредственно автором. Если вы нашли баг, логическую ошибку или у вас есть предложение по функциональности, пожалуйста, откройте Issue. Держите его объективным и техническим.


Ресурсы

  • Блог / техническое описание: netacoding.com/posts/icmp-ghost
  • Автор: github.com/JM00NJ
  • Связанный ресурс: netacoding.com/posts/compressdpcm-rle

💖 Поддержите проект

Ghost-C2 создан со страстью, потом и чистым x64 Assembly. Если этот проект помог вам понять низкоуровневые методы обхода, имитацию протоколов или просто сделал ваши операции red team более гладкими, поддержите разработку!

👉 Станьте спонсором на GitHub


⚖️ Отказ от ответственности и лицензия (AGPL-3.0)

Ghost-C2 разработан строго в образовательных целях, для обратной разработки и авторизованных исследований в области кибербезопасности.

Начиная с версии 3.6.1 и далее, этот проект распространяется под лицензией GNU Affero General Public License v3.0 (AGPLv3). Любая организация, взаимодействующая с этим ПО или модифицирующая его через сеть, обязана раскрыть свой полный исходный код, как того требует лицензия. Коммерческая эксплуатация или интеграция в проприетарные/закрытые платформы строго запрещены.

Copyright (c) 2026 JM00NJ (commSync). Все права защищены.

Автор не несёт ответственности за любое незаконное использование или ущерб, причинённый этим инструментом. Используйте его на свой страх и риск.

Скачать инструмент
Системный вызовНомерНазначение
sys_socket41Создание raw-сокета ICMP/UDP
sys_recvfrom45Пассивный захват ICMP/UDP-пакетов
sys_sendto44Передача ICMP/UDP-ответов
sys_bind49Привязка UDP DNS-порта
sys_memfd_create319Анонимный RAM-файл для вывода
sys_dup233Перенаправление stdout/stderr
sys_execve59Выполнение команд оболочки
sys_fork57Изоляция процессов
sys_ptrace101Внедрение в процессы + анти-отладка
sys_getdents64217Разбор каталога /proc
sys_mmap9Выделение удалённой памяти
sys_mprotect10Переключение прав W^X