- Accueil
- Serveur d'origine
- Architecture
Architecture
Objectif
Section intitulée « Objectif »Ce composant fournit un serveur d’origine unique hébergeant plusieurs applications web vulnérables pour les démonstrations de tests de sécurité. Il représente l’« origine » dans une architecture typique d’équilibreur de charge — le serveur de contenu backend qu’un équilibreur de charge HTTP F5 XC protège.
Dans les architectures de production :
End User -> F5 XC HTTP LB (WAF/Bot/API Security) -> Origin Server -> ApplicationCe composant remplace un serveur d’application de production réel par une VM spécialement conçue exécutant des applications vulnérables bien connues qui déclenchent des règles WAF, des politiques de Sécurité des API et la détection de bots.
Architecture
Section intitulée « Architecture »graph LR
Client[Client Browser] --> XCHLB[F5 XC HTTP LB]
XCHLB --> NGINX[nginx Reverse Proxy<br/>Ubuntu 24.04 · D16s_v3<br/>reuseport · 16 workers]
NGINX --> |/| DEFAULT[Landing Page]
NGINX --> |/juice-shop/| JS[Juice Shop ×4<br/>Ports 3001-3004<br/>hash cookie_token · cache]
NGINX --> |/dvwa/| DVWA[DVWA-FPM ×4<br/>Ports 8101-8104<br/>hash cookie_PHPSESSID]
NGINX --> |/vampi/| VAMPI[VAmPI ×4<br/>Ports 5101-5104<br/>ip_hash · gunicorn]
NGINX --> |/httpbin/| HTTPBIN[httpbin ×4<br/>Ports 8201-8204<br/>gunicorn -w 4]
NGINX --> |/whoami/| WHOAMI[whoami ×4<br/>Ports 8082-8085]
NGINX --> |/csd-demo/| CSD[CSD Demo ×4<br/>Ports 5001-5004<br/>ip_hash · gunicorn -w 1]
NGINX --> |/dvga/| DVGA[DVGA ×4<br/>Ports 5201-5204<br/>ip_hash · SQLite]
NGINX --> |/restaurant/| REST[RESTaurant ×4<br/>Ports 8301-8304<br/>round-robin]
XCHLB --> |:8888| CRAPI[crAPI ×7 microservices<br/>Port 8888<br/>web · identity · community<br/>workshop · postgres · mongo · mailhog]
DVWA --> DB[(MariaDB 10.11<br/>dvwa-db)]
REST --> RESTDB[(PostgreSQL 15.4<br/>restaurant-db)]41 conteneurs sur une VM Standard_D16s_v3 (16 vCPU, 64 Gio de RAM, 60 Gio de disque).
Le proxy inverse nginx :
- Écoute sur le port 80 avec
reuseportetbacklog=4096pour le trafic CDN à haute concurrence - Achemine par préfixe de chemin vers des pools en amont à charge équilibrée (4 instances par application)
- Les sessions persistantes évitent la perte d’état :
hash $cookie_tokenpour Juice Shop,hash $cookie_PHPSESSIDpour DVWA,ip_hashpour VAmPI et CSD Demo (état SQLite/en mémoire par instance) - Cache proxy pour les ressources statiques de Juice Shop (zone de 10 Mo, maximum de 100 Mo, TTL de 60 s)
- Journalisation des accès désactivée pour éviter l’épuisement du disque lors des tests de charge CDN (logrotate comme défense en profondeur)
- Transmission des en-têtes client (
X-Real-IP,X-Forwarded-For,X-Forwarded-Proto) pour la visibilité au niveau de l’origine - Paramétrage du noyau via sysctl :
somaxconn=65535,tcp_tw_reuse=1,ip_local_port_range=1024-65535
Correspondance des applications
Section intitulée « Correspondance des applications »| Chemin | En amont | Instances | Ports | Session persistante | Objectif |
|---|---|---|---|---|---|
/ | nginx | — | — | — | Page d’accueil avec liens vers toutes les applications |
/health | nginx | — | — | — | Point de terminaison de santé JSON (9 applications listées) |
/juice-shop/ | juice_shop | 4 | 3001-3004 | hash $cookie_token | Sécurité des applications web modernes (XSS, injection, CSRF) |
/dvwa/ | dvwa | 4 + MariaDB | 8101-8104 | hash $cookie_PHPSESSID | Tests WAF classiques avec difficulté ajustable |
/vampi/ | vampi | 4 | 5101-5104 | ip_hash | Tests de sécurité des API REST (OWASP API Top 10) |
/httpbin/ | httpbin_up | 4 | 8201-8204 | — | Service de requête/réponse HTTP pour les démonstrations d’API |
/whoami/ | whoami_up | 4 | 8082-8085 | — | Diagnostics des requêtes — affiche tous les en-têtes et l’IP client |
/csd-demo/ | csd_demo | 4 | 5001-5004 | ip_hash | Tests de Défense côté client (attaques Magecart) |
/dvga/ | dvga | 4 | 5201-5204 | ip_hash | Tests de sécurité des API GraphQL (injection, DoS, contournement d’authentification) |
/restaurant/ | restaurant | 4 + PostgreSQL | 8301-8304 | — | Sécurité des API REST (OWASP API Top 10 2023) |
:8888 | crapi | 7 microservices | 8888 | — | OWASP crAPI (BOLA, BFLA, affectation de masse, SSRF, JWT) |
Conception modulaire des composants
Section intitulée « Conception modulaire des composants »Il s’agit d’un élément d’un environnement de laboratoire plus vaste. Chaque composant est autonome et déployé indépendamment :
- Ce composant fournit le serveur d’origine (nginx + conteneurs Docker sur une VM Azure)
- Le Simulateur CDN fournit la couche de périphérie CDN (mise en cache nginx sur une VM Azure)
- Les autres composants fournissent la configuration F5 XC, le DNS, les politiques WAF, la Sécurité des API, etc.
L’opérateur humain ajoute les composants un par un. La documentation de chaque composant est rédigée de manière à ce qu’un assistant IA puisse la lire et déployer l’infrastructure de façon autonome.
Pourquoi ces applications
Section intitulée « Pourquoi ces applications »| Application | Raison de la sélection |
|---|---|
| Juice Shop | Projet phare de l’OWASP ; SPA Node.js moderne avec plus de 100 défis couvrant l’OWASP Top 10 ; activement maintenu ; 4 instances avec cache proxy |
| DVWA | Référence du secteur pour les tests WAF ; niveaux de sécurité ajustables (faible/moyen/élevé/impossible) ; build personnalisé php-fpm + nginx pour les performances ; backend MariaDB 10.11 partagé |
| VAmPI | Conçu spécifiquement pour l’OWASP API Security Top 10 ; API REST avec des vulnérabilités connues ; gunicorn avec 4 workers par instance ; sticky ip_hash pour la cohérence SQLite |
| httpbin | Service de test HTTP canonique de Kenneth Reitz ; gunicorn avec 4 workers gevent ; utile pour les démonstrations d’API et l’inspection des requêtes |
| whoami | Serveur d’écho de requêtes de Traefik ; affiche les détails complets de la requête tels que les voit l’origine — essentiel pour vérifier l’injection d’en-têtes F5 XC |
| CSD Demo | Page de paiement personnalisée avec 5 attaques de style Magecart activables (skimmer de carte, formjacker, enregistreur de frappe, cryptomineur, détournement DOM) ; point de terminaison d’exfiltration + tableau de bord attaquant ; worker unique gunicorn pour la persistance de l’état en mémoire |
| DVGA | Damn Vulnerable GraphQL Application ; vulnérabilités spécifiques à GraphQL incluant l’injection, le DoS, les attaques par lots et le contournement d’autorisation ; interface GraphiQL pour l’exploration interactive ; sticky ip_hash pour SQLite par instance |
| RESTaurant | Damn Vulnerable RESTaurant API Game ; conçu spécifiquement pour l’OWASP API Security Top 10 2023 ; FastAPI avec interface Swagger ; backend PostgreSQL 15.4 partagé ; couvre BOLA, BFLA, affectation de masse, SSRF et injection |
| crAPI | OWASP Completely Ridiculous API ; architecture à 7 microservices couvrant BOLA, BFLA, affectation de masse, SSRF, manipulation JWT et injection NoSQL ; port dédié 8888 (SPA avec chemins d’API codés en dur) ; MailHog pour la capture des e-mails |