В сентябре 2025 года исследователи из Angara MTDR обнаружили, что фреймворк AdaptixC2 стал использоваться в атаках на организации в Российской Федерации.
Сегодня мы, Лада Антипова и Александр Гантимуров, расскажем, что представляет собой фреймворк постэксплуатации AdaptixC2, как выявлять следы его использования и чем отличается выявленный способ эксплуатации фреймворка от всех описанных публично ранее.
В результате расследования компьютерного инцидента был выявлен инструмент злоумышленников, который использовался для закрепления в скомпрометированной системе. Он выгодно отличался от других видов типового и самописного ВПО, которые эти же злоумышленники использовали в ходе атаки. Образец обладал обширным набором команд, был хорошо спроектирован, а также имел широкие возможности по конфигурации. После непродолжительного исследования стало ясно, что перед нами агент Beacon от фреймворка постэксплуатации AdaptixC2.
AdaptixC2 — это фреймворк для постэксплуатации, который часто сравнивают с такими известными инструментами, как Cobalt Strike и Brute Ratel. В отличие от них, AdaptixC2 полностью бесплатен и доступен на GitHub.
Ранее о его применении в кибератаках на другие страны сообщали Symantec, Palo Alto и «Лаборатория Касперского». Поэтому появление AdaptixC2 в арсенале злоумышленников, атакующих организации в России, было лишь вопросом времени.
Описание
Публичная версия AdaptixC2 появилась в августе 2024 года, одновременно с созданием канала Adaptix Framework. Фреймворк активно развивается, постоянно расширяются возможности агентов и сервера. 28 сентября 2025 года вышла версия 0.9, 29 августа — версия 0.8. Все обновления подробно описываются в документации и на канале разработчика.
AdaptixC2 сразу привлёк к себе внимание своим открытым исходным кодом, продуманной структурой, кросс-платформенным интерфейсом и богатым возможностями по доработке.

Интерфейс клиента написан на Qt6 и в настоящее время может быть скомпилирован под Windows / Linux / Mac OS. Сервер может быть запущен под Linux Ubuntu / Debian / Arch.
В документации приведены подробные инструкции по сборке, и в настоящее время есть множество публикаций по настройке и подключению агентов, в том числе и на русском языке.
Сервер позволяет одновременно работать сразу нескольким операторам и даже обмениваться сообщениями во встроенном чате клиента, не выходя за пределы развёрнутой инфраструктуры.
В настройках сервера указывается, какие URI прослушивать и на каком порту, а также какую страницу отображать при ошибке аутентификации. Всё взаимодействие с сервером по умолчанию происходит по HTTPS на сертификатах, сгенерированных при настройке. Также можно разнести прослушивающие интерфейсы сервера и самих сервисов для подключения агентов. В совокупности весь этот комплекс мер позволяет скрыть ключевые элементы AdaptixC2 с радаров публичных сканеров (Shodan, Censys, ZoomEye и т.д.) и минимизировать проактивное обнаружение инфраструктуры фреймворка.
Для своевременного оповещения о фактах подключения агентов есть возможность указать токен Telegram-бота и получать информацию в любой из указанных в настройках чатов. Также есть возможность настроить Webhook на события подключения агентов, получения аутентификационных данных и загрузки файлов. Всё очень просто подгоняется под требования конкретного пользователя.

Агенты
В терминах фреймворка AdaptixC2 агент — это программный компонент, который устанавливается на скомпрометированную машину и обеспечивает связь между этой машиной и инфраструктурой управления злоумышленника (Command and Control-сервером). Агент выполняет команды, отправляемые с управляющего сервера, позволяет передавать данные, запускать удалённые задачи, обеспечивать скрытность и устойчивость присутствия во взломанной системе.
Перед созданием агента необходимо настроить соответствующий прослушивающий сервис (Listener) через графическое меню клиента, а сами агенты создаются уже через контекстное меню сервиса. Для быстрой настройки возможны загрузка/сохранение профилей в формате JSON как сервисов, так и агентов.


Агенты AdaptixC2 в настоящее время написаны на C++ (Beacon) и Go (Gopher), поддерживают операционные системы Linux, Windows и Mac OS. Для Windows доступно больше вариантов агентов — как Beacon, так и Gopher, в то время как для Linux и Mac OS доступны только агенты Gopher. Каждый агент адаптирован под особенности соответствующей платформы и обеспечивает широкий функционал для управления скомпрометированными системами.
В документации указано, что текущие версии агентов не спроектированы для обхода EDR и антивирусов и служат только для демонстрации возможностей AdaptixC2. С учётом постоянного развития фреймворка можно предположить, что скоро появятся и обфускация, и дополнительные методы обхода.

Поскольку AdaptixC2 — это фреймворк постэксплуатации, реализация автозагрузки агентов в самих компонентах отсутствует. Запуск агентов требуется организовывать вручную после получения доступа к системе, что соответствует типичной модели работы таких инструментов.
Поддерживаемый функционал
Функционал агентов широкий даже в базовой комплектации. Для каждой команды есть справка, доступная из консоли клиента. Для операций с файлами и процессами есть отдельные визуальные вкладки в интерфейсе, которые существенно упрощают процесс работы. Ну а для всего остального есть консоль.

В базовой комплектации Beacon доступны:
Выполнение команд через интерактивную оболочку заражённого компьютера (shell).
Чтение, запись и удаление произвольных файлов и каталогов.
Скачивание и загрузка файлов.
Создание скриншотов экрана.
Выполнение BOF в контексте текущего процесса (расширение возможностей агента налету, без изменения исходного кода).
Операции с процессами (просмотр, создание и прекращение).
Создание туннелей (SOCKS4/5) и пробрасывание портов.
Соединение нескольких агентов в цепь для обхода сегментации сети и межсетевых экранов (pivoting) по SMB/TCP.
Изменение текущих настроек профиля (даты окончания работы, рабочих интервалов и периодичности запроса команд).
Функционал Gopher чуть меньше, например недоступно создание цепочек агентов и проброс портов.
Кроме этого, все агенты поддерживают расширение функционала через BOF, по аналогии с Cobalt Strike, с готовым набором реализаций.
В настоящее время уже есть BOF для атак на Kerberos (работа с тикетами, kerberoasting и т.п.) для получения аутентификационных данных (через дамп LSASS, из браузеров и NTLM-хеши), повышения привилегий, выполнения .NET-кода, внедрения в процессы и многого другого. Также доступно использование BOF от Cobalt Strike с незначительными доделками.

Beacon
Агент Beacon может быть собран под Windows для архитектур x86/x64 в виде:
библиотеки;
исполняемого файла;
шеллкода;
сервиса.
При создании библиотек можно сразу указать легитимную библиотеку, чей набор экспортируемых функций необходимо имитировать.
Для всех Beacon-агентов можно задать дату прекращения работы (kill date), а для Beacon HTTP дополнительно указать рабочие часы, в которые агент будет пытаться взаимодействовать. Такая функциональность затрудняет первичный анализ этих образцов во время расследования компьютерных инцидентов, особенно при запуске в песочницах или контролируемой среде, а также если исследование проводится спустя значительное время после инфицирования.
Для взаимодействия с сервером поддерживаются протоколы HTTP(s) (внешний), TCP (внутренний) и именованные каналы SMB (внутренний). Отличие внутренних заключается в том, что они могут использоваться только в рамках одной сети для пробрасывания соединения (pivoting) через внешние агенты в целях обхода сегментации сети. Цепь из агентов настраивается в графическом интерфейсе и тут же отображается в соответствующей вкладке.

