Участник:WGH/Attack-defense

Материал из SecSem Wiki
Перейти к навигации Перейти к поиску

Attack-defense — один из форматов проведения командных CTF.

Каждой команде даётся идентичная машина (vulnbox, это может быть образ виртуалки или реальная машина) с набором сервисов, реализующих какой-то функционал. Сервисы могут представлять собой веб-сайты, серверы текстовых или бинарных протоколов, и так далее.

У организаторов есть специальная проверяющая система (aka check system, scorebot, etc.), которая проверяет все сервисы на машинах всех команд, что они работают правильно. Если сервис не работает или работает неправильно, команда теряет очки. Доступность сервиса также называется SLA (service level agreement).

Кроме того, проверяющая система каждый раунд (длится несколько минут) размещает на всех сервисах всех команд так называемые флаги. Флаги представляют собой строку специального формата, например, FLGRXSGW3x049M38M. Через некоторое время в течение раунда проверяющая система возвращается и проверяет, что флаг всё ещё доступен. Если флаг был утерян, то считается, что сервис работает неправильно, и команда теряет очки SLA.

Цель игры состоит в поиске уязвимостей в сервисах, которые позволяют украсть флаги у команд соперников, и не дать соперникам стащить флаги у себя. Украденные флаги необходимо отправлять организаторам для получения очков.

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

Таким образом, очки команды складываются из трех факторов: очки SLA, очки атаки (украденные у других команд флаги), очки защиты (насколько хорошо команда защищает свои флаги). Формула подсчета очков зависит от конкретного CTF, но она так или иначе учитывает все эти факторы. Например, на RuCTF flag points просто умножается на процент SLA. В практически всех CTF команда будет терять из-за неработающего сервиса больше, чем от украденных флагов.

Практически всегда правила запрещают организовать DoS атаку на сервисы соперников путем генерации большого количества трафика. Однако атаки на логику сервиса (удаление флагов, zip-бомбы, regexp DoS, etc.) чаще всего разрещены. Если не получается эксплуатировать уязвимости для похищения флагов, может иметь смысл ронять сервисы у соперников, чтобы те теряли очки SLA. Но воровать флаги чаще всего выгоднее.

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

Организаторы игры дают доступ к скорборду, на котором отображается состояние игры. Как минимум, там всегда можно видеть информацию о SLA. Почти всегда видны очки всех команд, часто с разбивкой по сервисам и по типу очков (SLA/attack/defense), что позволяет обнаруживать атаки против нас.

Пример сервиса

Пожалуй, самый банальный пример сервиса на CTF — это сайт для хранения заметок.

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

Уязвимость будет тем или иным способом давать возможность читать заметки пользователя без ввода правильного пароля.

Как вообще играть

  • Никогда не надо пытаться делать что-то в одиночку. Необходимо найти группу людей, которая занимается решением того же сервиса, что и читатель, и заниматься этим вместе.
  • Стоит следить за внутренним командным чатом, где могут быть важные объявления. Там будут выкладывать инструкции для доступа к машине, краткие описания сервисов, информация об атаках против нас, и т.д.
  • Для изучения сервиса можно взаимодействовать с ним снаружи (заходить на сайт браузером, если это веб), читать исходники, изучать базы данных, смотреть в дампы трафика, где будет записано общение проверяющей системы, etc.
  • Для просмотра дампов сетевого трафика у нас есть специальный программный комплекс. Ссылка на него будет в чате и/или на странице вики, посвященной конкретной игре.
  • Приоритет надо отдавать поддержке SLA (если из правил подсчета очков не следует обратное, что очень маловероятно). Уязвимый сервис лучше, чем лежащий. Однако если уязвимость позволяет положить вулнбокс целиком при помощи DoS, пожертвовать одним сервисом может быть более предпочтительным.
  • Если сервис был взломан, и у нас украли флаг, почти всегда имеет смысл прервать текущую активность (вдумчивое чтения кода сервиса, который был только что взломан) и заняться поиском эксплоита в дампе трафика, чтобы закрыть уязвимость и повторить эксплоит.
  • При внесении любых правок в код сервиса и при работе с базой на вулнбоксе нужно быть очень осторожным, чтобы ничего не сломать. Всегда иметь резервные копии.
  • Для автоматизации запуска эксплоитов у нас также есть программный комплекс, ферма (кодовое название: клуб любителей MLP). Аналогично дампам трафика, ссылка будет в чате и в вики.

Ссылки