đĄïž DDoS / Bot Management â Protection L7, Bots & Abus AutomatisĂ©s
Guide opĂ©rationnel hyper-densifiĂ© pour concevoir, dĂ©ployer et exploiter une protection applicative contre les attaques L7, bots, credential stuffing, scraping, scalping, abus API et DDoS applicatifs â en mode SaaS, cloud provider, on-premise ou Kubernetes.
Taxonomie DDoS & Bots
Différencier L3/L4/L7, bots humains simulés, abus automatisés et fraude applicative.
L3/L4/L7BotsRunbookL7 HTTP Flood
HTTP/2, TLS, endpoints coûteux, cache bypass, origine saturée, attaques lentes.
HTTP FloodSlowlorisCostBot Management
Classification bons/mauvais bots, scores, télémétrie client, fraude et automatisation.
Bot scoreATOScrapingOWASP Automated Threats
Mapping OAT : credential stuffing, carding, scraping, scalping, DoS, inventory abuse.
OWASP OATFraudeBusiness abuseRate Limiting Engineering
Limites par IP, token, compte, ASN, endpoint, coĂ»t, GraphQL complexity et fenĂȘtre glissante.
Token bucketQuota429Fingerprinting & Signaux
TLS/JA3/JA4, HTTP headers, device, comportement, réputation IP/ASN, preuve client.
JA3/JA4TelemetryDeviceChallenges & Vérification
Managed challenge, CAPTCHA alternatif, preuve de travail, MFA adaptatif, friction contrÎlée.
ChallengePoWMFAAPI Abuse & Cost Protection
Unrestricted Resource Consumption, quotas, pagination bornée, GraphQL complexity, coûts tiers.
API4GraphQLQuotaCredential Stuffing / ATO
Détection login abuse, passwords connus, MFA adaptatif, velocity et réponse progressive.
ATOLoginMFAScraping, Scalping & Inventory
Protection catalogue/prix/contenu, files dâattente, jetons de rĂ©servation, anti-scalping.
ScrapingScalpingInventorySaaS / Edge Protection
CDN/Anycast/scrubbing, WAAP SaaS, DNS cutover, origin shielding, mitigation globale.
CDNAnycastSaaSCloud Provider Protection
AWS Shield/WAF, Google Cloud Armor, Azure DDoS/WAF : intégration load balancers et logs.
AWSGCPAzureOnâPrem / ADC / Reverse Proxy
F5 BIG-IP, NGINX, HAProxy, reverse proxy, rĂšgles locales, protection origine et contraintes DC.
ADCNGINXHAProxyKubernetes / Containers
Ingress, Gateway API, sidecar, pod-level L7 DoS, HPA/KEDA, mesh et eBPF.
K8sIngresseBPFRĂšgles WAF/WAAP anti-abus
Combinaison modÚle négatif, modÚle positif, rÚgles custom, exceptions et mode simulate.
WAFWAAPRulesObservabilité SOC
Logs enrichis, métriques, dashboards, alerting, SIEM/SOAR, preuves de mitigation.
SOCSIEMSLOIncident Response DDoS/Bot
Runbooks minute par minute, war room, décisions block/challenge, communication et rollback.
IRWar RoomTTMTests, Tuning & Validation
Mode count, replay logs, tests charge contrÎlés, faux positifs, purple team et chaos security.
TestingCount modeTuningVendor Map & Liens
Cartographie SaaS, cloud, on-prem, conteneurisé avec URLs directes de documentation et produits.
LinksVendorsDocsComprendre le problĂšme : ce nâest pas seulement âbeaucoup de traficâ
Une stratĂ©gie DDoS / Bot Management moderne distingue les attaques volumĂ©triques rĂ©seau, les floods applicatifs coĂ»teux, les abus automatisĂ©s discrets et les fraudes mĂ©tier. Le vrai danger L7 vient souvent de requĂȘtes qui semblent valides : login, recherche, panier, API GraphQL, tĂ©lĂ©chargement, scraping ou gĂ©nĂ©ration de devis.
| Famille | Objectif attaquant | Signal principal | Réponse défensive |
|---|---|---|---|
| L3/L4 DDoS | Saturer bande passante, SYN/UDP floods | pps/bps anormaux, ports/protocoles | Scrubbing, Anycast, ACL edge, SYN cookies |
| L7 HTTP Flood | Ăpuiser CPU/app/db/cache | RPS, latence, chemins coĂ»teux | Rate limits, caching, challenges, WAF rules |
| Bots transactionnels | Fraude, ATO, scalping, scraping | Comportement, device, séquences | Bot score, JA3/JA4, preuve de travail, MFA adaptatif |
| Abus API | Ăpuisement quotas/coĂ»ts, extraction data | Token/user/org, paramĂštres page/limit | Quota par identitĂ©, schĂ©ma, pagination bornĂ©e |
La pyramide de défense
- Edge global : absorber les attaques volumĂ©triques avant lâorigine.
- WAF/WAAP : filtrer les requĂȘtes connues malveillantes et imposer un modĂšle positif.
- Bot layer : classifier lâautomatisation par signaux client, rĂ©putation, comportement et challenges.
- Application : quotas par compte, idempotency, circuit breakers, feature flags.
- Data layer : requĂȘtes bornĂ©es, cache, index, backpressure.
â
CDN / Anycast / Scrubbing
â
WAAP / WAF / Bot Engine
â
API Gateway / Ingress
â
App / Queue / DB
Ce qui casse les architectures en production
| Erreur | SymptĂŽme | Correction |
|---|---|---|
| Limiter uniquement par IP | Attaque distribuée passe sous le radar | Agrégation par IP + ASN + pays + session + endpoint + user/token |
| Tout challenger | Faux positifs clients, SEO cassé | Challenge progressif seulement sur endpoints sensibles |
| Pas de protection origine | Lâattaquant bypass le CDN | Allowlist IP CDN, mTLS, private origin, firewall source |
| Pas de mode simulate/count | Blocages business en prod | Déployer en count/log puis durcir par étapes |
Pourquoi le L7 est difficile
Une attaque L7 nâa pas forcĂ©ment un volume Ă©norme. Elle exploite lâasymĂ©trie coĂ»t attaquant/dĂ©fenseur : une requĂȘte simple cĂŽtĂ© bot dĂ©clenche cĂŽtĂ© serveur une recherche, un rendu, un appel paiement, un calcul de prix, une gĂ©nĂ©ration PDF, une requĂȘte GraphQL profonde ou un accĂšs DB non cachĂ©.
| Vecteur | Impact | Signal |
|---|---|---|
| GET /search?q=... | CPU + DB + cache miss | RPS élevés sur URL paramétrée |
| POST /login | Hash password, auth provider, lockout | 401/403 élevés, usernames variés |
| GraphQL query | Explosion profondeur/complexité | Temps réponse, taille réponse, resolver count |
| HTTP/2 rapid reset | Stress connexion/streams | Reset stream anormaux, concurrency |
Indicateurs à corréler
- RPS par endpoint : moyenne, p95, p99, écart-type, cardinalité des IPs.
- Coût backend : CPU, DB QPS, cache hit ratio, queue depth, temps resolver GraphQL.
- Distribution : User-Agent, JA3/JA4, ASN, pays, TLS version, HTTP version.
- Comportement : ratio erreurs, absence de ressources statiques, absence de navigation humaine.
# RequĂȘte observabilitĂ© type â pseudo LogQL / SIEM
count_over_time({service="edge"} | json | path="/search" [1m]) by (ip, asn, ja4, country)
quantile_over_time(0.99, {service="api"} | json | unwrap latency_ms [5m]) by (route)ContrĂŽles progressifs
- Cache agressif sur pages publiques et assets, respect
stale-while-revalidate. - Rate limit par endpoint, pas seulement global.
- Challenge adaptatif si score bot bas + endpoint cher + anomalie.
- Circuit breaker : dĂ©grader la recherche, couper gĂ©nĂ©ration PDF, mettre files dâattente.
- Origin shielding : IP dâorigine masquĂ©e, accĂšs direct bloquĂ©.
# NGINX â exemple dĂ©fensif basique pour endpoint coĂ»teux
limit_req_zone $binary_remote_addr zone=search_zone:20m rate=30r/m;
location /search {
limit_req zone=search_zone burst=20 nodelay;
proxy_cache my_cache;
proxy_cache_valid 200 30s;
proxy_pass http://app_backend;
}Runbook de crise L7
| Minute | Action | But |
|---|---|---|
| 0-5 | Basculer rĂšgles WAF rate-limit en mode block sur endpoint touchĂ© | Stopper lâhĂ©morragie |
| 5-15 | Activer cache bypass protection, challenge JS/managed challenge | Filtrer les clients non humains |
| 15-30 | Restreindre pays/ASN si légitime business le permet | Réduire surface |
| 30+ | Analyser logs, crĂ©er rĂšgle durable, postmortem | Ăviter rĂ©cidive |
Classifier avant de bloquer
Un bot management sĂ©rieux ne bloque pas âles botsâ en bloc. Il sĂ©pare les bons crawlers, les outils de monitoring, les partenaires, les bots IA, les scrapers, les credential stuffers, les scalpers et les scripts maison mal configurĂ©s.
| Type | Valeur/Risque | Action |
|---|---|---|
| Search crawlers | SEO / indexation | Allowlist vérifiée DNS reverse + ASN |
| Monitoring | SLA externe | Allowlist + user-agent contrÎlé + token |
| Scrapers | Extraction prix/contenu | Throttle, tarpit, honeypot, watermark |
| ATO bots | Credential stuffing | Challenge, MFA adaptatif, passwordless |
| Scalpers | Inventory abuse | Queue, reservation token, velocity controls |
Signaux utiles
- Réseau : ASN, IP réputation, proxy/VPN/Tor, datacenter vs résidentiel.
- TLS/HTTP : JA3/JA4, ALPN, ordre headers, HTTP/2 settings, accept-language incohérent.
- Client : JS telemetry, canvas/webgl, webdriver, timings, storage, plugins.
- Comportement : vitesse clics, séquence pages, absence assets, répétition paramÚtres.
- Identité : compte, token, device, cookie ancienneté, historique achat.
Réponses graduées
| Score/Risque | Action | Cas dâusage |
|---|---|---|
| Faible | Allow + log | Utilisateur connu, bon device |
| Moyen | Throttle + challenge léger | Navigation suspecte mais pas critique |
| ĂlevĂ© | Managed challenge / MFA / deny | Login, checkout, API sensible |
| Critique | Block + ticket SOC + indicateur IOC | Fraude/ATO confirmé |
# Pseudo-politique IF endpoint in ["/login", "/checkout", "/api/token"] AND bot_score < 25 AND reputation in ["datacenter_proxy", "credential_stuffing_source"] THEN challenge_or_block WITH reason="high_risk_bot_transaction"
OWASP Automated Threats : lecture opérationnelle
Le référentiel OWASP OAT aide à nommer les abus automatisés qui ne sont pas toujours des vulnérabilités applicatives classiques. Il est précieux pour cadrer les risques métier : inventaire, comptes, cartes, contenu, disponibilité.
| OAT | Exemple business | Défense |
|---|---|---|
| Credential Stuffing | Rejeu massif couples email/mot de passe | Velocity par compte/IP/device, MFA adaptatif |
| Scraping | Aspiration catalogue/prix | Bot score, watermark, throttle, honeypots |
| Scalping | Achat automatisĂ© billets/sneakers | Queue, preuve dâhumanitĂ©, limite panier |
| Denial of Inventory | Réservation sans achat | TTL court, deposit, anti-hold abuse |
| Denial of Service | Ressources app saturées | Rate limit, cache, challenge, circuit breaker |
Mesurer autrement que par RPS
- Login : ratio échec/succÚs, usernames distincts par IP, IPs par username.
- Panier : add-to-cart sans checkout, hold duration, abandons synchronisés.
- Scraping : profondeur catalogue, ordre séquentiel, absence assets, bytes sortants.
- Checkout : refus paiement, BIN/card velocity, adresse de livraison répétée.
- API : coût unitaire par endpoint, quotas consommés, appels tiers déclenchés.
ContrÎles centrés métier
# Pseudo-contrĂŽle inventory abuse IF product_drop=true AND add_to_cart_per_device > 3 in 10m AND checkout_completion_rate < 10% THEN require_queue_token AND reduce_reservation_ttl
# Pseudo-contrĂŽle scraping IF pages_viewed_category > 200 in 5m AND static_asset_ratio < 0.1 AND mouse_or_touch_events = 0 THEN throttle_to_1_rps AND serve_canary_links
Rate limit : ne pas confondre plafond et sécurité
Le rate limiting efficace combine plusieurs clĂ©s dâagrĂ©gation : IP, compte, token, session, device, ASN, pays, endpoint et coĂ»t mĂ©tier. Une rĂšgle globale â1000 req/min/IPâ est rarement suffisante contre des botnets distribuĂ©s.
| Clé | Avantage | Limite |
|---|---|---|
| IP | Simple, disponible partout | Contournable par proxies |
| Compte/User | Stoppe abus authentifiés | Ne protÚge pas pré-auth |
| Endpoint | ProtÚge les routes coûteuses | Nécessite cartographie précise |
| ASN/Pays | Utile en crise | Risque faux positifs |
| Coût calculé | Adapté GraphQL/API | Instrumentation requise |
Algorithmes classiques
| Algorithme | Usage | Notes |
|---|---|---|
| Fixed window | Simple | Effet de bord aux limites de fenĂȘtre |
| Sliding window | Plus juste | Plus coûteux à calculer |
| Token bucket | Autorise rafales contrÎlées | TrÚs utilisé pour APIs |
| Leaky bucket | Lisse le trafic | Bon pour backends fragiles |
| Adaptive | Anomalie / baselines | Besoin de tuning et logs |
Exemples concrets
# NGINX â login sensible
limit_req_zone $binary_remote_addr zone=login_ip:10m rate=5r/m;
limit_req_zone $http_authorization zone=login_token:10m rate=20r/m;
location = /login {
limit_req zone=login_ip burst=5 nodelay;
proxy_pass http://auth_backend;
}// AWS WAF â extrait JSON dĂ©fensif rate-based
{
"Name": "RateLimitLoginByIP",
"Priority": 10,
"Statement": {
"RateBasedStatement": {
"Limit": 300,
"AggregateKeyType": "IP",
"ScopeDownStatement": {
"ByteMatchStatement": {
"SearchString": "/login",
"FieldToMatch": {"UriPath": {}},
"TextTransformations": [{"Priority": 0, "Type": "NONE"}],
"PositionalConstraint": "EXACTLY"
}
}
}
},
"Action": {"Block": {}}
}Design propre
- Retourner
429 Too Many RequestsavecRetry-Afterpour APIs légitimes. - Utiliser count/log mode avant blocage.
- Prévoir des allowlists partenaires et des quotas contractuels.
- Différencier lecture publique, login, checkout, admin, API interne.
- Conserver les logs de dĂ©cisions : rĂšgle, seuil, clĂ©, fenĂȘtre, score.
Empreintes réseau et transport
| Signal | Utilité | PiÚge |
|---|---|---|
| TLS fingerprint | DĂ©tecte librairies automatisĂ©es | Peut ĂȘtre mimĂ© par outils avancĂ©s |
| ASN / hosting | RepÚre datacenters/proxies | Certains clients légitimes passent par cloud |
| HTTP/2 settings | DiffĂ©rencie navigateurs et scripts | Ăvolue avec versions browser |
| Header order | Signal faible mais utile | Fragile aux middlewares/proxies |
Télémétrie navigateur
Les solutions bot injectent souvent un script léger pour mesurer des signaux difficiles à reproduire parfaitement : événements, timings, rendu, stockage, intégrité navigateur, webdriver, cohérence platform/language/timezone.
// Pseudo-signal cĂŽtĂ© client â exemple pĂ©dagogique
{
"events": {"mousemove": 42, "keydown": 8, "touch": 0},
"timing": {"first_interaction_ms": 1320, "form_fill_ms": 8400},
"env": {"webdriver": false, "timezone": "Europe/Paris", "lang": "fr-FR"},
"integrity": {"cookie_age_days": 54, "local_storage": true}
}Score composite
Un score fiable doit ĂȘtre expliquĂ© : pourquoi un client a Ă©tĂ© challengĂ© ou bloquĂ© ? Sans raison exploitable, impossible de rĂ©duire les faux positifs.
| Composant | Poids typique | Explication SOC |
|---|---|---|
| IP datacenter récent | +20 | Source peu fiable sur login |
| Bot telemetry absente | +15 | Client ne supporte pas JS/challenge |
| Velocity login élevée | +40 | Comportement stuffing |
| Compte connu + device stable | -30 | Contexte légitime |
Conformité et minimisation
- Documenter les signaux collectés et leur finalité sécurité.
- Limiter la conservation des fingerprints bruts ; préférer scores et raisons.
- Permettre une voie de support pour faux positifs.
- Ăviter les dĂ©cisions opaques sur fonctionnalitĂ©s critiques sans fallback.
Challenge nâest pas synonyme de CAPTCHA
| Type | Principe | Quand lâutiliser |
|---|---|---|
| JS Challenge | Valide exécution navigateur | Navigation publique suspecte |
| Managed Challenge | DĂ©cide entre invisible, JS, CAPTCHA | Ăquilibre UX/sĂ©curitĂ© |
| Proof-of-work | Rend coĂ»teuse lâautomatisation | API publique, scraping |
| MFA adaptatif | Preuve identité forte | Login/checkout/admin |
| Queue token | Ordre dâaccĂšs Ă©quitable | Drop produit, billetterie |
Friction proportionnée
Le bon modÚle est progressif : laisser passer les clients sûrs, ralentir les suspects, challenger les risqués, bloquer les malveillants confirmés.
IF risk < 30 THEN allow IF risk 30..60 THEN add_rate_limit AND log IF risk 60..80 THEN managed_challenge IF risk > 80 THEN block OR MFA_STEP_UP on sensitive endpoints
Préserver le business
- Ne jamais challenger les callbacks paiement/webhooks partenaires : utiliser mTLS/signature.
- Ăviter CAPTCHA sur endpoints SEO et assets.
- Conserver une allowlist pour monitoring synthétique et partenaires.
- Tester accessibilitĂ© : lecteurs dâĂ©cran, faibles connexions, mobile ancien.
- Mettre une page dâerreur explicite avec identifiant de blocage support.
Politique par endpoint
| Endpoint | Action suspicion moyenne | Action suspicion forte |
|---|---|---|
| / | Allow + log | Managed challenge |
| /login | Throttle | MFA adaptatif / deny |
| /checkout | Queue token | MFA / manual review |
| /api/public/search | Token bucket | PoW / 429 |
Les APIs exposent des coûts cachés
Une requĂȘte API peut consommer CPU, mĂ©moire, bande passante, stockage, appels SMS/email, appels IA, vĂ©rification biomĂ©trique ou transactions partenaires. Lâabus API est donc Ă la fois un risque disponibilitĂ© et un risque financier.
| Pattern | Risque | ContrĂŽle |
|---|---|---|
| ?limit=100000 | DB/mémoire/réponse énorme | Max limit + pagination cursor |
| Batch Ă©norme | CoĂ»t par requĂȘte masquĂ© | Max items + coĂ»t par item |
| GraphQL profond | Resolvers explosifs | Depth/complexity/cost limit |
| OTP resend | Coûts SMS + nuisance | Cooldown par user/device/phone |
Limiter par identité, pas uniquement par IP
# Exemple de quotas API anonymous: 60 req/min/IP + endpoints lecture seulement auth_user: 600 req/min/user + burst 100 partner_app: quota contractuel par client_id + mTLS tenant/org: budget journalier + alertes 80/95/100% expensive_route: coût = base + rows + external_calls + payload_size
ContrĂŽles GraphQL
# Pseudo-policy GraphQL max_depth: 8 max_complexity: 1000 max_aliases: 20 max_batch_operations: 5 introspection: disabled_in_prod_for_public_clients persisted_queries: required_for_mobile_app
- Calculer un coût par champ/resolver.
- Refuser les aliases massifs.
- Limiter les variables de pagination.
- Journaliser operationName + hash de query.
Validation de contrat
# Exemple JSON Schema défensif
{
"type": "object",
"required": ["page", "page_size"],
"properties": {
"page": {"type": "integer", "minimum": 1, "maximum": 1000},
"page_size": {"type": "integer", "minimum": 1, "maximum": 100},
"sort": {"type": "string", "enum": ["date", "price", "name"]}
},
"additionalProperties": false
}Credential stuffing : attaque L7 discrĂšte
Lâattaquant rĂ©utilise des identifiants issus de fuites. Chaque requĂȘte peut ĂȘtre valide syntaxiquement. Le risque est lâAccount Takeover : fraude, vol de donnĂ©es, changement email, achat, vidage de points fidĂ©litĂ©.
| Signal | Interprétation | Action |
|---|---|---|
| Beaucoup de usernames par IP | Stuffing classique | Throttle IP/ASN + challenge |
| Beaucoup dâIPs par username | Distributed guessing | Throttle compte + step-up MFA |
| Connexion impossible puis succĂšs | Compte compromis possible | Risk session + notification |
| Device jamais vu + pays inhabituel | Risque élevé | MFA adaptatif |
Défense multicouche
- Ne pas révéler si email existe.
- DĂ©tecter passwords compromis Ă lâinscription/changement.
- MFA adaptatif, pas MFA aveugle partout.
- Limiter username velocity et IP velocity.
- Surveiller changements sensibles post-login.
# Pseudo décision IF login_success=true AND device_new=true AND ip_reputation="proxy" AND country_distance_from_last_login > 2000km THEN require_mfa_step_up AND mark_session_high_risk
Champs de logs indispensables
{
"event":"login_attempt",
"result":"failed",
"username_hash":"sha256:...",
"ip":"203.0.113.10",
"asn":"AS64500",
"device_id":"dvc_abc",
"bot_score":18,
"rule":"login_velocity_user_ip",
"action":"challenge",
"request_id":"req_123"
}Runbook ATO
- Passer login en challenge/rate-limit renforcé.
- Identifier comptes avec succÚs anormal aprÚs échecs.
- Forcer reset/MFA pour comptes Ă risque.
- Bloquer IP/ASN uniquement si faible impact business.
- Notifier support et fraude.
Scraping : protéger la valeur des données
Le scraping nâest pas toujours un pic massif. Il peut ĂȘtre lent, distribuĂ©, rĂ©sidentiel et fortement mimĂ©tique. Les signaux mĂ©tier sont souvent plus efficaces que les signatures rĂ©seau.
| Signal | Explication | Réponse |
|---|---|---|
| Parcours séquentiel catalogue | Extraction systématique | Throttle progressif |
| Faible ratio assets/html | Client ne charge pas CSS/images | Bot score + challenge |
| Prix consultés trÚs vite | Veille concurrentielle automatisée | Cache + watermark + limite |
| Canary links visités | Bot suit liens invisibles | Block score fort |
Scalping et drops
- Utiliser une file dâattente avec jeton signĂ©.
- Limiter le nombre dâarticles par compte/device/adresse/paiement.
- TTL de réservation court et renouvellement contrÎlé.
- Détecter comptes fraßchement créés avant drop.
- Ralentir lâaccĂšs API stock/checkout.
# Pseudo token de queue queue_token = HMAC(secret, user_id + device_id + drop_id + position + expires_at) reject_if: expired OR reused OR mismatched_device OR position_not_reached
Honeypots défensifs
Les honeypots doivent ĂȘtre invisibles aux humains mais tentants pour les bots : liens CSS-hidden, champs formulaire invisibles, endpoints canary dans sitemap interne non public.
<a href="/product/__canary-price-feed" class="visually-hidden" aria-hidden="true" tabindex="-1"></a> IF request.path contains "__canary" THEN increase_bot_score(50) AND block_if_repeated
Mesurer lâeffet
| KPI | Avant | AprĂšs protection |
|---|---|---|
| Inventory hold sans achat | ĂlevĂ© | Diminue |
| Checkout legit conversion | Dégradé sous attaque | Stabilisé |
| Pages catalogue par session suspecte | TrÚs élevé | Throttlé |
| Faux positifs VIP/partenaires | Ă surveiller | Doit tendre vers 0 |
Protection edge SaaS
Les offres SaaS/edge mettent la dĂ©fense prĂšs de lâattaquant : DNS ou CNAME vers un rĂ©seau Anycast, inspection WAF/WAAP, bot engine, rate limiting, DDoS managed rules, cache, puis proxy vers lâorigine.
| Avantage | Limite |
|---|---|
| Absorption globale, faible latence | Dépendance fournisseur et DNS |
| RĂšgles managĂ©es mises Ă jour | Besoin dâexceptions mĂ©tier |
| Masquage origine | à configurer strictement cÎté firewall |
EmpĂȘcher le bypass de lâedge
- Firewall origine : nâautoriser que les ranges du CDN/WAAP.
- Utiliser mTLS entre edge et origin si possible.
- Changer IP origine aprÚs onboarding si déjà exposée.
- Surveiller accĂšs direct Host header et IP brute.
- Désactiver DNS historiques et vieux sous-domaines.
# NGINX â exemple blocage Host/IP non attendu
if ($host !~* ^(www\.example\.com|api\.example\.com)$) { return 444; }
# Firewall cloud/on-prem : allowlist IP ranges fournisseur edge
# Deny all direct internet -> origin:443Exemples dâoffres edge
| Fournisseur | Capacités typiques | Liens |
|---|---|---|
| Cloudflare | DDoS, WAF, Bot Management, Rate Limiting, Turnstile, API Shield | Docs Bots |
| Akamai | App & API Protector, Bot Manager, Behavioral DDoS Engine | App & API Protector |
| Imperva | Cloud WAF, Advanced Bot Protection, DDoS Protection | DDoS Protection |
Plan de migration DNS
- Basculer en mode monitor/log.
- Réduire TTL DNS 24h avant.
- Configurer certificats, Hostnames, cache, rĂšgles de base.
- Tester chemins critiques : login, paiement, API, webhooks.
- Changer DNS/CNAME.
- Bloquer accĂšs direct origine aprĂšs validation.
- Passer progressivement certaines rĂšgles en block.
AWS Shield + AWS WAF
- AWS Shield Standard : protection DDoS de base intégrée.
- Shield Advanced : protections avancées, réponse DDoS, intégration WAF.
- AWS WAF : rĂšgles managed, rate-based rules, Bot Control, ACL web sur CloudFront/ALB/API Gateway.
# Pseudo architecture AWS Route53 â CloudFront + AWS WAF + Shield Advanced â ALB â ECS/EKS/EC2 Logs: WAF logs â Kinesis Firehose/S3/OpenSearch/SIEM
Google Cloud Armor
Cloud Armor protÚge les applications derriÚre les load balancers Google Cloud avec politiques de sécurité, rÚgles WAF, rate limiting et Adaptive Protection pour les attaques L7 à haut volume.
# Pseudo architecture GCP Cloud DNS â Global External HTTPS Load Balancer + Cloud Armor â Cloud CDN â GKE/Cloud Run/Compute Logs: Cloud Logging â BigQuery/SIEM
Azure Front Door / Application Gateway / DDoS Protection
- Azure Front Door WAF : protection edge globale pour HTTP/S.
- Application Gateway WAF : WAF régional proche workloads.
- Azure DDoS Protection : protection réseau pour ressources Azure exposées.
- Rate limit : selon combinaison WAF/policies/API Management.
# Pseudo architecture Azure Azure Front Door + WAF â Private Link / App Gateway WAF â AKS/App Service/API Management Logs: Diagnostic settings â Log Analytics / Sentinel
Quand choisir cloud provider vs edge SaaS ?
| Contexte | Choix naturel | Pourquoi |
|---|---|---|
| Tout AWS/GCP/Azure | Provider-native | IAM/logs/intégration billing |
| Multi-cloud/hybride | Edge SaaS ou WAAP global | Point de contrĂŽle commun |
| Latence mondiale | CDN/edge | Mitigation proche utilisateurs |
| Contraintes on-prem fortes | ADC/WAF local + scrubbing | ContrÎle réseau interne |
Pourquoi garder une couche on-prem
MĂȘme avec un CDN, une couche locale protĂšge les applications internes, les environnements non internet, les cas de compliance, les workloads legacy et les attaques qui traversent lâedge via partenaires/VPN.
ContrĂŽles reverse proxy
# NGINX â timeout anti-slow clients
client_body_timeout 10s;
client_header_timeout 10s;
keepalive_timeout 15s;
large_client_header_buffers 4 8k;
# Protection méthodes
if ($request_method !~ ^(GET|POST|PUT|PATCH|DELETE|OPTIONS)$) { return 405; }# HAProxy â stick-table rate limit simplifiĂ©
frontend fe_https
stick-table type ip size 1m expire 10m store http_req_rate(10s)
http-request track-sc0 src
http-request deny deny_status 429 if { sc_http_req_rate(0) gt 100 }
default_backend appF5 / NGINX App Protect DoS
Les solutions F5/NGINX ciblent le L7 DoS en environnement DevOps, avec dĂ©ploiement sur NGINX Plus, Ingress Controller ou plus prĂšs des pods selon lâarchitecture.
# Exemple conceptuel NGINX App Protect DoS
# 1) Activer module DoS sur location critique
# 2) Associer policy JSON
# 3) Envoyer logs vers Prometheus/SIEM
location /api/ {
app_protect_dos_enable on;
app_protect_dos_policy_file /etc/app_protect_dos/api-policy.json;
proxy_pass http://api_backend;
}Limites du on-prem seul
- Ne peut pas absorber une attaque volumétrique supérieure à la bande passante opérateur.
- Peut protĂ©ger finement L7 mais doit ĂȘtre prĂ©cĂ©dĂ© dâun scrubbing en cas de gros volume.
- NĂ©cessite HA, capacity planning, logs centralisĂ©s et playbooks dâurgence.
OĂč protĂ©ger dans Kubernetes ?
| Couche | ContrĂŽle | Usage |
|---|---|---|
| Cloud LB / Edge | DDoS, WAF, Bot | Internet-facing |
| Ingress Controller | Rate limit, WAF, mTLS | Routes HTTP |
| Service Mesh | AuthZ, retries, circuit breaking | Est-Ouest |
| Pod sidecar | Protection fine par service | Endpoints critiques |
| eBPF/CNI | Network policy, L3/L4 filter | Bas niveau |
Ingress rate limit â exemple gĂ©nĂ©rique NGINX Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-ingress
annotations:
nginx.ingress.kubernetes.io/limit-rps: "10"
nginx.ingress.kubernetes.io/limit-burst-multiplier: "5"
nginx.ingress.kubernetes.io/proxy-body-size: "1m"
spec:
rules:
- host: api.example.com
http:
paths:
- path: /v1/search
pathType: Prefix
backend:
service:
name: api
port:
number: 8080Autoscaling â protection
Scaler sous attaque peut transformer un incident disponibilitĂ© en facture cloud. Lâautoscaling doit ĂȘtre couplĂ© Ă des limites dâentrĂ©e, budgets, circuit breakers et backpressure.
- HPA sur CPU seul peut amplifier le coût.
- Limiter requĂȘtes avant crĂ©ation massive de pods.
- Mettre des quotas namespaces et PDB.
- Protéger DB/cache, pas seulement pods web.
- Utiliser files/queues pour opérations coûteuses.
eBPF et runtime security
eBPF peut aider à observer et filtrer à bas niveau : connexions, drops, latences, appels réseau. Il complÚte mais ne remplace pas la logique L7/bot.
# Objectifs eBPF typiques - dĂ©tecter spikes connexions par pod/service - appliquer network policies efficaces - profiler latence rĂ©seau - exporter mĂ©triques vers Prometheus/SIEM - identifier origine interne dâun flood est-ouest
Combiner signatures et modĂšle attendu
| Approche | Défend contre | Limite |
|---|---|---|
| ModÚle négatif | Payloads connus, CVE, scanners | Contournements/mutations |
| ModĂšle positif | RequĂȘtes hors contrat | Maintenance schĂ©ma nĂ©cessaire |
| Comportement | Bots/DoS/abus lent | Besoin dâhistorique |
| Threat intel | IPs/proxies connus | Faux positifs possibles |
Exemples de rÚgles défensives
# Cloudflare expression â exemple conceptuel (http.request.uri.path eq "/login" and http.request.method eq "POST" and cf.bot_management.score lt 30) â Managed Challenge or Block depending on sensitivity
# ModSecurity CRS style â limiter mĂ©thodes inattendues SecRule REQUEST_METHOD "!^(GET|POST|PUT|PATCH|DELETE|OPTIONS)$" "id:100100,phase:1,deny,status:405,msg:'Unexpected HTTP method'"
Gérer les exceptions sans trouer la sécurité
- Exception par route précise, pas par domaine entier.
- Exception temporelle avec ticket et propriétaire.
- Conditionner par mTLS/IP/secret header pour partenaires.
- Loguer les exceptions autant que les blocages.
- Revue mensuelle des exceptions expirées.
Pipeline de changement
- Créer rÚgle en count/simulate.
- Comparer faux positifs sur 24/72h.
- Restreindre scope si besoin.
- Activer block/challenge sur subset endpoints.
- Ajouter dashboard et alerte.
- Documenter raison et rollback.
Champs indispensables
{
"ts":"2026-07-06T12:00:00Z",
"request_id":"req_...",
"edge_action":"managed_challenge",
"rule_id":"bot_login_score_low",
"route":"POST /login",
"ip":"203.0.113.10",
"asn":"AS64500",
"country":"FR",
"ja4":"t13d...",
"bot_score":12,
"rate_key":"ip+route",
"rate_window":"60s",
"origin_status":403,
"latency_ms":18
}Dashboard Ă construire
| Widget | But |
|---|---|
| Requests allowed/challenged/blocked | Vue protection |
| Top rules by action | Identifier rĂšgle trop agressive |
| Top endpoints attacked | Prioriser tuning |
| Origin 5xx / latency p99 | Voir impact réel app |
| Bot score distribution | Calibrer seuils |
| Top ASN/countries | Décision géo/ASN en crise |
Alertes utiles
# Conditions dâalerte typiques - blocked_requests > baseline * 5 for 5m - origin_5xx_rate > 2% AND edge_allowed_rps > baseline * 3 - bot_score_lt_10 on /login > 1000 in 10m - cache_hit_ratio drops below 40% on public pages - WAF rule false_positive_report > threshold - queue_depth/payment/login latency p99 critical
Postmortem DDoS/Bot
- Début/fin, volume, endpoints, pays/ASN, actions edge.
- Impact client : erreurs, latence, perte conversion.
- RÚgles activées, seuils, faux positifs, rollback.
- Coûts : cloud, SMS/email, DB, autoscaling.
- Mesures durables : cache, quotas, code app, runbook.
RĂŽles en crise
| RÎle | Responsabilité |
|---|---|
| Incident Commander | Décisions, priorité business, communication |
| Edge/WAF Engineer | RĂšgles, rate limits, challenges |
| App Owner | Endpoints coûteux, feature flags, dégradations |
| SRE | Capacity, autoscaling, DB/cache, rollback |
| SOC | Analyse source, IOC, SIEM, timeline |
Runbook minute par minute
- 0-5 min : confirmer attaque vs incident interne, ouvrir war room.
- 5-10 min : identifier endpoints, actions edge temporaires.
- 10-20 min : activer rate limits/challenges ciblés.
- 20-40 min : protéger origine, cache, dégrader features coûteuses.
- 40-60 min : analyser faux positifs, stabiliser rĂšgles.
- AprĂšs : postmortem, durcissement durable.
Décider vite sans casser tout le business
| Décision | Quand | Risque |
|---|---|---|
| Bloquer pays/ASN | Attaque trÚs concentrée + faible business | Clients légitimes impactés |
| Challenge global | Origine proche saturation | UX dégradée |
| Couper endpoint | Feature non critique détruit SLO | Perte fonctionnelle temporaire |
| Full cache/stale | Contenu public critique | Données moins fraßches |
Messages prĂȘts
Interne: Incident DDoS/Bot L7 en cours. Impact: latence sur /search et /login. Actions: rate limit ciblĂ© + challenge adaptatif. Prochaine update dans 15 min. Support: Certains utilisateurs peuvent voir une vĂ©rification supplĂ©mentaire. Demander request_id ou code dâerreur pour analyse faux positif. Post-incident: Lâincident est stabilisĂ©. Les protections temporaires restent en surveillance 24h avant revue.
Tester sans devenir le problĂšme
Les tests doivent ĂȘtre autorisĂ©s, limitĂ©s et rĂ©alisĂ©s sur environnement prĂ©vu. Lâobjectif est de valider les protections, pas de saturer des systĂšmes tiers.
- Environnement staging ou fenĂȘtre de test validĂ©e.
- Plafonds de trafic connus.
- Coordination SRE/SOC/support.
- Stop condition explicite.
- Logs et métriques activés avant test.
Rejouer le trafic réel
# Pipeline conceptuel de tuning 1. Exporter logs edge anonymisĂ©s 2. Ătiqueter: legit / bot / partner / monitoring / attack 3. Simuler nouvelles rĂšgles en offline 4. Mesurer: block rate, false positive rate, coverage 5. DĂ©ployer en count mode 6. Activer progressivement
KPIs de qualité
| KPI | Cible |
|---|---|
| Time to Detect | Minutes, idéalement automatique |
| Time to Mitigate | Le plus court possible sans FP massif |
| False Positive Rate | Mesuré par endpoint et segment client |
| Origin offload | Réduction RPS/CPU/DB sous attaque |
| Challenge solve rate | Indicateur UX et bot bypass |
Exercices Purple Team
- Credential stuffing simulé avec comptes de test.
- Scraping de catalogue factice.
- HTTP flood contrÎlé sur endpoint staging.
- GraphQL complexity sur queries de test.
- Bypass origine : vérification firewall/mTLS.
- Incident tabletop avec décisions de blocage.
Edge / CDN / WAAP SaaS
| Solution | Couverture typique | URL |
|---|---|---|
| Cloudflare | DDoS, Bot, WAF, Rate Limiting, API Shield | developers.cloudflare.com/bots |
| Akamai | Bot Manager, App & API Protector, L7 DDoS | akamai.com/products/bot-manager |
| Imperva | Advanced Bot Protection, DDoS, WAF | imperva.com/products/advanced-bot-protection-management |
| Fastly | Edge WAF, Next-Gen WAF, rate limiting selon offre | fastly.com/products/web-application-api-protection |
Cloud provider-native
| Cloud | Composants | URL |
|---|---|---|
| AWS | AWS Shield, AWS WAF, Bot Control, CloudFront/ALB/API Gateway | AWS WAF Developer Guide |
| Google Cloud | Cloud Armor, Adaptive Protection, Load Balancer, Cloud CDN | Cloud Armor |
| Azure | Azure DDoS Protection, Front Door WAF, App Gateway WAF | Azure DDoS Protection |
On-prem / ADC / Kubernetes
| Solution | Déploiement | URL |
|---|---|---|
| F5 BIG-IP / Distributed Cloud | ADC, WAF, DDoS, bot selon modules | f5.com/products/security |
| F5 DoS for NGINX | NGINX Plus, NGINX Ingress, pods Kubernetes | docs.nginx.com/nginx-app-protect-dos |
| HAProxy Enterprise | ADC/reverse proxy avec rate limiting et WAF selon modules | haproxy.com |
| ModSecurity + OWASP CRS | WAF open-source NGINX/Apache | coreruleset.org |
Questions Ă poser au fournisseur
- Détection bot : quels signaux exacts ? score explicable ? mobile/API couverts ?
- DDoS L7 : mitigation automatique ? baselines ? time-to-mitigate ?
- Rate limiting : clĂ©s composites, par token/user/org ? fenĂȘtres ? logs ?
- Déploiement : SaaS, private edge, on-prem, Kubernetes ?
- Origin protection : mTLS, IP ranges, private link ?
- Observabilité : logs bruts, SIEM, dashboards, API, rétention ?
- Faux positifs : workflow dâexception, mode count, simulation offline ?
