Как прошёл чемпионат RuCTF глазами победителей

36826fa3531e433f56e9273124952c12.jpg

Всем привет! На днях закончился пятнадцатый сезон студенческого чемпионата по кибербезопасности RuCTF 2023, который активно поддерживала VK. В чём суть соревнования: в начале игры команды получают идентичные серверы с предустановленным набором уязвимых сервисов. Задача участников — найти уязвимости, закрыть их у себя и воспользоваться ими для получения приватной информации (флагов) у соперников. За процессом игры непрерывно следит проверяющая система жюри, регулярно помещая новые флаги на серверы команд. Кроме того, система принимает от команд флаги, захваченные у соперников.

В соревновании этого года победила команда C4T BuT S4D (Cat But Sad), с чем мы её и поздравляем! В этот раз участвовало семь человек из общего состава:

  • Илья Греков (капитан, учится в магистратуре МАИ, но на момент отбора был бакалавром ВШЭ);

  • Роман Никитин (выпускник ВШЭ);

  • Никита Покровский (МИРЭА);

  • Артем Михеев (ИТМО, 3 курс);

  • Кокорин Всеволод (ИТМО, 1 курс);

  • Федотов Иван (ИТМО, 1 курс);

  • Вячеслав Лучкин (ВШЭ, 1 курс).

В честь этого события мы взяли небольшое интервью у «грустных котиков», которые рассказали нам про то, как проходило соревнование, про самые интересные задачи и дали рекомендации, с чего начать подготовку к CTF. 

dcbb0101029504666daf41f94dd7a98e.jpg

Какой из сервисов RuCTF в этом году вам больше всего запомнился и почему?

Ответ на этот вопрос у каждого из нас будет своим. Авторы соревнования подготовили 9 сервисов, и каждый из них имеет свою специфику. Например, некоторые задания содержат веб-уязвимости, другие подразумевают исследование бинарных файлов или криптографических алгоритмов. Каждый из нас смотрел те задания, в которых больше разбирается, это позволило эффективно распределять ресурсы.

На мой взгляд, внимания определённо заслуживает сервис scp. Он запомнился нестандартным для таких соревнований подходом. Обычно участникам выдаётся либо исходный код приложения, либо скомпилированный файл, логику которого предполагается восстановить при помощи обратного инжиниринга. Однако в этот раз сервис был написан на Java и скомпилирован с помощью технологии GraalVM — это затрудняло инжиниринг настолько, что участники не успели бы завершить его до конца CTF. В авторском решении предполагалось восстановить логику сервиса доступными средствами: наличием части функциональности на фронтенде и исследованием доступных строк в исполняемом файле.

Последний очный RuCTF проходил в 2019 году. Изменился ли с тех пор состав команды?

О да, и очень сильно: в апреле 2019 году нашей команды ещё не существовало :) В тот год в соревновании участвовала прародительница C4T BuT S4D — команда Shadow Servants, состоявшая из бывших учеников и на тот момент преподавателей Московской Школы программистов. C4T BuT S4D появились только летом 2019 года, и в первоначальном составе нас было всего шесть человек. Со временем мы начали приглашать в команду сильных игроков со всей России, так что на сегодняшний день в расширенный состав входит 18 участников. Так, например, в 2021 к нам присоединились несколько человек из Corrupted Pwnis, а в прошлом году мы объединились с частью школьной команды s3qu3nc3.

9e659ba255e491ad4a20190aaf244775.jpg

Есть ли разница между подготовкой и участием в онлайн- и оффлайн-соревнованиях?

Основная разница только в организационных вопросах: помимо бронирования билетов и отелей надо подбирать состав так, чтобы соответствовать правилам конкретного CTF. Очень часто организаторы прописывают требования к участникам: например, в финал проходят только студенты, либо студенты определённого возраста. Особенно это касается российских соревнований: в нашей стране проходит довольно мало открытых очных CTF. Нам здесь повезло, так как в C4T BuT S4D есть и школьники, и студенты, и опытные профессионалы.

С онлайн-соревнованиями проще: требования к возрасту или составу участников встречаются редко. Однако играть в такие CTF труднее морально: взаимодействовать внутри команды сильно сложнее, чем при очном присутствии. Поэтому на крупные и рейтинговые соревнования мы стараемся собираться вместе, в Москве или в Санкт-Петербурге.

Гонитесь ли за first blood?

В большинстве соревнований first blood — не более, чем приятная для самолюбия вещь, которая не влияет на результат игры. На некоторых соревнованиях организаторы и вовсе никак не подчёркивают этот момент. Однако на RuCTF используется такая формула для подсчёта очков: чем дольше сервис остаётся без решений, тем выше его стоимость на момент решения, а спустя какое-то время после first blood стоимость сервиса начинает падать. В таком формате действительно важно решать задания самыми первыми.

07f8d0382eb0e54e4e47f8372c2ec032.jpg

Как вы выбираете, какую команду атаковать первой?

