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

Костюм — не акцент.

Провод — единственное место, где имплант не может зашифроваться до невидимости: TLS прячет содержимое, не форму. C2-профиль — костюм для разговора, а у разговора всё равно есть ритм, размеры и первый пакет. Эта заметка проходит наш проводной стек так, как N.12 прошла хост: двадцать три профиля, запечатанные сессии с ротируемой идентичностью, фронтинг через edge и мутация нагрузки на каждую отдачу — что каждый слой покупает и что терпеливый охотник-статистик всё равно слышит под ним.

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

Что такое профиль на самом деле

AXIS поставляет двадцать три C2-профиля — Microsoft Graph, Microsoft Update, API GitHub, Google Cloud, AWS S3, Dropbox, вебхуки Slack, реестры Docker и npm, API Kubernetes, DNS-over-HTTPS, Firebase, Salesforce, WordPress, Prometheus remote write и другие, — каждый полноценный спектакль, а не покраска. Профиль формирует пути, которые запрашивает агент, заголовки, которые шлют обе стороны, и маскировку ответов, которую исполняет сервер: слушатель отвечает так, как отвечала бы имитируемая служба, вплоть до редиректа случайного 404 так, как это сделало бы настоящее. Профиль запекается в агента при сборке, так что костюм сшит на заказ, а не арендован на час. Что покупает: разговор читается как легитимный SaaS-трафик для категорийных фильтров, списков разрешённых и человека, пролистывающего прокси-журнал. Что стоит: костюм фиксирован на билд, и ничто в костюме не меняет, сколько актёр говорит, когда и как долго. Поведенческая аналитика костюмы не читает.

Запечатанные сессии и ротируемая идентичность

Каждая сессия агента запечатана: обмен X25519, ключ сессии через HKDF, AES-GCM на маяках — респектабельный минимум, и мы относимся к нему как к полу, а не как к фиче. Фича — то, что происходит с идентичностью: идентификатор сессии ротируется по фиксированной каденции — каждые пятьдесят маяков, с коротким окном грейса, чтобы ответ в полёте никогда не осиротел, — так что защитник, коррелирующий сессии по ID, смотрит, как актёр меняет бейджи посреди разговора. Что покупает: корреляция сессий по идентификатору умирает по расписанию; гигиена ключей перестаёт зависеть от оператора, помнящего про ротацию. Что стоит: как сказано в предыдущей заметке — ротация сбрасывает идентичность импланта, не его поведение. Пятьдесят маяков ритма, затем ещё пятьдесят того же ритма под свежим бейджем. Охотник, следующий за формой сессии, а не за именем, на границе ротации не теряет ничего. Мы знаем; мы написали это правило.

Фронтинг на краю

Над слушателем стоит опциональный фронтинг через edge: сгенерированный воркер-скрипт прячет C2 за мейнстримовой edge-сетью, с несколькими помеченными URL на развёртывание и WebSocket-туннелем, идущим тем же путём, что и всё остальное. Что покупает: заимствованную репутацию — агент говорит с диапазоном IP, которому предприятие уже доверяет; инфраструктурная текучка перестаёт трогать агентов; сгоревший URL — правка метки, а не пересборка. Что стоит: зависимость, которую мы не контролируем, и снова костюм: адресат респектабелен, а разговор всё ещё обязан быть. Долгоживущий WebSocket к сервису, которым люди пользуются всплесками, — это форма, а форма — предмет этой заметки. Фронтинг переносит разговор в более приятный район. Акцент он не меняет.

Другая нагрузка на каждую отдачу

Доставка получает тот же уход, что и транспорт. Сервер держит два пула нагрузок — обычный и persist-only, — выбирает на каждую отдачу, добавляет случайный оверлей и мутирует каждый отдаваемый Windows PE: сдатованная назад метка сборки, сфабрикованный заголовок происхождения компилятора, пересчитанная контрольная сумма, паддинг в фиксированном бюджете. Каждая загрузка — уникальный хэш; шеллкод-нагрузки пропускают мутацию, потому что PE-метаданных для мутации в них нет. Что покупает: хэш-блоклисты мертвы до того, как написаны, — вчерашний образец не совпадает ни с чем, отдаваемым сегодня. Что стоит: уникальность — свойство файла, не поведения. Песочнице безразлично, что хэш новый; она оценивает, что экземпляр делает, а делает он — продукт, работающий как задумано. Мутация выигрывает против конвейера сигнатур. Против поведенческого она аргументом не является, и мы её таким не представляем.

ВЫИГРЫВАЕТ ПРОТИВ ВСЁ ЕЩЁ СЛЫШНО ПРОФИЛЬ — 23 ПРЕСЕТА пути · заголовки · тела ответов контентные фильтры, скиммеры поведение ЗАПЕЧАТАННАЯ СЕССИЯ X25519 · HKDF · AES-GCM читатели контента метаданные рукопожатия РОТАЦИЯ ИДЕНТИЧНОСТИ каждые 50 маяков + грейс корреляция по ID ритм — см. N.12 ФРОНТИНГ НА ГРАНИЦЕ помеченные URL · WS на сером облаке репутационные проверки форма МУТАЦИЯ НА КАЖДУЮ ОТДАЧУ метка · происхождение · чексум · оверлей хэш-блоклисты песочницы СТАТИСТИЧЕСКИЙ ПОЛ слой, в который платит каждый слой — терпеливые охотники слушают
Рис. A — шесть слоёв, один полКаждый слой выигрывает свой слой; никто не выигрывает слой выше
Слой проводаПокупаетВсё ещё слышно
Профиль (23 пресета)Читается как легитимный SaaS для фильтров и пролистывающихОбъём, тайминг, длина сессии — костюм сидит, акцент остаётся
Запечатанные сессииКлючи на сессию; респектабельный крипто-полРазмеры и каденция рукопожатий — метаданные, не содержимое
Ротация идентичностиКорреляция по ID сессии умирает по расписаниюРитм переживает смену имени — правило из N.12
Фронтинг через edgeЗаимствованная репутация; текучка поглощена; сгоревший URL — правкаДолгоживущие туннели к сервисам со всплесковым профилем
Мутация на отдачуХэш-блоклисты мертвы на подходеПоведение не хэшируется; песочницы оценивают глаголы, не байты
mTLS (опционально)Рукопожатие завершают только зачисленные агентыClient-auth TLS редок в SaaS-одежде — смокинг на пляже
Рис. B — проводной реестрКаждый слой выигрывает свой слой; никто не выигрывает слой выше

Честный счёт

Сложите слои — и проступает паттерн, который, по нашему мнению, и есть настоящий закон C2-трафика: каждый слой побеждает детектор, нацеленный на него, и никто не побеждает детектор слоем выше. Профили побеждают инспекцию содержимого и проигрывают поведению. Ротация побеждает корреляцию по ID и проигрывает ритму. Мутация побеждает хэш-листы и проигрывает песочницам. Фронтинг побеждает репутационные справочники и проигрывает анализу формы. Это закон сохранения из N.12 в проводном исполнении: улики не удаляются, они перемещаются — а на проводе они перемещаются в статистику, потому что статистика — единственный оставшийся слой. Мы тратим там настоящий инжиниринг: джиттер и ворота рабочих часов — живые регуляторы, доставка и таскинг идут разными пулами, keepalive-ы настроены. А затем публикуем предел, потому что он одинаков у всех и лишь некоторые его признают: C2, говорящий по расписанию, — метроном в костюме. Костюм стоит носить. Метроном — то, что вы на самом деле защищаете, и то, что терпеливый охотник на самом деле слышит.

Профиль меняет то, как разговор выглядит. Статистика не меняет ничего — она и есть то, как разговор звучит.

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

Всё дорогое в этой заметке дорого нам, не вам — статистический слой это самая дешёвая охота в серии и самая трудная для нас:

охота на проводе — слушаем акцентуровень категорий, как всегда
// ритм важнее идентичности — правило из N.12, на проводе
autocorr(sessions, 30d) на хост      // распределения, не интервалы
// несоответствия костюма
пути k8s-api с хостов, никогда не запускающих kubectl
saas-адресаты, держащие долгие websocket-ы   // сервис всплесков, сессия-марафон
tls client-auth там, где профиль подразумевает публичный api  // смокинг
// и самый дешёвый сигнал на этой странице
каденция байт-счётчиков на адресата  // нагрузки мутируют; размеры всё равно кластеризуются

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

На этом полка закрывается — двенадцать заметок о том, как устроен продукт и сколько это стоит, плюс эти две о том, что видит другая сторона. Лаборатория ломает что-то каждый квартал, и заметки следуют; анонсы выходят вместе с ежеквартальными заметками о релизах.