
multi-juicer v10.3.0
Hosten und verwalten Sie mehrere Juice Shop-Instanzen für Sicherheitstrainings und Capture The Flags.
CTFs und Security-Trainings mit OWASP Juice Shop durchzuführen, ist normalerweise recht knifflig – Juice Shop ist einfach nicht dafür gedacht, von mehreren Benutzern gleichzeitig genutzt zu werden. Allen zu erklären, wie sie Juice Shop auf ihrer eigenen Maschine starten, funktioniert zwar, kostet aber zu viel wertvolle Zeit.
MultiJuicer gibt dir die Möglichkeit, separate Juice-Shop-Instanzen für jeden Teilnehmer auf einem zentralen Kubernetes-Cluster zu betreiben, um Events ohne lokale Juice-Shop-Instanzen durchzuführen.
Was es macht:
- erstellt bei Bedarf dynamisch neue Juice-Shop-Instanzen
- läuft auf einer einzigen Domain und bringt einen LoadBalancer mit, der den Traffic an die Juice-Shop-Instanz des jeweiligen Teilnehmers weiterleitet
- ein nettes kleines Leaderboard, das den Fortschritt aller Teilnehmer anzeigt
- eine praktische Admin-Seite zur Verwaltung der Instanzen
- Sicherung und automatische Wiederherstellung des Challenge-Fortschritts, falls Juice-Shop-Container neu gestartet werden
- automatische Bereinigung alter und ungenutzter Instanzen
Eine ausführliche Beschreibung der Architektur und der einzelnen Komponenten findest du in der Architekturdokumentation.
👉 Neu bei MultiJuicer? Sieh dir den visuellen Rundgang an, um zu erfahren, wie Teilnehmer sich registrieren, ihre JuiceShop-Instanzen erhalten und wie die Punkte auf dem Scoreboard verfolgt werden.
Installation
MultiJuicer läuft auf Kubernetes; für die Installation benötigst du helm
helm install multi-juicer oci://ghcr.io/juice-shop/multi-juicer/helm/multi-juicer
Eine Checkliste der Werte, die du wahrscheinlich konfigurieren musst, bevor du MultiJuicer bei richtigen Events einsetzt, findest du in den Produktionshinweisen.
Um MultiJuicer mit Unterstützung für die KI-/LLM-bezogenen Challenges des JuiceShop v20+ einzurichten, siehe AI/LLM-Konfigurationsanleitung
Installationsanleitungen für bestimmte Cloud-Anbieter / Umgebungen
Im Allgemeinen läuft MultiJuicer auf so ziemlich jedem Kubernetes-Cluster, aber um es allen, die neu bei Kubernetes sind, einfacher zu machen, haben wir einige Anleitungen zur Einrichtung eines Kubernetes-Clusters mit installiertem MultiJuicer für bestimmte Cloud-Anbieter.
Anpassen des Setups
Du hast einige Optionen, wie du den Stack einrichtest, mit einigen Möglichkeiten, die JuiceShop-Instanzen nach deinen eigenen Wünschen anzupassen. Die Standard-Konfigurationswerte findest du unter: helm/multi-juicer/values.yaml
Lade die Datei herunter und speichere sie und weise helm an, deine Konfigurationsdatei anstelle der Standarddatei zu verwenden, indem du Folgendes ausführst:
helm install -f values.yaml multi-juicer ./multi-juicer/helm/multi-juicer/
Um das Theming der JuiceShop-Instanzen und der MultiJuicer-UI anzupassen (Theme, Logo, aktivierte Challenges, ...), siehe die JuiceShop-Anpassungsanleitung.
Deinstallation
helm delete multi-juicer
FAQ
Wie viele Rechenressourcen wird das Cluster benötigen?
Um auf der sicheren Seite zu sein, kalkulieren Sie mit:
- 1 GB Speicher & 1 CPU Overhead, für MultiJuicer selbst
- 384 MB & 0,1 CPU * Anzahl der Teilnehmer / Teams, für die einzelnen JuiceShop-Instanzen
Die oben genannten Zahlen entsprechen den Standard-Ressourcenlimits. Diese können angepasst werden, siehe: Customizing the Setup
Wie viele Benutzer kann MultiJuicer verwalten?
Es gibt kein echtes festes Limit. (Auch wenn Sie eines konfigurieren können 😉) Der benutzerdefinierte LoadBalancer, über den der gesamte Datenverkehr für die einzelnen Instanzen läuft, kann beliebig oft repliziert werden. Sie können auch einen Horizontal Pod Autoscaler anhängen, um den LoadBalancer automatisch zu skalieren.
Warum ein benutzerdefinierter LoadBalancer?
Es gibt einige besondere Anforderungen, für die wir keine einfache Lösung mit einem vorgefertigten Load Balancer gefunden haben:
- Die Anzahl der Benutzer für eine Bereitstellung auf nur die Mitglieder eines bestimmten Teams beschränken.
- Das Cookie des Load Balancers muss sicher und nicht leicht zu fälschen sein, um auf eine andere Instanz zuzugreifen.
- Die Handhabung des Starts neuer Instanzen.
Wenn Sie großartige Ideen haben, wie man diese Probleme ohne einen benutzerdefinierten Load Balancer lösen kann, schreiben Sie uns, wir würden uns freuen von Ihnen zu hören!
Warum eine separate Kubernetes-Bereitstellung für jedes Team?
Dafür gibt es einige ziemlich gute Gründe:
- Die Möglichkeit, die Instanzen eines Teams separat zu löschen. Sicheres Herunterskalieren, ohne Instanzen aktiver Teams zu entfernen, ist mit einer skalierten Bereitstellung wirklich schwierig. Sie können nur den gewünschten Umfang wählen, nicht welche Pods behalten und welche verworfen werden sollen.
- Um sicherzustellen, dass Pods nach der Neuerstellung eines Pods noch ordnungsgemäß mit Teams verknüpft sind. Dies ist bei separaten Bereitstellungen kein Problem und bei skalierten Bereitstellungen wirklich schwierig.
- Die Möglichkeit, den Teamnamen in den Bereitstellungsnamen einzubetten. Dies scheint ein alberner Grund zu sein, macht das Debugging aber SOOO viel einfacher, allein durch die Verwendung von
kubectl.
Wie verwaltet man JuiceShop einfach mit kubectl?
Sie können alle JuiceShops mit relevanten Informationen mithilfe der custom-columns-Funktion von kubectl auflisten.
$ 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)
Woher dieses Projekt stammt
Das Projekt entstand bei iteratec, einem in Deutschland ansässigen Softwareentwicklungsunternehmen, um seine Sicherheitsschulungen für die eigenen Entwickler und seine Kunden durchzuführen. Das Projekt wurde dann 2019 als Open Source veröffentlicht und 2023 an die OWASP-Organisation / das OWASP Juice Shop-Projekt gespendet.