
emp3r0r v4.7.1
Самовосстанавливающаяся Gossip Mesh C2 с поддержкой обнаружения пиров, кроссплатформенное выполнение BOF и скриптовые агенты.
emp3r0r
Самоисцеляющаяся gossip-сеть C2 с автоматическим обнаружением пиров, кроссплатформенным выполнением BOF и скриптуемыми агентами.
Что такое 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
Документация и ресурсы
- 📝 Политика безопасности: SECURITY.md
- 📜 Журнал изменений: CHANGELOG.md
- 🛠️ Руководство по разработке модулей: core/modules/module_development_guide.md
Поддержка разработки
Если emp3r0r оказался полезным в ваших исследованиях и тестировании безопасности, рассмотрите возможность поддержки его дальнейшего развития через GitHub Sponsors.