Доброго времени суток!
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 это подтверждал), поэтому пришлось решать проблему в обход провайдера — мы сделали проксирование через малазийский
Так же добавили в библиотеке еще 1 Wi-Fi точку доступа и поставили 2 сетевых коммутатора.
День соревнований
Соревнования проводились в субботу — 21 февраля. Открытие проходило в актовом зале, где администрация и организаторы сказали пару вступительных слов участникам. Далее все участники перешли к месту проведения и в 10:00 по Новосибирскому времени соревнования были открыты.
Команды показали достаточно высокий уровень знаний — 6 команд решило больше половины предложенных заданий и перешли планку за 2000 очков. Все команды были за честную игру, во время проведения были найдены некоторые уязвимости в чекере дающее преимущество, но об этом сразу же сообщали организаторам. По ходу соревнований все уязвимости исправлялись.
Так же к нашему счастью критичных проблем с интернетом особо не было, была небольшая заминка на старте соревнований — он упал на 1,5 минуты, а затем стабильно работал.
Небольшой фотоотчет:
К концу дня ожесточенная борьба продолжалась до самого закрытия соревнований. Команда, занимавшая второе место, решила задание, которое бы вывело их на 1-е место, но они не успели отправить ответ на 1 минуту. Система уже была закрыта.
Все участники остались довольны. После соревнований мы с ними побеседовали, провели разборы некоторых заданий, которые были сложны для решения.
P.S. Если кому интересно, могу позже выложить архив заданий.
Автор: ExtremeCode