Сетевое взаимодействие всегда шифруется при помощи RC4 случайным сессионным ключом. Поэтому тут исключены ошибки оператора, забывшего включить TLS, в результате чего данные передаются в открытом виде и вызывают срабатывание средств защиты. Кроме этого, можно настроить минимальные размеры, на которые будут разбиваться пакеты, чтобы ещё больше снизить вероятность обнаружения сетевой активности.
При создании Beacon HTTP можно указать:
ключ RC4;
сертификаты для TLS;
серверы для взаимодействия;
URI (один на все серверы);
HTTP-заголовки;
User-Agent;
формат отправки команд;
как будет выглядеть ошибка 404.
При создании Beacon SMB указывается только название именованного канала (pipe) и ключ шифрования RC4. Этот pipe необходимо будет указать при создании цепочки из агентов.
Для Beacon TCP — прослушивающий порт, magic-последовательность начала взаимодействия и ключ RC4.
Нагрузка компилируется тут же из интерфейса клиента при помощи MinGW. Профиль агента зашивается в секции данных и загружается в процессе работы. Остаётся только доставить модуль агента на скомпрометированную систему и обеспечить его запуск.
Извлечение профиля
В агентах Beacon профиль расположен в начале секции .rdata, иногда ему может предшествовать название сервиса или пара строк от компилятора (если x86). Профиль упакован в бинарный формат и дополнительно зашифрован ключом RC4 следующим образом:
4 байта — размер профиля N.
N — сам зашифрованный профиль.
16 байт — ключ RC4, который был указан при создании сервиса.

Для расшифровки конфигурации Beacon HTTP можно использовать скрипт от Palo Alto Unit42. Однако этот инструмент не подходит для агентов x86 и не поддерживает другие версии Beacon, такие как TCP и SMB. Один из наших экспертов разработал собственную реализацию, учитывающую эти особенности, в которую также добавил поддержку расшифровки профиля для агентов Gopher. Она доступна по ссылке и представляет собой более универсальное решение.
Особенности
Анализ скомпилированных агентов AdaptixC2 представляет определённую сложность из-за использования C++ и динамического получения указателей на функции WinAPI. Однако значительно упростить этот процесс помогает сравнение с исходным кодом, который доступен на GitHub.
Все указатели на функции WinAPI получаются при старте агента и заполняются в глобальную структуру.

Хеши функций WinAPI одни и те же и не меняются. Для хеширования используется Djb с начальным значением 1572.

Шеллкод, выполняющий загрузку, всегда один и тот же для конкретной платформы — просто добавляется к библиотеке в начало. При этом библиотека будет располагаться сразу после шеллкода в открытом виде.
Стоит отметить, что код очень хорошо написан и содержит минимальное количество строк, по которым можно явно определить, что это агент для AdaptixC2.
Gopher
Агент Gopher может быть собран только в виде исполняемого файла с возможностью взаимодействия через TCP или mTLS. Поддерживается Windows (в том числе Windows 7), Linux, Mac OS с архитектурами arm64, amd64.
Агент компилируется по запросу из графического клиента. На данный момент никак не обфусцируется, и все метаданные легко читаются в ходе анализа.
Взаимодействие агента с сервером происходит по TCP. Сообщения упаковываются в msgpack и шифруются при помощи AES128GCM на сессионном ключе, который вырабатывается при старте агента.
Как говорилось ранее, дополнительно поддерживается взаимодействие с использованием mTLS — сертификаты агента и сервера указываются в графическом интерфейсе клиента.
Профиль упакован в msgpack и зашифрован на ключе AES128, который генерируется при создании соответствующего сервиса. На данном ключе отправляется первый пакет с информацией об агенте и созданным сессионным ключом шифрования, с использованием которого будет осуществляться дальнейшее взаимодействие.
Извлечение профиля
Профиль находится среди данных и расшифровывается в самом начале работы в функции main::main.

Первые 16 байт — ключ AES, 12 байт nonce и затем зашифрованные данные.

Размер профиля (с учётом ключа шифрования и nonce) хранится в рядом с указателем на зашифрованный профиль.

Для расшифровки и декодирования профиля необходимо извлечь его вместе с ключом и nonce, а после воспользоваться специально подготовленным скриптом.
Выявление агентов на системе
Как указывалось ранее, агенты не обладают функционалом по обходу антивирусов и EDR. Несмотря на это, далеко не все антивирусы выявляют скомпилированные агенты даже в самой базовой комплектации — без мимикрии под легитимные DLL и сервисы.
Для проверки возможностей выявления агентов были сгенерированы их все возможные варианты с базовыми настройками сервисов. Например, для HTTP не менялись User-Agent и поля заголовков HTTP-запросов.
Все агенты были загружены на VirusTotal, и результаты проверки на момент написания статьи приведены в таблице. Указаны общая выявляемость, ссылка на VT и вердикты от «Лаборатории Касперского», DrWeb и, конечно, Microsoft Defender.
Тип агента |
VT |
KAV |
DrWeb |
Defender |
Beacon HTTP Service x64 EXE |
+ |
+ |
+ |
|
Beacon HTTP Service x86 EXE |
+ |
|
+ |
|
Beacon HTTP x64 DLL |
+ |
+ |
+ |
|
Beacon HTTP x64 EXE |
+ |
+ |
+ |
|
Beacon HTTP x64 PIC |
+ |
+ |
|
|
Beacon HTTP x86 DLL |
+ |
|
|
|
Beacon HTTP x86 EXE |
+ |
|
+ |
|
Beacon HTTP x86 PIC |
+ |
+ |
+ |
|
Beacon SMB Service x64 EXE |
+ |
|
+ |
|
Beacon SMB Service x86 EXE |
|
|
+ |
|
Beacon SMB x64 DLL |
+ |
|
+ |
|
Beacon SMB x64 EXE |
+ |
|
+ |
|
Beacon SMB x64 EXE |
+ |
|
+ |
|
Beacon SMB x64 PIC |
+ |
+ |
|
|
Beacon SMB x86 DLL |
+ |
|
|
|
Beacon SMB x86 EXE |
+ |
|
+ |
|
Beacon SMB x86 PIC |
|
|
|
|
Beacon TCP Service x64 EXE |
|
|
+ |
|
Beacon TCP Service x86 EXE |
|
|
+ |
|
Beacon TCP x64 DLL |
+ |
|
+ |
|
Beacon TCP x64 EXE |
+ |
|
+ |
|
Beacon TCP x64 PIC |
+ |
+ |
|
|
Beacon TCP x86 DLL |
+ |
|
|
|
Beacon TCP x86 EXE |
+ |
|
+ |
|
Beacon TCP x86 PIC |
|
|
|
|
Gopher MTLS Elf64 |
+ |
|
|
|
Gopher MTLS Mach-O arm64 |
+ |
|
|
|
Gopher MTLS x64 EXE |
+ |
|
+ |
|
Gopher TCP Elf64 |
+ |
|
|
Таблица с результатами проверки на VirusTotal
По результатам проверки можно сказать, что антивирусные решения «Касперского» и Defender в целом успешно классифицируют сгенерированные агенты AdaptixC2, однако у них возникают трудности с распознаванием версий для Windows x86. При использовании специализированных крипторов и упаковщиков уровень обнаружения существенно снижается. Для выявления неупакованных образцов разработаны Yara-правила, доступные по ссылке, что позволяет улучшить обнаружение подобных угроз в исходном виде.
Обнаружение сетевой активности агентов
Несмотря на то, что все сервисы AdaptixC2 предлагают множество настроек, которые можно легко изменить через графический интерфейс, можно рассчитывать, что большинство злоумышленников ограничатся стандартными параметрами.
Beacon HTTP по умолчанию использует User-Agent «Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20121202 Firefox/20.0» и поле «X-Beacon-Id» в заголовках HTTP-запросов.

Gopher по умолчанию использует порт 4444 и баннер «AdaptixC2 server» при старте соединения.

Поэтому, если злоумышленник не настроил (m)TLS и оставил базовые параметры, то легко выявить сетевое взаимодействие агентов простыми правилами Snort.
Кроме того, можно предположить, что (m)TLS будет использовать самоподписанные сертификаты, которые не проходят проверку по корневым центрам сертификации. На этом можно основать правила для выявления таких подозрительных сетевых соединений.
Обнаружение AdaptixC2-серверов
Сервер AdaptixC2 версии 0.9 по умолчанию работает на порте 4321 TCP по URI «/endpoint», пароль для доступа — «pass».
Кроме этого, используется стандартная страница 404, которая выдаётся при попытке доступа по неправильному URI.

Через тот же ZoomEye или Shodan на текущий момент легко найдётся пара десятков активных серверов AdaptixC2 с настроенной по умолчанию страницей 404.
Дальше можно просканировать открытые порты серверов и выявить возможные сервисы, которые на нём настроены, а также сертификаты, баннеры и всё то, что пригодится для поиска созданных для них агентов.
Методы доставки и использования на этапах постэксплуатации
В публичных отчётах о компьютерных атаках с использованием AdaptixC2 мы нашли описание нескольких разных подходов злоумышленников по упаковке, доставке и исполнению агентов AdaptixC2.
В своем отчёте Symantec полностью не раскрывает, как хакеры из Fog Ransomware использовали AdaptixC2 Beacon. На VirusTotal указанных в отчёте образцов агентов тоже не обнаруживается. Единственной зацепкой может стать краткая информация из OpenTIP «Лаборатории Касперского», из которой становится ясно, что злоумышленники использовали сгенерированный агент Beacon AdaptixC2 в виде исполняемого файла под 64-битную архитектуру. Никакой дополнительной обфускации, по всей вероятности, не использовалось.
Из публикации Palo Alto известно, что в одном случае агент AdaptixC2 внедрялся в систему с использованием многоступенчатого PowerShell-загрузчика, который скачивал зашифрованный и закодированный payload (эффективный модуль агента) с легитимного сервиса. Кодировка/шифровка применялась с использованием простого XOR-ключа. Вместо записи вредоносного кода на диск payload загружался непосредственно в оперативную память процесса PowerShell (fileless-подход). Для исполнения шеллкода использовался метод .NET — GetDelegateForFunctionPointer, который динамически создаёт делегат (указатель на функцию), выполняемый внутри процесса, что минимизирует следы присутствия в файловой системе.
Такого рода многоступенчатые загрузчики на PowerShell могли генерироваться при помощи Meterpreter и подобных инструментов.
В другом инциденте загрузка и запуск шеллкода также осуществлялись через PowerShell-скрипт, при этом в самом скрипте никакого шифрования предусмотрено не было и явно оставались следы генерации скрипта при помощи нейросети.
Гораздо более замысловатым оказался описанный способ доставки и запуска агентов AdaptixC2 в исследовании коллег из «Лаборатории Касперского».
В их случае был создан вредоносный пакет NPM https-proxy-utils, мимикрирующий под легитимные http-proxy-agent и https-proxy-agent, с расчётом на то, что пользователь ошибётся при установке пакета. В установочном скрипте были предусмотрены варианты установки под разные операционные системы (Linux, Windows и Mac OS) и разные архитектуры целевых систем.
На Windows реализовывалась техника DLL Sideloading путём записи DLL и легитимного файла в системную директорию C:\Windows\Tasks c последующим запуском необходимого файла.
Для Mac OS после проверки архитектуры системы правильная версия агента скачивалась в папку автозапуска.
Под Linux агент необходимой архитектуры системы (ARM или x64) просто скачивался во временную папку с последующим запуском.
Но, как мы видим, никакой дополнительной обфускации целевой нагрузки в атаке при помощи NPM не использовалось.
В компьютерном инциденте, который расследовали наши специалисты, злоумышленники применили совсем другой подход, отличающийся от всех вышеперечисленных.
Агент Beacon был сгенерирован в виде шеллкода, который дополнительно зашифровали и вшили в легитимный исполняемый файл Process Explorer (procexp64.exe). В файле остались иконка, все строчки и подпись Process Explorer, в нём просто были грубо перезаписаны данные в точке входа.


