Интро
Привет, меня зовут Мартин Ваня и я довольно редко пишу посты в клубе. Да и комментарии тоже. Да и читаю не часто, разве что Дайджест от Паши.
Но как-то так случилось, что в этом году я поехал на Кемп и решил сделать там CTF. В этом посте (посту?) я напишу о том, что это такое, как оно прошло и что из этого всего вышло.
Зачем на самом деле пишется этот пост
Чтоб дать ссылку на мой гитхаб, разумеется. Если вы уже в теме CTF - изучайте задачки, форкайте бота, делайте своё и тащите в клуб - порешаем!
Если нет - откройте в новой вкладке и продолжайте читать!
Что такое CTF
Capture The Flag - это такой режим игры в мультиплеерных шутерах, когда надо отобрать флаг вражеской команды и доставить его на базу. Кто больше флагов принёс - тот и победил.
А ещё - это соревнование, когда нужно решить задачу, получить доказательство решения (флаг) и отнести его на базу (в систему, которая считает очки). Кто больше флагов принёс - тот и победил.
Обычно задачи - это сервисы, которые нужно взломать. Но это обычно...
Как это было на Кемпе
Шаг 0 - питч идеи
Когда пришла пора заполнять заявки на активности, я написал там, что могу провести CTF. Я проводил их уже много, даже писал задачи на заказ, вроде бы моя область экспертизы.
Ну написал и написал.
Когда меня добавили в чатик и сказали, что моя идея принята - я сначала предложил сделать классический CTF: толпа хакеров сидит с ноутбуками и ломает всё подряд. Но мою идею засрали не одобрили.
Шаг 1 - сбор требований
Основных требований было 2:
- Игра должна быть доступна с телефона.
- Игра должна вовлекать, а не отвлекать.
Из пункта 1 вытекает необходимость написания telegram-бота.
Из пункта 2 - коллаборация с другими активностями.
По итогам двухнедельного смотрения в стену я предложил делать гибридный CTF, с простыми задачами на взлом и оффлайн задачками, требующими взаимодействия с окружением.
Шаг 2 - поиск сообщников
Я начал искать людей, которые готовы были интегрировать свою движуху с моей.
Кто-то отозвался добровольно, остальных я долгое время заебывал уговаривал по чатам.
Итого: из 25 заданий - 9 требовали присутствия на Кемпе и хождения ногами по локациями, я остальные решались с телефона.
Шаг 3 - написание бота
Я написал его на Rust, разумеется. Внутри есть асинхронность, каналы, rate limit на token bucket алгоритме, интеграция с Vas3k API и админские команды, позволяющие управлять заданиями прямо из чата.
Шаг 4 - создание заданий
Интересный челленж был только один: дать задачки на шелл так, чтоб они работали с телефона.
Тут помог проект tty-share и немного кода на Perl :)
Шаг 5 - деплой и тестирование
В телеграм-чат про CTF к тому времени пришло много людей и некоторые согласились мне помочь. Спасибо вам!
Проведение
Пока мы ехали на Кемп на автобусах, я открыл задания для всех и написал пост в анонсах. По приезду я ещё походил и позаёбывал поуговаривал людей добавить оффлайн флагов на их события и всё поехало. Так появились флаги на карте, на радио и на почте.
Некоторые оффлайн флаги были очень креативны - например, кепка кальянщика :)
Некоторые требовали преуспеть в другой активности - например, решить задачи в игре Го.
Статистика
Всего в бота написало 57 человек, а решили хоть одно задание - 22.
8 человек решили 10 и более заданий.
Никто не решил все задания.
Итоги
Внезапно позвали на сцену в субботу и пустили к сундуку сокровищ.
Зачем еще был написан этот пост
Если вы играли в CTF - напишите, почему вы в него играли и что вам зашло.
Если вы решили не играть - напишите, почему нет?
Это поможет сделать следующий CTF лучше!
Спасибо :)
О, отдельное спасибо за CTF, получилось очень прикольно. Я начал участвовать с самого начала, кажется ещё в автобусе, и потом было забавно позалипать на задания в перерывах между активностями, ожидая начала какой-то движухи или случайно замечая флаги в неожиданных местах (я прям кайфанул когда увидел флаг на карте на чьей-то чужой фотке). Из того "что сделать лучше" могу предложить во-первых изначально запланировать постепенное наполнение флагами в течение всего кемпа - я почему-то стремился как можно скорее набрать флаги в певые два дня, поэтому пристал к бармену, почте и остальным когда они ещё не были готовы и во второй раз не подходил. И второе - динамичные флаги хотелось бы сделать менее динамичными. Флаг на "кальянной станции" я пытался найти несколько раз, но видимо всегда в отсутствие нужного кальянщика с кепкой :-)
Я когда ехала в автобусе на кэмп и увидела эти задания, они вызвали у меня много негодования - хоть открывать инспектор нигде не понадобилось, решать их без ноутбука все равно было чертовски неудобно. В итоге я думаю нарешали какое-то вменяемое число задачек только те, у кого с собой он был. У меня был)
Мне в целом нравятся подобные задачки, но уровень у меня невысокий. Я решил несколько штук ещё по дороге на кэмп и в паре заданий прошел часть пути, но не догадался до конца. А на самом кэмпе было уже не до того. И ходить по мероприятиям в поисках флагов мне было как-то лень. Я выбирал то, что мне было интересно, а про флаги не думал. Поэтому сразу стало понятно, что бороться за победу смысла нет. Так что я порешал ради удовольствия и забросил. И себе на лекцию решил не добавлять флаг, потому что не хотелось бы, чтобы это влияло на выбор людей приходить. Спасибо тебе, задачки классные
У меня такое ощущение что я был добавлен в исключения, потому что так и не понял в какую дверь нужно зайти чтобы учавствовать. )