Как стать автором CTF-заданий, которого зовут на разные соревнования: история SDark

sdark

В 2026 году Иван SDark разрабатывал задания для DUCKERZ CTF, PSUTI CTF, VolgaCTF, SolarCTF, GoCTF и SamaraCTF. Поговорили с ним о первых тасках, репутации в комьюнити и сложном реверсе, который не должна решать нейросеть за секунду.

— Как ты начал делать задания для CTF?

— Первым соревнованием, для которого я делал таски, был SUCTF в 2025 году — сейчас он называется SamaraCTF. Хотелось посмотреть на «другую сторону» CTF.

К тому моменту я уже много играл, и у меня накопились идеи для задач. Я вёл небольшие заметки: записывал то, что казалось интересным.

Провести самарские соревнования хотели преподаватели моего вуза — Виктор Андреевич Федосеев и Александр Владимирович Веричев, которые также организуют VolgaCTF, — и я сам. На первом курсе я нашёл их, мы договорились провести мероприятие, и я приступил к разработке. Подключил ребят из своей первой команды CYBERSQD, где был капитаном.

После SUCTF появилась смелость взяться за PSUTI CTF 2025. На обоих соревнованиях больше половины тасков сделал я.

— Что оказалось самым сложным в первой разработке?

— На тот момент опыта разработки заданий у меня не было. Но преподаватели много лет занимались VolgaCTF и взяли на себя борду, инфраструктуру и деплой. Нам оставалось сделать задачи по шаблонам.

Опыт игры у нас был, а за всё, что не касалось самих задач, отвечали другие люди. Поэтому разработка оказалась не такой трудной, и учиться чему-то новому тогда не пришлось.

— Как после этого появились другие соревнования?

— Задания в основном понравились игрокам. За время подготовки SUCTF и PSUTI CTF я познакомился с людьми, которые стоят за VolgaCTF. В 2026 году SPRUSH не стали делать таски на Волгу, и мне удалось договориться о разработке заданий для task-based части.

На PolyWinterCTF я познакомился с Варей из DUCKERZ, затем — с другими участниками команды. Меня позвали сделать задания на DUCKERZ CTF. Через знакомство с DUCKERZ появился и SolarCTF: там у меня был гостевой таск.

На PSUTI CTF и SamaraCTF в этом году уже по традиции помогал с заданиями. На остальные соревнования обычно попадаю благодаря тому, что мои таски знают как очень сложные.

— За что ты отвечаешь на соревнованиях?

— За разработку заданий. На VolgaCTF и PSUTI CTF ещё несколько раз помогал искать авторов для других категорий.

За этот год делал задания для DUCKERZ CTF, PSUTI CTF, VolgaCTF, SolarCTF, GoCTF, SamaraCTF и ещё трёх соревнований, которые пока не прошли.

— Приходится выбирать между приглашениями?

— Обычно нет: «беру всё что попадает под руку», кроме мероприятий с сомнительной репутацией. Бывает сложно совмещать дедлайны, работу и учёбу, но пока получается.

Сложный реверс и репутация

— С каким запросом к тебе обычно приходят?

— В эру ИИ-слопа ко мне обычно приходят за сложными задачами, которые слоп-машина по задумке решить не должна. В основном за реверсом: другие категории я пока не научился делать настолько же сложными.

— А почему зовут повторно? Организаторы объясняют?

— Обычно не объясняют. Один раз сделал хорошо — вполне вероятно, позовут ещё. Как мне кажется, это в основном зависит от репутации как игрока и таскодела.

— Возраст когда-нибудь влиял на отношение к тебе?

— Нет, таких ситуаций пока не было.

— Каким из опубликованных заданий ты больше всего доволен?

— Наверное, Duckrave с DUCKERZ CTF 2026.

В основе был механизм AltSyscalls. Он позволяет перехватывать системные вызовы, менять их результат и перенаправлять один вызов в другой.

На этом я и построил задачу: с помощью драйвера, работающего в ring0, создал виртуальную машину, к которой могла обращаться программа-клиент. А перенаправление вызовов позволило сделать ветвления внутри этой виртуальной машины.

Мне нравятся таски, за которыми стоит исследование. Когда задача затрагивает механизмы, с которыми большинство людей не сталкивается в обычной работе. Как игроку мне самому такое интереснее.

— Сколько времени занимает разработка?

— Реализация Duckrave заняла пару суток. Но написать таск — только часть работы. Много времени уходит на тестирование и подгонку сложности.

Идеи часто появляются из опыта: на работе или во время игры в CTF. Можно взять несколько простых идей и собрать из них сложную цепочку — это обычно не занимает много времени. А если за таском стоит исследование, нужно ещё проверить, получится ли вообще превратить найденный механизм в задачу. На такую проверку у меня обычно уходит день или два.

Как тестировать задачу, которую будет решать нейросеть

— Что изменилось в разработке с появлением ИИ?

— Для сложных задач тестирование иногда занимает неделю: пробуешь решать их с нейронкой и разбираешь, где она находит короткие пути, которые человек мог бы не заметить.

Например, модели любят перебирать известные им из других задач паттерны в реверсе и идти от обратного. По моему опыту, человек обычно так не делает.

Поэтому основная работа, особенно с учётом нейронок, часто состоит именно в тестировании и настройке сложности.

— Кто, кроме тебя, тестирует задания?

— Зависит от соревнования. На большинстве мероприятий, которые я организовывал, отдельного ревью не было. Тестирование оставалось на авторе и, возможно, паре добровольцев из команды разработки. Проверяли друг у друга, в том числе с помощью ИИ-агентов.

Случаев, когда на ревью не поняли что-то очевидное для меня, не припомню. Обычно такое происходит уже с участниками во время игры.

— Как ты определяешь сложность?

— Обычно заранее известно, сколько нужно задач и какой сложности. Авторы выбирают, за что хотят взяться. Я чаще беру строго easy или hard: золотую середину мне нащупать обычно крайне трудно.

Вообще, оценка сложности — моя проблема с первых соревнований. Мне задача часто кажется легче, чем оказывается для участников.

На Волге из трёх моих задач решили только одну, и только три команды. Я ожидал, что решат две задачи и решений будет больше. На PSUTI из трёх решили одну — одна команда. Там я рассчитывал хотя бы на несколько решений каждой задачи.

Обратных ситуаций, когда всё решали гораздо быстрее, чем я ожидал, не помню.

— Участники находили решения, которых ты не предусматривал?

— В реверсе одну задачу можно пройти сотней способов, но основная линия решения обычно совпадает с задуманной.

Один заметный случай был, когда я взялся не за чистый реверс: задача «Утечка памяти» на DUCKERZ CTF 2026. Во время тестирования на проде мы забыли удалить файл из контейнера. Из-за этого участники могли пропустить часть задания и обойтись без финального эксплойта.

Ещё имя аккаунта на GitHub позволяло пропустить другой важный кусок. В результате цепочка из пяти-шести действий сокращалась до двух-трёх.

Мы удалили лишний файл уже во время соревнования. Наверное, это было не самое верное решение: к тому моменту таск уже решили. Остальное оставили как есть — существенно переделать задачу было уже нельзя.

Первый A/D-сервис и переделка за день до старта

— Какой дедлайн был самым тяжёлым?

— Финал VolgaCTF в этом году. Это был мой первый сервис для Attack–Defense, и я решил поэкспериментировать: добавить в него часть механики King of the Hill.

Придумал идею, но заранее не продумал, как её должен проверять чекер. После разработки пришлось потратить много времени на переделку, чтобы проверка вообще стала возможной. В итоге изменил примерно 70% задания.

Готовый сервис появился за день до соревнования, полноценно протестировать его не успели. Из-за проблем с чекером борда «моргала» между двумя статусами этого сервиса.

На мой взгляд, сам сервис всё же получился неплохим, а соревнование прошло хорошо. Но проблемы с проверкой были.

— Что ты вынес из этого случая?

— Прежде чем экспериментировать внутри формата, нужно убедиться, что эксперимент можно под этот формат адаптировать.

Деньги, учёба и четыре мероприятия за месяц

— Ты делаешь задания бесплатно или это оплачиваемая работа?

— Бесплатно соглашался делать самарские мероприятия и помогать друзьям. Мне важно, чтобы в Самаре проходили качественные соревнования. Но даже там за работу часто благодарили деньгами или как-то ещё.

Когда соглашался делать DUCKERZ CTF, тоже не думал об оплате — просто помогал друзьям. Но и там уйти с пустыми руками мне не дали.

— Что входит в оплату?

— В основном сама разработка. Сумма зависит от соревнования и его типа. За цепочки на киберполигонах и A/D-сервисы платят кратно больше, чем за task-based задачи.

— Как ты совмещаешь столько проектов?

— Самым загруженным оказался октябрь 2026 года: нужно было делать несколько задач сразу для четырёх мероприятий.

Иногда приходится отказаться от сна, иногда — пропустить пары. Где-то меняешь идею таска на ту, которую реально успеть сделать в срок.

Часть работы можно делегировать ИИ. Главное — потом проверить результат, чтобы не вышло очень плохо.

Как получить первое приглашение

— С чего начать игроку, который хочет разрабатывать задания?

— Попробовать сделать задачу для локального CTF, до организаторов которого можно дотянуться.

Есть и платформы — например, DUCKERZ, куда можно предложить задание на ревью. Какую именно задачу делать, зависит от человека, его идей и категорий, в которых он разбирается. Главное — найти, где её можно использовать.

— Что тебе нужно увидеть, чтобы порекомендовать начинающего автора?

— Пару тасков с хорошей идеей и исполнением на каком-нибудь CTF. Репутация игрока тоже не помешает.

— Что больше помогло тебе самому: навыки или знакомства?

— В начале я никого в CTF-комьюнити не знал. Просто много играл с друзьями, старался расти и иногда общался с людьми после соревнований.

Благодаря количеству сыгранных CTF и результатам на некоторых из них познакомился с людьми, которым обязан дальнейшими возможностями. Поэтому важны и навыки, и знакомства. Я считаю, что хороший разработчик заданий — в первую очередь хороший игрок.

— Если приглашений станет вдвое больше, будешь брать ещё?

— Вероятно, да. На мой взгляд, соревнований, которые мне интересны, становится меньше: хорошие сложные задачи, которые нейронка не решит за секунду, умеют делать не так много людей.

Я стал реже играть, поэтому появляется время на разработку. Сейчас она мне интереснее: «здесь всё ещё есть возможность сделать что-то крутое». Есть пространство для творчества, которого при игре в CTF я вижу всё меньше.