Технологии безопасности

Сайт посвященный вопросам безопасности

SibSUTIS CTF 2015: Как мы проводили свои студенческие соревнования

SibSUTIS CTF 2015: Как мы проводили свои студенческие соревнования — 1SibSUTIS CTF 2015: Как мы проводили свои студенческие соревнования — 1 Доброго времени суток!

52 участника, 11 команд, 8 часов – таковы основные цифры соревнования по информационной безопасности SibSUTIS CTF 2015, которое 21 февраля впервые состоялось в Сибирском государственном университете телекоммуникаций и информатики (г. Новосибирск).

Хотел бы рассказать, как проходила подготовка этих соревнований от лица организаторов.

Немного о CTF

CTF (Capture the Flag) — командные соревнования по информационной безопасности.

Существует несколько форматов, основные из них:

Tasks — командам дается список задач из различных категорий, каждое из заданий оценивается в определенное количество баллов, даваемое за решение. По итогам выигрывает команда, набравшая большее количество баллов. В случае равенства баллов выше оценивается команда, решившая задачи за меньшее количество времени;
Classic — командам дается доступ к идентичным виртуальным машинам, доступные в локальной сети. Обычно это какой либо Linux дистрибутив, на котором запущены различные web-службы. Командам необходимо исправить все найденные уязвимости и провести атаки на серверы конкурирующих команд. За атаки и защиты дают определенное количество баллов. Побеждает команда, набравшая больше всего баллов за успешные атаки и защиты.

В России данное движение стремительно набирает обороты, из крупных мероприятий стоит отметить RuCTF Positive Hack Days.

Об организаторах и формате соревнований

В основном в качестве организаторов выступали студенты 2-х и 3-х курсов СибГУТИ кафедр БиУТ (Кафедра безопасности и управления в телекоммуникациях) и ПМиК (Кафедра прикладной математики и кибернетики) в количестве 7-и человек.

У нас был достаточный опыт CTF соревнований в качестве участников (по Сибирскому ФО), но вот в роли организаторов мы выступали впервые. С форматом соревнований мы остановились на Tasks-based, так как он был в какой-то степени проще для нас в реализации, да и мы точно не знали, в каком количестве будет участников и какими знаниями они будут обладать.

Подготовка к соревнованиям

На всю подготовку у нас было около 21-го дня. Первым делом был составлен регламент соревнований, в котором определялся формат проведения, количество участников (от 3-х до 7-и человек в команде), правила для участников и категории с заданиями.

Мы составили следующие категории заданий:

Reversing – исследование и обратная обработка прикладного ПО;
Web – исследование веб скриптов на уязвимости (blackbox);
Crypto — криптографические задачи;
Forensic – задачи на исследование в области компьютерных преступлений;
Joy – общие интересные задачи, завязанные в основном на логику.

В каждой из категории было по 3 задания, которые оценивались от 100 до 300 баллов в зависимости от сложности задания.

Далее было распределение обязанностей, кто чем будет заниматься для подготовки, а именно необходимо было (по приоритету):

Договорится с администрацией ВУЗа о месте и времени проведения соревнований, а так же призах для победителей;
Настроить сервер и поднять на нем систему для проверки ответов, а так же страницу регистрации команд;
Составить 15 задач во всех категориях;
Логотип соревнований, реклама в соц. сетях, расклеить листовки по ВУЗу;
Подготовить место для проведения соревнований;
Ну и куча мелочей…

Я занимался настройкой сервера и составлял задачи. Немного расскажу о тонкостях. В наличии у нас имелся «ламповый» сервер, точную конфигурацию не назову, но что-то вроде 4-х ядерного Intel Xeon — 3.2Ghz и 16Gb оперативной памяти. На нем стоит Debian 7, имеется статичный IP-адрес, выходящий во внешнюю сеть.

Для наших задач необходимо было поднять web-сервер, что было реализовано через виртуализацию Docker. До того времени с докером дел не имел и поэтому поднятие контейнера с сервером и с пробросом портов во внешнюю сеть принесло мне парочку счастливых бессонных ночей, перед тем как я окончательно разобрался, как оно работает.

В итоге в контейнере был установлен стандартный набор: Ubuntu + Apache + MySQL + PHP.

Далее в очень сжатые сроки была сделана простенькая страничка регистрации для участников и «CTF Managment System» с достаточно скромным функционалом:

Добавление тасков (заголовок, описание, количество очков за правильное решение, правильный ответ на задание);
Рейтинговая таблица;
Возможность публиковать новости;
И шпионская штука для того, чтобы смотреть, какие варианты ответов пытаются подставить команды к заданию.

Все остальное время был упор на разработку заданий.

За неделю до соревнований была открыта страница регистрации для участников и в первые 4 дня было зарегистрировано всего 4 команды — около 15-20 человек в общем (на большее мы если честно и не рассчитывали), но в последние 2 дня случилось нечто страшное: зарегистрировалось еще 7 команд и в общем счете у нас было 52 человека в качестве участников.

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

Но помимо этого, как оказалось, за день до соревнований в библиотеке есть некоторые проблемы с интернетом — всего лишь 1 Wi-Fi точка доступа (в идеале рассчитанная на 20 человек) и 4 интернет розетки. Но и это еще не все. По каким то неведомым для нас причинам наш сервер был недоступен из этой самой злосчастной библиотеки.

Война с нашим универским интернет-провайдером ни к чему не привела — они настаивали на том, что проблемы с сервером (если что, сервер абсолютно везде работал и даже Host-Tracker это подтверждал), поэтому пришлось решать проблему в обход провайдера — мы сделали проксирование через малазийский VPS нашего друга.

Так же добавили в библиотеке еще 1 Wi-Fi точку доступа и поставили 2 сетевых коммутатора.

День соревнований

Соревнования проводились в субботу — 21 февраля. Открытие проходило в актовом зале, где администрация и организаторы сказали пару вступительных слов участникам. Далее все участники перешли к месту проведения и в 10:00 по Новосибирскому времени соревнования были открыты.

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

Так же к нашему счастью критичных проблем с интернетом особо не было, была небольшая заминка на старте соревнований — он упал на 1,5 минуты, а затем стабильно работал.

Небольшой фотоотчет:

SibSUTIS CTF 2015: Как мы проводили свои студенческие соревнования — 2SibSUTIS CTF 2015: Как мы проводили свои студенческие соревнования — 2

SibSUTIS CTF 2015: Как мы проводили свои студенческие соревнования — 3SibSUTIS CTF 2015: Как мы проводили свои студенческие соревнования — 3

SibSUTIS CTF 2015: Как мы проводили свои студенческие соревнования — 4SibSUTIS CTF 2015: Как мы проводили свои студенческие соревнования — 4

SibSUTIS CTF 2015: Как мы проводили свои студенческие соревнования — 5SibSUTIS CTF 2015: Как мы проводили свои студенческие соревнования — 5

К концу дня ожесточенная борьба продолжалась до самого закрытия соревнований. Команда, занимавшая второе место, решила задание, которое бы вывело их на 1-е место, но они не успели отправить ответ на 1 минуту. Система уже была закрыта.

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

P.S. Если кому интересно, могу позже выложить архив заданий.