Платформа для тренировок команд CTF в режиме attack-defence заточенная под журейную систему ctf01d.
Основные функции:
- Каталог сервисов с чекерами
- Список команд
- Автоматическое развертывание игры AD на базе ctf01d в каком либо виртуальном пространстве.
Система должна будет работать в двух режимах:
- Это как каталог сервисов - публично развернутый архив
- Это как локальная система для тренировок (которая сможет стянуть сервисы из публичного каталога)
- Сервер: golang
- База данных: postgresql
- Клиент: фронт на vanilla + jquery
Каждый пользователь имеет такие поля:
- uuid пользователя
- Имя для входа (user_name) - должно быть ограничение на символы, англ + цифры + _, так как он будет использоваться в url, Уникальное и не изменяемое issue
- Видимое имя - То как будет отображается пользователь для всех, например: Иван Петров
- Пароль для входа (password) - есснно в базе храниться хеш
- Аватар - Ссылка на аватарку
- Рейтинг - Пока просто какие то абстрактные очки issue
Список ролей пользователей (надо бы что бы была возможность создавать новые роли при необходимости - место для костылей и прочего) issue:
- user - пользователь, роль по-умолчанию
- moderator - пользователь, который может апрувать часть данных
- admin - администратор
Профиль пользователя:
- История по командам, в каких играл и в какой сейчас состоит issue
- Авторизация - простая по логин/пароль
- Регистрация - Закрытая, пользователь вводит свои креды, и только администратор в ручном режиме будет активировать пользователей
- Создать пользователя - Администратор может создавать пользователей самостоятельно
- Удалить пользователя - Администратор может удалить пользователя навсегда
- Сброс пароля - Администратор может установить пароль для любого пользователя
- Изменить пароль - Пользователь может изменить свой пароль при использовании предыдущего
- Обновить аватар - Пользователь может загрузить свою новую аватарку
- Удалить аватар - Пользователь может удалить свою аватарку, либо админ может сбросить у любого пользователя
пароль должен иметь не менее 6 символов
Каждый сервис имеет такие поля:
- uuid сервиса
- Уникальное имя
- Публичное описание - То есть то которое будут видеть все так что там должна быть только общая информация, например: аналог Инстаграм или чат
- Приватное описание - Описание уязвимостей, на какие портах работает, какие технологии применялись
- Автор - что бы знать в кого писать и для соблюдения авторских прав
- Копирайт - для соблюдения авторских прав
- Аватарка - для того чтобы интереснее отображалось в списке
- Архив с сервисом - Непосредственно то что будет разворачиваться в уязвимом образе (должно быть версионирование файлов на стороне сервера)
- Валидный ли архив с сервисом - Поле обозначает что прошел ли сервис проверки
- Архив с чекером - То что будет использоваться журейной системой (должно быть версионирование файлов на стороне сервера)
- Валидный ли архив с чекером - Поле обозначает что прошел ли чекер проверки
- Публичный ли сервис - то есть доступный ли он для пользователей
- Дата создания сервиса - Указывается пользователем
- Дата последнего изменения полей - Автоматически со стороны сервера
- Райтап(ы) - ?
- Валидация - Прошел ли сервис валидацию
- Рейтинг сервиса
На текущий момент добавлять/изменять/удалять сервисы может только пользователи с ролью админ.
- Добавить сервис - администратор
- Изменить сервис - администратор
- Установить аватарку - администратор
- Удалить аватарку - администратор
- Залить архив сервиса - формально убедиться что в архиве все файлы есть какие надо
- Залить архив чекера - формально убедиться что в архиве есть все файлы какие надо
- Если админов много то возможно нужно реализовать защиту от перезаписи данных путем: клиент отправляет данные как было и как стало и сервер уже проверяет что если поля соответствуют то обновляет, если же изменилось какое либо поле то отправить ответ какое поле изменилось клиенту.
- При загрузки zip для сервиса необходимо проверить корректно ли работает чекер (проверить все коды и состояния)
Поля:
- uuid команды
- Имя команды
- Аватарка
- Университет
- Описание
- Ссылка на официальный сайт
- Текущий капитан
Отдельной таблицей по отношению к пользователям (многие ко многим? - да владеть двумя командами это возможно):
- команда uuid - уникальный идентификатор
- Роль в команде - (owner, captain, vice-captain, player, guest)
- Название роли в команде - роли придуманные капитанами и замами команд
- публичный комментарий - виден всем
- приватный комментарий - виден только владельцу капитану и зам капитана
Отдельной таблицей:
- Запрос на создание команды (имя, университет, описание) - Принимает заявку администратор
Также нужна таблица историческая, по изменению состава команды + изменению ролей в команде:
Пишем туда но ничего не удаляем.
- Запрос создания команды - От пользователя
- Подтверждение создания команды - Администратор
- Создание команды - Администратор
- Удаление команды - Администратор
- Редактирование команды - Администратор либо владелец
- Добавление участников в команду Администратор
- Приглашение в команду - Владелец команды, капитан или зам капитана
- Запрос в состав команды - Пользователь
- Установка капитана/зам капитана/Участника - Владелец команды и администратор
- Установка зам капитана/Участника - Капитан команды и администратор
- Установка "Название роли в команде"/"публичный комментарий"/"приватный комментарий" для участников команды - Владелец команды и администратор
- Владельцев команды может быть несколько.
- Капитан команды может быть только один.
- Зам капитанов команды может быть несколько (потом можно будет сделать ограничение).
- Участников команды может быть много.
- Владеть можно несколькими командами
- Капитаном можно быть только в одной команде.
- Участвовать можно в нескольких командах одновременно (Но во время игры надо будет проверять на уникальность списка участников).
Поля:
- Название
- Дата начала
- Дата окончания
- Кто проводит
На текущий момент добавлять/изменять/удалять игры может только пользователи с ролью админ.
- Создание игр по расписанию (какие сервисы какие команды и когда)
- Список кто с кем и когда
- Когда игру открывают - то vpn (или какой то там будет доступ) для соответствующих команд и пользователей.
- Где находиться scoreboard
- По завершению игры - надо сохранять результат scoreboard.