Bomba Fork en Linux Explicación de Ataque y Defensa
Bomba Fork en Linux Explicación de Ataque y Defensa

Bomba Fork en Linux: Explicación de Ataque y Defensa

La bomba fork o bomba de bifurcación de Linux es una de las formas más antiguas y efectivas de hacer caer un sistema Linux.

Es un tipo de ataque de denegación de servicio que funciona generando más y más procesos hasta que finalmente todos los recursos del sistema se agotan y el sistema se bloquea.

En este tutorial verás cómo funciona un fork bomb en un sistema Linux.

También veremos algunos pasos que puedes tomar para prevenir cosas como la bomba de fork y el despliegue excesivo de procesos que pueden causar el colapso de tu sistema.

¿Qué es una Bomba Fork (Fork Bomb)?

En Unix y Linux, un ataque de bomba fork es una llamada a la función que duplica y hace otra interacción a partir de una actual (también llamada padre). Los dos ciclos pueden ahora terminar diferentes trabajos simultáneamente posteriormente.

Concepto de funcionamiento de Bomba Fork
Concepto de funcionamiento de Bomba Fork

Una bomba fork (también llamada “rabbit virus“) es un asalto de vulneración de la administración (DoS) que utiliza la llamada a la función fork para ejecutar órdenes una y otra vez hasta que todos los activos de la función hayan terminado la orden. Después de algún tiempo, la función resulta estar excesivamente sobrecargada para responder a cualquier información.

Cómo Romper un Sistema Linux con Bomba Fork

ADVERTENCIA

Asegúrate de probar este método sólo en una máquina virtual o de pruebas.
Utilizarlo en otro sistema, incluso con fines de prueba, te hará parecer un intruso tratando de sacar el sistema. Y en algunos casos lo conseguirás.

La siguiente línea de código es un breve caso de uso:

:(){ :|:& };:

o,

:(){
 :|:&
};:

A primera vista, esto puede parecer abracadabrante y bastante inocuo de realizar, pero veamos qué ocurre realmente aquí:

  • :() – Definida la función llamada :. Esta función no acepta argumentos.
  • :|: – llama a la propia función (recursión) y genera otro proceso.
  • & – pone el proceso en segundo plano para que no pueda ser eliminado fácilmente
  • ; – marca el final de la función
  • : – vuelve a llamar a la función

Ten en cuenta que existen otros tipos de fork bombs. Por ejemplo, se pueden programar en Perl, Python y otros lenguajes.

La que hemos mostrado aquí es la más utilizada y funcionará en un shell Bash.

Aquí está la misma llamada a función en un formato más legible:

forkbomb() { 
 forkbomb | forkbomb &
}; forkbomb

Como puedes ver, la función se llama a sí misma dos veces.

Esta acción empezará a consumir todos los recursos de tu sistema y acabará por colapsar tu sistema Linux.

Bomba Fork en Linux
Bomba Fork en Linux

Tus resultados pueden variar, dependiendo de la configuración de tu sistema Linux, la distribución que estés usando, etc.

En nuestro sistema de prueba, la ejecución de la bomba fork bloqueó el sistema y eventualmente la terminal comenzó a llenarse de estos mensajes:

bash: fork: retry: Resource temporarily unavailable.

Incluso después de cerrar el terminal, el sistema era demasiado lento y no respondía a nada, por lo que nos vimos obligados a reiniciarlo.

NOTA

Algunas distribuciones de Linux están programadas para evitar este tipo de acciones. En estos sistemas, el kernel matará todos los procesos generados para evitar que el sistema se bloquee.

Cómo Evitar que Linux se Bloquee a Causa de una Bomba Fork

La bomba fork es efectiva porque puede generar un número ilimitado de procesos.

Eventualmente, tu sistema no será capaz de manejarlos todos y se producirá un fallo.

Así que podemos prevenir este tipo de fallos limitando el número de procesos que un usuario o grupo de usuarios puede generar.

La mejor forma de limitar el número de procesos que un usuario puede generar es editar /etc/security/limits.conf.

Editar archivo limits.conf en Linux
Editar archivo limits.conf en Linux

Como ejemplo, intentemos poner un límite al número de procesos que los usuarios del grupo “faculty” pueden generar.

Añadiendo esta línea al fichero, los usuarios del grupo no podrán generar más de 30 procesos:

@faculty        hard    nproc           30

¿Y si queremos imponer una restricción de proceso a un usuario concreto?

En este caso pondremos su nombre de usuario en el primer valor.

Esta es la cadena que usamos para restringir al usuario con el nombre esgeeks a generar un máximo de 50 procesos.

esgeeks         hard    nproc          50

Ahora la pregunta sería, ¿cuál es un buen número de procesos para establecer como límite?

Una forma sencilla de saber un buen número es abrir tantos programas como utilicemos normalmente de forma simultánea y luego contarlos en el terminal:

ps aux -L | cut --delimiter=" " --fields=1 | sort | uniq --count | sort --numeric-sort | tail --lines=1
Contar procesos utilizados desde terminal Linux
Contar procesos utilizados desde terminal Linux

A continuación, debemos tomar ese número y multiplicarlo por dos para ser conservadores. Hacemos esto porque establecer un número demasiado bajo podría traer problemas durante nuestro uso diario.

Después de esto, podemos terminar de editar el archivo /etc/security/limits.conf y finalmente reiniciar el sistema para aplicar la nueva configuración.

Otra forma de prevenir la bomba fork es utilizar el comando ulimit.

Escribe el siguiente comando ulimit para averiguar el máximo actual de procesos que puedes ejecutar en Linux:

ulimit -u

o,

ulimit -a
Máxima cantidad de procesos con ulimit
Máxima cantidad de procesos con ulimit

El número 7383 indica que puedes ejecutar 7383 procesos. Para proteger tu sistema Linux de una bomba fork, necesitas bajar ese número. Para limitar tu sesión a 100 procesos, utiliza el siguiente comando:

ulimit -S -u 100

ADVERTENCIA

Por favor, no establezcas números ulimit demasiado bajos. Esto impedirá que trabajes en tu sistema.

Ahora ejecuta de nuevo la bomba fork:

:(){ :|:& };:

Y verás mensajes como los siguientes:

bash: fork: Resource temporarily unavailable
bash: fork: Resource temporarily unavailable
bash: fork: Resource temporarily unavailable
bash: fork: Resource temporarily unavailable
bash: fork: Resource temporarily unavailable

Acabas de evitar el fork bomb en Linux. Ejecuta el siguiente comando pgrep para ver el límite actual de hilos:

pgrep -wcu $USER
Restablecer cantidad de procesos en Linux
Restablecer cantidad de procesos en Linux

Conclusión

En este tutorial hemos cubierto cómo destruir un sistema Linux usando el ataque fork bomb.

También hemos aprendido cómo funciona la bomba fork y cómo evitar que los usuarios la utilicen para derribar el sistema.

La responsabilidad de limitar el número de procesos que un usuario puede generar está en manos del administrador del sistema.

My Cart Close (×)

Tu carrito está vacío
Ver tienda