Назад к обновлениям
New releaseJul 26, 2026

emp3r0r v4.7.1

Самовосстанавливающаяся Gossip Mesh C2 с поддержкой обнаружения пиров, кроссплатформенное выполнение BOF и скриптовые агенты.

Поделиться
emp3r0r

emp3r0r

Самоисцеляющаяся gossip-сеть C2 с автоматическим обнаружением пиров, кроссплатформенным выполнением BOF и скриптуемыми агентами.


Discord GitHub Sponsors

GitHub go.mod Go version Tests GitHub License GitHub release


Screenshot From 2026-08-26 14-20-24

Что такое emp3r0r?

emp3r0r — это продвинутый фреймворк пост-эксплуатации и система управления и контроля (C2) с нулевым доверием, предназначенная для целевых сред Linux и Windows. Созданный с нуля для работы в средах с высокими требованиями безопасности, emp3r0r сочетает автономную gossip-сеть mesh, бесфайловое выполнение только в памяти, кроссплатформенную загрузку BOF, передачу файлов между агентами и скриптуемые агенты в памяти, обеспечивая превосходную скрытность, операционный контроль и операционную безопасность (OPSEC).


Ключевые особенности и уникальные возможности

🐍 Скриптуемые агенты (встроенный движок Starlark и прокси Win32 API)

Агенты emp3r0r оснащены встроенным скриптовым движком Starlark (диалект Python, реализованный чисто на Go). Скрипты выполняются бесфайлово в памяти без необходимости установки Python, Bash или PowerShell на целевой системе.

  • Ноль зависимостей от хоста: Выполняет автономные скрипты без запуска командных интерпретаторов (/bin/sh, powershell.exe) или использования установленных сред выполнения.
  • Встроенные Go API агента: Доступные функции для операций с файловой системой (read_file, write_file, list_dir, mkdir, remove, exists), HTTP-сетевых операций (http_get, http_post), выполнения команд (exec_cmd) и хеширования (crypto_hash).
  • Динамический прокси Win32 API: На целевых системах Windows скрипты Starlark могут динамически загружать системные DLL и выполнять нативные Win32 API (win_call, win_alloc, win_free, win_read_mem) непосредственно из кода скрипта без компиляции нативного кода C.
  • Модульная интеграция: Скрипты Starlark определяются с помощью JSON-манифестов (config.json) для бесшовного разбора параметров CLI и распространения.

Почему это важно: Традиционные скриптовые модули C2 требуют интерпретаторов хоста или порождения процессов, оставляя тяжелые следы на диске или в выполнении команд. Скриптуемые агенты emp3r0r выполняют сложную логику полностью в памяти с нативным взаимодействием с системой.


🔐 Криптографическое закрепление идентичности TOFU

emp3r0r обеспечивает Trust-On-First-Use (TOFU) со строгим закреплением UUID и открытого ключа при регистрации агента.

  • Неизменяемая привязка: После регистрации UUID агента закрепляется за его криптографическим открытым ключом. Повторная регистрация с изменёнными учётными данными отклоняется как попытка подмены.
  • Контролируемый сброс: Де-регистрация требует явной авторизации оператора через forget_agent.

Почему это важно: Предотвращает перехват сессий, клонирование агентов и незаметный дрейф идентичности в операционных средах.


🔒 Совершенная прямая секретность (PFS)

Все коммуникации C2 и пиров обеспечивают обмен ключами ECDH с сеансовыми ключами, производными через HKDF.

  • Эфемерные ключи: Каждая сессия генерирует уникальные ключи шифрования.
  • Развязанная безопасность: Компрометация долгосрочных ключей или отдельного агента не может скомпрометировать прошлые или параллельные коммуникации.

Почему это важно: Предотвращает ретроспективную расшифровку перехваченных сетевых данных.


🕸️ Автономная P2P gossip-сеть mesh

Агенты в сегментах сети с ограниченным исходящим трафиком или изолированных сегментах автономно обнаруживают пиров и туннелируют трафик через gossip-сеть mesh (на основе Memberlist).

  • Подключаемые пировые транспорты: Поддержка камуфляжного mTLS 1.3 (с использованием эфемерных сертификатов) и KCP (надёжный UDP).
  • Сквозное шифрование: Все межпировые переходы mesh обёрнуты в шифрование AES-GCM.
  • Низкий сетевой след: Прямая ретрансляция между агентами устраняет ненужный широковещательный шум и централизованные узкие места подключения к C2.

Почему это важно: Перемещение между сегментированными сетями происходит автономно без постоянного вмешательства оператора или статических прокси-настроек.


📂 P2P-файловая система

Прямой обмен файлами между агентами через P2P-ретрансляционный транспорт (mTLS/KCP) для ускорения доставки файлов во внутренних сетях.

  • Зашифрованные P2P-туннели: Туннелирование передачи через пиров с использованием mTLS/KCP для обхода ограничений исходящего трафика и снижения узких мест пропускной способности центрального C2.
  • Умное кэширование файлов в памяти: Файлы кэшируются в памяти агента как зашифрованные блобы; их можно бесшовно предоставлять другим агентам для загрузки по требованию. При запросе файла агенты сначала проверяют свою локальную memfs, затем других пиров и, наконец, C2.
  • Автоматический откат на ретрансляцию C2: Если целевой пир не имеет запрошенного файла, он динамически загружает и передаёт его с сервера C2 по требованию.

Почему это важно: Прямой обмен файлами между агентами максимизирует скорость передачи, обходит сетевые узкие места и снижает видимость прямого трафика C2.


📡 Многопротокольные слушатели и подключаемые стейджеры

Гибкие загрузчики-стейджеры Stage 0 и протокольные слушатели для первоначального доступа и доставки полезной нагрузки.

  • Многопротокольные слушатели: Встроенные и автономные HTTP, TCP и UDP слушатели с надёжной кадровой синхронизацией с подтверждением последовательности и настраиваемыми HTTP-профилями. Автономный слушатель поддерживает опциональный TLS (-tls), автоматически генерируя самоподписанный сертификат, если пара сертификат/ключ не предоставлена.
  • Автономный C-стейджер загрузчик: Создан с прямыми системными вызовами Linux, независимыми от libc, для совместимости с различными дистрибутивами без ошибок символов.
  • Зашифрованная доставка этапа: Слушатель шифрует подготовленную полезную нагрузку с помощью RC4, используя ключ, производный от секрета, предоставленного оператором; стейджер расшифровывает её в памяти перед рефлексивной загрузкой.
  • Подключаемые транспорты стейджеров: Модульная транспортная система, позволяющая операторам добавлять пользовательские C-модули транспорта (transport_<name>.c). Встроенные автономные варианты включают HTTP, TCP и UDP через прямые системные вызовы, а также транспорты динамических библиотек (например, libcurl через разрешение символов во время выполнения).
    • Преимущества: Обход фильтрации исходящего трафика и сетевого обнаружения путём бесшовного смешивания трафика с легитимными системными каналами (например, нативный libcurl или пользовательские реализации протоколов) без изменения основной логики стейджера.
  • Подключаемые самораспаковывающиеся упаковщики: Расширяемый интерфейс модулей заглушек и упаковщиков (pack_<name>.py + unpack_stub_<name>.c). Операторы могут писать пользовательские алгоритмы упаковки/обфускации (встроенные варианты включают потоковое шифрование RC4 и жадное сжатие LZSS) с автоматическим патчингом заголовков во время выполнения.
    • Преимущества: Ломает статические правила YARA и сопоставление сигнатур AV/EDR путём шифрования/сжатия полезной нагрузки Stage 0 уникальными ключами или алгоритмами, самораспаковки в память чтения/записи, которая затем переключается на чтение/выполнение перед выполнением.
  • Минимальный размер полезной нагрузки: Хотя бинарные файлы агентов emp3r0r составляют ~20MB без сжатия, этот стейджер имеет размер 2KB; полезная нагрузка в стиле sRDI, которую он получает от слушателя emp3r0r, составляет ~8MB (сжата из бинарного файла агента в формате ELF shared object).
  • Гибкие форматы: Компилируется в сырой позиционно-независимый шеллкод (.bin), самораспаковывающийся упакованный шеллкод (packed), автономные ELF-исполняемые файлы или shared objects (.so).
  • Укрепление в памяти: Выделяет память этапа чтение/запись, де-обфусцирует полезные нагрузки, затем обеспечивает чтение/выполнение перед рефлексивной загрузкой. Самораспаковщик никогда не отображает RWX (чтение/запись → распаковка → чтение/выполнение), а изменяемое состояние стейджера находится в выделенной странице чтения/записи, а не в записываемом коде.

🧩 Нативная кроссплатформенная поддержка BOF и PICO (COFF, ELF и PICO)

Выполнение бинарных модулей в памяти на целевых системах Windows и Linux:

  • Загрузчики Windows COFF: Запуск Windows BOF-бинарников бесфайлово с типизированной упаковкой параметров (int, short, cstr, wstr, binary).
  • Загрузчики Linux ELF-объектов: Загрузка ELF-перемещаемых объектных файлов (.o) непосредственно в память агента на Linux.
  • Модули PICO Crystal-Kit и спуфинг стека: Интегрированные загрузчики и упаковщики PICO (Position-Independent Code Object) с десинхронизатором стека вызовов SilentMoonwalk для продвинутого уклонения.
  • Встроенные наборы BOF: Встроенная поддержка коллекций модулей Kerbeus-BOF, Remote-OPs и Situational Awareness (SA).

Почему это важно: Устраняет накладные расходы на создание процессов и обходит мониторинг командной строки и стека вызовов путём выполнения скомпилированных C-модулей в процессе со спуфингом стека вызовов.


🔑 Манипуляция токенами Windows по требованию

Агенты на Windows могут красть, кэшировать и олицетворять токены доступа из запущенных процессов — полностью в процессе с использованием косвенных NT-сисвызовов.

  • Кража и кэширование: steal_token --pid <PID> дублирует токен процесса через NtOpenProcess + NtDuplicateToken и сохраняет его в памяти по SID. Опционально можно объединить олицетворение с --token <sid> для эскалации от одной украденной личности к другой.
  • Перечисление: list_tokens отображает все кэшированные токены с именами DOMAIN\User (SID).
  • Универсальное олицетворение: Ссылка на кэшированный токен по SID (--token <sid>) в любом модуле — Go, Starlark, COFF/BOF. Олицетворение на уровне потока (NtSetInformationThread) применяется вокруг чувствительных операций.
  • Starlark с учётом токенов: Встроенные функции (read_file, write_file, exec_cmd, прокси Win32 API и т.д.) автоматически олицетворяют личность при каждом сисвызове, когда установлен токен, а exec_cmd может порождать дочерние процессы под украденной личностью через CreateProcessWithTokenW.

Почему это важно: Никаких внешних инструментов, никаких артефактов на диске, никакого шума от создания процессов. Кража и повторное использование токенов происходят полностью в процессе с использованием косвенных сисвызовов, а украденные токены немедленно доступны каждому встроенному модулю.


🎭 Подключаемый транспорт C2, обход JA3 через uTLS и протокол CBOR

  • Гибкие режимы C2: Гибкий бикинг (http_poll) с изменяемыми HTTP-профилями и потоковая передача (h2conn) через HTTP/2.
  • Рандомизация сигнатуры JA3: Использует uTLS для рандомизации отпечатков TLS Client Hello, обходя статические сетевые сигнатуры.
  • Бинарный проводной протокол: Использует CBOR (Concise Binary Object Representation) для всех управляющих данных и проводной сериализации, уменьшая размер сетевых полезных нагрузок на 30-40% по сравнению с JSON.

💾 Зашифрованное хранилище с приоритетом памяти

  • Зашифрованная виртуальная файловая система в памяти: Все операции с файлами агента используют виртуальную файловую систему AES-GCM в памяти. Большие данные автоматически выгружаются в зашифрованное дисковое хранилище без идентифицируемых заголовков или расширений.
  • Умное кэширование на основе P2P: Каждый агент с поддержкой P2P кэширует файлы, полученные от C2, в memfs; затем делает их доступными для других пиров, минимизируя след трафика C2 и используя быстрые межпировые соединения.

Быстрый старт

1. Установка сервера C2

Для сборки emp3r0r требуется Docker или Podman на хосте. Локальный инструментарий Go не требуется.

# Клонирование репозитория
git clone --depth=1 https://github.com/jm33-m0/emp3r0r.git && cd emp3r0r

# Сборка внутри контейнера и локальная установка
./install.py

Установщик компилирует основные бинарные файлы внутри одноразового контейнера, генерирует предварительно скомпилированный emp3r0r-operator-kit.tar.zst, настраивает требуемые возможности Linux (setcap) и создаёт системные каталоги времени выполнения.

Параметры:

./install.py [--debug] [--disable-garble] [--prefix /usr/local] [--skip-build] \
  [--lightweight] [--targets linux/amd64,windows/amd64]

Используйте --lightweight для сборки только целей linux/amd64 и windows/amd64 exe/dll (самый быстрый вариант для развёртываний только на x86-64), или --targets OS/ARCH,... для компиляции конкретного набора типов полезных нагрузок.

Запуск сервера C2:

emp3r0r server --c2-hosts 1.2.3.4 --http-port 12345 --operator-port 13377

Примечание: Если установка выполнена пользователем root вместо стандартного sudo, ваш текущий пользователь может не иметь возможности запустить emp3r0r, так как права не могут быть корректно установлены установщиком. Это также относится к вашим операторским машинам.


2. Настройка операторской машины

Перенесите сгенерированный emp3r0r-operator-kit.tar.zst на вашу операторскую машину и запустите установщик:

tar --zstd -xpf emp3r0r-operator-kit.tar.zst
cd ./emp3r0r-operator-kit && ./install.py

Подключите операторский клиент к серверу C2, используя учётные данные WireGuard-туннеля, выведенные сервером:

emp3r0r client --c2-port 13377 \
  --server-wg-key '<SERVER_WG_KEY>' \
  --server-wg-ip '<SERVER_WG_IP>' \
  --operator-wg-ip '<OPERATOR_WG_IP>' \
  --operator-wg-key '<OPERATOR_WG_KEY>' \
  --c2-host 1.2.3.4

3. Генерация полезных нагрузок агентов

Используйте команду generate в интерфейсе оператора emp3r0r для создания полезных нагрузок.

Прямой агент C2:

generate --type linux_executable --arch amd64 --cc your.domain.com

Агент-шлюз mesh:

generate --type linux_executable --arch amd64 --cc your.domain.com \
  --p2p --direct-c2 --p2p-transport mtls

Промежуточный пир mesh:

generate --type linux_executable --arch amd64 --cc your.domain.com \
  --p2p --p2p-transport mtls --peers 1.2.3.4

Документация и ресурсы


Поддержка разработки

Если emp3r0r оказался полезным в ваших исследованиях и тестировании безопасности, рассмотрите возможность поддержки его дальнейшего развития через GitHub Sponsors.

Категории