Предисловие

29 октября закончился отбор на Кубок CTF России, который проводила наша команда, C4T BuT S4D. У нас довольно большой опыт проведения подобных ивентов, но в этот раз мы попробовали много новых технологий и плагинов для CTFd (и даже новое облако), а также построили сложную инфраструктуру, готовясь к возможным DDoS атакам, подобным тем, которые произошли в прошлом году на этом соревновании.

Построением и настройкой инфраструктуры и CTFd занимался я, @pomo_mondreganto. По неудачному стечению обстоятельств отбор пересекся с моими перелетами в отпуск (которые к тому же задержали), поэтому тимлид @jnovikov страховал и поддерживал инфраструктуру во время соревнования.

Облако и плагины CTFd

Вся инфраструктура была развернута в облаке EdgeCenter, которое было бесплатно предоставлено с солидными лимитами для соревнования. В целом впечателения от их использования крайне положительные, хоть проблема в одной из их фич и привела к написанию данного постмортема (но об этом позже). Опыт использования этого облака у нас был очень небольшой — мы проводили на нем только отбор на BRICS+ CTF 2023 месяцем ранее.

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

Следующим плагином был CTFd-Whale. Мы сразу пошли по пути advanced настройки, всё заработало практически сразу и почти без допиливаний. Понадобилось только добавить в код плагина возможность логиниться не в стандартный Docker registry, а в Yandex Container Registry, который мы использовали для приватного хостинга докер образов с тасками (цены у них демократичны, и работают они очень хорошо).

Инфраструктура

Схема инфраструктуры Кубка CTF России 2023

Схема инфраструктуры Кубка CTF России 2023

На диаграмме показана немного упрощенная схема инфраструктуры. Каждый прямоугольник — отдельная виртуальная машина. Цветами на схеме обозначена условная “опасность” хоста. Зеленый — хост под Cloudflare, защищен. Красный — открытый хост, самая большая вероятность атаки. Фиолетовый — адрес хоста можно узнать, но атаковать сложно, так как хост за файрволом. Синий — хост, с которого начался данный постмортем, об этом ниже.