/
Правила
Правила RuCTF
В начале игры команды получают идентичные серверы
Игра начинается с выдачи участникам идентичных серверов с предустановленным набором уязвимых сервисов. В течение первого часа после выдачи игрового образа сегменты сети закрыты, и командам следует сконцентрироваться на администрировании своего игрового сервера и анализе уязвимостей. По истечение этого часа сеть открывается, и в течение 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)))
>>>
/ 1
/ 2
/ 4
Начисление баллов
/ 3
Команда
SLA(team, service)
UP
CORRUPT
DOWN
MUMBLE
Стоимость флага
Время жизни флага
FlagPoints(team, service)
Сервис
Флаг
Группа людей во главе с капитаном.
— это доля от прошедшего игрового времени, в течение которой данный сервис у данной команды был в состоянии UP. Например, если сервис ни разу за прошедшее игровое время не опускался, SLA будет равен 1. Если прошло 4 часа игры, и сервис работал первый час, а потом опустился на 3 часа, SLA будет равен 0.25.
означает, что сервис доступен по сети, отвечает на запросы и ведет себя так, как того ожидает проверяющая система.
означает, что сервис доступен по сети, но не может отдать один из предыдущих флагов.
означает, что сервис недоступен по сети.
означает, что сервис доступен по сети, но ведет себя не так, как того ожидает проверяющая система. Например, если HTTP сервер не отвечает на запросы.
— это количество FlagPoints, которое получает атакующая команда и, соответственно, теряет атакуемая за захваченный флаг, сданный атакующей командой в проверяющую систему.
Это число зависит от мест в скорборде, занимаемых атакующей и атакуемой командами в прошлом раунде относительно момента сдачи флага. Очки за флаг засчитываются даже если соответствующий сервис атакующей команды не был в состоянии UP.
— это количество времени, в течение которого флаг должен быть доступен в сервисе для запросов проверяющей системы. Для получения FlagPoints, команде нужно успеть захватывать и сдавать в проверяющую систему флаги до того как у них истекает время жизни.
— это неотрицательное число, которое коррелирует с тем, насколько хорошо команда понимает данный сервис. Если команда умеет эксплуатировать уязвимости в этом сервисе, и закрыла их у себя, ее FlagPoints будет расти.

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


В начале игры значение FlagPoints всех сервисов у всех команд равно количеству команд в игре.
Уязвимое приложение, специально подготовленное командой разработчиков для игры.
Строка, удовлетворяющая регулярному выражению: /^\w{31}=$/. Время жизни флага ограничено, и устаревшие флаги не влияют на начисление очков.
Проверяющая система
Жюри
КОМАНДАМ РАЗРЕШЕНО
КОМАНДАМ ЗАПРЕЩЕНО
Уязвимый образ
Игровой раунд
Автоматическая система, которая заносит в сервисы флаги, проверяет работоспособность сервисов и начисляет очки. Начисленные очки наряду с состоянием сервисов отображаются в скорборде.
Группа людей, ответственная за проведение игры. Жюри делает все возможное для того, чтобы игра получилась качественной, честной, и доставила участникам удовольствие. Тем не менее, жюри может наказать или дисквалифицировать команду за нарушение правил, а также может принимать решения в критических ситуациях, не описанных в данных правилах.

Команды должны быть готовы отнестись к таким решениям с пониманием. Также жюри определяет победителя. По большей части, это решение основывается на скорборде.
Виртуальная машина, которая содержит в себе все сервисы.

Предоставляется к началу игры в виде некого игрового образа. Образ идентичен для всех команд.
Промежуток времени, за который проверяющая система заносит в сервисы новые флаги, проверяет наличие старых флагов, и начисляет очки за защиту. Все раунды длятся равное количество времени, от 1 минуты, в зависимости от игры.
/ 1.
/ 1.
Делать все, что заблагорассудится внутри своего сегмента сети. Скорее всего, команды захотят изменить конфигурацию своего сервера и закрыть уязвимости в своих сервисах;
Атаковать системы организаторов
Атаковать другие команды в пределах игровой сети. Неожиданно, да?
Фильтровать трафик от других команд
/ 2.
/ 2.
Генерировать большой объем трафика, представляющий угрозу стабильности систем организаторов или других команд.
/ 3.
Определения
с предустановленным набором уязвимых сервисов

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

