Привет, дружок. Сегодня хочу рассказать про CTF соревнования, какие бывают, да и вообще, что из себя они представляют. Я думаю, это не будет не одна статья, хотя кто знает. Если вам будет интересно, я напишу что-нибудь еще.
Интро
CTF - Это соревнования по информационной безопасности, в которых игроки соревнуются своими навыками (от англ Captute the Flag). Бывают разные виды: Jeopardy (или task-based) и Attack/Defense. И сейчас я расскажу подробнее про каждый из них.
Jeopardy
Этот формат проведения связан в первую очередь с тасками (задачами - со сленга CTF-eров). Делаешь таск получаешь баллы. Выигрывает команда, решившая больше всего заданий - получившая больше всего баллов. Однако не всегда количество решённых задач может обеспечить победу. Дело в том, что задачи также различаются и по сложности. За более сложные задачи - больше баллов. Это распределение баллов называется статическим.
Динамическое же распределение баллов подразумевает наличие некоторого механизма, высчитывающего стоимость задачи зависимости от количества решивших команд. Обычно в этом случае у организаторов есть какая-то нехитрая формула, по которой они постоянно пересчитывают стоимость таска.
Давайте теперь расскажу коротко о категориях заданий, которые есть.
Категории
Категория - это что-то вроде области информационной безопасности, знания из которой помогут решить таск (ну или из-за стека технологий).
Криптография (Crypto) - как можно догадаться, это задачи из области криптографии. Часто бывают задачи на уязвимости в реализации каких-либо известных криптосистем. Например, атаки на RSA. Но это уже на более серьезных соревнованиях. В ивентах для новичков встречаются обычно шифры замены, подстановки и так далее.
Стеганография (Stego) - вообще, стеганография - это наука о сокрытии самого факта передачи информации. Чтобы стало понятнее, объясню на примере. В древности у гонцов сбривали волосы с головы и набивали тату с какой-то секретной информацией. Когда волосы отрастали, гонца отправляли передать сообщение. На другом конце у него сбривали волосы и читали сообщение. Если же гонец попадет в плен, то вряд ли у кого-то возникнет подозрение, что сообщение у него под волосами. Другой пример стеганографии (уже более современный) - сокрытие какой-то секретной информации в картинке. На самом деле данную категорию можно не всегда встретить на соревнованиях. Потому что действительно настоящих умельцев в стеге мало (таски надо делать качественно). А если и есть какие-то задачи, то они либо очень простые (на какие-то стандартные методы), либо чрезвычайно сложные (потому что автор может взять с потолка, как ему кажется, логичное правило, а на самом деле будет полнейший бред).
Реверс инжиниринг (reverse) - суть задач заключается в том, что у вас есть бинарник (exe, elf и т.д.) и нет источников. Вам надо понять с помощью специальных инструментов, как он работает, достать из него определенный секрет (флаг)
Эксплуатация бинарных уязвимостей (PWN) - очень близкая с реверсом область. Разница заключается в том, что эта категория направлена именно на поиск заложенных уязвимостей, например, переполнения. Дальше нужно поэксплуатировать уязвимость и, например, получить удаленный доступ к системе. Обычно это одни из самых сложных задач, поскольку сам процесс эксплуатации бинарных уязвимостей достаточно сложен.
Эксплуатация веб уязвимостей (web) - категория полностью направленная на веб-технологии. Возможно, вам придется эксплуатировать уязвимости из списка OWASP TOP 10 (рейтинг уязвимостей такой). Обычной ситуацией является взлом какого-то тестового сайта, получения админской учетки и т.д.
Компьютерная криминалистика (Forensics) - в этой категории вам предстоит исследовать образы жестких дисков, дампов оперативной памяти и так далее, чтобы достать оттуда какие-нибудь ценные сведения, типа логинов и паролей на какие-либо сайты. Бывает, надо сбросить пароль к какой-либо операционке или исследовать сетевой трафик.
Программирование (PPC) - в этой категории нужно применять свои навыки в знании каких-либо специфичных библиотек и алгоритмов (от англ professional programming and coding).
Разведка (OSINT) - тут вам нужно узнать какую-то информацию о вымышленном персонаже (а может даже и реальном). Или любые другие задания, где вам могут понадобится навыки поиска в открытых источниках (OSINT - Open source intelligence).
Misc - сюда входят все таски, которые невозможно было определить в одну из категорий выше по какой-либо причине.
Выглядит таблица с тасками вот так (примерно)
Attack/Defense
В этом формате у команд есть образы операционных систем (чаще всего просто линукс какой-то с набором контейнеров). И эти образы содержат уязвимости. Точнее, не образы, а сервисы, которые на них находятся.
Чтобы было понятнее, посмотрим на дело одной из команд. Эта команда должна развернуть свой образ, настроить его - чтобы проверочная система (чекер) посетила уязвимый образ команды и поняла, что все ок. Дальше идет конфигурация сервисов - нужно поднять все сервисы и проверить, что они работают.
После этого, начинается самое интересное - нужно искать уязвимости в сервисах, срочно выкатывать патчи на свои, чтобы другие команды не могли эксплуатировать эти уязвимости у "нас" (грубо говоря). Еще в команде есть люди с ролью - эксплоит девелопер - он должен быстро написать эксплоит на найденную уязвимость, чтобы украсть флаги у других команд.
Также можно анализировать сетевой трафик, из которого можно понять, как проходит процесс эксплуатации ваших сервисов. А после того, как вы поняли, можно и свой эксплоит писать. На самом деле, многие команды только на этом живут и держатся в топе.
Обычно это одни из самых масштабных соревнований. Они проводятся на различных крутых конференциях, типа OFFZONE, HITB и так далее. И выглядит это так.
Выигрыш на таких соревнованиях может достигать нескольких десятков тысяч долларов на команду.
На этом, я закончу обзорную статью. Если она покажется вам интересной (наберет хотя бы 15 прочитываний), то я напишу про то, где и как играют в CTF (в разных странах предпочитают разные форматы и таски). А также о платформах, где можно порешать таски.
Спасибо за прочтение