Перед инициализацией вредоносной нагрузки код 64 раза вызывает VirtualAlloc с заполнением одинаковыми значениями, а затем выполняет VirtualProtect и VirtualFree. Это, вероятно, сделано для усложнения анализа файла в отладчике. Только после этих действий выделяется такое же количество памяти для шеллкода, который затем расшифровывается и запускается.

Для шифрования использовался двухбайтный XOR. Исполнение запускается переходом к расшифрованному шеллкоду. Сам шеллкод был сгенерирован при помощи AdaptixC2.
После старта шеллкод ищет в том же выделенном сегменте памяти библиотеку по простейшей проверке на MZ и PE, осуществляет её рефлективную загрузку в память и запуск DllMain.

В процессе загрузки библиотеки осуществляется поиск WinAPI функций NtFlushInstructionCache, VirtualAlloc, GetProcAddress и LoadLibrary, при помощи которых уже загружалась библиотека.
Начиная с версии 0.9 фреймворка AdaptixC2 запуск вредоносного функционала осуществляется при вызове экспортируемой функции GetVersions. Так как в нашем случае использовался агент AdaptixC2 версии 0.8, то основной вредоносный функционал запускался при вызове DllMain.
При помощи скрипта из шеллкода можно с лёгкостью извлечь использованный профиль:

Даже в нашем случае, когда злоумышленник пытался максимально скрыть вредоносную нагрузку и обойти установленные антивирусы, для связи с сервером AdaptixC2 использовались HTTP без TLS и стандартные заголовки User-Agent и X-Beacon-Id. Такой тип коммуникации легко обнаруживается с помощью правил Snort в случае настроенного мониторинга сетевой активности.
Ещё одной отличительной чертой злоумышленника является закрепление через сервис NCA Service, в котором файл с вредоносной нагрузкой запускался через NSSM. Такой подход в совокупности с шифрованием самого агента в легитимном файле позволил с лёгкостью обойти средства антивирусной защиты, установленные на скомпрометированной машине.
Выводы
Фреймворки постэксплуатации после получения доступа к системе существенно упрощают и автоматизируют такие рутинные и сложные операции, как закрепление в инфраструктуре, сбор данных, повышение привилегий и горизонтальное перемещение по сети. Это делает атаку более управляемой и эффективной.
Ранее мы уже наблюдали, как публично доступные фреймворки, такие как Mythic, Sliver, стали неотъемлемым инструментом проведения компьютерных атак, потому что они предоставляют мощные и гибкие инструменты для управления заражёнными системами после первичного взлома.
Фреймворк AdaptixC2 не является исключением, поэтому можно ожидать, что мы будем видеть его всё чаще в арсенале злоумышленников из-за удобства, масштабных возможностей и широкой доступности.
На данный момент аналитикам информационной безопасности дополнительно помогает то, что злоумышленники не вносят значительных изменений в базовые настройки используемых инструментов и создаваемой вредоносной нагрузки. Благодаря этому использование для атак AdaptixC2 можно эффективно обнаруживать на раннем этапе с помощью стандартных антивирусных решений и несложных сетевых правил выявления.
Если есть подозрения на инцидент информационной безопасности и требуется профессиональная помощь в расследовании, вы всегда можете обратиться к нам в Angara Security, связавшись по адресу response@angarasecurity.ru.