
Недавно состоялись соревнования CTF Kazan — отборочный тур проходил 17-18 октября, а финал — в минувшие выходные, 8 ноября. Организаторами мероприятия выступали компании ICl Системные технологии и Школа 21. Казалось бы, когда на кону 300 тысяч рублей, все слова излишни. Но давайте всё-таки поговорим о плюсах и минусах данного соревнования.
Отборочный тур
На отборе были представлены задания в классических категориях. Было довольно необычно, что упор был сделан на бинарные таски (категории reverse и pwn). Сложность задач была довольно низкая, но всё же нужно помнить, что это студенческие соревнования, а уровень студентов по всей стране разный.
В начале ощущались некоторые проблемы с доступом к платформе, но они довольно быстро были устранены.
Хочется отметить хорошую идею с генерацией докер-контейнеров по нажатию кнопки. Это довольно сильно облегчает общую нагрузку на инфраструктуру. И таким образом возможно довольно просто отслеживать не особо умные команды, которые могут поменяться флагами (казалось бы, ситуация странная, но и такое бывает).
Качество заданий было хорошим. Откровенных тасков на угадывание не было, но немного смутил брутфорс в ревёрсе.
Кажется, что реклама отборов была сделана не очень удачно: участие приняло немного команд, и высокой конкуренции не было, хотя призовой фонд довольно внушительный для студенческих соревнований в РФ (на данный момент соревнований с призовым фондом очень мало).
В целом, этап прошёл хорошо, но стоит сделать акцент на более активной рекламе и сложности задач.
Результаты отбора:

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

Соревнованиям предшествовал конференционный день. В целом, мне не сильно нравится идеи проведения лекций/докладов на финале соревнований, но я понимаю, для чего это делается.
Доклады были довольно общие, очевидно, не уровня крупных конференций. Интересно было послушать Андрея Масаловича, но он рассказывал всё то же самое, что и на смене в Сириусе.
Зал, в котором проходили лекции, был уютным.
На следующий день были сами соревнования в формате A/D. Размещение команд производилось по лекционным аудиториям, максимум 3 команды в одном помещении. Парты были не совсем удобные, гораздо комфортнее играть за круглым столом, но в данном случае выбирать не приходилось.

Сложность сервисов была невысокой, даже можно сказать очень низкой.
Два сервиса, представляющие собой веб-приложения, содержали множество однотипных и простых уязвимостей и несколько бэкдоров.
Был сервис с RPG-игрой на питоне, как оказалось позже, эта игра была практически полностью скопирована с гитхаба. В игре также была простая уязвимость, но она хоть как-то была спрятана. Однако, найти её было довольно легко, т.к. флаг мог хранится только в одном месте, и это место сохранялось в файл, а открытие файла было всего в двух функциях во всём проекте.
В итоге оставалась надежда на бинарный сервис, но, к сожалению, автор неправильно скомпилировал его и забыл отключить опцию FORTIFY_SOURCES, что привело к тому, что проэксплуатировать уязвимости в данном бинарнике стало невозможно. Единственные флаги по данному сервису мы получили посимвольным брутом флага через логическую уязвимость при логине.

Кроме нас активно атаковали все сервисы две команды — [SPbCTF] Fargate 🦜🚩 и Борис Абисс. Отдельное спасибо хочется сказать команде [SPbCTF] Fargate 🦜🚩, за то, что не дали нам расслабиться: нашли пропущенную нами уязвимость и запустили на нас сплоит, заставив на некоторое время понервничать.
По ощущениям, некоторые сервисы (помимо game), были не дописаны/доделаны. Также было странно, что из веб-сервиса на ноде можно было удалить часть функционала абсолютно без задних мыслей.
Тоже самое и с сервисом game. Чекеры работали слишком предсказуемо и во многих местах не рандомили значения. Стоит отметить, что адекватная эксплуатация сервиса game требовала довольно высоких вычислительных мощностей, т.к. нужно было найти более 16 миллионов строк длиной в 15 символов, от которых получаются уникальные 3 байта при хэшировании с использованием sha3_256.

Подытожим: сервисы вызывали множество вопросов. Но, думаю, это был хороший опыт для авторов и развития регионального CTF-коммьюнити. Всё таки, это соревнование для студентов, и ожидать чего-то сверхъестественного не стоило.
По итогу мы заняли первое место, чему очень рады. Второе место заняли [SPbCTF] Fargate 🦜🚩, а третье — Борис Абисс. Хотя, каждая из этих команд вполне могла занять первое место на таких сервисах, потому что игра была больше на скорость и успешность работы до открытия сети (особенно по сервису game).



Если подвести итоги, то соревнования можно считать состоявшимися. И думаю, первый опыт нужен всем, и не стоит сильно ругать и журить организаторов. Надеюсь, что они исправят все ошибки и в следующем году соревнования станут только лучше.
Поездкой лично я доволен, понравилось афтепати, на котором удалось пообщаться с ребятами из Питера лично, что не часто бывает.
Надеюсь, все получили удовольствие и положительные эмоции.

Финальный скорборд:
