Skip to content

Latest commit

 

History

History
163 lines (119 loc) · 11.7 KB

CONCEPT.md

File metadata and controls

163 lines (119 loc) · 11.7 KB

ctf01d training platform

Платформа для тренировок команд CTF в режиме attack-defence заточенная под журейную систему ctf01d.

Основные функции:

  • Каталог сервисов с чекерами
  • Список команд
  • Автоматическое развертывание игры AD на базе ctf01d в каком либо виртуальном пространстве.

Система должна будет работать в двух режимах:

  1. Это как каталог сервисов - публично развернутый архив
  2. Это как локальная система для тренировок (которая сможет стянуть сервисы из публичного каталога)

Технологический стек

  • Сервер: 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)
  • Название роли в команде - роли придуманные капитанами и замами команд
  • публичный комментарий - виден всем
  • приватный комментарий - виден только владельцу капитану и зам капитана

Отдельной таблицей:

  • Запрос на создание команды (имя, университет, описание) - Принимает заявку администратор

Также нужна таблица историческая, по изменению состава команды + изменению ролей в команде:

Пишем туда но ничего не удаляем.

Функции

  • Запрос создания команды - От пользователя
  • Подтверждение создания команды - Администратор
  • Создание команды - Администратор
  • Удаление команды - Администратор
  • Редактирование команды - Администратор либо владелец
  • Добавление участников в команду Администратор
  • Приглашение в команду - Владелец команды, капитан или зам капитана
  • Запрос в состав команды - Пользователь
  • Установка капитана/зам капитана/Участника - Владелец команды и администратор
  • Установка зам капитана/Участника - Капитан команды и администратор
  • Установка "Название роли в команде"/"публичный комментарий"/"приватный комментарий" для участников команды - Владелец команды и администратор

Логика

  • Владельцев команды может быть несколько.
  • Капитан команды может быть только один.
  • Зам капитанов команды может быть несколько (потом можно будет сделать ограничение).
  • Участников команды может быть много.
  • Владеть можно несколькими командами
  • Капитаном можно быть только в одной команде.
  • Участвовать можно в нескольких командах одновременно (Но во время игры надо будет проверять на уникальность списка участников).

Игры

Поля:

  • Название
  • Дата начала
  • Дата окончания
  • Кто проводит

На текущий момент добавлять/изменять/удалять игры может только пользователи с ролью админ.

TODO

  • Создание игр по расписанию (какие сервисы какие команды и когда)
  • Список кто с кем и когда
  • Когда игру открывают - то vpn (или какой то там будет доступ) для соответствующих команд и пользователей.
  • Где находиться scoreboard
  • По завершению игры - надо сохранять результат scoreboard.