Section courante

A propos

Section administrative du site

Introduction

Que signifie cette expression ? Une bombe «fork» ! C'est une technique visant à provoquer un déni de service sur un système d'exploitation en utilisant une fonction «fork» (fork ou POSIX::fork en Perl, fork en C pour Linux, CreateProcessA en C pour Windows, FpFork en Free Pascal, pcntl_fork en PHP, fork en Ruby, ...), laquelle permet d'effectuer la création de processus enfant. Ce type d'attaque est une des faiblesses des systèmes d'exploitation multiprocessus. Car le moment, les systèmes d'exploitation peuvent exécuter un nombre de programme et de processus limité sur un même système, car les ressources ne sont pas illimitées.

L'astuce résidant dans cette forme d'attaque, réside dans le fait qu'un grand nombre de processus est créé très rapidement afin de saturer l'espace des ressources disponibles sur le système d'exploitation dans sa liste des processus géré par le système d'exploitation. Un fait assez troublant c'est que oui, la table des processus est utilisée, et si ce ne serait que cela, la «fork bomb» ne serait pas si dangereuse, c'est qu'on consomme également du temps processeur, et cela, pour chacun des coeurs et de la mémoire. Ainsi, vous l'aurez compris, la conséquence inévitable, c'est que le système d'exploitation et les programmes tournant tous simultanément finissent par ralentir de plus en plus la machine et il devient impossible de l'utiliser et vous ne réussirez jamais a atteindre la commande Linux «kill», la commande UNIX «kill», la commande SkyOS «kill», la commande FreeBSD «kill» ou la commande Windows «TASKKILL».

Solution

Imaginé que ce genre de code malicieux se répondre sur les serveurs de votre réseau, et voilà, vous n'avez plus rien qui fonctionne ! Il est franchement dommage, que des systèmes d'exploitation comme Linux avec plus de 20 ans d'existence, n'est toujours pas un processus de base permettant de limiter le nombre maximum de processus outre que la commande ulimit, la fonction ulimit en C pour Linux ou l'interruption 80h, fonction 3Ah pour l'assembleur sous Linux, pouvant être exécuter sur le système d'exploitation et ainsi stopper l'attaque de la «Fork bomb» sur la machine ! La seule initiative est «OOM Killer» disponible depuis le noyau 2.6.36 de Linux et développer par un programmeur de Google du nom de David Rientjes.

Exemples

En langage de programmation Assembleur 80x86 pour Linux, on aura donc le programme suivant (voir Langage de programmation - Assembleur 80x86 - Interruption 80h, Fonction 02h) :

  1. entry start
  2. start:
  3.        MOV EAX,02h
  4.        INT 080h
  5.        JMP start

En langage de programmation C pour Linux, on aura donc le programme suivant :

  1. #include <unistd.h>
  2.  
  3. int main(void) {
  4.   while(1) fork(); 
  5.   return 0; 
  6. }

En langage de programmation C++, on aura donc le programme suivant :

  1. #include <cstdlib>
  2.  
  3. int main(int argc, char **argv){
  4.   while(1) system(argv[0]);
  5.   return 0;
  6. }

En langage de programmation Perl, on aura donc le programme suivant :

  1. fork while fork

En langage de programmation PHP, on aura donc le programme suivant :

  1. <?php
  2. while(1) pcntl_fork();  
  3. ?>

En langage de programmation Python, on aura donc le programme suivant :

  1. import os
  2.  
  3. while True:
  4.      os.fork()

En langage de programmation Ruby, on aura donc le programme suivant :

  1. loop { fork }

Voir également

Technologie - Informatique - Sécurité

Dernière mise à jour: Jeudi, le 1 mai 2014