Инструменты для Attack/Defense

Обновлено 07.10.2026

В Attack/Defense команда одновременно защищает свои сервисы и атакует такие же сервисы соперников. Организаторы регулярно добавляют новые флаги, чекер проверяет доступность и корректность сервисов, а игровые раунды идут без пауз.

Играть можно без специальной инфраструктуры. Раньше так и делали: запускали эксплоиты из tmux, передавали флаги скриптом в проверяющую систему, открывали дампы трафика в Wireshark и правили сервисы руками. Этот подход работает, пока задач и целей мало.

Представим игру с 40 командами. У нас четыре рабочих эксплоита, каждый нужно запускать против 39 соперников в каждом раунде. Получается 156 запусков. Для каждого нужно получить актуальные цели, ограничить время работы, собрать вывод, извлечь флаги и отправить их до истечения срока действия. Параллельно команда должна смотреть входящий трафик и закрывать чужие атаки.

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

Инфраструктура участника автоматизирует четыре задачи: централизованную сдачу флагов, децентрализованный запуск эксплоитов, анализ и фильтрацию трафика.

1. Централизованная сдача флагов

Exploit farm, или ферма эксплоитов, — это система, которая регулярно запускает эксплоиты против команд-соперников, собирает найденные флаги и централизованно отправляет их в игровую систему.

Что выбрать: S4DFarm

Что делает: список всех целевых хостов (команд), убирание дубликатов флагов, отправка флагов в чексистему, получение статистики по заработанным поинтам, по желанию графики и т.д.

Зачем: чтобы изолировать разработку эксплоита от взаимодействия с чексистемой, участник просто разрабатывает эксплоит, который забирает флаг с сервиса, дальше этот флаг сам отправляется в конкретную чексистему по конкретному протоколу, которая запущена на текущем A/D.

2. Децентрализованный запуск эксплоитов

Ферма принимает флаги, но эксплоиты где-то должны выполняться.

На небольшой игре их можно запускать на ноутбуках авторов. На большой игре число запусков растёт как произведение трёх величин:

число эксплоитов × число целей × частота запуска

Параллельный запуск сокращает время, но увеличивает потребление ресурсов машин участников, особенно памяти и ядер процессора. Эту задачу можно решить горизонтальным масштабированием. Вместо одного большого раннера команда запускает клиенты на нескольких машинах.

Что выбрать: neo

Что делает: принимает код эксплоита и запускает его в кластере из множества хостов, интегрируется с фермой, запускает эксплоит на всех командах и отправляет все флаги в ферму.

Зачем: если неудобно вручную запускать эксплоит на всех командах локально, если не хватает ресурсов для запуска всех сплоитов, если хочется закрыть ноутбук и пойти курить кальян, но сплоиты продолжили работать.

S4DFarm выросла из DestructiveFarm, а Neo использует совместимый с DestructiveFarm API: получает конфигурацию через GET /api/get_config и передаёт флаги через POST /api/post_flags. Поэтому эти инструменты можно собрать в один стек.

3. Анализаторы трафика

Анализатор трафика — это инструмент, который перехватывает сетевые пакеты или читает их из дампа трафика, собирает пакеты в потоки и помогает находить, просматривать и разбирать запросы к сервисам.

В Attack/Defense анализатор используют, чтобы восстановить атаки соперников: увидеть переданные данные, выделить подозрительный запрос и на его основе написать эксплоит, фильтр или исправление сервиса.

Что выбрать: Packmate

Что делает: автоматически получает дампы входящего и исходящего трафика со всех сервисов (по портам), предоставляет интерфейс для просмотра стримов и запросов, поиск по всему трафику, упрощает командную работу (разметка подозрительных стримов, прямые ссылки на стримы и т.д.), шаблоны эксплоитов из трафика.

Зачем: понять как атакуют ваши сервисы, искать чужие эксплоиты и копировать их, удобно использовать, так как дампы доставляются автоматически.

Packmate работает и с текстовыми, и с бинарными сервисами. Он умеет искать обычные строки, регулярные выражения и бинарные последовательности. Найденные фрагменты подсвечиваются в пакетах.

4. Фильтрация трафика

После анализа трафика команда понимает, какой запрос эксплуатирует сервис. Лучшее решение — исправить уязвимость в коде и проверить, что чекер продолжает работать.

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

чекер и соперники → прокси или фаерволл → сервис

Входящие TCP- или HTTP-сообщения проходят через фильтры. Фильтр может пропустить сообщение, изменить его или закрыть соединение.

Для stateful-протоколов фильтр получает не только текущее сообщение, но и несколько предыдущих сообщений того же TCP-соединения. Поэтому правило может учитывать контекст: например, сначала клиент авторизовался, затем вызвал опасную команду.

Что выбрать: ctf_proxy

Что делает: по сути, это firewall с удобными правилами, терминирует входящий трафик на себе, блокирует запросы, которые удовлетворяют правилам (содержат какую-то строку и т.д.), легитимные запросы пропускает в сервис.

Зачем: отрезать атаки, которые видно в трафике, без модификации сервиса

Как компоненты работают вместе

Полная схема делится на атакующий и защитный контуры.

Атакующий контур

автор эксплоита → Neo → рабочие машины → сервисы соперников → S4DFarm → игровая система

Автор передаёт эксплоит в Neo. Сервер распределяет эксплоит и цели между раннерами. Раннеры выполняют атаки и передают флаги в S4DFarm. Ферма централизованно сдаёт их и сохраняет статусы.

Защитный контур

чекер и соперники → прокси → наш сервис
сетевой интерфейс → анализатор трафика → анализ потока → новый фильтр или патч

ctf_proxy пропускает или блокирует запросы. Packmate сохраняет трафик для анализа. Найденная атака превращается во временный фильтр ctf_proxy или приводит к патчингу сервиса.

Выводы

S4DFarm, Neo, Packmate и ctf_proxy не находят уязвимости и не принимают решений за игроков. Они сокращают время между четырьмя событиями: команда написала эксплоит, получила флаг, увидела чужую атаку и закрыла её.

Цель тулинга проста: игрок занимается уязвимостью один раз, инфраструктура повторяет нужные действия до конца игры.