Не забудьте перед игрой прочитать его еще раз, на всякий случай :)
Очень непросто формализовать набор правил,
Ход игры
В начале игры команды получают
идентичные серверы с предустановленным набором уязвимых сервисов

Задача участников — найти уязвимости, закрыть их у себя и воспользоваться ими для получения приватной информации (флагов) у соперников. За процессом игры непрерывно следит проверяющая система жюри, регулярно помещая новые флаги на серверы команд. Кроме того, система принимает от команд флаги, захваченные у соперников.
/ 5
СДАЧА ФЛАГОВ
/ 1
$ curl -s -H 'X-Team-Token: your_secret_token' -X PUT -d '["PNFP4DKBOV6BTYL9YFGBQ9006582ADC=", "STH5LK9R9OMGXOV4E06YZD71F746F53=", "0I7DUCYPX8UB2HP6D6UGN86BA26F2FE=", "PTK3DAGZ6XU4LPETXJTN7CE30EC0B54="]' http://monitor.ructfe.org/flags | json_pp

[

{

"msg" : "[PNFP4DKBOV6BTYL9YFGBQ9006582ADC=] Denied: no such flag",

"status" : false,

"flag" : "PNFP4DKBOV6BTYL9YFGBQ9006582ADC="

},

{

"msg" : "[STH5LK9R9OMGXOV4E06YZD71F746F53=] Denied: flag is your own",

"flag" : "STH5LK9R9OMGXOV4E06YZD71F746F53=",

"status" : false

},

{

"status" : false,

"flag" : "0I7DUCYPX8UB2HP6D6UGN86BA26F2FE=",

"msg" : "[0I7DUCYPX8UB2HP6D6UGN86BA26F2FE=] Denied: you already submitted this flag"

},

{

"msg" : "[PTK3DAGZ6XU4LPETXJTN7CE30EC0B54=] Accepted. 1.73205080756888 flag points",

"flag" : "PTK3DAGZ6XU4LPETXJTN7CE30EC0B54=",

"status" : true

}

]
СХЕМА СЕТИ
ОБЛАКО
/ 1
Командная сеть для команды с ID N: 10.A.B.0/24, где A = 60 + N / 256, B = N % 256.
В этом году незащищённые образы будут снова развёрнуты в облаке.
Вот инструкция, как настроить образ в облаке:
/ 2
/ 0.
/ 4.
Войдите в облачную веб-консоль https://cloud.ructfe.org . Интерфейс будет открыт 3 октября 2021 г. в 10:00 по МСК.
Подключитесь к незащищенной виртуальной машине с помощью клиента ssh: # get_vm_info
Создайте незащищенную виртуальную машину
# create_vm
После начальной настройки сделайте свой первый снимок виртуальной машины, чтобы вы могли вернуться в это сохраненное состояние позже:
# take_snapshot <имя>
/ 1.
/ 5.
Получите конфигурацию vpn для входа в сегмент вашей сети.
# get_team_openvpn_config

Сохраните как ructfe.ovpn
Подключите сеть vm к игровой сети: # connect_vm_to_game_network
Теперь другие команды и проверочная система могут получить доступ к vm.
Кроме того, теперь у вас должен быть доступ к другим командам и проверяющей системе (если, конечно, игровая сеть открыта).
/ 2.
/ 6.
Раздайте конфиг из предыдущего шага каждому члену команды и запустите openvpn:
Linux и MacOS: openvpn ructfe.ovpn
Windows: щелкните правой кнопкой мыши ructfe.ovpn -> Запустить OpenVPN в этом файле конфигурации.
Приятной игры!
/ 3.
/ 8.
Если вы впервые слышите об этом, наш FAQ должен вам помочь.
Made on
Tilda