Forkbomb

Lors de mon précédent article traitant des limites utilisateurs (ulimit), je faisais référence à un processus parfois utilisé pour faire tomber le serveur : la forkbomb. Mais qu’est-ce réellement qu’une forkbomb?

Définition

La fork bomb est une forme d’attaque par déni de service contre un système informatique utilisant la fonction shell : fork. Elle est basée sur la supposition que le nombre de programmes et de processus pouvant être exécutés simultanément sur un ordinateur est limité, en effet, un serveur ne dispose pas de quantité de mémoire illimitée.

La multiplication des processus sature donc, le système et consomme rapidement toutes les ressources disponibles.
Les processus en cours ne disposent alors plus de ressources suffisantes pour fonctionner correctement et les nouveaux processus doivent attendre que des ressources se libèrent pour démarrer. L’ensemble mène à un gel du système ou/et à un déni de service (DoS).

Utilisation

Nous allons nous intéresser à un exemple de forkbomb en shell, la plus courante :

Le code ci-dessus peut être décomposé de la manière suivante :

Nous pouvons analyser ces instructions :

  • Ligne 1 : Création d’une fonction nommée « a » ne prenant aucun argument (« () »)
  • Ligne 2 : Corps de la fonction. Elle s’appelle (premier « a ») et son retour est envoyé (le pipe « | ») à une autre occurrence d’elle même (deuxième « a ») en arrière plan (le fork est là « & » )
  • Ligne 3 : Fin de la fonction « }; »
  • Ligne 4 : Lancement de la bombe (appel de la fonction « a »).

Une fois la forkbomb lancée et si aucun mécanisme de protection efficace n’a été mis en place, le serveur cible de cette attaque devrait saturer en mémoire et figer.

Protection

Un moyen simple de protéger son système consiste à fixer des limites au nombre de processus pouvant être instanciés par les utilisateurs, max user processes, via la fonction ulimit. Plus d’informations : ici.

Remarque : Sur Linux, nous pouvons également utiliser les contrôles de groupes ou cgroups.

Lien pour marque-pages : Permaliens.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *