Мы провели CTF-турнир на IT-конференции. Рассказываем про организацию и показываем задачи

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

Мы провели CTF-турнир на IT-конференции. Рассказываем про организацию и показываем задачи

10 октября мы провели свой первый CTF-турнир в рамках конференции Selectel Tech Day 2024. Участникам предстояло разгадать семь задач по информационной безопасности — например, найти в море сокровище, приготовить блюдо при 256 градусов, набрать 6x6x6 в костях и другое.

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

<i>Офлайн-стенд CTF-турнира.</i>
Офлайн-стенд CTF-турнира.

Подготовка к турниру

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

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

Как мы упомянули ранее, ИБ — не основной профиль мероприятия, поэтому делать что-то кроме привычных веб-приложений казалось бессмысленным. В качестве инфраструктуры решили использовать продукты Selectel. А чтобы и посетители, и зрители трансляции могли принять участие, организовали два формата турнира: офлайн и онлайн. Расскажем о каждом подробнее.

Онлайн-стенд

Архитектура онлайн-стенда выглядит следующим образом:

<i>Архитектура онлайн-стенда.</i>
Архитектура онлайн-стенда.

В публичном облаке Selectel развернули три виртуальные машины (далее — ВМ) произвольной конфигурации:

<i>Характеристики облачных серверов. </i>
Характеристики облачных серверов. 

На каждой разместили по одному сетевому интерфейсу, установили Nginx и Docker. Задание в турнире — это отдельный Docker-контейнер, поэтому на ВМ подняли по семь контейнеров:

<i>Docker-контейнеры задач.</i>
Docker-контейнеры задач.

Все Docker-образы имели следующую структуру:

task__4 ├── Dockerfile ├── requirements.txt └── src ├── app.py ├── static │ ├── images │ │ ├── 4.png │ │ ├── b-2.png │ │ ├── flame.svg │ │ ├── img4.jpeg │ │ ├── logo-1.svg │ │ └── vector.svg │ ├── intlTelInput │ │ ├── intlTelInput.css │ │ ├── intlTelInput.min.js │ │ └── utils.js │ ├── scripts │ │ ├── jquery.js │ │ └── main.js │ └── styles │ ├── main.css │ └── task__4.css └── templates ├── error.html └── index.html

В Dockerfile описан порядок сборки контейнеров, а в requirements.txt — пакеты, которые необходимо установить. Приложение в контейнере требует наличие Flask, поэтому в файле указываем только этот фреймворк.

В каталоге src находится файл app.py. Он содержит логику приложения и каталоги со статичным контентом: картинками, JavaScript, CSS-файлами и HTML-страницами.

Все изображения для заданий сгенерировали с помощью искусственного интеллекта.

Готовые образы контейнеров расположили в Container Registry.

<i>Задачи в Container Registry.</i>
Задачи в Container Registry.

При необходимости их можно быстро доставить на ВМ:

docker pull cr.selcloud.ru/ctf/task_1:final

Nginx мы использовали как reverse-proxy, чтобы публиковать задачи:

server { server_name deep.slcctf.fun; location / { proxy_pass http://127.0.0.1:8001; } } server { server_name 256degrees.slcctf.fun; location / { proxy_pass http://127.0.0.1:8002; } } server { server_name secretpath.slcctf.fun; location / { proxy_pass http://127.0.0.1:8003; } location = /flag.txt { rewrite /flag.txt /impasse; } } server { server_name air.slcctf.fun; location / { proxy_pass http://127.0.0.1:8004; } } server { server_name future.slcctf.fun; location / { proxy_pass http://127.0.0.1:8005; } } server { server_name dice.slcctf.fun; location / { proxy_pass http://127.0.0.1:8006; } } server { server_name geo.slcctf.fun; location / { proxy_pass http://127.0.0.1:8007; } }

Все ВМ мы подключили к балансировщику нагрузки и настроили балансировку по L4. Белый IP-адрес балансировщика спрятали за фильтр DDoS-Guard.

<i>Балансировщик нагрузки.</i>
Балансировщик нагрузки.

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

Офлайн-стенд

Не все участники приносят на конференции свои ноутбуки. Есть и смартфоны, но решать задачи с изменением HTTP-запросов на них неудобно. Поскольку у нас уже был стенд по информационной безопасности, мы решили разместить турнир прямо там. Добавили две плазменные панели, соединили их с Raspberry Pi и дополнили периферией.

К Raspberry Pi подключили систему охлаждения и проводной Интернет. Дополнительно установили Kali Linux, чтобы участники могли использовать любые знакомые и удобные инструменты. Хотя для решения задач достаточно использовать только браузер.

<i>Фото «малинки» со стенда.</i>
Фото «малинки» со стенда.

В результате получили готовый стенд для CTF-турнира:

<i>Офлайн-стенд CTF-турнира.</i>
Офлайн-стенд CTF-турнира.

Задания с турнира

Ниже подготовили семь заданий с мероприятия. Решения предварительно спрятали под спойлером в Академии Selectel, чтобы вы могли выполнить их самостоятельно. Полученные флаги можно сдать Telegram-боту @SelectelTechDayBot.

Задание №1: Deep

Погрузитесь глубже и найдите сокровище! Формат флага: slcctf{}

Мы провели CTF-турнир на IT-конференции. Рассказываем про организацию и показываем задачи

Задание №2: 256 Degrees

Только шеф может брать этот рецепт! Лучше всего блюдо получается при готовке на 256 градусах! Получить рецепт

Формат флага: slcctf{}

Мы провели CTF-турнир на IT-конференции. Рассказываем про организацию и показываем задачи

Задание №3: Secret Path

Найдите секретный путь и выйдите к flag.txt. Формат флага: slcctf{}

Мы провели CTF-турнир на IT-конференции. Рассказываем про организацию и показываем задачи

Задание №4: Air

Мы ожидаем пилота для вылета! Если вы пилот, срочно пройдите по пути регистрации! Затем поднимайтесь в кабину и готовьтесь к вылету!

Формат флага: slcctf{}

Мы провели CTF-турнир на IT-конференции. Рассказываем про организацию и показываем задачи

Задание №5: Future

T-Rex! Тебе необходимо отправиться в будущее для поиска ценного сообщения! Я буду давать тебе инструкции по настройке телепорта. Будь внимателен! Для начала укажи точку назначения — локацию ‘Cloudtown’!

Формат флага: slcctf{}

Мы провели CTF-турнир на IT-конференции. Рассказываем про организацию и показываем задачи

Задание №6: Dice

Наберите 6x6x6 в костях! Сыграть в игру

Формат флага: slcctf{}

Мы провели CTF-турнир на IT-конференции. Рассказываем про организацию и показываем задачи

Задание №7: Geo

日本語を話してください. Формат флага: slcctf{}

Мы провели CTF-турнир на IT-конференции. Рассказываем про организацию и показываем задачи

Заключение

На этом все! Надеемся, статья будет полезна тем, кто планирует организовывать подобные мероприятия. А если у вас уже есть опыт организации CTF-турниров в компаниях, поделитесь им в комментариях.

Также благодарим всех участников, которые посетили конференцию и участвовали в наших активностях. Увидимся через год на Selectel Tech Day 2025!

Конференция Selectel Tech Day 2024.
Конференция Selectel Tech Day 2024.

Пишите в комментариях, какие задачи получилось решить! Ответы ищите в Академии Selectel.

1010
33
12 комментариев

Понравилась статья? Пройдите опрос, чтобы мы могли показывать вам только лучшие материалы: slc.tl/mv3r0. Среди всех участников разыграем игрушечного Тирекса.

Круто! Чувствую себя хакером 😁

1

Спасибо ❤️🦖
Какие задачи получилось решить?

Кажется, последнее задание — самое сложное

Попробуйте! Уверены, у вас получится)

Я конечно не ИБшник, но в мероприятии бы поучаствовал))