Las Famosas Bombas Fork

Hace como aproximadamente lo que ya van para 3 semanas completas, leí un articulo muy raro en Kriptópolis el cual titularon “Bombas y bombos“, aunque lo leí hace ya bastante tiempo hoy le doy cabida a lo que es mi opinión sobre el tema, el articulo en si describía estas siempre famosas bombas fork y la posición de Kriptópolis con respecto al tema, rápidamente revise todo el cuento y todo empezó con un mensaje en el foro de ayuda de Kriptópolis donde un tal “ (al final todos lo tacharon de script kiddie por haber desempolvado este tema, algo que obvio si leen el mensaje no fue con querer ya que el ni tenia la menor idea del tema) hablaba sobre este tema y llamaba a todos los usuarios del foro a publicar mas sobre el tema y de paso tratar de arreglar el problema.
Como era de esperarse los linuxeros y los GNU puristas salieron flameando al pobre usuario novato, aunque tuvo apoyo fue menor solo basta con leer la inmensa cantidad de comentarios para darse cuenta de tanto sarcasmo, pero estos flameos y sarcasmos eran como dije claros y tenían una base ya que este tema es muy pero muy antiguo y no tiene ninguna relación con la inseguridad o vulnerabilidades en los sistemas POSIX si no que es solo una mala configuración del ámbito de ejecución que un usuario puedo hacer al entrar en el sistema.
Pero que es verdad o mejor dicho que son las “Bombas Fork”? y por que tanto alarde sobre ellas?
Eso veremos en esta nota asi que si te interesa llego la hora de empezar…

Antes de entrar en el tema empecemos por definir que es que y empezaremos por definir que es “Fork”…

Fork (en español Bifurcación)
Según la Wikipedia es cuando…
“Se Hace referencia a la creación de una copia de sí mismo por parte de un programa, que entonces actúa como un ‘proceso hijo’ del proceso originario, ahora llamado ‘padre’. Los procesos resultantes son idénticos, salvo que tienen distinto número de proceso (PID)”
En pocas palabras es cuando un programa durante su etapa de ejecución crea un subproceso de si mismo que actúan de la misma manera pero con diferente ID de proceso.

Bomba Fork
Según la Wikipedia 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.”
En pocas palabras es cuando un programa crea infinitos subprocesos de si mismo parando solo hasta que el sistema se colapse o llegue al limite de ejecución.

Ahora que ya sabemos lo basico y claro las definiciones formales entremos en el asunto…

Lo primero que debemos tocar es siempre ¿Que son? y ¿Por que se dan?, la primera ya la hemos respondido durante la definición pero si no quedo claro del todo imagínate un programa que se clona a si mismo repetidas veces y que cada clon vuelve hacerlo mismo que es crear otro clon y asi sucesivamente hasta que ocurra obviamente un colapso del sistema por saturacion de ya sea de espacio de memoria o por exceso de procesamiento, es básicamente lo que consideraríamos parte de un virus y claro respondiendo a la segunda pregunta es claro que se dan por que nosotros le estamos diciendo hazlo, consideren a las Computadoras como lo que son Cajas con miles de circuitos que están programadas para obedecer ordenes y en este caso tu le diste la orden de que se multiplica a si mismo varias veces.

Ahora considerando la anterior analicemos una la mas común que se encuentra en la red que es:

:(){ :|:& };:

Esta famosisima porción de código es capaz de colgar hasta el sistema mas sofisticado y moderno y es exclusiva para los que usan la shell Bash, esta no es otra cosa que decir en un lenguaje común y simple es ejecutate a ti mismo y pasa el proceso a segundo plano o background y al ejecutarse obviamente a si mismo vuelve a pasar los mismo.

Ahora les mostrare una pero para C:

main() {for(;;)fork();}

Y por ultimo una mas en PERL:

perl -e “fork while fork” &

Viéndo los ejemplos de cerca veremos que es algo tan sencillo tan básico pero tan letal, pero bueno por que tanta gente arma tanto escándalo de esto si somos nosotros los que lo provocamos, bien decía una frase por ahí que no me acuerdo de quien salio “En este mundo de incertidumbre solo los paranoicos sobreviven” y es que este tema solo compete a la gente muy paranoica, la verdad siendo sincero por mi parte diré que esto pasa y seguiré pasando esto compete a todos los niveles a todos los sistemas operativos no solo a los POSIX como Linux pero mucha gente los esta tildando de el mal de los sistemas operativos POSIX pero que hay de verdad en eso? si quieren mi opinión, mucha gente le pone este mote por que Linux se ideo en su primera instancia como un sistema operativo para desarrolladores y era obvio de hasta lo mas mínimo de este sistema sea reprogramable o viniera con capacidades de extensión o de programación, siguiendo consideración básicamente este es un “error” de programación que se ha tomado como algo malévolo, no se ustedes pero yo cuando suelo programar específicamente cuando estoy realizando algún programa que ejecute algo repetidamente cuando haces un mal paso o se te olvide cambiar alguna que otra cosa el programa se “cicla” y repite infinitas veces la operación causando el colapso -a veces- inmediato del sistema o cuando menos una realentizacion del sistema por algún tiempo corto indefinido.

Así que como leyeron para mi no es mas que error de propia programación y como ya deje claro las computadores se hicieron para obedecer ordenes, nosotros le estamos ordenando en pocas palabras -y en tajantes claro esta- mátate, muchas personas darían a continuación una serie de recomendación para evitar ser lastimados por una Bomba Fork pero yo no ya que como lo considero un error nuestro no le veo una amenaza seria para mi pc de escritorio tal vez para mis servidores si pero ese es otro cuento.
Antes de acabar y cerrar les comentare que al final dejo una serie de ligas donde se habla mas acerca del tema y se dejan consejos para Linuxeros acerca de como evitar esto con un poco de paranoia.
Pero claro no habra un windosero que venga a decir que Windows no le pasa, pues estas en lo incorrecto

En un .bat
:s
start %0
goto s

Espero les haya gustado esta mini-guía-opinión aunque fue mas de opinión.
Saludos

Links de Interes
Fork Bombs, ulimit y limits.conf

Bomba Fork en WikiPedia
Defending against fork bombs
Fork Bomb

6 Comentarios »

  1. Escrito por: Michoacano

    10 de Mayo del 2007 a las 4:19 am

    El problema que veo yo es que salio en meneame, y todos pensaron que era tema de portada, lo cual no era cierto, te digo yo también me fui con la pinta, al final ves la url y ves que se trata del foro.

  2. Escrito por: Masiosare

    10 de Mayo del 2007 a las 7:38 am

    Te tengo uno similar…

    main(){while(!fork())sleep(1);}

    Trata de matarlo =P

  3. Escrito por: mr.ebola

    13 de Mayo del 2007 a las 1:52 pm

    bonito bash

  4. Escrito por: garcez

    17 de Mayo del 2007 a las 9:18 am

    más rápido con while(1){malloc(1024); fork();} xD

  5. Escrito por: Mark191

    2 de Julio del 2008 a las 5:21 am

    Si abro una bomba fork ¿Basta con reiniciar el ordenador para solucionar el problema?

  6. Escrito por: g30rg3_x

    2 de Julio del 2008 a las 3:59 pm

    Por supuesto…

Comentarios RSS · TrackBack URI

Dejanos tu Comentario

Nombre: (Requerido)

Correo electrónico: (Requerido)

Sitio WEB:

Comentario: