24 de febrero de 2008

Seguridad: Forkbombs



Ultimamente vi por los canales de IRC o por la web, muchos usuarios, que se aprovechan de los n00bs haciendolos ejecutar los conocidos 'forkbombs' (mstreet, este post va dedicado a vos :þ).

¿Que es un forkbomb?
Para el que no lo sabe, un forkbomb es una secuencia de comandos que normalmente ejecuta un proceso, y se empieza a llamar a si mismo infinitamente hasta lograr recargar al sistema, haciendo que este colapse.

Aca les hice unos ejemplos de los forkbombs que mas se conocen:

Esta es muy conocida, hecha en bash.

:(){ :|:& };:


Esta es igual a la anterior, salvo por ser mas larga (la he usado, y funciona).
hola () {
hola | hola &
}
hola


Asi mismo se pueden hacer en muchos lenguajes, como en perl:
perl -e "hola while hola"


¿Como nos podemos proteger de estas 'forkbombs'?
Hay varios metodos para evitar (en cierta parte) la mayoria de los forkbombs, una es agregando un limite de procesos al /etc/profile y al /etc/bash.bashrc, como por ejemplo..

ulimit -u 2048


De esta forma logramos que no se puedan ejecutar mas de 2048 procesos a la vez en el usuario, cosa que sobra para cualquiera, y no alcanza para tumbar al equipo (aunque 1024 seria mejor aún)

Los 1337s recomiendan usar otro metodo (supuestamente es el correcto), que es agregando el limite a /etc/security/limits.conf, por ejemplo..

* hard nproc 1024


Asi, todos los procesos que respeten el PAM, usarán el limite que este indica. :)

Ser precavido e inteligente, es la mejor seguridad que hay :]
Por que digo esto? Porque siempre hay casos en los que se puede evitar o 'bypassear' la seguridad, tambien hay forkbombs que 'evitan' esos limites que pusimos en los ficheros de conf. correspondientes, por ejemplo:

echo "\$0&\$0">_;chmod +x _;./_


En este caso, no hay mejor solucion para evitar problemas, que leer un poco sobre que esta uno ejecutando, aprender de eso, y sobre todo, usar mucho google, que para eso esta ;)

Saludos, Elidix.