-
Что такое attack-defense CTF?
Attack-defense CTF — это командное соревнование по информационной безопасности. Каждой команде выдаётся одинаковый образ операционной системы с запущенными в ней сервисами (такими как форум или веб-сервис с предсказаниями погоды), которые содержат уязвимости. Задача команды — найти уязвимости, после чего защитить свои сервисы и атаковать чужие, украв секретную информацию (флаги).
Во время игры на серверах жюри работает проверяющая система. Каждые несколько минут она проверяет, что сервисы команд работают, и добавляет в них новые флаги.
-
Зачем нужна ферма?
Так как новые флаги добавляются постоянно, недостаточно взломать сервис противника один раз вручную. Обычно пишут скрипт (эксплоит), который крадёт флаги у заданной команды, а потом регулярно запускают его на каждой из команд-соперников.
Ферма решает ряд проблем, связанных с этим процессом. Например, ферма:
- Позволяет не реализовывать процесс отправки флагов в каждом эксплоите
- Перезапускает эксплоиты на всех командах раз в заданный период времени (не перегружая компьютер слишком большим количеством процессов)
- Останавливает зависшие процессы с эксплоитами
- Следит, чтобы квота на отправку флагов в проверяющей системе не была израсходована
- Защищает от спама флагами
- Позволяет следить за результатами работы эксплоитов и статистикой отправляемых флагов
- Переотправляет флаги в случае, если проверяющая система упала и не могла их принимать в течение некоторого периода времени
-
Зачем ферма поделена на клиент и сервер?
Это соответствует разделению ответственности в команде. Админ настраивает список команд и процесс отправки флагов в проверяющую систему на сервере фермы (это не нужно делать каждому члену команды), а затем запускает его на компьютере, к которому он имеет доступ.
В свою очередь, авторы эксплоитов пишут и запускают эксплоиты на своём ноутбуке в клиенте фермы, после чего могут отлаживать их, следить за их выводом и правильной работой (не отвлекая админа на эти задачи). Если ошибка в одном из эксплоитов или некорректные параметры в клиенте фермы приведут к исчерпанию памяти на компьютере, зависнет только ноутбук автора эксплоита.
-
Что используется в качестве БД для хранения флагов?
Флаги на сервере фермы хранятся в БД SQLite. SQLite выбран потому, что он не требует установки и запуска дополнительного ПО, хранит всю базу в одном файле и предлагает широкую функциональность для работы с ней.
Производительности SQLite вполне достаточно для работы с потоком флагов, возникающим даже на больших соревнованиях (даже full scan запросы по таблице с флагами выполняются без видимой задержки).
-
Почему проблема с большим количеством процессов при большом количестве команд не решается с помощью asyncio?
Использование asyncio накладывает ряд ограничений:
- Эксплоиты должны быть написаны на Python 3 и взаимодействовать с сетью только асинхронно.
- Авторы эксплоитов должны уметь использовать asyncio. Если в эксплоите произойдёт длительная блокирующая операция, всё это время клиент фермы не сможет атаковать другие команды.
- Для сервисов, использующих редкие протоколы взаимодействия (например, разные варианты RPC), может не существовать асинхронных библиотек.
В то время как мы не планируем добавлять поддержку асинхронных эксплоитов, вы можете попробовать ферму Андрея Гейна, использующую asyncio.