Сразу две команды, среди участников которых есть студенты факультета компьютерных наук и Московского института электроники и математики НИУ ВШЭ, стали лучшими в стране по практической кибербезопасности в рамках соревнований формата Capture the Flag (CTF). Основная цель таких состязаний — обмен опытом и знаниями в сфере защиты информации, профессиональный рост и развитие культуры программирования и проектирования систем у студентов и молодых ученых, занимающихся кибербезопасностью.
VI Кубок CTF России — один из крупнейших российских турниров по информационной безопасности в формате CTF, где участники в игровой форме отрабатывают методы защиты цифровых систем. Объектами состязаний являются виртуальные машины с выдаваемым командам для развертывания и анализа набором сервисов, в которых требуется обнаружить уязвимость. Также надо написать патчи для своего набора сервисов и сплойты для сервисов противников.
Участникам команд необходимы широкие познания в сфере информационных технологий и защиты информации, в особенности владение языками программирования, которые используются при написании сервисов, такими как C/С++, C#, Go, Haskell, Java, Perl, PHP, Python, Visual Basic, а также навыки в администрировании безопасности современных операционных систем и сетей.
Команда Ar (Иван Кочкарев, Святослав Климов, Владислав Смородов, Иван Мачуговский, Вячеслав Лучкин, Андрей Суровых, Алексей Космачев), представленная в основном студентами ФКН НИУ ВШЭ, стала победителем этого года. Команда .einabe (Теодор Арсений Ларионов-Тришкин, Алиса Кулишенко, Татьяна Курмашева, Григорий Копелиович, Константин Веселов, Максим Емельяненко и Платон Щербинин) от МИЭМ НИУ ВШЭ дошла до финала, став 4-й в стране. Всего в соревновании участвовало более 400 команд. Студенты команды .einabe первыми выполнили задание с сервисом great_mettender, который сами организаторы позиционировали как нерешаемый.
В течение двух суток ребята соревновались в формате Attack — Defense: находили уязвимости в сервисах, устраняли их, писали эксплойты и поддерживали инфраструктуру. До последнего дня соревнований финальный сервис держался в секрете — за 4 часа требовалось найти и эксплуатировать уязвимости в сервисе на смарт-контрактах, на ходу разобравшись в реализации.
Участники команд поделились впечатлениями от соревнований.
— В полуфинале ребята из нашей команды, Платон Щербинин и Константин Веселов, совместными усилиями смогли найти уязвимость в сложнейшем сервисе — great_mettender (которая, как выяснилось позже, не была заложена разработчиками, являлась unintended) и реализовали сплойт для него на C. После успешной эксплуатации уязвимости сервисы команд противников начали переходить в состояние Corrupt. Мы думали сперва, что это ошибка реализации нашего сплойта и что мы перегружаем запросами другие сервисы, но позже оказалось, что другие команды, видя успешную работу нашего сплойта, начали жертвовать своими сервисами и выключать их намеренно. Был довольно забавный момент.
Сам сервис представлял собой систему проведения тендеров с возможностью оставлять заявки на участие и исполнять свои заявки, если они выиграли. Протокол взаимодействия с сервисом — gRPC over QUIC, что затрудняло анализ трафика и повторение чужих эксплойтов. Заявка на участие в тендере — программа на Brainfuck в сжатом формате, а каждый тендер содержит приватную информацию (флаги), которая при исполнении заявки подается на вход программе. Вывод программы показывался только автору тендера. Этот сервис позиционировался организаторами как сложнейший. В финале запомнились попытки на ходу разобраться в смарт-контрактах.
— Что такое подготовка команды к CTF? Это на самом деле просто: команда должна просто играть. То есть хотя бы раз в неделю-две, в месяц — какое-то время, но это должно быть постоянно, как и в любом спорте. То есть в той же академической гребле результаты видны, если занимаешься три раза в неделю. С CTF в целом все то же самое, потому что человек привыкает, команда привыкает к формату, особенно если говорить про Attack — Defense. Человек начинает понимать, как взаимодействовать с другими членами команды, то есть возникает какая-то ментальная связь, которая позволяет многие процессы оптимизировать. На том же Attack — Defense в основном победа строится на том, что ты с командой можешь быстро найти багу, запатчить багу, то есть сделать те вещи, которые как раз и тренируются.
— Вначале был отборочный онлайн-этап в формате task-based. Предлагалось несколько заданий в каждой из категорий (поиск уязвимостей в веб-приложениях, анализ бинарных файлов, криптография...), и команды из топ-10 проходили дальше, на очный этап, который уже проходил в формате Attack — Defence. Нам был выдан сервер, на котором было запущено четыре программы, доступные для других команд. Наша задача состояла в том, чтобы найти уязвимости в сервисах соперников, достать необходимые данные и защититься от их атак. После этого этапа пять лучших команд проходили в финал. Формат был такой же, но в этот раз все сервисы были представлены в виде смарт-контрактов на блокчейне, и это сильно поменяло доступные векторы атаки.
Положение атакующего выглядит наиболее весело — это тот самый хакер из кино, который находит уязвимости и обходит системы защиты. Это, конечно, так, но и на соревновании, и при анализе защищенности компании важно найти золотую середину между защитой и атакой. Да, вы можете найти уязвимости, получить доступ во внутреннюю сеть, добраться до персональных данных пользователей. Но если после этого не поработать вместе с сотрудниками, не помочь настроить более безопасный процесс разработки, то через год при повторной проверке будут найдены все те же уязвимости, и полезность ваших услуг для бизнеса будет нулевой.
Основа успеха нашей команды — практическая направленность обучения в МИЭМ и высокая степень мотивации студентов. Свободная академическая атмосфера в университете способствует самоорганизации студентов в команды. А серьезный уровень подготовки, который обеспечивают наши образовательные программы «Информационная безопасность» и «Компьютерная безопасность», дают ребятам необходимые технические навыки. Операционные системы, защищенные протоколы, криптографию, безопасную разработку на C/C++, PHP, JS, Python, актуальные веб-уязвимости и многие другие практические дисциплины студенты изучают уже на младших курсах. Это дает им серьезный технический задел как для реализации проектов, которые ведет МИЭМ, так и для участия в соревнованиях. И конечно, ребята много занимаются самостоятельно: участвуют в соревнованиях, разбирают типовые кейсы. Полученная победа — результат серьезного труда, длительной подготовки, профессионального серьезного подхода к решению соревновательных задач.
Сегодня вряд ли нужно объяснять, насколько важна защита информации. Но это еще и очень увлекательное занятие. Немало выпускников ФКН решают строить свою карьеру в области информационной безопасности. Фундаментальная подготовка по программированию и анализу данных, которую ребята получают в рамках программ бакалавриата на ФКН, дает все возможности, чтобы сделать такой жизненный выбор. И, думаю, работы для них мало не будет. Ну а призовые места команд из Вышки наглядно демонстрируют высокую квалификацию наших студентов и выпускников — можно считать это своего рода независимой экспертной оценкой.
Выражаем благодарность за участие в подготовке материала Татьяне Курмашевой (.einabe).