Qu’est-ce que Fork Bomb dans Bash ? Comprendre :(){ :|:& } ; :


  • Français


  • Nucking mon système en installant Arch Linux n’était pas suffisant, j’ai donc utilisé une Fork Bomb.

    Je rigole!

    Vous avez peut-être déjà vu une commande Linux mignonne mais dangereuse, composée uniquement de caractères spéciaux :

    :(){ :|:& };:

    C’est ce qu’on appelle une bombe à fourche bash et cela suffit à faire tomber votre système en consommant toutes les ressources système. Il disparaît après un redémarrage du système, cependant.

    Dans cet article, j’aborderai :

    • Qu’est-ce qu’une bombe à fourche en général
    • Comment le :(){ :|:& };: transformer en bombe à fourche
    • Pourquoi la bombe à fourche est susceptible de ne pas faire de dégâts (oui, votre distribution peut être à l’épreuve des bombes)
    • Conseil rapide pour éviter les bombes à fourche

    Qu’est-ce qu’une bombe à fourche ?

    Vous pouvez considérer une bombe fork comme une attaque DoS (déni de service), car elle reproduit les processus existants jusqu’à ce que votre système utilise 100 % des ressources système et le rende complètement inutilisable.

    Les programmes Unix sont exécutés via une combinaison de deux appels système appelés fork et exec. Un processus en génère un autre soit en se remplaçant lui-même lorsqu’il est terminé – un exec – soit, s’il doit rester, en faisant une copie de lui-même – un fork.

    La bombe fork est essentiellement le processus de création de fourches après fourches à l’infini jusqu’à ce que votre système n’ait plus de ressources.

    Fourche bombe illustration
    Fourche bombe illustration

    Bien sûr, vous pouvez récupérer votre système en redémarrant, mais le processus est assez intéressant !

    :(){ :|:& };: est un exemple d’une telle bombe à fourche. Il est populaire car il est composé de quelques caractères spéciaux, et non de longs scripts compliqués.

    Maintenant, laissez-moi vous expliquer comment cette fameuse bombe fork fonctionne sous Linux.

    :(){ :|:& };: – Comment ça marche ?

    bombe à fourche
    Bombe de fourche en cours d’exécution

    Eh bien, c’est ce que la fameuse bombe à fourche fait à votre système. Et si vous êtes curieux de connaître ces 11 personnages effrayants, c’est parti :

    :(){ :|:& };:

    À partir de maintenant, vous ne savez peut-être pas comment cela fonctionne. Eh bien, laissez-moi vous expliquer:

    • :() définit la fonction nommée comme : et n’acceptera aucun argument.
    • {} est l’endroit où la fonction commence et se termine. En termes simples, il inclut des commandes qui finiront par planter votre machine.
    • :|: est l’endroit où la récursivité commence (fonction s’appelant elle-même). Pour être plus précis, Il charge un : fonction en mémoire, pipe (|) sa propre sortie vers une autre copie du : fonction qui est également chargée dans la mémoire système.
    • & exécutera toute la fonction en arrière-plan afin qu’aucun processus enfant ne soit tué.
    • ; sépare chaque fonction enfant de la chaîne d’exécutions multiples.
    • Et : exécute la fonction récemment créée, d’où la réaction en chaîne commence !
    Explication de la bombe à fourche Bash
    Explication de la bombe à fourche Bash

    Après avoir parcouru les bases, je suis sûr que vous voulez surprendre votre ami avec cette attaque. Mais je vous conseille de garder cette attaque sur votre machine virtuelle.

    Oh! voici une capture d’écran du gestionnaire de tâches lorsque j’ai exécuté la bombe à fourche lors de mes tests.

    processus système

    Pourquoi fork bomb ne fonctionne-t-il pas dans Ubuntu et certaines autres distributions ?

    Eh bien, cela ne se limite pas à Ubuntu, mais à chaque distribution livrée avec systemd.

    Systemd crée un groupe de contrôle pour chaque utilisateur qui définit également le nombre maximum de processus. Par défaut, il ne permet aux utilisateurs d’avoir que 33% de l’ensemble.

    Le bricolage avec la configuration systemd ne convient pas aux utilisateurs de bureau quotidiens, donc si vous êtes intéressé, je vous recommande fortement de vérifiez cette réponse sur la configuration de systemd.

    Comment prévenir la bombe à fourche?

    Comme tout est lié aux processus, il suffit de les limiter. Et le nombre maximal de processus pouvant s’exécuter via un utilisateur connecté peut être vérifié via une commande donnée :

    ulimit -u
    ulimit vous

    Le mien est d’environ 15k et tout utilisateur Linux aurait au moins environ 10k, ce qui est bien plus que suffisant. Donc, ce que vous devez faire est de limiter ces processus d’arrière-plan à environ 5k, ce qui devrait être suffisant pour la plupart des utilisateurs.

    ulimit -S -u 5000
    après la modification du nombre de processus d'arrière-plan

    Mais cela ne serait efficace que pour des utilisateurs spécifiques. Vous pouvez également l’appliquer au groupe en modifiant le /etc/security/limits.conf dossier. Ceci est connu pour être un moyen plus efficace aussi!

    sudo nano /etc/security/limits.conf

    Par exemple, je veux appliquer ceci à tous les utilisateurs qui sont dans wheel group, j’ajouterais donc les lignes suivantes à la fin du fichier de configuration :

    @wheel           hard    nproc           5000

    Alors que pour tout utilisateur spécifique (sagar dans mon cas), ce serait ceci :

    sagar           hard    nproc           5000
    nano configuration pour les processus

    Conclusion

    Cette bombe à fourche a été créé par un développeur de logiciels open source Jaromil. Il pense que c’est une œuvre d’art.

    Je suis un peu d’accord avec Jaromil. C’est en effet une oeuvre d’art. Seulement 11 caractères spéciaux et vous obtenez un programme méchant qui a la capacité de faire tomber un système.

    Je suppose que vous avez une meilleure compréhension de la bombe à fourche maintenant. Faites-moi savoir si vous avez des questions ou des suggestions.


    Source

    Houssen Moshinaly

    Pour contacter personnellement le taulier :

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    Copy code