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) :
En langage de programmation C pour Linux, on aura donc le programme suivant :
En langage de programmation C++, on aura donc le programme suivant :
En langage de programmation Perl, on aura donc le programme suivant :
En langage de programmation PHP, on aura donc le programme suivant :
- <?php
- while(1) pcntl_fork();
- ?>
En langage de programmation Python, on aura donc le programme suivant :
En langage de programmation Ruby, on aura donc le programme suivant :
- loop { fork }
Voir également
Technologie - Informatique - Sécurité