Una fork bomb es una forma de ataque de denegación de servicio (DoS) dirigida a sistemas Unix y similares. Este ataque utiliza el comando fork, que permite a un proceso duplicarse indefinidamente, saturando los recursos del sistema.
La conocida secuencia :(){ :|:& };:
es una función de bash que se ejecuta de manera recursiva, creando copias de sí misma de forma continua. Su objetivo es agotar rápidamente los recursos del sistema (como la CPU y la memoria), lo que provoca que el sistema deje de funcionar correctamente. A menudo se utiliza para poner a prueba las limitaciones que tiene un usuario sobre la cantidad de procesos que puede generar en un servidor.
En sistemas Linux, es posible mitigar este tipo de ataques configurando límites en el archivo /etc/security/limits.conf o utilizando el módulo pam_limits a través de /etc/security/limits.d. Estas configuraciones permiten limitar la cantidad de procesos que un usuario puede ejecutar simultáneamente, reduciendo el riesgo de una bomba fork.
Una vez que la fork bomb ha sido activada y el sistema se ve afectado, la única forma de detenerla de manera efectiva suele ser reiniciar el sistema forzosamente, ya que es muy difícil eliminar todas las instancias del proceso manualmente.
Qué hacer para evitarlo
Una forma eficaz de prevenir ataques como la fork bomb es limitar el número de procesos que un usuario puede ejecutar simultáneamente en un sistema. Para verificar la cantidad máxima actual de procesos permitidos, puedes utilizar el siguiente comando:
ulimit -u
Este comando te mostrará el número máximo de procesos permitidos. Para una visión más completa de los límites configurados para el sistema, puedes ejecutar:
ulimit -a
Supongamos que el valor devuelto es 50922, lo que indica que un usuario puede ejecutar hasta 50,922 procesos. Para proteger el sistema contra una fork bomb, este valor debería reducirse. Si, por ejemplo, deseas limitar el número de procesos a 5,000, puedes utilizar el siguiente comando:
ulimit -S -u 5000
¡Advertencia!: Es importante no establecer un valor de ulimit demasiado bajo, ya que podría interferir con el funcionamiento normal del sistema.
Si intentas ejecutar una fork bomb después de aplicar este límite, obtendrás un mensaje de error similar al siguiente:
bash: fork: Resource temporarily unavailable
Este mensaje indica que el sistema ha bloqueado la creación de nuevos procesos debido al límite configurado. Para verificar la cantidad actual de threads (hilos) utilizados, puedes ejecutar:
pgrep -wcu $USER
La salida te mostrará el número actual de procesos en ejecución.