¿Qué son los programas SUID?

Le estaría muy agradecido si pudiera aclararme las siguientes cuestiones:
- ¿Qué es un programa SUID?
- ¿Cuál es el usuario real, cuál el efectivo y cuál el salvado?
- ¿Qué efecto tendría la siguiente instrucción de un programa en C: setreuid(geteuid(), getuid());?
- ¿Qué riesgos de seguridad implican los programas SUID y de qué manera podemos prevenirlos?
Respuesta
1
Un programa suid es un programa que corre con el usuario efectivo y el usuario real diferentes (no tienes más que comprobar que el usuario real ---getuid()--- y el usuario efectivo ---geteuid()--- son diferentes) Para ello, se ajusta un bit en los permisos del programa, que al ejecutarlo, el kernel lo lanza con el usuario efectivo igual al propietario del fichero y el usuario real el que ha lanzado el programa. El usuario efectivo es el que usa el kernel para comprobar permisos y acceder a los datos, mientras que el usuario real es quien ha lanzado el programa. El sistema guarda una copia del `otro' usuario en el usuario salvado para permitir que un programa que corre en modo suid pueda cambiar el usuario efectivo entre el usuario real y el usuario efectivo sin ser root (uid==0).
El cambio de usuario se permite solo entre el usuario real y el usuario efectivo para un usuario que no es root, así que hacer lo que dices solo tendrá sentido para root (solo root puede cambiar el usuario real) El usuario salvado solo se emplea en la llamada seteuid() para comprobar que el usuario solo cambia el usuario efectivo entre el usuario efectivo original (el salvado) y el usuario real.
Los riesgos de seguridad en programas suid afectan tanto al usuario real que ejecuta la aplicación (el programa puede cambiar el usuario efectivo al usuario real para modificar sus ficheros) como al usuario efectivo (un error en el programa puede borrar datos que no son del usuario efectivo)
Un caso muy clásico es hacer una copia de la shell del sistema y conseguir (por el método que sea) que esa shell tenga suid a root (propietario root y bit suid activado) y guardarla en un directorio oculto, quizá con otro nombre. El usuario que ejecute esa shell será efectivamente root durante la ejecución de la misma y podrá trastear en el sistema como le venga en gana.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas