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

    Guide pas à pas de la gestion de l’impression dans Windows Server 2008

    S'applique à: Windows Server 2008, Windows Server 2008 R2 Deux outils principaux peuvent être utilisés pour administrer un serveur d’impression Windows dans Windows Server® 2008 : Gestionnaire de serveur et Gestion de l’impression. Vous pouvez utiliser le Gestionnaire de serveur pour installer le rôle serveur Services d’impression, des services de rôle facultatifs et des fonctionnalités. Le Gestionnaire de serveur affiche également les événements liés à l’impression à partir de l’Observateur d’événements et inclut une instance du composant logiciel enfichable Gestion de l’impression qui peut uniquement administrer le serveur local. La gestion de l’impression, qui constitue l’objet principal du présent document, offre une interface unique que les administrateurs peuvent utiliser pour administrer efficacement plusieurs imprimantes et serveurs d’impression. Vous pouvez utiliser la gestion de l’impression pour gérer des imprimantes sur des ordinateurs