Accéder au contenu principal

Fork bombe en bash : Comprendre et s’en protéger

Fork bombe en bash : Comprendre et s’en protéger

AVERTISSEMENT : Les “fork bomb” n’ont rien de nouveau mais mènent encore à un déni de service sur des systèmes mal ou non protégés. Ne prenez pas le risque de tester ce genre de “jouets” sur un serveur en production.


Le principe d’une “fork bombe” (ou “fork bomb”) consiste à multiplier un processus jusqu’à atteindre les limites du système.
La multiplication des processus sature 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).
La forme la plus courante de la fork bombe bash est la suivante :
:(){ :|:& };:
Cette forme, cryptique, est plus ou moins destinée à masquer les effets de cette ridicule fonction récursive.
Sous une forme plus explicite, nous pourrions écrire :
1
2
3
4
:() {
    :|:&
};
:
  • ligne 1 : création d’une fonction nommée “:” ne prenant aucun argument (“()”) ;
  • ligne 2 : corps de la fonction. Elle s’appelle (premier “:”) est son retour est envoyé (le pipe “|”) à une autre occurrence d’elle même (deuxième “:”) en arrière plan (le fork est là … “&” ) ;
  • ligne 3 : fin de la fonction “};” ;
  • ligne 4 : lancement de la bombe (appel de la fonction “:”).
Comme vous pouvez le constater, cette fonction ne fait en réalité pas grand chose mais est d’une efficacité étonnante.
L’ensemble s’éclaircit dès qu’un nom explicite est donné à la fonction :
1
2
3
4
ForkBomb () {
    ForkBomb | ForkBomb &
}
ForkBomb
La fonction originale peut-être retrouvée sous différents aspects tel que sa forme octale, hexadécimale, etc.

Comment protéger son système ?

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“. Le nombre maximum de processus d’un utilisateur peut être interrogé directement via l’option “-u” “d’ulimit”:
$ ulimit -u
16071
Cette valeur peut-être fortement réduite afin de protéger le système :
$ ulimit -u 100
$ ulimit -u
100
L’attaque se trouve alors rapidement bloquée (pas plus de 100 processus instanciés par l’utilisateur) et le système conserve suffisamment de ressources pour assurer les services qu’il héberge.
Voir Contrôle des ressources systèmes (ulimit) pour plus d’informations sur l’outil.

Appliquer la limite à tous les utilisateurs

La restriction du nombre de processus maximum instancié par les utilisateurs peut être mise en place, via le fichier “/etc/security/limits.conf” :
$ cat /etc/security/limits.conf
...
@users      soft      nproc      100
@users      hard      nproc      200
fhh         hard      nproc      300
Voir Contrôle des ressources systèmes (ulimit) pour plus d’informations sur le fichier “/etc/security/limits.conf”.
Une autre solution permettant de protéger le système consiste à utiliser les cgroups (disponible sur les noyaux supérieurs ou égale au 2.6.24).

Références

Contrôle des ressources systèmes (ulimit) : http://www.admin-linux.fr/?p=7608
  • A quoi ça sert au fait ?
  • A tester la réaction de votre système face à un “vrai” problème, à tester votre watchdog en situation réelle, à tester la mise en place de limites, etc.

    Commentaires

    Posts les plus consultés de ce blog

    Dossier de base sur un serveur Windows

    Dossier de base Pour les utilisateurs de domaine Windows AD, il est possible de créer un dossier de base via l’activation du service dossier utilisateur. Ainsi, chaque utilisateur du domaine disposera d’un dossier personnel pour le stockage et la sauvegarde de ses fichiers sur le serveur de partage. Le dossier utilisateur permet de plus aux administrateurs de sauvegarder les fichiers de chacun des utilisateurs.

    Le protocole ICMP | Echo Echo Response : Le ping | Le TTL

    Le protocole ICMP Introduction Nous avons pu remarquer dans les chapitres précédents qu'IP était essentiellement accès sur les fonctions d'adressage et de routage. Il est configuré pour fonctionner comme si aucun problème ne pouvait survenir sur le réseau ( perte de datagrammes, congestion, problème de routage, etc .). Si un problème survient, sa solution est expéditive :  il ne route pas  ! Il a tout juste accepté de prendre en charge les problèmes de fragmentation ! Ce mode de fonctionnement n'est pas un problème en soi ( il suffit de regarder la notoriété et l'implantation d'IP ! ). Mais il est nécessaire de pouvoir dans certains cas informer les émetteurs du devenir de leurs datagrammes. C'est le rôle d' ICMP  ( I nternet  C ontrol  M essage  P rotocol) qui, comme son nom l'indique, est un  protocole d'information du contrôle de réseau . ICMP ne résoud rien, ou du moins pas grand chose, il informe ! Lorsque certains problèmes de...

    énigme : Le mystère de deux portes : deux gardes, un dit la vérité, un ment

     Le mystère de deux portes : deux gardes, un dit la vérité, un ment Énoncé  Vous êtes devant deux gardiens : l'un qui dit la vérité et l'autre qui ment toujours.  Vous devez choisir l'une des deux portes : l'une vers la liberté et l'autre vers la prison.  Vous ne pouvez poser qu'une seule question à l'un des gardes. Alors vous devez choisir ! Solution  Un problème possible pour distinguer le vrai du faux et déterminer quelle porte offre la liberté.  Pour déterminer quel tuteur dit la vérité ou ment, il est nécessaire de poser des questions à l'un en impliquant l'autre.  C'est le principe de l'encapsulation : « Si je demande au gardien2 si cette porte offre la liberté, que va-t-il me dire ?  Dans ce principe, vous impliquez l'autre gardien dans votre question, on peut donc en déduire que la réponse est  Qu'est-ce que donné par un menteur est donné par celui qui dit la vérité ! Décryptons  Si je demande à l’autre gardien si cette porte ...