Обычно эксплойты тестируются на NPC: организаторы иногда добавляют «пустую» команду, которая не управляется участниками и, соответственно, не может исправлять уязвимости в своих сервисах. Если такой команды нет, то подойдёт и команда из конца таблицы результатов — обычно это либо новички, либо команды, которые зарегистрировались, но в итоге не пришли на игру. Если эксплойт работает как надо, то он автоматически раскатывается на всех.

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

На RuCTF все участники — студенты. Если бы этого ограничения не было, то какого одного участника вашей команды вы бы добавили или заменили?

Мы бы добавили нашего «пенсионера» — Ивана Новикова. Он участвовал в RuCTF ещё в 2015 году, будучи школьником, в составе команды Shadow Servants. Так что в год, когда мы наконец заняли первое место, было бы здорово увидеть его в основном составе.

Помимо того, что вы играете в CTF, вы разрабатываете задания для соревнований. Как знания, полученные на других соревнованиях, помогают разрабатывать свои?

На самом деле, только участвуя во множестве соревнований можно делать задания высокого уровня. В первую очередь, повышается насмотренность: после нескольких десятков CTF вы начинаете понимать, какие задачи заходят хорошо, а какие не очень; как лучше подходить к организации соревнования; какие моменты важны для инфраструктуры и т.д. Причём очень важно участвовать не только в российских соревнованиях, а выбирать наиболее рейтинговые мероприятия на CTF Time.

К сожалению, многие российские CTF не могут похвастаться хорошим качеством заданий. Это связано как раз с тем, что их организаторы поучаствовали в небольшом количестве сомнительных чемпионатов, вдохновились ими и пошли лепить то же самое. С одной стороны, они делают полезное дело: повышают популярность CTF в России. Но возмущение участников после таких соревнований бывает настолько велико, что зачастую спонсоры решают больше не связываться с организацией CTF и не выделяют деньги даже на приличные мероприятия. Поэтому мы стараемся продвигать хорошие чемпионаты и пишем разборы интересных задач, чтобы другие разработчики видели достойный пример. И, конечно, делаем свои соревнования — в их разработке мы применяем лучшие практики, которым научились у других.

А есть ли пример, как опыт, полученный при разработке своего соревнования, помог при игре в CTF?

Поскольку мы развиваемся и как участники, и как организаторы, то мы хорошо знаем, как устроены процессы с обеих сторон CTF. Иногда это помогает получать преимущество перед теми, кто никогда не разрабатывал свои соревнования.

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

818537e1059118742c9318e08d3a9368.jpg

На своём сайте вы пишете много статей, а что нового вы узнали за время RuCTF?  

В последние годы на RuCTF также проходит конференция, на которой выступают приглашённые эксперты по инфобезопасности. К сожалению, она проходит одновременно с игрой, поэтому обычно нам не удаётся на неё попасть. Иногда организаторы выкладывают видеозаписи докладов, чтобы их можно было посмотреть уже после мероприятия.

Разработчики RuCTF каждый год стараются удивлять, как инфраструктурой, так и используемыми технологиями. Например, в 2017 году на столе у каждой команды стоял кластер из шести микрокомпьютеров Orange Pi Zero, на которых были запущены шесть сервисов. А в 2023 году одно из заданий было написано на Julia — языке программирования, с которым мы раньше не сталкивались. Всё это позволяет знакомиться с новыми технологиями, которые вряд ли можно встретить в обычной жизни.

Какой курс нужно пройти, чтобы начать участвовать в CTF? И чтобы стать такими же крутыми, как вы?

Базовые рекомендации кочуют из одного CTF-чата в другой и, к сожалению, не меняются уже много лет:

  1. Курс молодого бойца. Пособие написано чуть ли не 10 лет назад и уже глобально устарело, но чтобы узнать, что такое CTF, вполне подойдёт.

  2. Курс для новичков от команды из Югры. Хорошо изложена базовая теория для начинающих, есть задания для отработки знаний.

  3. Записи курсов SPbCTF. Подробные видео про разные категории, в том числе про формат Attack/Defense, есть много разборов конкретных заданий.

  4. Руководство для начинающих по Attack/Defense. Описание формата, пояснение основных терминов и первые шаги в процессе игры.

  5. Список полезных утилит для решения CTF.

  6. Список полезных ресурсов для изучения CTF.

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

Почему CTF полезен каждому разработчику, а не только безопасникам?

Очевидный ответ: знание популярных уязвимостей поможет избежать их при разработке своего продукта. Но есть и менее очевидные выгоды.

Во-первых, при решении заданий участники тренируют важный навык, который необходим разработчику практически каждый день: умение находить баги в чужом коде. Это очень помогает при рецензировании кода, когда нужно проверить код коллеги и убедиться, что с ним всё хорошо. 

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

Наконец, повышается навык быстрого поиска и исправления багов: когда участников атакуют, им приходится оперативно исправлять свой сервис, чтобы не терять очки. Это очень похоже на работу дежурных во время инцидентов.

Если вас интересуют командные соревнования по кибербезопасности — читайте и участвуйте в следующих чемпионатах CTF (следить за событиями можно в официальном сообществе ВКонтакте).

© Habrahabr.ru