Every DDoS postmortem reads the same way: traffic spiked, servers fell over, engineers scrambled. What nobody talks about is the three weeks before that. The attacker wasn't sitting idle. They were building infrastructure — quietly, methodically, using your neighbors' devices to do it.Chaque postmortem de DDoS se lit de la même façon : le trafic a explosé, les serveurs sont tombés, les ingénieurs ont couru. Ce dont personne ne parle, ce sont les trois semaines d'avant. L'attaquant n'était pas inactif. Il construisait une infrastructure — discrètement, méthodiquement, en utilisant les appareils de vos voisins pour y parvenir.

This is that story. From the attacker's console.Voici cette histoire. Depuis la console de l'attaquant.

Click to zoomCliquer pour zoomer

Step 1: Reconnaissance — Finding the Weak NodesÉtape 1 : Reconnaissance — trouver les nœuds vulnérables

The attacker doesn't start with your target. They start with a mass scan — often running Shodan searches or Masscan sweeps across millions of IP addresses, hunting for exposed devices: routers with default credentials, DVRs running old firmware, misconfigured Linux boxes, IoT sensors that haven't been patched since 2019.L'attaquant ne commence pas par votre cible. Il commence par un scan de masse — souvent via Shodan ou Masscan sur des millions d'adresses IP, à la recherche d'appareils exposés : routeurs avec identifiants par défaut, DVR avec un firmware obsolète, machines Linux mal configurées, capteurs IoT jamais mis à jour depuis 2019.

The criteria are simple: open port, known vulnerability, no auth. A device running Telnet on port 23 with the password "admin" is a gift. The attacker logs every hit into a target list — sometimes tens of thousands of candidates before the infection phase even starts.Les critères sont simples : port ouvert, vulnérabilité connue, pas d'authentification. Un appareil qui tourne Telnet sur le port 23 avec le mot de passe « admin » est un cadeau. L'attaquant répertorie chaque résultat dans une liste de cibles — parfois des dizaines de milliers de candidats avant même que la phase d'infection commence.

Warning: Mirai — the botnet that took down Dyn DNS in 2016 and knocked Twitter offline for hours — was built almost entirely from consumer IoT devices infected via 61 default username/password combinations. Sixty-one. The source code is still public.Avertissement : Mirai — le botnet qui a mis hors ligne Dyn DNS en 2016 et paralysé Twitter pendant des heures — était presque entièrement construit à partir d'appareils IoT grand public infectés via 61 combinaisons nom d'utilisateur/mot de passe par défaut. Soixante et un. Le code source est toujours public.

Step 2: Infection — Deploying the Bot AgentÉtape 2 : Infection — déployer l'agent bot

Once the attacker has a target list, they automate the infection. A script loops through every candidate IP, attempts the known exploit or credential pair, and if it lands — drops a bot agent onto the device. This agent is small, persistent, and quiet. It doesn't slow the device down noticeably. It doesn't announce itself. It just phones home.Une fois la liste de cibles établie, l'attaquant automatise l'infection. Un script boucle sur chaque IP candidate, tente l'exploit connu ou la paire d'identifiants, et si ça fonctionne — dépose un agent bot sur l'appareil. Cet agent est petit, persistant, discret. Il ne ralentit pas l'appareil de façon perceptible. Il ne s'annonce pas. Il contacte simplement son maître.

The agent typically does three things on install: deletes competing malware (botnet operators are territorial), sets up a cron job or init script for persistence, and opens an outbound connection to the C2 server. Inbound connections are blocked by most home routers. Outbound isn't. That's the bypass.L'agent fait généralement trois choses à l'installation : supprime les malwares concurrents (les opérateurs de botnets sont territoriaux), configure une tâche cron ou un script d'init pour la persistance, et ouvre une connexion sortante vers le serveur C2. Les connexions entrantes sont bloquées par la plupart des routeurs domestiques. Les sortantes, non. C'est le contournement.

Step 3: C2 Infrastructure — The Attacker's Control PlaneÉtape 3 : Infrastructure C2 — le plan de contrôle de l'attaquant

C2 — Command and Control — is the attacker's dashboard. It's where they manage every infected device, send attack orders, and watch stats roll in. Modern C2 setups don't use a single server anymore. That's too fragile and too traceable. Instead, they use a tiered architecture: a few master nodes talk to dozens of proxy nodes, which talk to thousands of bots. Takedown one proxy, you lose a slice. The rest keep running.C2 — Commande et Contrôle — c'est le tableau de bord de l'attaquant. C'est là qu'il gère chaque appareil infecté, envoie des ordres d'attaque et surveille les statistiques. Les configurations C2 modernes n'utilisent plus un seul serveur. C'est trop fragile et trop traçable. Au lieu de ça, elles utilisent une architecture à plusieurs niveaux : quelques nœuds maîtres parlent à des dizaines de nœuds proxy, qui parlent à des milliers de bots. Neutralisez un proxy, vous perdez une tranche. Le reste continue de tourner.

Some operators go further — using IRC channels, Discord servers, or even blockchain-based dead drops as command channels. The goal is resilience: no single point the defender can pull to kill the whole network.Certains opérateurs vont encore plus loin — utilisant des canaux IRC, des serveurs Discord, ou même des dead drops basés sur la blockchain comme canaux de commande. L'objectif est la résilience : aucun point unique que le défenseur peut couper pour tuer l'ensemble du réseau.

Step 4: Botnet Assembly — Counting the TroopsÉtape 4 : Assemblage du botnet — compter les troupes

Over days or weeks, the attacker watches their bot count grow. A small botnet for a targeted attack might be 5,000 devices. A large-scale operation — say, renting out attack capacity as a DDoS-for-hire service — might run 500,000. Each bot registers with the C2, reports its available bandwidth, CPU, and network type (residential broadband vs. datacenter vs. mobile). The attacker sorts the fleet and decides which bots to use for which attack vectors.Sur des jours ou des semaines, l'attaquant regarde son nombre de bots croître. Un petit botnet pour une attaque ciblée peut comprendre 5 000 appareils. Une opération à grande échelle — disons, louer une capacité d'attaque en tant que service DDoS-for-hire — peut atteindre 500 000. Chaque bot s'enregistre auprès du C2, signale sa bande passante disponible, son CPU et son type de réseau (haut débit résidentiel, datacenter ou mobile). L'attaquant trie la flotte et décide quels bots utiliser pour quels vecteurs d'attaque.

Step 5: The Command Broadcast — One Message, Ten Thousand GunsÉtape 5 : La diffusion de la commande — un message, dix mille fusils

When it's time to attack, the attacker sends a single command down the C2 chain. Within seconds, every bot in the fleet receives the order and begins firing at the target. The command specifies the target IP, the attack type, the duration, and the intensity. Here's what a simplified C2 command payload looks like:Quand le moment d'attaquer arrive, l'attaquant envoie une seule commande dans la chaîne C2. En quelques secondes, chaque bot reçoit l'ordre et commence à tirer sur la cible. La commande précise l'IP cible, le type d'attaque, la durée et l'intensité. Voici à quoi ressemble une charge utile de commande C2 simplifiée :

JSON
// Illustrative C2 command payload (simplified — not a real exploit)
{
  "cmd": "attack",
  "target": {
    "ip": "203.0.113.42",   // Target's public IP
    "port": 80,
    "duration": 300         // seconds
  },
  "vectors": [
    { "type": "udp_flood",   "pps": 50000  },  // L3 volumetric
    { "type": "syn_flood",   "pps": 200000 },  // L4 connection exhaustion
    { "type": "http_flood",  "rps": 10000  }   // L7 application layer
  ],
  "spoof_src": true,     // Randomize source IPs to complicate tracing
  "ttl": 64
}

Step 6: The Multi-Vector Flood — Why One Attack Type Isn't EnoughÉtape 6 : Le déluge multi-vecteurs — pourquoi un seul type d'attaque ne suffit pas

Sophisticated attackers don't fire a single type of traffic. They layer multiple vectors simultaneously because each hits a different layer of the stack — and a defense that blocks one may be completely blind to another.Les attaquants sophistiqués ne lancent pas un seul type de trafic. Ils superposent plusieurs vecteurs simultanément parce que chacun frappe une couche différente de la pile — et une défense qui bloque l'un peut être totalement aveugle à un autre.

L3 Volumetric: Saturate the PipeL3 Volumétrique : saturer le tuyau

UDP flood, ICMP flood, DNS amplification. The goal here is raw bandwidth — send more traffic than the target's upstream link can physically carry. A 100 Gbps attack against a target with a 1 Gbps uplink is just arithmetic. Amplification attacks make this worse: spoofed DNS queries to open resolvers can return responses 50-70x larger than the request, multiplying the attacker's bandwidth without extra bots.UDP flood, ICMP flood, amplification DNS. L'objectif ici est la bande passante brute — envoyer plus de trafic que le lien en amont de la cible peut physiquement supporter. Une attaque à 100 Gbps contre une cible avec un uplink à 1 Gbps, c'est juste des mathématiques. Les attaques par amplification aggravent les choses : des requêtes DNS usurpées vers des résolveurs ouverts peuvent renvoyer des réponses 50 à 70 fois plus grandes que la requête.

L4 SYN Flood: Exhaust the State TableL4 SYN Flood : épuiser la table d'état

Every TCP connection starts with a SYN. The server allocates memory for a half-open connection and waits for the ACK that completes the handshake. In a SYN flood, the attacker sends millions of SYN packets with spoofed source IPs — ACKs never arrive, the server's connection state table fills up, and legitimate connections get dropped. This kills servers with plenty of bandwidth left — the bottleneck is memory, not the pipe.Chaque connexion TCP commence par un SYN. Le serveur alloue de la mémoire pour une connexion à moitié ouverte et attend l'ACK qui complète la poignée de main. Dans un SYN flood, l'attaquant envoie des millions de paquets SYN avec des IP sources usurpées — les ACK n'arrivent jamais, la table d'état des connexions du serveur se remplit, et les connexions légitimes sont abandonnées.

L7 HTTP Flood: Look Like Real TrafficL7 HTTP Flood : ressembler à du trafic réel

