Bomba fork

Esquema de funcionament de la bomba fork, els processos són dividits recursivament fins a causar una denegació de servei o un bloqueix del sistema

La bomba fork és un atac que colapsa un dispositiu implementant l'operació fork, o alguna funcionalitat equivalent mitjançant la qual un procés és capaç de crear un altre procés. La bomba fork és considerada una wabbit, ja que no es replica de la mateixa forma que els cucs o els virus. El seu efecte es basa en la suposició que el nombre de programes i processos que s'executen simultàniament en un ordinador té un límit.

Una bomba fork funciona creant una gran quantitat de processos molt ràpidament amb l'objectiu de saturar l'espai disponible en la llista de processos mantinguda pel sistema operatiu del computador. Si la taula de processos s'arriba a saturar, llavors no es poden iniciar nous programes fins que no es tanqui cap. En el cas que això succeeixi, és molt poc probable que es pugui iniciar un programa útil, ja que els processos de la bomba estaran esperant per poder crear nous processos a la primera oportunitat que se'ls hi concedeixi.

Les bombes fork no només ocupen espai dins de la llista de processos, també consumeixen temps de procés i memòria de la màquina on s'executen. Com a resultat d'això, els ordinadors es tornen lents i fins i tot es poden tornar inutilizables donada la falta de memòria i la impossibilitat d'aprofitar el processador.

Exemples de bombes fork

[modifica]

Entre les bombes fork més conegudes s'inclou aquesta versió per a Unix:

:(){ :|:& };:

o aquesta per a Microsoft Windows utilitzant un arxiu bat:

:s
start %0
goto s

o utilitzant Perl:

#(forking utilitzant l'intèrpret [[Perl]]):
perl -e "fork while fork" &

o utilitzant el llenguatge de programació C:

#include <unistd.h>

int main()
{
 while(1)
 fork();
}

Dificultat de solució

[modifica]

Una vegada una bomba fork ha estat activada de forma "satisfactòria" en un sistema pot donar-se el cas que no sigui possible executar cap tasca sense reiniciar el sistema, ja que l'única solució és aturar tots els processos iniciats per ella. Intentant utilitzar un altre programa per aturar tots els processos normalment requereix que d'altres processos hagin estat creats, cosa que no és possible si no hi ha espais buits en la taula de processos, o espai en les estructures de memòria.

Prevenció

[modifica]

Una manera de prevenir l'atac d'una bomba fork és limitar el nombre de processos que un usuari pot executar. Quan un procés intenta crear un altre procés i el propietari de dit procés ja posseeix la quantitat màxima de processos que se li ha assignat l'intent de creació del nou procés falla. El màxim nombre de processos assignat a cada usuari ha de ser prou baix per a poder resistir l'execució simultània d'una bomba fork per cada usuari i deixar lliures prou recursos com per a poder restaurar el sistema.

Noteu que l'execució accidental d'una bomba fork és altament improbable en més d'un usuari a la vegada.

Els sistemes de tipus Unix típicament tenen establert aquest límit, controlat per una variable ulimit de la consola de comandes. En els kernel Linux aquesta variable és anomenada RLIMIT_NPROC, que indica la quantitat màxima de processos que es pot executar. Si un procés intenta cridar a la funció fork i l'usuari propietari del procés ja té igual o més processos que els indicats en RLIMIT_NPROC la crida a la funció fallarà.

Una altra solució implica la detecció de bombes fork abans de la seva execució per part del sistema operatiu, encara que això suposa un ús més alt de recursos per part del sistema.