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 “:”).
L’ensemble s’éclaircit dès qu’un nom explicite est donné à la fonction :
1 2 3 4 | ForkBomb () { ForkBomb | ForkBomb & } ForkBomb |
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 |
$ ulimit -u 100 $ ulimit -u 100 |
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 |
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 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
Enregistrer un commentaire