22 апреля состоялись XV международные соревнования по информационной безопасности RuCTF Finals 2023.
Крупнейший российский CTF в этом году проходил в смешанном формате: предполагался как очный зачет, так и участие в онлайн-формате для тех команд, которые не смогли приехать в Екатеринбург.
В последний раз очный этап RuCTF проходил в 2019 году, и за это время произошло несколько существенных изменений:
Смена названия. В прошлом попасть на финал RuCTF можно было через квалификационное онлайн-соревнование RuCTFE. Начиная с 2022 года квалификационный тур просто называется RuCTF, а сам финал получил логичное название RuCTF Finals.
Изменение формулы подсчета очков. Многие команды уже знакомы с новой формулой благодаря участию в соревновании HITB PRO и квалификации на RuCTF Finals: теперь количество флагпоинтов, полученных за атаку на сервис, растет со временем, которое сервис находился без решения, и начинает падать вскоре после first blood.
Смена локации. Первые очные RuCTF проходили на базе Уральского федерального университета. А с 2016 года — в Ельцин Центре. По изначальным планам организаторов, финал этого года вновь должен был состояться в Ельцин Центре, но за 2 недели до соревнования была найдена более подходящая площадка — Teatro Veneziano Concert Hall, которая соответствует легенде чемпионата.
Из-за паузы в проведении очных RuCTF Finals, организаторы приняли решение пригласить к участию не только команды, прошедшие квалификацию в 2022 году, но и тех участников, которые попали в топ-30 на RuCTF 2021.
Таким образом, в финальном этапе смогли принять участие 15 команд из различных городов России, включая Москву, Санкт-Петербург, Омск, Новосибирск, Томск, Краснодар и Воронеж. Остальные 18 команд, среди которых были участники из Италии, Австрии, Монголии и Казахстана, продолжили борьбу в онлайн формате.
В этом году, как и на предыдущих очных RuCTF Finals, конференция сопровождала соревнование и была открыта для всех желающих. В прошлом конференция длилась несколько дней и проводилась перед началом соревнований, однако на этот раз организаторы решили проводить лекции параллельно с CTF.
Программа включала в себя 5 выступлений:
Максим Смирнов рассказал, как устроен SOC изнутри и о том, каково это — быть аналитиком центра реагирования.
Артем Избаенков (EdgeЦентр, АРСИБ) представил доклад “DDoS атаки от А до Я”, в котором обозначил основные цели, типы и сложности различных атак, а также поделился реальными кейсами подходов к защите.
Даниил Лобанов (Российская Академия Наук) провел двухчасовое практическое занятие “Как по языку тела оптимизировать рабочий коллектив и выбрать для себя лучшие задачи” и рассказал, как при помощи инструментов профайлинга, не задавая никаких вопросов, прогнозировать успехи и провалы каждого человека в любой из областей.
Александр Берсенев (Хакердом) выступил с докладом “Как оценить сложность паролей с помощью алгоритмов машинного обучения”. Александр рассказал о неэффективности подходов современных веб-сайтов к защите от атак по словарю, и о своем опенсорс проекте, который решает эту проблему.
Кроме того, все посетители конференции и участники соревнования могли решить специальные задания, опубликованные в канале Хакердома, и выиграть мерч мероприятия.
Соревновательная часть проходила на протяжении классического для Attack-Defense времени — 8 часов, 7 из которых была открыта сеть. За это время участникам предстояло решить целых 9 сервисов.
Описание сервисов
bookster — сервис для сохранения книг во льдах Арктики, аналог GitHub Arctic Code Vault. Так как в будущем все любят смотреть короткие видео, их необходимо прикреплять к книгам. Превью генерировалось при помощи устаревшей версии FFmpeg — FFmpeg 2.1.8, которая подвержена уязвимости на чтение произвольных файлов при отправке поддельного плейлиста вместо видео.
dcs — сервис, который умеет исполнять программы на языке Demidovich Computer Systems. Язык компилируемый, его инструкции транслируются в x86_64 и исполняются сервисом в рантайме. Компилятор содержал баг, из-за которого можно было обойти инструкцию завершения программы и передать управление на секцию с данными, в которую нужно записать шеллкод.
hermicache — сервис, который умеет исполнять сложные алгоритмы, в частности вычислять рекуррентные формулы и находить самый длинный палиндром. Для вычисления используются чистые функции, а значит, их результаты можно кэшировать. В этом механизме как раз и была скрыта уязвимость: если в функцию передать достаточно длинный первый аргумент, то остальные аргументы не попадут в ключ кэширования и не будут учитываться. Это приводит к тому, что злоумышленник может контролировать возвращаемые значения функций: например, при проверке пароля.
lost_museum — социальная сеть, единственная миссия которой — восстановление утраченного культурного наследия: при трагическом пожаре в музее анекдотов погибли образцы уникальных юморесок. Разработчик социальной сети попытался восстановить уничтоженную экспозицию с помощью краудфандинга. К сожалению, он был не очень внимателен и оставил возможность сделать инъекцию в YAML-конфигурацию, из-за которой злоумышленник мог добавиться в друзья к любому пользователю.
museumorphosis — сервис-конструктор музеев, который позволяет создать свой уникальный музей и экспозицию. В сервисе было реализовано расширение языка SQL, при помощи которого можно было делать запросы к различным базам данных. Это расширение при разборе запросов использовало регулярные выражения, что привело к возможности сделать SQL-инъекцию в одном из запросов.
scp — сервис работает с документацией фонда SCP и предоставляет язык запросов для взаимодействия с документами. Сервис был написан на Java и собран с помощью технологии GraalVM, которая поддерживает JIT и AOT компиляцию — как следствие, реверс приложения за разумное время был невозможен. Участникам нужно было использовать альтернативные способы изучения бинарного файла, чтобы найти возможность получать доступ к скрытым полям документов при помощи определённых запросов.
sneakers — арт-галерея, в которой можно создать действительно уникальные и персонализированные бархатные тяги и ознакомиться с огромной коллекцией кроссовок. В сервисе была реализована система поиска, использующая различные фильтры на основе перечислений (Enum). К сожалению, ASP.NET недостаточно хорошо валидирует Enum’ы, из-за чего злоумышленник мог манипулировать применяемыми фильтрами и прочитать флаги, спрятанные в изображениях кроссовок.
solaris — гомоморфная система шифрования на матрицах: пользователь мог сгенерировать пару ключей, а затем шифровать и расшифровывать свои данные и любые операции над ними. При этом пользователю сообщался только публичный ключ, все приватные ключи хранились на сервере и не выдавались. Уязвимость была в генерации ключа: он создавался слишком большим по сравнению с размером флага, что приводило к возможности применить атаку Копперсмита и восстановить флаг по единственному шифртексту.
stalker — сервис для хранения заметок, которыми можно поделиться с другими пользователями. В качестве хранилища использовалась база MariaDB на движке MyISAM, в котором есть интересная особенность: при определённых условиях значение уникального id, помеченного как AUTO INCREMENT, может быть переиспользовано. При этом часть состояния базы хранилась в памяти сервиса, что приводило уязвимости: если злоумышленник специально замедлит отправку HTTP запроса, он сможет поделиться чужой заметкой, которая будет создана в будущем.
museumorphosis: kks
lost_museum: C4T BuT S4D
solaris: C4T BuT S4D
Hermicache: C4T BuT S4D
sneakers: SPRAVEDLIVAЯ RUSH A
Stalker: C4T BuT S4D
Bookster: SPRAVEDLIVAЯ RUSH A
DCS: pwnthem0le
SCP: no auto-sploited firstblood
Также следует отметить, что команда Bushwhackers после часового перерыва на обед смогла украсть по одному флагу у команды smiley-from-telega в четырех сервисах: Bookster, DCS, SCP и Stalker. Однако из-за отсутствия полноценных сплоитов эти результаты не были засчитаны.
Общий зачет:
C4T BuT S4D — 554422,750 баллов
pwnthem0le — 468188,730 баллов
Очный зачет:
C4T BuT S4D —554422,750 баллов
Bushwhackers —302387,960 баллов
После завершения соревнования, партнер мероприятия — компания VK — взяла интервью у победителей RuCTF 2023, команды C4T BuT S4D: https://habr.com/ru/companies/vk/articles/732774/
Спонсоры и партнеры
Без поддержки ведущих российских айти-компаний проведение RuCTF было бы невозможно. Организаторы выражают благодарность всем партнерам за огромный вклад в успех мероприятия:
Русская медная компания;
VK;
Координационный центр доменов ru/ рф;
ALT;
Лаборатория Касперского;
EdgeЦентр;
АРСИБ;
Успешное проведение RuCTF на протяжении многих лет стало возможным благодаря слаженной работе членов оргкомитета под руководством ректора УрФУ, к.и.н., доцента Виктора Анатольевича Кокшарова. Оргкомитет тесно сотрудничает со всеми партнерами и спонсорами, чтобы обеспечить высокий уровень организации мероприятия.
Состав оргкомитета:
Виктор Владимирович Минин, заместитель председателя оргкомитета, Председатель Правления АРСИБ;
Виталий Анатольевич Баранский, профессор Кафедры алгебры и фундаментальной информатики ДММиКН ИЕНиМ УрФУ, директор РУНЦ “Интеллектуальные системы и информационная безопасность”;
Полтавец Андрей Васильевич, проректор по информационным технологиям УрФУ;
Пьянзина Елена Сергеевна, директор Департамента математики механики и компьютерных наук УрФУ;
За разработку, организацию всех процессов и проведение соревнования отвечали:
Александр Алексеев, директор RuCTF Finals;
Александр Котов, директор команды HackerDom;
Роман Быков, DevTeam Observer;
Дмитрий Лукшто, руководитель команды разработки;
Александр Берсенев, администратор сетевой и облачной инфраструктуры;
Михаил Гнедашев, администратор проверяющей системы;
Василий Пахомов, DevOps;
Владимир Черепанов, разработчик сервиса;
Александр Мошков, разработчик сервиса;
Даниил Мошков, разработчик сервиса;
Роман Хапов, разработчик сервиса;
Даниил Шарко, разработчик сервиса;
Данил Казаков, разработчик сервиса;
Александр Каргин, разработчик сервиса;
Валерий Ведерников, разработчик сервиса;
Егор Постовалов, разработчик сервиса;
Антон Нечуговских, разработчик сервиса.
Сайт соревнования: https://2023.finals.ructf.org/
Репозиторий: https://github.com/HackerDom/ructf-finals-2023
Группа ВК: https://vk.com/ructf
Канал: https://t.me/RuCTF
Фотографии: https://disk.yandex.ru/a/LwybeCMcf1OR0w
Форма обратной связи: https://forms.gle/Nw5A6DYwM9U2QUv6A
Страничка на CTFtime: https://ctftime.org/event/1956