Статья Разработка Red Team инструментов: от архитектуры C2-фреймворков до кастомных имплантов и обхода EDR

Исследователь безопасности со спины за тёмной рабочей станцией с тремя мониторами. Экраны светятся зелёным кодом терминала и янтарным дизассемблером в сине-угольной темноте.


Коммерческий C2-фреймворк за $10 000 в год детектируется Elastic за 12 секунд после первого callback. Кастомный имплант, написанный за три недели, живёт в сети с зрелым SOC месяцами. Разница не в бюджете. Разница в том, понимаете ли вы, как устроен loader, почему EDR видит ваш beacon, и на каком уровне абстракции вы принимаете решения о стелсе. Это карта всей дисциплины разработки offensive-инструментов: от выбора C2 до написания шеллкода, от обхода AMSI до проектирования инфраструктуры, которая переживёт активный threat hunting.

Карта темы: навигация по offensive-разработке​

#ПодтемаПодробнее
1Архитектура C2: серверная часть, транспорт, протоколыНаписание C2 фреймворка на Python: от архитектуры до обхода EDR
2Имплант и loader: стейджеры, шеллкод, injectionРазработка шеллкода: от ручного написания на ассемблере до инъекции в процесс
3Обход AV и EDR: пейлоады, шифрование, in-memory executionОбход антивируса и EDR: разработка кастомных пейлоадов
4AMSI, ETW, userland hooks, kernel callbacksПрактическое руководство для offensive-разработчика
5Bypass конкретных EDR: CrowdStrike, SentinelOne, DefenderТехники bypass CrowdStrike, SentinelOne и Defender for Endpoint
6Расширение существующих C2: BOF, агенты, плагиныBOF, агенты Mythic и плагины Sliver на практике
7Операционная реальность: Red Team против зрелого SOCКак пентестер обходит EDR и SIEM в реальных проектах

Зачем разрабатывать собственные инструменты, когда есть Cobalt Strike​

Каждый offensive-инженер в какой-то момент задаёт себе этот вопрос. Ответ не в функциях - Cobalt Strike, Brute Ratel, Nighthawk дают огромный арсенал из коробки. Проблема в другом: сигнатурность. Threat intelligence команды CrowdStrike и SentinelOne годами картографируют артефакты коммерческих C2. Каждый Malleable C2 profile, каждый паттерн beacon'а, каждый формат конфига - всё это рано или поздно превращается в detection rule.

Инженеры SECFORCE сформулировали это точнее всех: «Мы не считаем, что стандартный подход - модификация коммерческих C2 для обхода детекта - будет устойчивым в долгосрочной перспективе. Артефакты оригинального ПО всегда создают сигнатуры, и по мере улучшения эвристик эти сигнатуры будут срабатывать». Именно поэтому SECFORCE написала собственный C2 на стеке Nim + C (имплант), Go (сервер), Node.js + React (интерфейс).

Разработка red team инструментов - это не хобби-проект для GitHub. Это инженерная дисциплина, где каждое архитектурное решение - trade-off между стелсом, функциональностью и скоростью работы. Модифицируете чужой фреймворк - работаете в рамках чужих ограничений. Пишете свой - контролируете каждый байт, но платите за это временем и экспертизой.

Когда стоит писать своё, а когда - расширять существующее​

Зависит от зрелости команды и типа engagement'ов:
  • Регуляторные тестирования (TIBER, CORIE): нужна точная эмуляция TTP конкретных APT-групп - кастомная разработка даёт контроль, но BOF-модули для Cobalt Strike часто закрывают задачу быстрее
  • Red Team против зрелого SOC с CrowdStrike/SentinelOne: коммерческие C2 детектируются на уровне loader'а - нужен кастомный имплант или как минимум кастомный loader + стейджер
  • Стандартный пентест: Sliver или Mythic с правильным OpSec покрывают 90% задач без дополнительной разработки
  • Долгосрочные операции (adversary simulation, 3-6 месяцев): кастомный C2 - единственный способ пережить активный threat hunting
Разбор того, как расширять существующие фреймворки без написания C2 с нуля: Разработка расширений C2 фреймворков: BOF, агенты Mythic и плагины Sliver на практике.

7 C2-фреймворков в 2025 году: что выбрать и почему​

Выбор C2 - первое стратегическое решение в любой операции. По данным BishopFox, в 2025 году основной арсенал Red Team: Sliver, Cobalt Strike, Nighthawk, Mythic, Merlin, PoshC2, Empire. Но голый список бесполезен без понимания, чем они отличаются архитектурно и какие trade-off'ы навязывают оператору.

