Проектирование и разработка среды для проведения дистанционных испытаний в области защиты информации
Обучение кибербезопасности — актуальный вопрос, важный для автора данной работы. С 2017 года он так или иначе связан с этой деятельностью, помогая разрабатывать и проводить соревнования по защите информации в формате CTF (англ. capture the flag — «захват флага»), а также разрабатывая методики преподавания сопутствующего материала и способствуя популяризации этой темы среди школьников России. При текущих трендах цифровизации и развития техники будущим поколениям придётся столкнуться с куда более серьёзными вызовами и сложностями, о которых сегодня можно лишь догадываться: например, в последнее время более активно, чем прежде, проводятся исследования в области квантовых вычислений, успех в которых гарантированно приведёт к утрате стойкости всех распространённых криптографических методов.
Один из способов повышения осведомлённости о кибербезопасности — внедрение её азов в формате школьных олимпиад. Проведение олимпиад по защите информации по правилам Российского совета олимпиад школьников — непростая задача, требующая принципиально нового подхода как к организационной, так и к технической подготовке.
Формат CTF, в котором, как правило, проводятся подобные мероприятия, накладывает большое количество требований к рабочим станциям, на которых участники должны выполнять задания (возможность устанавливать дополнительное ПО, изменять конфигурацию системы и использовать произвольную ОС). Кроме того, для решения CTF-задач участникам необходим доступ в интернет — это не противоречит правилам РСОШ, если участники не используют сеть для общения, но зафиксировать нарушешие правил олимпиады становится на порядок сложнее.
Организация, практику в которой проходит автор настоящей работы, проводит соревнования на независимых площадках с наблюдателями-волонтёрами, квалификация которых варьируется и не всегда достаточна для того, чтобы гарантировать соблюдение всех требований по проведению подобных мероприятий. Если задачу возможно автоматизировать или успростить, то лучше так и поступить.
Цель данной выпускной квалификационной работы — спроектировать и разработать среды для проведения дистанционных испытаний в области защиты информации, для чего необходимо решить следующие задачи:
- определить требования к такой системе, основываясь на специфике CTF-соревнований, требованиях РСОШ и технических возможностях оргкомитета олимпиады;
- выбрать лучшее из доступных готовых решений, если оно удовлетворяет всем требованиям, обосновать выбор;
- изучить технологии, позволяющие достичь требований без готовых решений либо с их доработкой в противном случае;
- разработать проект архитектуры среды для проведения испытаний;
- разработать саму систему;
- опробовать её в ходе очного этапа соревнований по защите информации Ugra CTF School, который состоится 2 апреля 2022 года;
- Был ICPC — это примерно то же самое, но для хакеров и про хакеров.
- В 1996 появился DEF CON CTF.
- В 2008 появился RuCTF и команда «Хакердом».
- В настоящее время проводится более сотни соревнований по всему миру — FBCTF, Google CTF, …; RuCTF — мирового уровня в т.ч.
- CTF признаны в стране:
- Киберполигоны
- МРОО «АРСИБ», которая проводит региональные соревнования и т.н. «Кубок CTF России» (посредственного качества).
- На крупнейших российских конференциях по ИБ — PHDays и ZeroNights — проходят зрелищные CTF-соревнования с крупными призами.
Цель участников — в команде либо очно достать как можно больше флагов из недостаточно защищённых систем, в которых предусмотрены уязвимости.
[что такое флаги]
За 26 лет устаканилось два основных формата соревнований: Attack-Defense и Jeopardy.
Этот вид соревнований возник первым. К нему относятся, например, все DEF CON CTF, проведённые с 1996 года по настоящее время.
Каждой команде дают по серверу с идентичным набором ПО — сервисами, в которых есть дыры. Необходимо на протяжении всей игры поддерживать работоспособность сервисов и находить дыры, чтобы:
- красть флаги у других команд
- обороняться (исправлять уязвимости в своих сервисах)
Соревнования вида attack-defense требовательны к участникам.
Этот вид CTF-соревнований отличается, в первую очередь, более простым набором правил, а также подходом: не атакуют друг друга — вместо этого им выдаётся набор задач, за решение которых начисляются очки. Побеждает команда, раньше всех набравшая больше всего очков.
Своё название данный вид соревнований получил благодаря схожести с форматом телепередачи «Своя игра», в которой игроки выбирают вопросы, сгруппированные по темам и стоимости, с той лишь разницей, что в CTF команды решают задачи асинхронно и не должны видеть решения других команд. Таким образом, соревнования вида jeopardy больше похожи на соревнования по спортивному программированию, где участники получают баллы за верно решённые формально описанные задачи и дисквалифицируются за нечестную игру: списывание или получение иной внешней помощи.
В отличие от attack-defense, порог входа в соревнования, построенные по принципам jeopardy, существенно ниже. Обычно участникам, чтобы получить доступ к игре, достаточно лишь зарегистрироваться в игровой системе. Из этого не следует, что задачи в jeopardy проще, чем эксплуатация уязвимостей сервисов в attack-defense. Для решения могут пригодиться самые разные умения и навыки. Именно поэтому задачи разделяют на категории, а команды зачастую состоят из специлаистов в непересекающихся областях.
История (актуальность + значимость):
- Jeopardy CTF
- Проводятся с 2016 года
- Всероссийская олимпиада по правилам РСОШ - даёт баллы ЕГЭ при поступлении в некоторые вузы
- Более 500 участников каждый год
- Распределённо-очный финал: 10 городов России
На площадках нет представителей команды разработки: только сотрудники этих площадок. Нужна система, которая бы защитила от списывания, минимизировала бы нагрузку на представителей площадок и предоставляла бы участникам комфортную среду для решения задач.
Необходимо решить три задачи:
- выдача условий, проверка решений, подсчёт итогов;
- прокторинг (автоматизированный контроль за ходом соревнований);
- предоставление среды для решения задач.
Если первые Attack-Defense соревнования проводились вручную (участники передавали флаги членам жюри через мессенджер IRC и ждали ответа), то соревнования вида jeopardy с самого начала были автоматизированы. Это связано с относительно более тривиальным игровым процессом, чем в соревнованиях вида attack-defense. Обычно участники получают доступ к веб-приложению, которое содержит условия задач, турнирную таблицу и форму для сдачи флага. Его принято называть бордой.
Борда должна отвечать ряду требований:
- устойчивость к высоким нагрузкам
- многопоточность (корректная: без race conditions)
- устойчивость к атакам (участники — хакеры, хоть и юные)
- защита от списывания и мультиаккаунтинга
- гибкость (произвольные правила)
Существует множество программных продуктов, позволяющих проводить jeopardy – CTF-соревнования, что называется, «под ключ»: организаторам необходимо лишь собрать участников, разработать задания и загрузить их на готовую платформу, при необходимости изменив некоторые её параметры. К сожалению, автору не удалось обнаружить такой системы, которая удовлетворяла бы всем требованиям, указаным выше.
[таблица]
Нужно делать свою. Следовательно, можно расширить перечень требований.
Обычно размещают задачи и следят за их работоспособностью вручную — можно автоматизировать этот процесс. Задачи часто однотипны с инфраструктурной точки зрения: это или веб-приложения, или сервисы на сокетах, или сгенерированные автоматически файлы. Можно разработать систему, позволяющую декларативно описать, как устроена задача, и делегировать полномочия по её развёртыванию борде.
[статистика «столько-то ловили на списывании в такой-то год»]
Это же поможет реализовать более продвинутую защиту от списывания: генерировать каждой команде по своему собственному варианту задачи со своим собственным флагом. Даже если задача статическая (например, на криптографический анализ текста).
Регистрация участников должна быть открытой на отборочном этапе и закрытой в финале (по списку участников). В финале также необходимо соблюдать требования РСОШ и скрывать турнирную таблицу.
[какое-нибудь описание с декомпозицией функций]
Каждому участнику на площадке предоставляется компьютер. Программная среда компьютера должна быть пригодной для решения CTF-задач: нужен Linux с правами администратора (чтобы устанавливать своё ПО). Поскольку компьютеры не наши, жёсткий диск лучше не трогать. В идеале можно предоставить участникам возможность заранее предоставлять свои образы ОС.
Следовательно, среду лучше записывать на внешний загрузочный носитель — причём, участнику давать доступ к виртуальной машине, а в родительской ОС разместить инструменты прокторинга и провизии.
Прокторинг:
- запись экрана;
- контроль целостности ОС.
Провизия:
- конфигурация сети;
- вывод на рабочем столе сведений об участниках («подписать», где чей компьютер);
- возможность удалённого доступа к каждой машине для администрирования.
Виртуальная частная сеть, в которой:
- сервер жюри с бордой (веб-интерфейс, HTTPS);
- сервер провизии и прокторинга (HTTP-API, управление через SSH);
- хранилище образов ВМ участников;
- рабочие места участников.
Рабочие места изолированы друг от друга, но доступ в интернет есть.
Участник:
- может общаться в интернете (нельзя)
- может обмениваться флагами с другими участниками
- может обмениваться условиями задач с внешним миром
- может атаковать инфраструктуру (в разных местах)
Организатор:
- может помогать участникам
Разработанная для Ugra CTF борда.
- Стек технологий:
- Почему «Питон»;
- Postgres.
- Веб-интерфейс:
- Flask;
- gunicorn + nginx — конфигурация, рассчитанная на параллелизм и высокие нагрузки;
- фильтрация через iptables — выдача банов и рейтлимитов.
- Супервизор и
run_daemon
:- поддерживает себя и все задачи в рабочем состоянии;
- перезапускает упавшие задачи;
- логгирует посылки участников;
- (пре-) генерация вариантов задач для каждой команды (+ описание криптографии за этим);
- типы задач:
- статическая задача
- генератор:
- в контейнере:
- контейнер один на задачу + обмен токенами с генератором
- контейнер на каждую команду
- без контейнера:
- процесс + nix-пакет.
- Ядро:
- конфигурация соревнований;
- произвольные правила (например, можно динамически оценивать задачи: стоимость обратно пропорциональна числу решивших её команд);
- проверка флагов;
- регистрация и авторизация участников.
Средя для участников.
- Стек технологий:
- NixOS и пакетный менеджер Nix:
- декларативный подход к конфигурации системы и ПО;
- гарантия целостности среды через иммутабельность.
- Прокторинг и провизия:
- клиент-серверный протокол;
wallpaper.py
;- компоненты, отвечающие за провизию (загрузка пользовательского образа ВМ, усатновка шифра и ФИО);
remote-customize.sh
,ssh-to-client.sh
,handle-proctor.sh
;- проверка статуса всех рабочих мест (
schoolos-health
);
- Сборка образа (
build-image
).
- NixOS и пакетный менеджер Nix: