...

пятница, 6 марта 2015 г.

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

image Доброго времени суток!

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 минуты, а затем стабильно работал.


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


image


image


image


image


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


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


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


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий