¿Qué es? y ¿Cómo puede proteger su sistema de una Bomba Fork?

Una 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 de 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.

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.

Los sistemas de tipo Unix típicamente tienen establecido este límite, controlado con el comando ulimit del shell. En los kernel Linux existe una variable llamada RLIMIT_NPROC, que indica la cantidad máxima de procesos que se puede ejecutar. Si un proceso intenta llamar a la función fork y el usuario propietario del proceso ya tiene igual o más procesos que los indicados en RLIMIT_NPROC la llamada a la función fallará.

Acá les dejo algunos ejemplo de bombas fork en diferentes lenguajes.

  • C++
#include <unistd.h>
 
void main()
{
  while(1)
    fork();
}
  •  Bash
:(){ :|:& };:
  •  Perl
fork while fork
  •  Python
import os
 
while True:
     os.fork()
  •  Ruby
def forkbomb
  loop { fork { forkbomb }  }
end; forkbomb

Después de ver diferentes ejemplo de bombas fork, vamos a ver el procedimiento para proteger nuestros sistemas de este tipo de ataque.

  • Abrimos (como root) el siguiente archivo /etc/security/limits.conf con nuestro editor de texto favorito.
  • Colocamos el siguiente texto * hard nproc 1000 justo antes de la ultima linea del archivo, quedando de la siguiente forma.
* hard nproc 1000

# End of file

De esta manera le estamos indicando al sistema que todos los usuarios (representados por el *) tendrán un limite de procesos para ejecutar, en este caso nproc tiene un valor de 1000

En el caso de que quiere establecer el limite a un usuario o grupo en especifico el archivo quedaría de la siguiente forma.

  • Para establecer el limite solo a un usuario.
usuario hard nproc 1000

# End of file
  •  Para establecer el limite a un grupo de usuarios.
@usuarios hard nproc 1000

# End of file

El procedimiento es bastante sencillo pero muy importante para proteger nuestro sistema de esta forma de ataque.

Espero que esta información les sea útil. Saludos…

Anuncios

Un pensamiento en “¿Qué es? y ¿Cómo puede proteger su sistema de una Bomba Fork?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s