Коммерческие фреймворки: Cobalt Strike, Nighthawk, Brute Ratel​

Cobalt Strike остаётся индустриальным стандартом - Malleable C2 profiles, Aggressor-скрипты, Beacon с DNS/HTTPS/SMB-каналами. Главная боль - массовость: каждый EDR-вендор имеет десятки правил именно под него. Лицензия - около $3 500/год (точная цена зависит от типа лицензии и условий Fortra).

Nighthawk C2 от MDSec позиционируется как «C2 для обхода современных EDR». По данным scip.ch, стоимость - $10 000 за пользователя в год с обязательным минимумом в три лицензии (март 2025). Nighthawk автоматизирует генерацию payload'ов с встроенными evasion-стратегиями, что снижает порог входа для оператора - но и контроль над loader'ом забирает себе.

Brute Ratel ($2 500/пользователь/год, Dark Vortex, с проверкой покупателя) идёт по обратному пути: оператор обязан сам конструировать loader, получая взамен максимальную гибкость. Кривая обучения круче, но после настройки - один из лучших вариантов по evasion-возможностям. Лично я считаю, что для команд с сильным dev-составом это оптимальный выбор.

Open-source фреймворки: Sliver, Mythic, Havoc​

Sliver (BishopFox) - кросс-платформенный фреймворк на Go. Импланты поддерживают mTLS, HTTPS, DNS-транспорты. Из коробки генерирует beacon'ы для Windows, Linux, macOS. Активно развивается и используется как замена Cobalt Strike, когда бюджет на лицензии ограничен.

Mythic (Cody Thomas) - модульная архитектура с Docker-based deployment. Агенты и C2 profiles (HTTP, websocket и др.) работают как отдельные контейнеры. Главная фишка - система агентов: каждый агент - отдельный проект с собственным кодом на любом языке. Плюс аналитика из коробки: кто выполнил какую команду, когда, через какой агент. Для обучения и кастомизации - идеален.

Havoc - open-source C2 с GUI на Qt и нативным имплантом Demon на C/ASM, поддерживает Python-скриптинг для автоматизации. Проще в кастомизации, чем коммерческие аналоги, но для работы против EDR enterprise-класса требует существенной доработки напильником.

Критерии выбора: матрица оценки​

По методологии scip.ch, C2-фреймворк стоит оценивать по таблице с весовыми коэффициентами: обязательные требования (отсутствие которых даёт отрицательный балл) и дополнительные функции. Ключевые параметры:

КритерийВесЧто оценивать
ТранспортыВысокийmTLS, HTTPS, DNS, SMB, custom protocols
Evasion из коробкиВысокийAMSI/ETW bypass, sleep obfuscation, syscall proxying
РасширяемостьСреднийBOF, custom agents, API для интеграции
OpSec оператораВысокийЛогирование действий, kill dates, watermarking
Кросс-платформенностьСреднийWindows/Linux/macOS импланты
СтоимостьЗависитБюджет vs. детектируемость

Гайд по созданию C2 с нуля - Написание C2 фреймворка на Python: от архитектуры до обхода EDR.

Архитектура C2-инфраструктуры: от loader'а до teamserver'а​

C2-инфраструктура - это не один сервер с Cobalt Strike. Это многослойная архитектура, где каждый компонент делает свою работу и может быть заменён при компрометации. Типичная схема: loader → redirector → firewall/proxy → C2 server → внутренние сервисы.

Loader: первая линия взаимодействия с EDR​

Loader - компонент, который запускает шеллкод (обычно beacon) на целевой системе. Его задача проста и сложна одновременно: выполнить payload, не будучи обнаруженным. По данным scip.ch, loader может принимать разные формы: кастомный PE-файл, легитимный PE с инъектированным кодом, инсталлятор, скрипт или Office-документ с макросами.

Типичная архитектура стейджинга:
  1. Stage 1 (lightweight loader) - минимальная логика, базовые evasion-техники. Задача - установить initial access и подтянуть Stage 2
  2. Stage 2 (full loader) - основные evasion-действия: расшифровка шеллкода, injection в целевой процесс, установка связи с C2
Шеллкод обычно зашифрован и либо встроен в loader, либо загружается с внешнего ресурса, замаскированного под картинку или легитимный файл. Расшифровка - только в памяти, во время выполнения. По классификации MITRE ATT&CK это T1027 - Obfuscated Files or Information.

Redirector'ы и сетевая маскировка​

