Исследовательская заметка N.04 · 2026-10-11

Бюджет 225 КБ.

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

ВРЕМЯ ЧТЕНИЯ ≈ 5 МИН АВТОР КОМАНДА AXIS

Монолитный имплант всю жизнь носит с собой всё, что может когда-нибудь понадобиться: каждый байт — это след на диске, сигнатура в памяти и поверхность для AV, оплаченные на каждом хосте независимо от того, использовалась ли возможность. Агент C в AXIS выбрал другую сторону сделки. Ядро — 225 КБ, и оно почти ничего не делает — канал, тайминг, диспетчер задач, криптография и загрузчик модулей. Всё, что оператор узнал бы как возможность, релиз за релизом было вынесено в депо.

Что несёт ядро — и чего не несёт

Разделение и есть весь дизайн, так что вот оно в одной таблице:

ЧастьЖивётРезидентноЗаметки
Ядро агентаартефактвсегда≈ 225 КБ — канал, тайминг, диспетчер, криптография, загрузчик
Шеллы и интерактивный PTYдепопо задачезагружается по первой команде шелла, встраивается в ядро
Файловый менеджердепопо задачечанкованные передачи стримятся обратно как результаты модуля
Туннели и маршрутизация пировдепопо задачеSOCKS, обратные туннели, mesh по именованным каналам
Обозреватель SMBдепопо задачедоступ к шарам с имперсонацией токена
Рантайм BOFдепопо задачес защитой от падений; ошибка возвращает error, а не сессию
Учётные данные · LDAP · AD · шары · сканердепопо задаченабор сбора, только в памяти
Повышениедепопо задачетолько агент C на Windows — ограничение по типу агента
Рис. A — бюджетСтатические embedded-сборки инвертируют это: без загрузчика, модули вкомпилированы

Как прибывает модуль

Депо — под каждую ОС и каждый профиль: Windows получает DLL, Linux — разделяемые объекты по маршруту профиля сборки — сервер, NAS-legacy и embedded берут каждый из своего пула, — macOS получает библиотеки. Сервер ограничивает набор по типу агента и платформе: повышение предлагается только агенту C на Windows, cron-персистентность — только там, где есть cron. Выдача — осознанный, аудируемый момент:

Рис. B — выдачаКлюч на модуль, выведенный из сессии · токен сгорает после одного использования

Каждый модуль едет зашифрованным собственным ключом, выведенным из сессии, за одноразовым токеном загрузки; результаты чанками возвращаются по тому же каналу; выгрузка затирает ключевой материал. Операторская запись обо всём этом — строка в журнале аудита: модуль, цель, оператор, метка времени.

МАНИФЕСТ МОДУЛЯ — ИЛЛЮСТРАЦИЯJSON
{
  "module":   "filemgr",
  "target":   "windows-x64",
  "pool":     "core/win · маршрут по профилю сборки",
  "fetch":    "одноразовый токен · одно использование",
  "key":      "на модуль · выведен из сессии",
  "results":  "чанкованный поток",
  "unload":   "затирание + освобождение"
}
Рис. C — что описывает выдачаМеханика остаётся в лицензионных материалах

Что покупает бюджет

Тихий агент почти невесом: 225 КБ на диске, тонкий профиль памяти и ничего резидентного, что сканер мог бы назвать. Возможность прибывает ровно тогда, когда она нужна операции, и уходит, когда не нужна, — а поскольку модули, как и всё, что мы поставляем, собираются под заказчика, депо наследует тот же полиморфизм, что и ядро. Агент Go держит противоположную ставку — широкий резидентный набор команд в бинарнике на 8 МБ, — и оба работают в одном парке, потому что честный ответ на вопрос «какой имплант» — зависит от хоста, и панель не должна наказывать за честный ответ.

Угол защитника

Выдача — громкий момент.

Модульность — это тоже поверхность детекта, и утверждать обратное превратило бы заметку в маркетинг. Загрузка шифрованной полезной нагрузки по одноразовому токену, вскоре после которой в процессе, молчавшем днями, появляется новое поведение. Сканеры памяти зарабатывают свои деньги в окне между загрузкой и затиранием; затирание сужает окно, но не стирает саму выдачу. Если ваша телеметрия умеет соединять «погашен необычный токен загрузки» с «ранее тихий процесс теперь листает файлы», вы нашли шов, который мы тратим инженерные усилия, чтобы сузить. Это повторяющийся урок карты телеметрии: живучие импланты сжимают последовательности; хорошие защитники растягивают их обратно.

Далее в очереди: полевой справочник по техникам обхода — что каждая всё ещё вам стоит и почему импланты с одним трюком быстро стареют.