Allahu Akbar: Cómo Hacer Una Bomba Lógica

Allahu akbar: cómo hacer una bomba lógica

Que no cunda el pánico!

Relajad las tetas que en este post no vamos a hacer exaltación al terrorista ni os voy a enseñar a hacer un artefacto pirotécnico. Si habéis entrado buscando ese tipo de información ya os podéis dar media vuelta e iros a freír espárragos. Lo que vamos a aprender en el post de hoy es a hacer una bomba lógica o mas concretamente una bomba fork y que afecta a sistema GNU/Linux.

Algo ya viejo y conocido en el mundo de la inseguridad informática junto a otros amigos como los virus, los gusanos o los rootkits pero que siempre es divertido de aprender y conocer su funcionamiento y que si se lleva a cabo con un poquito de ingenio, con tan solo tirar un par de caracteres podemos hacer muuuuucho daño.

Vamos a ver qué es una bomba lógica, vamos a aprender a programar una bomba fork y sobre todo vamos a ver cómo solucionarlo.

¿Qué es una bomba lógica?

Actuación de una bomba fork

Actuación de una bomba fork

Según la wikipedia:

Una bomba lógica es una parte de código insertada intencionalmente en un programa informático que permanece oculto hasta cumplirse una o más condiciones preprogramadas, en ese momento se ejecuta una acción maliciosa

Esta bomba la podríamos añadir al init.d de nuestro sistema Linux y joder para siempre el arranque del sistema operativo o al menos hasta que un experto le meta mano y consiga arreglarlo.

Vale, creo que ya ha quedado claro qué es una bomba lógica pero y una bomba fork que es sobre lo que estamos hablando hoy.. ¿qué es?

Pues una bomba fork sigue el mismo paradigma que las bombas lógicas pero se diferencia en que estas bombas son un tipo de ataque DOS que consiguen ocupar todo el espacio disponible de memoria RAM de un sistema.

Las bombas fork funcionan de la siguiente manera. Una vez que ha sido activada, el proceso padre que la maneja es capaz de crear procesos hijos que a su vez crean mas procesos hijos que a su vez crean mas procesos hijos y así hasta el infinito y de una manera recursiva. Estos procesos no reciben una señal SIGKILL por lo que no pueden ser matados. Como os imagináis y debido a esto el consumo de memoria RAM cada vez es mayor y mayor y la única solución para parar una bomba lógica es reiniciar el sistema.

Pues bien una bomba fork puede ser programada en cualquier lenguaje de programación, lenguaje de programación que no de maquetación, escribir HTML no es programar mamones 😉

Las siguientes líneas son un ejemplo de bomba fork escrita en C++

#include <unistd.h>

int main()
{
  while(1) {
    fork();
  }
  return 0;
}

Como leéis en el código, a no ser que se cumpla una condición, se va a estar ejecutando la función fork indefinidamente ya que la condición no se va a cumplir nunca en este snippet, te va a petar la memoria… ufff

Pero si algo me ha motivado a escribir este post sobre cómo hacer una bomba lógica es un snippet escrito en una sola línea en bash.

:(){ :|:& };:

¿Verdad que mola? Es muy gracioso, me recuerdan a caritas de patitos, pero patitos cabrones los muy joputas, no lo ejecutéis en vuestro en ordenador si no queréis tener que reiniciar el aparato…

Vamos a intentar desgranar esta línea para que quede mas clara.

Lo que en una sola linea contiene toda la lógica, si lo formateamos podemos empezar a ver lo siguiente:

:(){ 
  :|:& 
};:

La primera parte o línea del snippet formateado e identado se corresponde con la el nombre de la función, es decir, en lugar de llamar a nuestra función con un nombre literal la hemos nombrado con el nombre de los dos puntos.

Esto

:(){ 
}

Es igual a esto

bomba(){ 
}

¿Hasta aquí bien no? Ok

La segunda línea se corresponde con la llamada recursiva a sí misma haciendo uso de las tuberías UNIX pero sobre todo y lo mas jodido es el ampersand utilizado al final. Si recordáis las clases de Linux, sabréis que el uso de este símbolo después de la llamada de una función hace que el proceso se ejecute en segundo plano y se mantenga en constante ejecución hasta que termine o sea matado.

Así pues esto

:|:& 

Es igual a esto

bomba | bomba & 

Y para rizar el rizo, una vez que la ejecución de la bomba lógica ha terminado, vuelve a llamarse a si misma volviendo a iniciar todo el ciclo y volviendo a tocar los cojones xD

Por lo cual, el código desgranado y explicado queda de una forma que es mucho mas sencillo de leer y entender.

bomba(){ 
  bomba | bomba & 
};bomba

Ahora bien, si hemos sigo tan tontos de auto hacernos un ataque DOS mediante bomba lógica o hemos sido infectados mediante por ejemplo un script en el init.d tal y como decía antes, ¿cómo podemos parar una de estas bombas?

Mitigación y solución a bombas lógicas

Como decía antes, parar una bomba de este tipo es algo bastante difícil debido a la recursividad y a que tienden a ir ocupando todos los bloques de memoria disponibles hasta saturar completamente toda la RAM. Una solución que podría llevarse a cabo sería en ejecutar un script que se dedicase a ir matando procesos aunque puede no ser posible si no hay posiciones vacías dentro de la tabla de procesos o espacio dentro de las estructuras de memoria.

Si realmente queremos prevenir un ataque de este tipo, la mejor solución sería limitar el número de procesos que pueden ejecutar los usuarios. En el kernel de Linux existe una variable llamada RLIMIT_NPROC, que indica la cantidad máxima de procesos que se puede ejecutar. Si un proceso intenta llamar a la función fork y el usuario que es propietario del proceso ya tiene igual o más procesos que los indicados en RLIMIT_NPROC la llamada a la función fallará y se evitará la ejecución lógica de la bomba.

Bueno pues nada chavales, ya habéis aprendido otra cosa mas sobre vuestros sistemas, si tenéis alguna duda podéis dejarme un comentario o escribirme a Twitter a través del banner de abajo. Si ponéis en práctica esta bomba lógica que sea sobre vuestro propio ordenador o sobre una máquina virtual, no seáis hijoputas y ataquéis a otras personas, si lo hacéis yo no quiero saber nada…

@gorkakatua #faqsGorkamu pregúntame por twitter cualquier cosa y vemos cómo lo solucionamos.

 

Hala a mamarla!

¿Te ha parecido este un artículo de 5 estrellas? Dame tu valoración:
Review Date
Reviewed Item
Allahu akbar: cómo hacer una bomba lógica
Author Rating
51star1star1star1star1star

Gorka Muñoz Andrés

Me llamo Gorka Muñoz y soy un desarrollador melómano. Combino a la perfección la búsqueda de nuevos grupos con la pasión por la tecnología. Desde chiquitito me ha gustado la programación, ahora que soy mayor estoy metido en el mundo del SEO sin olvidarme del /Dev.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *