
multi-juicer v10.3.0
托管和管理多个Juice Shop实例,用于安全培训和夺旗赛(CTF)
使用 OWASP Juice Shop 举办 CTF 和安全培训通常相当棘手,Juice Shop 本身并不打算供多个用户同时使用。 指导每个人在自己的机器上启动 Juice Shop 虽然可行,但会占用太多宝贵的时间。
MultiJuicer 让你能够在中央 kubernetes 集群上为每位参与者运行独立的 Juice Shop 实例,从而无需本地 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 的人更容易上手,我们提供了一些指南,介绍如何为某些特定的云提供商设置已安装 MultiJuicer 的 Kubernetes 集群。
自定义设置
你有多种方式来设置这套技术栈,其中一些选项可以按照你自己的喜好自定义 JuiceShop 实例。 你可以在以下位置找到默认配置值:helm/multi-juicer/values.yaml
下载并保存该文件,然后运行以下命令,让 helm 使用你的配置文件而非默认配置:
helm install -f values.yaml multi-juicer ./multi-juicer/helm/multi-juicer/
要自定义 JuiceShop 实例和 MultiJuicer UI 的主题(主题、徽标、启用的挑战等),请参阅 JuiceShop 自定义指南。
卸载
helm delete multi-juicer
常见问题
集群需要多少计算资源?
为稳妥起见,请按以下方式计算:
- MultiJuicer 自身需要 1GB 内存和 1 个 CPU 的开销
- 每个 JuiceShop 实例需要 384MB 内存和 0.1 个 CPU * 参与者/团队数量
以上数字反映的是默认资源限制。这些数值可以调整,参见:自定义设置
MultiJuicer 能支持多少用户?
并没有真正的固定上限。(尽管你可以配置一个 😉) 自定义 LoadBalancer 承载着各个实例的全部流量,它可以按需复制任意数量。 你还可以为其挂载 Horizontal Pod Autoscaler 来自动扩缩容 LoadBalancer。
为什么要用自定义 LoadBalancer?
我们遇到了一些特殊需求,发现用任何现成的负载均衡器都不太容易解决:
- 将某个部署的用户数量限制为仅限特定团队的成员。
- 负载均衡器的 cookie 必须安全,且不易被伪造以访问其他实例。
- 处理新实例的启动。
如果你有绝妙的想法,能在不使用自定义负载均衡器的情况下解决这些问题,请写信告诉我们,我们很乐意听取你的意见!
为什么每个团队要单独一个 Kubernetes 部署?
这样做有相当充分的理由:
- 可以单独删除某个团队的实例。对于扩缩容的部署来说,安全地缩容而不移除活跃团队的实例非常棘手。你只能选择期望的副本数,而无法选择保留哪些 Pod、丢弃哪些 Pod。
- 确保 Pod 在重建后仍能正确关联到团队。使用独立部署时这不成问题,而使用扩缩容部署时则非常困难。
- 能够将团队名称嵌入部署名称中。这看起来是个愚蠢的理由,但仅使用
kubectl就能让调试变得轻松太多。
如何使用 kubectl 轻松管理 JuiceShop?
你可以使用 kubectl 的 custom-columns 功能列出所有 JuiceShop 及其相关信息。
$ 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 年开源,并于 2023 年捐赠给 OWASP 组织 / OWASP Juice Shop 项目。
与我们交流!
你可以在 OWASP Slack 工作区的 #project-juiceshop 频道联系我们。我们非常乐意听取你的任何反馈或使用报告。如果你尚未加入 OWASP Slack 工作区,可以通过此链接加入。