Владимир Черепанов, участн? ... Владимир Черепанов, CBS: Лучшие российские CTF являются одними из лучших CTF в мире
Владимир Черепанов, CBS: Лучшие российские CTF являются одними из лучших CTF в мире...
Владимир Черепанов, участник CTF-команды C4T BuT S4D (входит в ТОП-10 мирового рейтинга CTF-команд) рассказал порталу Cyber Media о специфике организации CTF-соревнований, типовых ошибках, наиболее распространенных форматах и уровне развития российского CTF.
Cyber Media: Что такое CTF и какими вообще бывают CTF-соревнования?
Владимир Черепанов: Изначально формат Capture The Flag появился в 1996 году на хакерской конференции DEF CON, которая ежегодно проходит в Лас-Вегасе. Основная идея в следующем: есть некие уязвимые сервисы, которые хранят пользовательские данные, и эти сервисы нужно взломать, чтобы получить доступ к данным. Чаще всего такие сервисы делают похожими на обычные приложения, которыми мы пользуемся каждый день: например, блог или онлайн-магазин. Пользовательскими данными может быть любая чувствительная информация: номер кредитной карты, адрес доставки товара или что-то ещё, в зависимости от сервиса. Чтобы участники понимали, что именно им нужно украсть, данные имеют особый, заранее известный формат — обычно это строка в определённом виде, которая и называется флагом. Когда участники находят флаг, они сдают его в проверяющую систему и получают очки.
В современном мире преобладают два формата CTF: Attack/Defense и Jeopardy, хотя встречаются и экспериментальные проекты от отдельных организаторов.
Attack/Defense — игра между командами, которые управляют целой инфраструктурой внутри отдельного сегмента сети. В начале игры всем командам выдаётся одинаковый набор сервисов и роутер с доступом в игровую сеть. Задача участников — изучить сервисы и найти в них уязвимости, чтобы атаковать другие команды. При этом нужно не забыть защитить свои сервисы: исправить найденные баги или настроить файрвол, который будет блокировать нежелательные запросы. Чтобы команды не меняли бизнес-логику, организаторы периодически проверяют работу сервисов и начисляют очки за стабильность.
Jeopardy — формат, в котором командам не нужно атаковать друг друга, вместо этого они решают отдельные задания, выданные организаторами. Задания содержат уязвимости разного происхождения и никак не связаны между собой. Самые популярные категории заданий на данный момент:
- web — серверные и клиентские веб-уязвимости, такие, как XSS, инъекции, ошибки в бизнес-логике, баги при десериализации и другие;
- crypto — уязвимости в криптографических протоколах и алгоритмах шифрования, а также в их ошибочной реализации и неправильном использовании;
- pwn — низкоуровневые баги при работе с данными, которые приводят к повреждению структур объектов в оперативной памяти, что даёт возможность поменять логику работы приложения;
- reverse — категория, направленная на обратную разработку кода, чаще всего здесь даётся скомпилированный бинарный файл и нужно разобраться в том, что он делает и как работает;
- forensics — имитация расследования киберпреступлений: участникам нужно изучить образ диска, снимок оперативной памяти или дамп сетевого трафика, чтобы найти какой-то след, оставленный преступником.
Большинство CTF проходят в формате Jeopardy, так как он проще в организации и имеет низкий порог входа для участников. Формат Attack/Defense больше рассчитан на профессиональные команды, у которых есть своя отлаженная инфраструктура. А также набор внутренних утилит, которые активно используются во время игры.
Cyber Media: Если говорить об организации такого рода соревнований, то каков стандартный алгоритм подготовки?
Владимир Черепанов: Сначала нужно определиться с аудиторией соревнования: узнать какой уровень знаний ожидается у участников. Это может зависеть от разных факторов, таких как опыт в CTF, профессиональная деятельность и мотивация. Например, если делать соревнования внутри университета или коммерческой компании, то большая часть команд будет состоять из новичков. А соревнования для всех желающих, имеющие внушительный призовой фонд, привлекут внимание профессиональных команд.
Когда мы знаем уровень участников, можно приступить к написанию самих заданий. Здесь важно угадать со сложностью, чтобы командам было интересно играть: слишком сложные или слишком простые задания демотивируют участников, так как впустую тратят их время. С другой стороны, если CTF направлен на выявление лучшей команды (университета, области и т.д.), для этого отлично подходят задания повышенной сложности. Но стоит помнить, что сложные задания должны быть именно сложными, а не запутанными: участники хотят показать свои технические навыки, а не способности к чтению мыслей и угадыванию решения. Чтобы выдержать сложность, сделать задания интересными и добиться отсутствия незапланированных багов, весь код проходит кросс-ревью нескольких разработчиков.
Одновременно с разработкой заданий происходит подготовка игровой инфраструктуры: поднимаются виртуальные машины, настраивается окружение, разворачивается проверяющая система. Основная задача инфраструктуры — бесперебойно работать в течение всей игры, чтобы задания были доступны и решаемы в любой момент. Для этого используются все современные подходы SRE, в том числе liveness-тестирование и алерты. Так, если во время игры задание перестаёт решаться, то оно сразу перезапускается, а команда разработчиков идёт анализировать логи и сетевой трафик. Не менее важная задача инфраструктуры — изоляция запущенных заданий между собой, чтобы нельзя было взломать один сервис, используя уязвимость в другом сервисе. Обычно это решается при помощи средств контейнеризации и виртуализации.
Часто, особенно в Jeopardy, приходится поднимать отдельную инфраструктуру для определённых заданий. Например, для реализации сетевой атаки командам нужно выделять изолированный сегмент сети, а при проверке XSS-уязвимостей необходимо запускать множество браузеров для перехода по ссылкам. У опытных организаторов есть много готовых решений для подобных случаев, но иногда всё же приходится писать что-то новое.
Ближе к концу разработки начинается этап тестирования. Он состоит из нескольких частей:
- Нагрузочное тестирование игровой инфраструктуры и самих заданий.
- Проверка работоспособности авторских решений, поиск незапланированных уязвимостей.
- Приглашение независимых экспертов для оценки заданий.
Таким образом, правильно выстроенные процессы разработки могут гарантировать стабильную игру и интересные задания.
Cyber Media: Какие типовые ошибки совершают организаторы CTF-соревнований?
Владимир Черепанов: Одна из самых очевидных, но при этом популярных ошибок, особенно у начинающих организаторов — переоценка собственных сил и ресурсов. Например, команда собирается сделать свой первый Attack/Defense, не имея готовой и отлаженной инфраструктуры. При большом количестве участников (а их может быть больше 100 команд) проверяющая система может не справиться с нагрузкой и перестать работать во время игры. Игровая сеть, в частности VPN-серверы, тоже испытывают большую нагрузку, так как пропускает через себя трафик всех команд. К сожалению, подобные ситуации случаются практически каждый год, поэтому начинающим организаторам лучше проверять свою инфраструктуру на закрытых тестовых соревнованиях: можно пригласить несколько знакомых команд или запустить сервисы с одного из прошедших CTF.
Другая частая ошибка, которую допускают неопытные организаторы — неадекватные задания. Например, в криптографии нужно угадать используемый шифр, а в веб-приложении догадаться до скрытой и неочевидной логики. Большинство участников такое не любит, так как процесс угадывания не проверяет никакие технические навыки. В отличие от предыдущего примера, здесь важен не опыт разработки, а опыт участия в соревнованиях: чем больше CTF нарешала команда, тем лучше она отличает хорошие идеи от плохих, основываясь на своих ощущениях от решённых заданий. То есть, испытав негативные эмоции от чужой идеи, команда не будет добавлять эту идею в своё соревнование, чтобы не портить игру другим. Таким образом CTF-сообщество постоянно улучшает общее качество заданий за счёт совместного опыта решения.
Бывает, что организаторы забыли протестировать задание, из-за чего оно может оказаться нерешаемым или иметь незапланированные уязвимости. Как вариант, задание может иметь ровно одну уязвимость, но способ её эксплуатации, найденный участниками, сильно проще авторского, что приводит к изменению фактической сложности задания. Подобные ошибки можно исправить во время Jeopardy, если выпустить новую версию задания, но в запущенной Attack/Defense игре изменить сервисы у всех команд вряд ли получится. Поэтому важно выстраивать надёжные процессы разработки, особенно при организации Attack/Defense.
Cyber Media: Какие рекомендации Вы могли бы дать начинающим организаторам, чтобы избежать сложностей при организации CTF?
Владимир Черепанов: - Держите в уме, что конкретно вы делаете и для чего делаете. Например, если делаете CTF для новичков, нужно придумывать простые задания, возможно такие, которые кажутся тривиальными. Сложные и интересные идеи лучше оставить для той аудитории, которая их оценит.
- Наращивайте опыт постепенно. Не беритесь сразу за то, чем вы никогда не занимались. Лучше потратить год-два, чтобы научиться делать небольшие CTF, чем начать сразу с большого и провалить его.
- Всегда старайтесь поставить себя на место участника и посмотреть на игру с его стороны. Будет ли удобно взаимодействовать с проверяющей системой? Есть ли какой-то способ задать вопрос организаторам? Можно ли убрать из вашего решения самую рутинную и неинтересную часть? Указали ли вы формат флага в задании, в котором он отличается? И т.д.
- Дайте возможность оставить обратную связь после CTF. Прислушивайтесь к комментариям участников, так как они могут обратить внимание на те проблемы, которые вы не заметили.
- Не забывайте сами участвовать в CTF. Даже если у вас нет цели играть на результат, это хороший способ находить интересные идеи и узнавать что-то новое. Кроме этого, можно учиться на ошибках других организаторов и набираться опыта.
Cyber Media: Если говорить о российских CTF-соревнованиях, на каком уровне они, по Вашему мнению, находятся?
Владимир Черепанов: В России нет какого-то общего уровня CTF-соревнований. У нас достаточно много и начинающих, и опытных организаторов, которые проводят соревнования независимо друг от друга. Есть как студенты вузов, запускающие свой первый CTF, так и профессиональные команды с опытом организации больше 10 лет.
Я бы ответил так: если сравнивать с общемировым уровнем, то лучшие российские CTF являются одними из лучших CTF в мире, причём они входят и в топ Jeopardy, и в топ Attack/Defense соревнований. Я связываю такой успех не только с хорошим развитием информационной безопасности в России, но и с сильными школами математики, компьютерных наук и программирования. Раньше на российские оффлайн-площадки часто приезжали команды из разных стран, но сейчас иностранцы, в основном, участвуют онлайн.
Cyber Media: Российское комьюнити CTF: как давно оно появилось и насколько быстро развивается?
Владимир Черепанов: Первый CTF в России прошёл в Екатеринбурге весной 2006 года — это был UralCTF от команды Хакердом. В 2008 году Хакердом провели RuCTF — всероссийские CTF-соревнования, в которых приняли участие 8 команд. А уже в 2009 году российский CTF выходит на международную арену — Хакердом проводит RuCTFE, в котором участвует 43 команды из разных стран.
С того времени количество людей, которым интересен CTF, растёт с каждым годом. Вместе с этим растёт и количество соревнований, которые проводят российские команды. Сейчас для знакомства с CTF есть отдельные курсы, обучающие видеоролики и особые выездные школы для тех, кто хочет вживую пообщаться с экспертами. Кроме этого, CTF добавлен в программу некоторых вузов, что также способствует появлению новых студенческих команд.
Сегодня, по разным оценкам, CTF-комьюнити в России насчитывает несколько тысяч человек.