Bombas fork

Versión audio


La bomba fork es una forma de ataque del tipo denegación de servicio sobre un computador que implementa la operación fork, o alguna funcionalidad equivalente mediante la cual un proceso es capaz de crear otro proceso. La bomba fork es considerado un wabbit ya que no se replica de la misma forma que los gusanos o los virus. Su efecto se basa en la suposición que el número de programas y procesos que se ejecutan simultáneamente en un ordenador tiene un límite.

Una bomba fork funciona creando una gran cantidad de procesos muy rápidamente con el objetivo de saturar el espacio disponible en la lista de procesos mantenida por el sistema operativo del computador. Si la tabla de procesos se llega a saturar, entonces no se pueden iniciar nuevos programas hasta que no se cierre alguno. En el caso que esto suceda, es muy poco probable que se pueda iniciar un programa útil ya que los procesos de la bomba estarán esperando para poder crear nuevos procesos a la primera oportunidad que se les conceda.

Las bombas fork no sólo ocupan espacio dentro de la lista de procesos, también consumen tiempo de proceso y memoria de la máquina donde se ejecutan. Como resultado de esto, los ordenadores se vuelven lentos e incluso se pueden volver inutilizables dada la falta de memoria y la imposibilidad de aprovechar el procesador.

Entre las bombas fork más conocidas se incluye esta versión para Unix (Explicación(en inglés)):

:(){ :|:& };:

o esta para Microsoft Windows usando un archivo bat:

:s
start %0
goto s


o usando Perl:

(forking usando el intérprete Perl):
perl -e "fork while fork" &

o usando el lenguaje de programación C:
#include

int main()

{
while(0==0)
fork();
}

Posibilidad de solución
Una vez una bomba fork ha sido activada de forma "satisfactoria" en un sistema, puede que no sea posible ejecutar ninguna tarea sin un reinicio del sistema, ya que la única solución es detener todos los procesos iniciados por ella. Normalmente se requiere cargar un programa adicional para "matar" procesos, lo que puede no ser posible si no hay posiciones vacías dentro de la tabla de procesos o espacio dentro de las estructuras de memoria.


Prevención
Una forma de prevenir el ataque de una bomba fork es limitar el número de procesos que un usuario puede ejecutar. Cuando un proceso intenta crear otro proceso y el propietario de dicho proceso ya posee la cantidad máxima de procesos que se le ha asignado, el intento de creación del nuevo proceso falla. El máximo número de procesos asignado a cada usuario debe ser lo suficientemente bajo para poder resistir la ejecución simultánea de una bomba fork por cada usuario y dejar libres los suficientes recursos como para poder restaurar el sistema.

Téngase en cuenta que la ejecución accidental de una bomba fork es altamente improbable en más de un usuario a la vez.

Para limitar el número de procesos máximos por usuario en GNU/Linux hay que editar el archivo "/etc/security/limits.conf" y añadir la siguiente línea:

* hard nproc 1000

donde el número final es el límite de procesos por usuario. Un número entre 1000 i 4000 sería suficiente como para dejar recursos en la máquina para matar al proceso padre y para dejar recursos suficientes para las necesidades del usuario.

Una bomba fork no es una bomba lógica, ni tampoco un fallo del kernel, ni mucho menos se trata de algo "liberado por uno de los programadores del kernel". Tampoco es en sí mismo una vulnerabilidad (aunque sí pueda convertirse en alguna rara ocasión en un problema). De hecho en la inmensa mayoría de los casos no tiene ninguna importancia, y no pasa de ser una curiosidad. Ni siquiera cabe echar la culpa de su existencia a los responsables de tal o cual sistema operativo o distribución.

Fuentes: Wikipedia i Kriptópolis

 

0 comentarios: