martes, 18 de septiembre de 2018

Escala de privilegios en GNU/Linux

Aunque los sistemas GNU/Linux no son los sistemas predominantes en el mundo de los usuarios, sí que es el sistema predominante en el mundo del web server, y esta incoherencia entre mundos, hace que muchos administradores de sistemas cometan pequeños fallos que pueden suponer grandes problemas de seguridad.



Muchos administradores de sistemas entienden que montar un servidor con el usuario root no es lo ideal, por lo que crean otro usuario que no tiene privilegios de root. No obstante y por comodidad, a ese usuario que crean, le dan permisos, y es ahí donde reside el problema.


Para la PoC, he creado un usuario llamado "testing" al que, desde que escribí su - testing, ya estaría dentro del usuario testing tal y como se aprecia tras la ejecución de whoami.

Con sudo -l veremos los privilegios y permisos que tiene el usuario. Por defecto, cuando creamos un usuario con privilegios es porque hemos creado un usuario cualquiera, un usuario que en principio no tiene ningún privilegio especial. Eso es algo que se podría comprobar si escribimos sudo [...]. Lo que nos devolverá es que nuestro usuario no pertenece a sudoers.

Lo que se hace es añadir a ese usuario a sudoers y se le añade al archivo visudo con la línea

usuario ALL=(ALL : ALL) ALL

que es la misma línea que hay en visudo para el usuario root, pero cambiando "usuario" por root". Esto ya hace que nuestro usuario -testing- en este caso, pueda ejecutar la instrucción sudo.

Pero es aquí donde reside el problema. NUNCA deberíamos hacer esto, sino dar determinados permisos a determinadas carpetas a este nuevo usuario. Podemos hacer esto con chown en lugar de meter al usuario en sudoers.

Y es que si hacemos esto, una de las cosas que permitimos es que el usuario testing tenga también acceso a visudo, con todo lo que esos implica.


Podemos entrar en visudo con sudo visudo, escribir la password del usuario testing y entrar al archivo visudo, un archivo que se abre con el editor de texto Vim, por lo que presionando "i" entramos en el modo insertar texto y cambiar algunas configuraciones como insertar

testing ALL=(root) NOPASSWD: /usr/bin/find

Esta línea lo que hará será que cuando ejecutemos /usr/bin/find, se ejecute como root y sin que nos pida la contraseña, lo que es una escala de privilegios en toda regla.


Si volvemos a ejecutar sudo -l veremos que se ha cambiado correctamente la configuración que hemos realizado.


Y finalmente si ejecutamos sudo find /home -exec /bin/bash \; lo que hará será ejecutar el comando find pero como root tal y como comprobamos al ejecutar el comando id y vemos que se ejecuta con id 0, que es el que hace referencia al usuario root. Si ya encima ejecutamos un comando como apt-get, veremos que comienza la instalación del programa seleccionado como root, por lo que hemos conseguido realizar una escala de privilegios satisfactoria.

Esto es una mezcla entre cómo funciona el comando sudo, el cual tiene importantes fallos de seguridad y fallos de los propios administradores de sistemas que en lugar de utilizar chown para hacer propietario al usuario testing de determinadas carpetas, meten a testing dentro de sudoers por comodidad.

Es muy importante tener esto en cuenta cuando estamos configurando nuestros servidores, ya que si tuviésemos un usuario con SSH habilitado y ese usuario perteneciese a sudoers y un atacante consiguiese acceso a ese usuario mediante SSH, podría hacer exactamente lo mismo.

Este ataque se podría realizar si un atacante efectuase un ataque de fuerza bruta, el servidor ssh configurado en el servidor no tuviese ninguna regla de iptables y no bloquease IPs que realicen ataques de fuerza bruta, algo que se puede hacer tal y como comenté con Fail2Ban. Una vez que tuviese acceso solamente tendría que probar si se puede ejecutar sudo visudo y hacer lo mismo que he comentado en el post.

¿Hackeamos el Mundo?


No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...

Entrada destacada

El server me sabe a poco.

Soy un fanático del Rock y de Debian . (Creo que voy a inventar Rockbian, que suena bien y todo xD) Llevaba tiempo queriendo unir estos 2 c...