Comment protéger Ubuntu de fork bombe

72

J'ai entendu quelqu'un parler d'une fourche piégée, j'ai fait des recherches et trouvé des informations épouvantables sur des personnages étranges à la recherche de personnages que vous pouvez taper sur la ligne de commande et qui, par conséquent, font de mauvaises choses sur votre ordinateur. Je ne donnerais certainement pas des ordres que je ne comprends pas mais on ne sait jamais ce qui peut arriver.

J'ai entendu dire que certains systèmes d'exploitation permettaient à l'administrateur d'imposer des limites aux processus utilisateur pour atténuer les effets des bombes à la fourchette. Cette protection est-elle sous Ubuntu par défaut ou une personne bénéficiant du privilège sudo devrait-elle définir cette option? Si c'est le cas, comment?

Dblang
la source

Réponses:

73

Vous pouvez facilement limiter le nombre de processus pouvant être générés dans Ubuntu et la plupart des autres distributions Linux en modifiant /etc/security/limits.conf

sudoedit /etc/security/limits.conf

Ajoutez ensuite cette ligne au bas de ce fichier:

*    hard     nproc     nnn

où:

  • hard définit la limite au niveau du noyau pour qu’elle ne puisse pas être modifiée sans redémarrage.
  • nproc est le nombre maximum de processus par utilisateur.
  • nnn est un nombre que vous devez calculer pour votre système en:

    ps aux -L | cut --delimiter=" " --fields=1 | sort | uniq --count | sort --numeric-sort | tail --lines=1
    

La commande ci-dessus répertorie tous les processus pour tous les utilisateurs, y compris les threads , les résume et répertorie le nom d'utilisateur avec le plus grand nombre de processus. Pour plus de sécurité, ouvrez autant d'applications que nécessaire normalement avant d'exécuter la commande ci-dessus, puis doublez ce nombre pour des raisons de sécurité.

Une fois cette limite mise en place, vous devrez redémarrer l' ordinateur , mais cela affectera chaque utilisateur non root du système. Donc, si une bombe fourchette est exécutée par un utilisateur non root, elle aura cette limite absolue.

Les limites de groupe et de caractères génériques ne s'appliquent pas à l'utilisateur root par défaut . Utilisez le nom d'utilisateur littéral rootdans les règles si vous souhaitez appliquer une règle au superutilisateur.

De plus, si vous ne souhaitez pas redémarrer de sitôt, vous pouvez utiliser l' sudo ulimit -u 800option qui place la restriction uniquement sur la session en cours mais qui peut être facilement contournée par une bombe à la bombe avec sudoprivilèges!

Après le redémarrage, tout ce qui est dedans /etc/security/limits.confsera alors utilisé.

Quelques informations supplémentaires sur les bombes fourchettes: Ce ne sont pas des logiciels malveillants ou quelque chose de terrible. Ils consistent généralement en quelque chose d'aussi basique qu'un script qui s'appelle deux fois, augmentant ainsi sa présence sur la machine de manière exponentielle. Même s'ils ont peu de mémoire, étant donné la rapidité avec laquelle ils se multiplient, ils remplissent rapidement toute la mémoire vive disponible et la machine se fige ou se réinitialise. Le seul danger est de perdre des informations non sauvegardées. Je classerais un forkbomb beaucoup plus comme une farce qu'un logiciel malveillant.

Un rappel important:

Vous devriez rarement exécuter quoi que ce soit en ligne de commande lorsque vous n'êtes pas certain à 98% de son action. Si vous ne pouvez pas lire les commandes que vous exécutez, ne le faites pas. Ceci s'applique en double aux morceaux illisibles de caractères hexadécimaux / base64, qui peuvent être utilisés pour masquer toutes sortes de méchancetés. Si vous n'êtes pas sûr d'une commande, vous pouvez toujours rechercher ses actions dans les pages de manuel Ubuntu et faire preuve de prudence lorsque vous l'utilisez, sudocar elle s'exécutera en tant qu'utilisateur root.

Marco Ceppi
la source
@MarcoCeppi: votre nombre n'était pas loin pour un utilisateur typique d'Unity: le résultat
obtenu
1
Si, par exemple, je mets quelque chose comme alias ":(){ :|: & };:"="echo 'No.'"dans mon .bashrc- cela exécutera-t-il chaque connexion?
UniversallyUniqueID
Y at-il un inconvénient à choisir une limite plus élevée de nproc? Il semble qu'il n'y ait pas beaucoup de place avec une limite ou même le double du nombre actuel de processus. Une limite beaucoup plus élevée, même 10 000 ou plus, serait-elle toujours efficace contre un fork bombe? Environ combien de RAM chaque fork / process consomme? Peut-être existe-t-il une limite plus universelle dérivée de la RAM?
Xen2050
1

Une façon simple que j'aime est de créer un alias même si les alias ne sont pas toujours appliqués, vérifiez la réponse ci-dessus.

alias :="echo No."

Maintenant

$ :(){ :|: & };:
bash: syntax error near unexpected token `('
Adrian Webster
la source
22
sûrement, c'est une solution commune; comment ça s'arrête a(){ a|a & };a? (ou tout autre nom de fonction?)
cat