Thursday, July 1, 2010

:(){ :|:& };:

http://en.wikipedia.org/wiki/Fork_bomb

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.

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.

Ejemplos de bombas fork tenemos (advertencia, no ejecutar a menos que se guarde toda information actualmente abierta; en algunos casos existe la posibilidad de daniar el sistema):


Bash
:(){ :|:& };:


C:
#include

int main(void)
{
for(;;)
fork();
return 0;
}

PHP:
while(pcntl_fork()|1);


Python:
import os

while True:
os.fork()



___ ___ _ ___ _
| __|_ ___| \(_)__ _ __| _ ) |___ __ _
| _/ _/ _ \ |) | / _` |_ / _ \ / _ \/ _` |
|_|\__\___/___/|_\__,_/__|___/_\___/\__, |
|___/

No comments: