Está en la página 1de 4

:() { :|:& };:

Entendiendo la fork() Bomb :(){ :|:& };: de


bash
April 5, 2021 — 3 minutos de lectura aprox.
#bash #forkbomb

Una fork bomb (bomba fork) es una forma de ataque del tipo denial-of-service (DoS) o
denegación de servicio, utilizada contra sistemas basados en Unix. Como su nombre lo
indica, utiliza la operación fork, donde un proceso crea una copia de sí mismo.

La conocida cadena :(){ :|:& };: no es nada más que una función de bash, la cual se ejecuta
recursivamente. Comúnmente, es utilizada por sysadmins para testear limitaciones sobre
usuarios en cuanto a cantidad de procesos que pueden ejecutar en un servidor.

En linux, dichos límites de procesos pueden ser configurados desde /etc/security/limits.conf


o vía el módulo pam_limits de Linux-PAM desde /etc/security/limits.d y así poder evitar esta
forma de ataque. Una vez activada la bomba de forma exitosa en el sistema, puede no ser
posible retornar a un estado de operación normal sin tener que realizar un reboot forzado,
ya que la única solución a una fork bomb es destruir todas las instancias de la misma.

WARNING: Los siguientes ejemplos pueden crashear tu sistema.

Analizando el código de la fork() Bomb :(){ :|:& };:


:() - Define una función con nombre :. Es una función que no acepta argumentos. La sintáxis
de una función en Bash tiene la siguiente forma:

foo(){
arg1=$1
arg2=$2
echo 'Bar...'
#do_something on $arg argument
}

Copy

La fork() bomb se define de la siguiente manera:

:(){
:|:&
};:

Copy

:|: - La función se llama a sí misma (recursión) y redirecciona el output o salida, utilizando el


operador pipe |, a otra llamada de la de la misma funcion :. La magia está en que se llama
dos veces a la función y así comienza el bombardeo al sistema.

& - Pone el llamado de la función en background de manera que los procesos hijos (copias)
no mueran y así se comen los recursos del sistema.

; - Finalización de la definición de la función

: - Llamado (call) de la función, AKA setteo de la bomba.

De manera un poco más legible, la función se puede definir de la siguiente manera:

bomb() {
bomb | bomb &
}; bomb

Copy

Un sistema Unix correctamente configurado no debería caerse cuando se dispara una fork
bomb.
Previniendo una fork bomb en Linux
Una posible forma de prevenir el ataque es limitando el numero de procesos que pueden
correr los usuarios. La información de la cantidad máxima actual se puede obtener
ejecutando el siguiente comando:

ulimit -u

Otra forma:

ulimit -a

El número 50922 indica que el usuario puede correr 50922 procesos. Para proteger el
sistema de una fork bomb, es necesario disminuir dicho valor. Para limitar la sesión a, por
ejemplo, 5000 procesos, se utiliza el siguiente comando:

ulimit -S -u 5000

WARNING: No utilices valores de ulimit muy bajos! Esto puede ocasionar


problemas a la hora de trabajar con el sistema.

Ahora, al correr la fork bomb:

:(){ :|:& };:


Copy

Se obtendrá el siguiente output:

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
bash: fork: Resource temporarily unavailable
bash: fork: Resource temporarily unavailable

Copy

De esta forma, estaríamos evitando este tipo de ataques. Se puede ver además, corriendo
el comando pgrep, la cantidad límite (actual) the threads:

pgrep -wcu $USER

Copy

Salida de ejemplo:

5002

Copy

Ahora podes comprar la remera forkbomb en la tienda de sysarmy o el sticker pack con la
forkbomb y explicarle a todos que significa!

Artículo original en cybercity.biz, traducción al español efsbl, revisó @jedux.

Leer otros posts

← Las noticias de Marzo 2021! - Polémica en /var S05E02 SQLite no es una base de datos
de juguete →
Comentarios

sysarmy:~ blog$
© 2021 Powered by Hugo Theme created by panr

También podría gustarte