Что такое профиль на самом деле
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 пресета) | Читается как легитимный SaaS для фильтров и пролистывающих | Объём, тайминг, длина сессии — костюм сидит, акцент остаётся |
| Запечатанные сессии | Ключи на сессию; респектабельный крипто-пол | Размеры и каденция рукопожатий — метаданные, не содержимое |
| Ротация идентичности | Корреляция по ID сессии умирает по расписанию | Ритм переживает смену имени — правило из N.12 |
| Фронтинг через edge | Заимствованная репутация; текучка поглощена; сгоревший URL — правка | Долгоживущие туннели к сервисам со всплесковым профилем |
| Мутация на отдачу | Хэш-блоклисты мертвы на подходе | Поведение не хэшируется; песочницы оценивают глаголы, не байты |
| mTLS (опционально) | Рукопожатие завершают только зачисленные агенты | Client-auth TLS редок в SaaS-одежде — смокинг на пляже |
Честный счёт
Сложите слои — и проступает паттерн, который, по нашему мнению, и есть настоящий закон C2-трафика: каждый слой побеждает детектор, нацеленный на него, и никто не побеждает детектор слоем выше. Профили побеждают инспекцию содержимого и проигрывают поведению. Ротация побеждает корреляцию по ID и проигрывает ритму. Мутация побеждает хэш-листы и проигрывает песочницам. Фронтинг побеждает репутационные справочники и проигрывает анализу формы. Это закон сохранения из N.12 в проводном исполнении: улики не удаляются, они перемещаются — а на проводе они перемещаются в статистику, потому что статистика — единственный оставшийся слой. Мы тратим там настоящий инжиниринг: джиттер и ворота рабочих часов — живые регуляторы, доставка и таскинг идут разными пулами, keepalive-ы настроены. А затем публикуем предел, потому что он одинаков у всех и лишь некоторые его признают: C2, говорящий по расписанию, — метроном в костюме. Костюм стоит носить. Метроном — то, что вы на самом деле защищаете, и то, что терпеливый охотник на самом деле слышит.
Профиль меняет то, как разговор выглядит. Статистика не меняет ничего — она и есть то, как разговор звучит.
Угол защитника
Всё дорогое в этой заметке дорого нам, не вам — статистический слой это самая дешёвая охота в серии и самая трудная для нас:
// ритм важнее идентичности — правило из N.12, на проводе autocorr(sessions, 30d) на хост // распределения, не интервалы // несоответствия костюма пути k8s-api с хостов, никогда не запускающих kubectl saas-адресаты, держащие долгие websocket-ы // сервис всплесков, сессия-марафон tls client-auth там, где профиль подразумевает публичный api // смокинг // и самый дешёвый сигнал на этой странице каденция байт-счётчиков на адресата // нагрузки мутируют; размеры всё равно кластеризуются
Ничто из этого не требует чтения ни одного байта содержимого — именно поэтому это работает. И именно поэтому мы это публикуем: клиент должен услышать акцент на демо раньше, чем прочитает о нём в чужом отчёте об инциденте.
На этом полка закрывается — двенадцать заметок о том, как устроен продукт и сколько это стоит, плюс эти две о том, что видит другая сторона. Лаборатория ломает что-то каждый квартал, и заметки следуют; анонсы выходят вместе с ежеквартальными заметками о релизах.