Zip Bombs - Une technique redoutable qui fait crasher les bots | Logiciels utiles | Le site de Korben
Image illustrant l'article : Zip Bombs - Une technique redoutable qui fait crasher les bots

Zip Bombs - Une technique redoutable qui fait crasher les bots

par Korben ✨ -

Si vous en avez marre des bots qui pourrissent votre serveur web, j’ai une solution qui va vous plaire. En effet, il est possible comme dans vos rêves les plus fous, de transformer chaque bot malveillant en kamikaze involontaire avec un simple fichier de 1MB. C’est ce que permet de faire une zip bomb et croyez-moi, c’est aussi jouissif que ça en a l’air.

D’abord, parlons du problème de fond. En 2024, d’après le dernier rapport Imperva, les bots représentaient environ 51% du trafic web total. Oui, y’a officiellement plus de robots que d’humains sur Internet. Et sur ces 51%, pas moins de 37% sont des bots malveillants, contre 32% en 2023. Ça fait donc un sacré paquet de nuisibles qui scannent, spamment et tentent d’exploiter la moindre faille.

Et d’ailleurs, Ibrahim Diallo dont je me suis inspiré pour cet article, a goûté à leur nuisance. Sur un de ces anciens jobs, un bot a découvert une vulnérabilité WordPress et a transformé le serveur de sa boite en zombie participant à des attaques DDoS. Sympa comme réveil un lundi matin ! Un autre de ces sites a même été carrément blacklisté par Google à cause de bots qui généraient du spam en masse. C’est là alors qu’il a décidé de passer à l’offensive !!!

Sa technique que je vais vous dévoiler exploite brillamment une fonctionnalité vieille comme le web : la compression gzip. Pour les plus jeunes, rappelons qu’à l’époque du 56k, chaque kilooctet comptait. Un fichier HTML de 50KB pouvait être compressé à 10KB, réduisant le temps de téléchargement de 12 à 3 secondes. Cette compression, toujours d’actualité, fonctionne pour tout : HTML, CSS, JavaScript, même certaines images.

Quand un navigateur (ou un bot) fait une requête, il envoie ce header :

Accept-Encoding: gzip, deflate

En gros, il dit “hey, je sais décompresser, envoie-moi la version zippée pour gagner du temps”. Et c’est là que ça devient intéressant puisque les bots, dans leur quête effrénée de données, supportent tous la compression. Normal, ils doivent crawler des millions de pages, donc ils optimisent leur bande passante. Sauf que cette optimisation, c’est aussi leur point faible.

Voici comment Ibrahim exploite cette faille. Sur son blog, quand il détecte un bot malveillant, que ce soit par son comportement suspect, son IP blacklistée ou ses tentatives d’injection, il lui renvoie gentiment un code 200 OK. Mais au lieu du contenu attendu, il lui sert une petite surprise : un fichier gzip de 1 à 10MB.

Content-Encoding: gzip

Le bot, tout content, télécharge le fichier. Il lit le header, voit que c’est compressé, et commence la décompression pour analyser le contenu. Sauf que… le fichier de 1MB se décompresse en 1GB. Celui de 10MB explose en 10GB. Et boom ! La mémoire du bot sature instantanément et le processus crash. Dans 90% des cas, il ne revoit plus jamais ce bot !! Mission accomplie !

Bon, je vous sens hyper chaud là… Vous voulez créer votre propre bombe zip ? Attention, cette commande peut théoriquement faire planter votre machine si vous n’êtes pas prudent :

dd if=/dev/zero bs=1G count=10 | gzip -c > 10GB.gz

Maintenant décortiquons cette beauté :

  • dd : l’outil de copie de données bas niveau
  • if=/dev/zero : on lit depuis /dev/zero, qui génère des zéros à l’infini
  • bs=1G : on traite par blocs de 1 gigaoctet
  • count=10 : on prend 10 blocs, donc 10GB de zéros
  • | gzip -c > 10GB.gz : on compresse tout ça dans un fichier

Le résultat c’est donc un fichier d’environ 10MB qui contient 10GB de données. Soit un ratio de compression de 1000:1. Les zéros se compressent extrêmement bien, c’est la magie du truc.

Pour la petite histoire, le record absolu reste 42.zip, un fichier mythique de seulement 42 kilooctets qui se décompresse en… 4.5 pétaoctets. Oui, pétaoctets, soit 4500 téraoctets. Ce monstre utilise 5 couches de fichiers zip imbriqués avec 16 copies par couche, pour un ratio de compression hallucinant de 106 milliards pour 1. Mais franchement, pour nos besoins, 1 ou 10GB suffisent largement à ruiner la journée d’un bot.

L’implémentation sur votre serveur est triviale. Voici le middleware en PHP qu’Ibrahim partage sur son blog :

if (ipIsBlackListed() || isMalicious()) {
header("Content-Encoding: gzip");
header("Content-Length: "+ filesize(ZIP_BOMB_FILE_10G));
readfile(ZIP_BOMB_FILE_10G);
exit;
}

Il dispose d’une liste noire d’IPs connues, plus des heuristiques pour détecter les comportements suspects. Par exemple, beaucoup de spammers tentent de poster, puis reviennent vérifier si leur spam est visible. Ce pattern est facile à identifier et quand un bot est flaggé, paf, zip bomb dans sa face.

Le seul “coût” c’est de servir occasionnellement un fichier de 10MB. Si il a un pic de trafic légitime, il passe à la version 1MB pour économiser de la bande passante. Mais franchement, vu l’efficacité, c’est donné.

Alors oui, soyons honnêtes, une zip bomb n’est pas infaillible. Les bots vraiment sophistiqués peuvent implémenter des protections : lecture partielle du contenu, timeouts agressifs, limites de mémoire strictes. Les antivirus modernes limitent aussi la récursion sur les archives pour éviter ce genre de piège. Mais vous savez quoi ? La grande majorité des bots qui polluent le web sont des scripts basiques lancés en masse. Et contre eux, les zip bombs sont redoutablement efficaces.

J’ai trouvé sa technique vraiment chouette et c’est pour ça que je vous la partage… Pas besoin d’IA ultra-complexe ou de solutions hors de prix. Juste une bonne compréhension des fondamentaux réseau et un peu de créativité suffisent.

Alors, prêts à transformer votre serveur en champ de mines pour bots ?

Source