В начале игры команды получают идентичные серверы
Игра начинается с выдачи участникам идентичных серверов с предустановленным набором уязвимых сервисов. В течение первого часа после выдачи игрового образа сегменты сети закрыты, и командам следует сконцентрироваться на администрировании своего игрового сервера и анализе уязвимостей. По истечение этого часа сеть открывается, и в течение 8 часов команды могут эксплуатировать уязвимости с целью получения флагов у других команд.
Ключевыми понятиями в начислении очков являются понятия SLA и FlagPoints. Эти величины индивидуальны для каждого сервиса каждой команды. В каждый момент времени очки команды вычисляются как сумма попарных произведений SLA сервиса на FlagPoints сервиса для всех сервисов.
Если флаг захватывается у команды, находившейся в скорборде выше атакующей
в предыдущем раунде, то за него атакующей команде начисляется максимальное количество FlagPoints. Это число равно количеству играющих команд. В противном случае, начисляемое количество FlagPoints экспоненциально падает от максимального к 1. Атакуемая команда, соответственно, теряет то же самое количество FlagPoints, но их итоговое количество у нее никогда не опускается ниже нуля.
К счастью, весь этот сложный текст можно лаконично изложить в виде псевдокода:
Помимо текущих результатов, скорборд отображает SLA, FlagPoints и статус каждого сервиса у каждой команды.
Статусы бывают такими:
def on_game_start(team):
team.sla = [1] * number_of_services
team.flagpoints = [0] * number_of_services
def on_flag_post(attacker, flag):
victim = flag.owner
victim_pos = scoreboard[victim]
attacker_pos = scoreboard[attacker]
service = flag.service
max = number_of_teams
flag_score = attacker_pos > victim_pos ? max : exp(log(max) * (max - victim_pos) / (max - attacker_pos))
attacker.flagpoints[service] += flag_score
victim.flagpoints[service] -= min(victim.flagpoints[service], flag_score)
def get_score(team):
return sum(map(lambda x: x[0] * x[1],
zip(team.sla, team.flagpoints)))
FlagPoints(team, service)
Группа людей во главе с капитаном.
— это доля от прошедшего игрового времени, в течение которой данный сервис у данной команды был в состоянии UP. Например, если сервис ни разу за прошедшее игровое время не опускался, SLA будет равен 1. Если прошло 4 часа игры, и сервис работал первый час, а потом опустился на 3 часа, SLA будет равен 0.25.
означает, что сервис доступен по сети, отвечает на запросы и ведет себя так, как того ожидает проверяющая система.
означает, что сервис доступен по сети, но не может отдать один из предыдущих флагов.
означает, что сервис недоступен по сети.
означает, что сервис доступен по сети, но ведет себя не так, как того ожидает проверяющая система. Например, если HTTP сервер не отвечает на запросы.
— это количество FlagPoints, которое получает атакующая команда и, соответственно, теряет атакуемая за захваченный флаг, сданный атакующей командой в проверяющую систему.
Это число зависит от мест в скорборде, занимаемых атакующей и атакуемой командами в прошлом раунде относительно момента сдачи флага. Очки за флаг засчитываются даже если соответствующий сервис атакующей команды не был в состоянии UP.
— это количество времени, в течение которого флаг должен быть доступен в сервисе для запросов проверяющей системы. Для получения FlagPoints, команде нужно успеть захватывать и сдавать в проверяющую систему флаги до того как у них истекает время жизни.
— это неотрицательное число, которое коррелирует с тем, насколько хорошо команда понимает данный сервис. Если команда умеет эксплуатировать уязвимости в этом сервисе, и закрыла их у себя, ее FlagPoints будет расти.
Если она не умеет эксплуатировать уязвимости в этом сервисе и не озаботилась их закрытием, ее FlagPoints будет стремительно приближаться к нулю в результате атак других команд.
Если она закрыла уязвимости, но не научилась их эксплуатировать, ее FlagPoints не будет меняться.
В начале игры значение FlagPoints всех сервисов у всех команд равно количеству команд в игре.
Уязвимое приложение, специально подготовленное командой разработчиков для игры.
Строка, удовлетворяющая регулярному выражению: /^\w{31}=$/. Время жизни флага ограничено, и устаревшие флаги не влияют на начисление очков.
Автоматическая система, которая заносит в сервисы флаги, проверяет работоспособность сервисов и начисляет очки. Начисленные очки наряду с состоянием сервисов отображаются в скорборде.
Группа людей, ответственная за проведение игры. Жюри делает все возможное для того, чтобы игра получилась качественной, честной, и доставила участникам удовольствие. Тем не менее, жюри может наказать или дисквалифицировать команду за нарушение правил, а также может принимать решения в критических ситуациях, не описанных в данных правилах.
Команды должны быть готовы отнестись к таким решениям с пониманием. Также жюри определяет победителя. По большей части, это решение основывается на скорборде.
Виртуальная машина, которая содержит в себе все сервисы.
Предоставляется к началу игры в виде некого игрового образа. Образ идентичен для всех команд.
Промежуток времени, за который проверяющая система заносит в сервисы новые флаги, проверяет наличие старых флагов, и начисляет очки за защиту. Все раунды длятся равное количество времени, от 1 минуты, в зависимости от игры.
Делать все, что заблагорассудится внутри своего сегмента сети. Скорее всего, команды захотят изменить конфигурацию своего сервера и закрыть уязвимости в своих сервисах;
Атаковать системы организаторов
Атаковать другие команды в пределах игровой сети. Неожиданно, да?
Фильтровать трафик от других команд
Генерировать большой объем трафика, представляющий угрозу стабильности систем организаторов или других команд.
с предустановленным набором уязвимых сервисов
Задача участников — найти уязвимости, закрыть их у себя и воспользоваться ими для получения приватной информации (флагов) у соперников. За процессом игры непрерывно следит проверяющая система жюри, регулярно помещая новые флаги на серверы команд. Кроме того, система принимает от команд флаги, захваченные у соперников.
по которым проводится CTF, поэтому этот раздел может поменяться в любой момент до начала игры.
Не забудьте перед игрой прочитать его еще раз, на всякий случай :)
Очень непросто формализовать набор правил,
В начале игры команды получают
идентичные серверы с предустановленным набором уязвимых сервисов
Задача участников — найти уязвимости, закрыть их у себя и воспользоваться ими для получения приватной информации (флагов) у соперников. За процессом игры непрерывно следит проверяющая система жюри, регулярно помещая новые флаги на серверы команд. Кроме того, система принимает от команд флаги, захваченные у соперников.