viernes, 14 de diciembre de 2007

Bombas Fork

Fuente: LinuTeca

Lo primero, ¿en que consisten las bombas fork?, para los que sabéis lo que es un fork, ya os lo imaginaréis pero para los que no lo sepan, se trata de crear procesos hasta que el sistema se vuelve inoperable y hay que reiniciarlo. Esta es una manera muy común de ‘tirar’ servidores si no tienen la proteción adecuada.

Un ejemplo de bomba fork en unix sería el siguiente:

:(){ :|:& };:

En windows sería algo asi:

:s
start %0
goto s

Como en windows está muy claro la explicación la centraré en el elemplo unix.

Tenemos la bomba :(){ :|:& };: que si la escribimos en consola en nuestro Ubuntu (por ejemplo) el sistema se bloqueará, a continuación explico cada carácter.

Los dos puntos ‘:’ van a ser el nombre de nuestra funcion y los paréntesis ‘()’ vacios, contendrán los parámetros de ésta, osea ninguno.

A continuación abrimos la llave ‘{’ para escribir el cuerpo de la función y cuidado porque después hay un espacio. Ahora viene lo interesante, los dos puntos ‘:’ hacen una llamada la misma función recursivamente a través de una tubería ‘|’ y se ejecuta en el background gracias al ‘$’.

Con esto hemos terminado el cuerpo de la función y escribimos un espacio y cerramos la función con ‘}’,ahora indicamos el fin de instrucción con ‘;’ y invocamos a la función ‘:’ que acabamos de crear.

Sólo os aconsejo que no lo provéis sino habéis guardado todos los trabajos abiertos.

Una forma de solucionarlo es cambiando el valor de ‘ulimit’. Si escribimos ulimit en consola aparecerá algo asi:

ekhtor@macbook:~$ ulimit
unlimited

Efectivamente al tenerlo ilimitado llegará un punto en el que la bomba se apodere de toda nuestra memoria y para cambiar el valor a uno más seguro sólo habría que pasarle como parámetro el número de procesos que queremos que ejecute a la vez un usuario. Ejemplo:

ekhtor@macbook:~$ ulimit 5000

ekhtor@macbook:~$ ulimit

5000

Esto depende de cada máquina, unas pueden ejecutar más que otras asique no os la juguéis. Otro dato a tener en cuenta sería el número de usuarios que accederán a nuestra máquina porque si ésta es capaz de ejecutar 5000 procesos, acceden tres usuarios y ejecutan una bomba simultánea entre los tres estarían ejecutando 15000 procesos y nuestra máquina se bloquearía.

No hay comentarios: