
multi-juicer v10.3.0
Размещайте и управляйте несколькими экземплярами Juice Shop для учебных курсов по безопасности и соревнований Capture The Flag.
Проведение CTF и учебных курсов по безопасности с OWASP Juice Shop обычно довольно затруднительно: Juice Shop просто не предназначен для одновременного использования несколькими пользователями. Инструктировать каждого, как запустить Juice Shop на своей машине, работает нормально, но отнимает слишком много ценного времени.
MultiJuicer даёт вам возможность запускать отдельные экземпляры Juice Shop для каждого участника на центральном кластере kubernetes, чтобы проводить мероприятия без необходимости в локальных экземплярах Juice Shop.
Что он делает:
- динамически создаёт новые экземпляры Juice Shop при необходимости
- работает на одном домене, поставляется с LoadBalancer, направляющим трафик к экземпляру Juice Shop участника
- аккуратная небольшая таблица лидеров, показывающая прогресс всех участников
- удобная страница администратора для управления экземплярами
- резервное копирование и автоматическое применение прогресса по заданиям на случай перезапуска контейнера Juice Shop
- автоматическая очистка старых и неиспользуемых экземпляров
Подробное описание архитектуры и отдельных компонентов см. в документации по архитектуре.
👉 Впервые работаете с MultiJuicer? См. визуальное руководство о том, как участники регистрируются, получают свои экземпляры JuiceShop и как отслеживаются баллы на таблице результатов.
Установка
MultiJuicer работает на kubernetes, для его установки вам понадобится helm
helm install multi-juicer oci://ghcr.io/juice-shop/multi-juicer/helm/multi-juicer
См. заметки о развёртывании, чтобы ознакомиться с контрольным списком значений, которые, вероятно, потребуется настроить перед использованием MultiJuicer на реальных мероприятиях.
Чтобы настроить MultiJuicer с поддержкой задач JuiceShop v20+, связанных с AI/LLM, см. руководство по настройке AI/LLM
Руководства по установке для конкретных облачных провайдеров / сред
В целом MultiJuicer работает практически на любом кластере Kubernetes, но чтобы облегчить жизнь тем, кто только знакомится с Kubernetes, мы подготовили несколько руководств по настройке кластера Kubernetes с установленным MultiJuicer для некоторых конкретных облачных провайдеров.
Настройка конфигурации
У вас есть несколько вариантов настройки стека, а также возможность настроить экземпляры JuiceShop по своему вкусу. Значения конфигурации по умолчанию можно найти здесь: helm/multi-juicer/values.yaml
Скачайте и сохраните файл, а затем укажите helm использовать ваш файл конфигурации вместо конфигурации по умолчанию, выполнив:
helm install -f values.yaml multi-juicer ./multi-juicer/helm/multi-juicer/
Чтобы настроить оформление экземпляров JuiceShop и интерфейса MultiJuicer (тема, логотип, включённые задания и т. д.), см. руководство по настройке JuiceShop.
Удаление
helm delete multi-juicer
FAQ
Сколько вычислительных ресурсов потребуется кластеру?
Для надёжности рассчитывайте на:
- 1 ГБ памяти и 1 CPU накладных расходов, для самого MultiJuicer
- 384 МБ и 0.1 CPU * количество участников / команд, для отдельных экземпляров JuiceShop
Приведённые выше значения отражают лимиты ресурсов по умолчанию. Их можно изменить, см.: Настройка установки
Сколько пользователей может обслуживать MultiJuicer?
Реального фиксированного ограничения нет. (Хотя вы можете его настроить 😉) Пользовательский LoadBalancer, через который проходит весь трафик отдельных экземпляров, можно реплицировать в любом количестве. Вы также можете подключить Horizontal Pod Autoscaler для автоматического масштабирования LoadBalancer.
Почему используется пользовательский LoadBalancer?
Есть несколько особых требований, которые, как мы обнаружили, непросто решить с помощью любого готового балансировщика нагрузки:
- Ограничение числа пользователей развёртывания только членами определённой команды.
- Cookie балансировщика нагрузки должны быть защищёнными и не должны легко подделываться для доступа к другому экземпляру.
- Обработка запуска новых экземпляров.
Если у вас есть отличные идеи, как решить эти задачи без пользовательского балансировщика нагрузки, напишите нам, мы будем рады услышать вас!
Почему для каждой команды создаётся отдельное развёртывание Kubernetes?
Для этого есть несколько довольно веских причин:
- Возможность удалять экземпляры команды отдельно. Безопасное масштабирование вниз без удаления экземпляров активных команд действительно сложно реализовать с помощью масштабируемого развёртывания. Вы можете выбрать только желаемый масштаб, но не то, какие поды сохранить, а какие отбросить.
- Чтобы гарантировать, что поды по-прежнему правильно связаны с командами после пересоздания пода. С отдельными развёртываниями это не проблема, а с масштабируемыми развёртываниями это действительно сложно.
- Возможность включить имя команды в имя развёртывания. Это кажется глупой причиной, но она делает отладку НАМНОГО проще, достаточно использовать
kubectl.
Как легко управлять JuiceShop с помощью kubectl?
Вы можете вывести список всех JuiceShop с соответствующей информацией, используя функцию custom-columns в kubectl.
$ kubectl get -l app.kubernetes.io/name=juice-shop -o custom-columns="TEAM:metadata.labels.team,SOLVED-CHALLENGES:metadata.annotations.multi-juicer\.owasp-juice\.shop/challengesSolved,LAST-REQUEST:metadata.annotations.multi-juicer\.owasp-juice\.shop/lastRequestReadable" deployments
TEAM SOLVED-CHALLENGES LAST-REQUEST
foobar 3 Wed May 4 2042 18:14:22 GMT+0000 (Coordinated Universal Time)
team-42 0 Wed May 4 2042 18:14:30 GMT+0000 (Coordinated Universal Time)
the-empire 0 Wed May 4 2042 18:14:46 GMT+0000 (Coordinated Universal Time)
Откуда взялся этот проект
Проект начался в iteratec, немецкой компании по разработке программного обеспечения, для проведения тренингов по безопасности для собственных разработчиков и клиентов. Затем проект был открыт в 2019 году и передан организации OWASP / проекту OWASP Juice Shop в 2023 году.