Redirector - промежуточный сервер между имплантом и C2-сервером. Задачи:
  • Скрыть реальный IP teamserver'а
  • Фильтровать нелегитимные запросы (sandbox'ы, исследователи)
  • Обеспечить отказоустойчивость: redirector сгорел - поднимаем новый, C2 жив
На практике используются Apache mod_rewrite правила, которые проксируют только запросы с корректными URI/headers на C2, а всё остальное перенаправляют на легитимный сайт. Это реализация T1090 - Proxy.

Транспортный уровень: почему HTTPS недостаточно​

Коммуникация имплант ↔ C2 строится поверх протоколов прикладного уровня (T1071 - Application Layer Protocol) с обязательным шифрованием (T1573 - Encrypted Channel). Но «HTTPS и забыли» - так не работает:
  • DNS - медленный, зато работает почти везде. Незаменим для initial callback из сетей с жёстким контролем HTTP-трафика
  • HTTPS - основной рабочий транспорт. Требует domain fronting или категоризированных доменов, чтобы не выделяться в логах proxy
  • SMB named pipes - для peer-to-peer связи между имплантами внутри сети, когда прямого выхода в интернет нет
  • HTTP/2 и HTTP/3 - Merlin C2 (Russel Van Tuyl) целенаправленно использует HTTP/2 и QUIC: многие DPI-решения не инспектируют эти протоколы так же глубоко, как HTTP/1.1

Разработка кастомных имплантов: языки, архитектура, trade-off'ы​

Имплант (он же agent, beacon) - код на скомпрометированной системе, который держит канал управления. Разработка импланта - ядро offensive tooling, и ключевые решения принимаются ещё до первой строки кода.

Выбор языка: C, Rust, Nim, Go - что и когда​

Каждый язык навязывает свои ограничения:

C/C++ - классика. Полный контроль над памятью, минимальный размер бинаря, прямой доступ к WinAPI и syscall'ам. Обратная сторона: сложнее писать безопасный код, разработка дольше. Зато на выходе - бинарь, который не тащит за собой рантайм на 10 МБ.

Rust - активно вытесняет C в offensive-разработке. Signal Labs строит свой курс по offensive tool development целиком на Rust: от кастомных loader'ов и COFF loader'ов до kernel rootkit'ов и hypervisor-имплантов. Memory safety без GC, хорошая оптимизация, растущая среда. Но размер бинаря больше, чем у чистого C, и характерные строки Rust runtime могут использоваться для детекта.

Nim - использован SECFORCE для implant-части их кастомного C2. Компилируется в C, что позволяет генерировать компактные нативные бинари. Высокоуровневый синтаксис ускоряет разработку. На одном проекте мы собрали PoC-имплант на Nim за два дня - на чистом C это заняло бы неделю.

Go - основной язык для серверной части C2 (Sliver, серверная часть C2 от SECFORCE). Для имплантов используется реже: скомпилированные бинари весят 10+ МБ, а Go runtime оставляет характерные артефакты, которые EDR-вендоры уже научились ловить.

Ключевые компоненты импланта​

Минимальный работоспособный имплант:
  1. Transport module - реализация коммуникации с C2 (HTTP client, DNS resolver, SMB pipe client)
  2. Task dispatcher - получение команд от C2 и маршрутизация к нужному обработчику
  3. Execution engine - выполнение задач: запуск команд, загрузка/выгрузка файлов, инъекция в процессы
  4. Evasion layer - sleep obfuscation, антиотладка, sandbox evasion (T1497 - Virtualization/Sandbox Evasion)
  5. Persistence module - опционально, для долгосрочных операций
Критически важно разделять стейджер (минимальный код для установки канала и загрузки основного модуля) и полный имплант. Стейджер должен быть максимально маленьким и чистым - именно его EDR видит при первом запуске.

Руководство по написанию шеллкода для стейджеров - Разработка шеллкода: от ручного написания на ассемблере до инъекции в процесс.

Обход EDR: почему одного трюка недостаточно и нужен инженерный подход​

EDR - главный противник offensive-инструментов на endpoint'е. CrowdStrike Falcon, SentinelOne Singularity, Microsoft Defender for Endpoint используют многослойную модель детекта: сигнатуры, эвристики, поведенческий анализ, memory scanning, kernel callbacks. Обошли один слой - ловит другой.
📚 Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
 
  • Нравится
Реакции: R3D_5p3KTR
Что вы думаете по поводу Sliver? Помимо бинарей по 10 mb, с которыми необходим стейдж для каких-то техник типа side loading. Заканчивая, невозможностью применения (могу ошибаться, дилетант) sleep mask из-за имплантов на go, что ведет к обнаружению в памяти. Правильно ли я понимаю, что без своего C-импланта Sliver сильно ограничен для серьёзных задач, или команды как-то это обходят на практике?
 
Последнее редактирование:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab