COLGAR UN SISTEMA LINUX CON UN USUARIO SIN PRIVILEGIOS


Vamos a hablar y ver algunos ejemplos de la seguridad en Linux mal aplicada… Cosa que encontraremos por ahí con los miles de administradores que no implementan medidas de seguridad en sus máquinas. Los ejercicios los dividiremos en 2 partes, usuarios con acceso a una cuenta shell y los usuarios que solo tengan acceso vía FTP y WEB.

Vamos a ver cómo cualquier usuario sin privilegios de nada puede reventar un sistema Linux, esperando su reinicio.

Usuarios con cuenta Shell

Tenemos una cuenta en la máquina y la posibilidad de movernos por nuestra home y tal… vamos a crear un script en bash muy simple a ver qué pasa… lo llamaremos hijo_mio.sh

 

$0 & $0 &

guardamos el fichero y le damos permiso de ejecucion chmod +x hijo_mio.sh y lo ejecutamos a ver qué pasa. Si no hay ninguna protección específica pasará que se cuelga todo.

Usuarios con acceso FTP/Web

Aquí tenemos otra opción… Si no tenemos una cuenta shell de usuario para ejecutar programas o scripts podemos hacer que un usuario existente lo haga por nosotros, por ejemplo www-data.

Cómo lo haremos esta vez… Vamos a crear un programa en C muy simple que contendrá lo siguiente:

 

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

Lo guardamos como mola.c y lo compilamos en nuestra maquina claro… gcc mola.c -o mola.bin

Ahora ya tenemos un ejecutable para el sistema… Sólo tenemos que subirlo al servidor por FTP, y ahora viene lo bueno… como no tenemos cuenta no podremos ejecutarlo… pero eso lo hara el usuario www-data… ¿Cómo? Con PHP; ahí va el script.

 

< ?
echo "Estamos en la carpeta " . __FILE__;
exec ("DIRECCION_DE_DONDE_ESTAMOS/mola.bin");
?>

Si alguien sabe qué variable predefinida es la que PHP te dice la carpeta donde estás, excluyendo el nombre del archivo .PHP no estaría mal que contactara conmigo.

Y ahora… SERVER CRASH. Por cierto esto se llama Bomba fork, por si te preguntan.

Ahora vamos a proteger nuestras máquinas

El problema de estos ataques es que crean procesos hijos infinitamente hasta gastar el espacio del SO y éste se cuelga. Cómo podemos evitar éste y muchos otros ataques similares; ¿como por ejemplo llenar el disco duro de archivos vacíos para acabar con los inodos y cosas parecidas? Pues limitando a los usuarios y a los grupos… para ello podemos ir al archivo

 

/etc/security/limits.conf

Y ahí veremos una pequeña pero clara explicacion de qué se puede y cómo se puede limitar. Por ejemplo vamos a limitar el número de procesos del usuario www-data.

 

www-data hard nproc 7

Es muy facil… una matización… esto de hard y soft. Soft es un límite que se puede superar durante un período de tiempo. Mientras que el límite hard es el límite definitivo que se puede alcanzar. Podríamos poner el límite soft a 5 procesos y si se pasasen de esos 5 actuaría el límite hard a 7, capando definitivamente los procesos.

Comentarios

Entradas populares