The nastiest vector. Bots send valid HTTP GET or POST requests — real browser-like headers, real user agents, sometimes even completing full TLS handshakes before requesting heavy pages. Rate-limiting by IP doesn't work because the traffic is spread across thousands of source addresses. The server burns CPU processing requests it believes are legitimate. WAFs and CDNs struggle here because at the packet level, nothing looks wrong.Le vecteur le plus vicieux. Les bots envoient des requêtes HTTP GET ou POST valides — de vraies en-têtes ressemblant à des navigateurs, de vrais agents utilisateurs, parfois même en complétant des handshakes TLS complets avant de demander des pages lourdes. La limitation de débit par IP ne fonctionne pas car le trafic est réparti sur des milliers d'adresses sources. Le serveur brûle du CPU à traiter des requêtes qu'il croit légitimes. Les WAF et les CDN peinent ici car au niveau paquet, rien ne semble anormal.

Click to zoomCliquer pour zoomer

Step 7: Post-Attack Cleanup — Covering TracksÉtape 7 : Nettoyage post-attaque — effacer les traces

Once the attack window closes, a disciplined attacker doesn't just go quiet. They issue a cleanup command: bots delete their agent binary, wipe bash history, and revert any modified config files. Logs on compromised devices — if they exist at all — get trimmed. The C2 infrastructure goes dark or rotates to new IPs. Some operators run the bot as a memory-only process so it never touches disk in the first place.Une fois la fenêtre d'attaque fermée, un attaquant discipliné ne se tait pas simplement. Il envoie une commande de nettoyage : les bots suppriment leur binaire agent, effacent l'historique bash et restaurent les fichiers de configuration modifiés. Les journaux sur les appareils compromis — s'ils existent — sont expurgés. L'infrastructure C2 s'éteint ou pivote vers de nouvelles IPs.

From the infected device owner's perspective: nothing happened. Their router was a little warm for a few hours. Maybe their Netflix buffered. They'll never know they participated in an attack that knocked a major service offline.Du point de vue du propriétaire de l'appareil infecté : rien ne s'est passé. Son routeur était un peu chaud pendant quelques heures. Peut-être que son Netflix a saccadé. Il ne saura jamais qu'il a participé à une attaque qui a mis hors ligne un service majeur.

What This Means for DefenseCe que ça signifie pour la défense

Understanding the kill chain reframes what defense actually means. Blocking attack traffic at your edge is the last line, not the strategy. The strategic interventions are earlier: ISPs sinkholing known C2 domains, network-level BGP blackholing at upstream providers, device manufacturers shipping with unique credentials and auto-patching, and law enforcement dismantling C2 infrastructure at the source.Comprendre la chaîne d'attaque recadre ce que la défense signifie vraiment. Bloquer le trafic d'attaque à votre périmètre est le dernier recours, pas la stratégie. Les interventions stratégiques sont plus en amont : les FAI qui bloquent les domaines C2 connus, le blackholing BGP au niveau des fournisseurs en amont, les fabricants d'appareils qui livrent avec des identifiants uniques et des correctifs automatiques.

For operators defending an actual service: if you're relying on your origin server to absorb a DDoS, you've already lost. The defense has to be upstream — anycast networks, scrubbing centers, CDN absorption — in place before the flood starts, not stood up in a panic while your on-call engineer watches request latency climb.Pour les opérateurs qui défendent un service réel : si vous comptez sur votre serveur d'origine pour absorber un DDoS, vous avez déjà perdu. La défense doit être en amont — réseaux anycast, centres de scrubbing, absorption CDN — en place avant que le déluge commence, pas montée en catastrophe pendant que votre ingénieur de garde regarde la latence grimper.

Practical tip: The cheapest DDoS protection you can enable today is hiding your origin IP behind a CDN (Cloudflare, CloudFront, Fastly). If the attacker can't resolve your real IP, they can't target your actual infrastructure — they're flooding the CDN's scrubbing capacity instead, which is measured in terabits. For anything serious, add BGP-based upstream filtering through your hosting provider before you need it.Conseil pratique : La protection DDoS la moins chère que vous pouvez activer aujourd'hui est de cacher l'IP de votre origine derrière un CDN (Cloudflare, CloudFront, Fastly). Si l'attaquant ne peut pas résoudre votre vraie IP, il ne peut pas cibler votre infrastructure réelle — il inonde la capacité de scrubbing du CDN, qui est mesurée en térabits. Pour toute chose sérieuse, ajoutez un filtrage en amont basé sur BGP via votre hébergeur avant d'en avoir besoin.

The flood you see in the logs is the end of a long, patient process. The attacker built that infrastructure weeks in advance, using devices nobody thought to secure, over channels nobody thought to monitor. Knowing that doesn't make the attack easier to stop — but it does make clear where the real leverage is.Le déluge que vous voyez dans les journaux est la fin d'un long processus patient. L'attaquant a construit cette infrastructure des semaines à l'avance, en utilisant des appareils que personne n'a pensé à sécuriser, via des canaux que personne n'a pensé à surveiller. Savoir cela ne rend pas l'attaque plus facile à arrêter — mais ça clarifie où se trouve le vrai levier d'action.