CTF: соревнования не ради участия, а опыта для
Всем привет, пишу первую статью и волнуюсь, но все-таки давайте приступим. Для начала познакомимся, меня зовут Ярослав, учусь на программиста, если быть точнее, на специалиста в области информационной безопасности, и решил начать вести свой блог на Хабре, дабы куда-то выкладывать свои мысли и знания.
И мой первый пост будет посвящен такому явлению как CTF. Почему я решил писать именно о нем? А потому что CTF стал неплохим показателем моих умений и достижений, да и в принципе одно из знаковых мероприятий в моей жизни. Итак каким же образом я в принципе попал на CTF? Все началось в 11 классе, когда я начал готовиться к ЕГЭ по информатике с одним прекрасным человеком. Он учится на том же направлении что и я, благодаря ему я точно решил для себя, куда буду поступать. В какое-то из занятий он упомянул про CTF, и я загорелся этой идеей (ну, а кому не хотелось похакать пароль от соседского вайфая), от него я узнал, что это такое (чуть ниже расскажу вам об этом) и решил, что надо мне тоже участвовать.
И вот весна 2022 года, я так и не смог собрать команду из своих друзей и пришел на VrnCTF (проводился на Факультете Компьютерных Наук Воронежского Государственного Университета) и мне предложили вступить к кому-то в команду, так я и поступил. Сыграли достаточно достойно, заняли второе место, всем безумно понравилось и хотелось побольше такого. И вот 2023 год эти же соревнования, но тут я уже не участник, а один из авторов. Это уникальный, незабываемый опыт, когда ты сначала пишешь задания на эти соревнования, а потом смотришь как ребята пытаются их решить (кстати, они проводятся и в дистанционном формате, так что в будущем году жду всех, кто заинтересовался). Фидбэк от ребят получаем до сих пор, очень приятно, когда спустя уже где-то месяц вам говорят, что все было круто.
А теперь поговорим о том, что такое CTF и с чем его едят. Для начало вот вам бывший логотипчик VrnCTF:
%%Это старая версия, со следующего года будет новый.
Так вот CTF или Capture The Flag — командные соревнования по кибербезопасности. А если более понятным языком, то по искусству взламывать, но не только, так же вам надо будет расшифровывать сообщения, перехватывать их, анализировать и кучу всякого разного.
Кстати на них можно пользоваться всем чем угодно :-)
Вообще есть два варианта проведения данных соревнований, которые наверное самые распространенные по России, и в которые я играл:
Task-based
Attack-defence
Для начала рассмотрим task-based. Здесь вам даются задания (таски) в разных категориях, ваша цель получить некий флаг — строку, подходящую под определенный формат, в случае с VrnCTF это была строка вида vrnctf{some_text}. Для написания текста во флагах используется leet — язык, в котором буквы английского алфавита заменяются на цифры, например фраза some_text может выглядеть как s0m3_t3xt.
Первая и моя самая любимая категория — web. В данной категории вам дается какое-то веб-приложение (сайт) и вы должны каким-либо образом найти и проэксплуатировать уязвимость, но так как уязвимостей великое множество, то намек на то, какую надо использовать дается в названии или описании таска. Это могут быть как sql инъекции (хитро записанные запросы к базе данных, которые дают возможность получить все данные из базы или обойти проверку логина/пароля), так и подмена сертификата, что дает возможность выдавать себя за сервер, который имеет доступ ко всем данным, не являясь таковым.
Следующая категория Crypto или же криптография. Думаю здесь не стоит сильно пояснять это шифрование и дешифрование. Здесь могут быть простейшие таски на шифр Цезаря, а может попасться какой-то самописный шифр, дешифратор для которого придется писать самому (в таком случае дают код шифратора).
И да, непонятно написанный текст, тоже можно считать зашифрованным)
Итак переходим к следующей категории, а именно к осинту (osint). Как любит шутить мой товарищ «категория для девушек, ну, а кто лучше чем твоя нынешняя девушка вычислит твоих бывших». И в целом он прав, ибо осинт, это буквально грамотный гуглеж, ну, а если быть немного точнее, поиск информации по открытым источникам. Это может быть как поиск названия города по фотографии какого-то места, так и поиск данных о каком-то человеке, зная его номер телефона.
Про осинт узнали теперь поговорим про stego она же стеганография. Крайне непонятное определение — способ передачи или хранения информации с учётом сохранения в тайне самого факта такой передачи. Ну, а если попроще, то тут лучше рассмотреть на примере. Допустим, у вас есть слово, и буквы этого слова вы используете как первые буквы слов, таким образом у вас получается какой-то текст, который ну никак не отсылает вас к исходному слову. Такой метод называется акростих. Таким образом мы приходим к выводу о том, что стеганография — о том как прятать информацию в другой информации (прятать можно не только в тексте, но и в видео, фото и много где еще).
Категория для отдыха это Joy, кто-то называет ее misc, особой разница нет. Самая простая категория, здесь могут быть представлены какие-то игры, просто веселые задания. Один из вариантов это сделать фото, выложить с каким-то хештегом и скинуть организатору)
Ну и еще одна категория это forensic. Это тот самый анализ, про который я говорил в начале, точнее один из вариантов реализации. Анализировать придется, допустим, дампы трафика (это данные, которые проходили через ваш сервер какое-то время). Ну, а в принципе это криминалистика в информационной безопасности.
И вот мы подошли к последней категории это reverse. В чем его суть, вам дается некое приложение, вы должны каким-либо образом извлечь его исходный код и что-то с ним сделать. Поменять его и заново собрать приложение, вытащить какие-то данные из него и т.д.
С task-based покончено, перейдем к attack-defence. Кстати в этом году праздновал свой юбилей RuCTF, который как раз таки проводится в этом формате и на который мне посчастливилось попасть. Это до жути крутое и пафосное мероприятие, на котором соревнуются самые сильные команды со всей России.
Так вот немного отошли от темы. Итак attack-defence, на самом деле кардинально отличается от task-based, я это понимал, но все равно это было неожиданностью. Вам дается некий сервер, на котором работают несколько сервисов, в которых есть уязвимости (примерно тот же список, что и в task-based, но их круг несколько уже). И вот команде надо одновременно искать эти уязвимости, исправлять их и писать сплойты (программы, которые будут эти уязвимости эксплуатировать и вытаскивать флаги с сервисов соперников).
Вот и закончилась моя первая статья, надеюсь Вам понравилось, подписывайтесь и гарантирую, будет еще много такого контента, а также жду идеи, о чем бы вам было интересно послушать. Также не стесняйтесь задавать вопросы, мои контакты есть в профиле.