Aller au contenu

Architecture

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 -> Application

Ce 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.

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 reuseport et backlog=4096 pour 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_token pour Juice Shop, hash $cookie_PHPSESSID pour DVWA, ip_hash pour 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
CheminEn amontInstancesPortsSession persistanteObjectif
/nginxPage d’accueil avec liens vers toutes les applications
/healthnginxPoint de terminaison de santé JSON (9 applications listées)
/juice-shop/juice_shop43001-3004hash $cookie_tokenSécurité des applications web modernes (XSS, injection, CSRF)
/dvwa/dvwa4 + MariaDB8101-8104hash $cookie_PHPSESSIDTests WAF classiques avec difficulté ajustable
/vampi/vampi45101-5104ip_hashTests de sécurité des API REST (OWASP API Top 10)
/httpbin/httpbin_up48201-8204Service de requête/réponse HTTP pour les démonstrations d’API
/whoami/whoami_up48082-8085Diagnostics des requêtes — affiche tous les en-têtes et l’IP client
/csd-demo/csd_demo45001-5004ip_hashTests de Défense côté client (attaques Magecart)
/dvga/dvga45201-5204ip_hashTests de sécurité des API GraphQL (injection, DoS, contournement d’authentification)
/restaurant/restaurant4 + PostgreSQL8301-8304Sécurité des API REST (OWASP API Top 10 2023)
:8888crapi7 microservices8888OWASP crAPI (BOLA, BFLA, affectation de masse, SSRF, JWT)

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.

ApplicationRaison de la sélection
Juice ShopProjet 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
DVWARé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é
VAmPIConç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
httpbinService 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
whoamiServeur 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 DemoPage 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
DVGADamn 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
RESTaurantDamn 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
crAPIOWASP 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