¿qué significa ser root setuid?

4

Estoy leyendo los sistemas operativos modernos de Tanenbaum 3e. Él dice "Supongamos que el programa que está siendo atacado [con código malicioso] es la raíz SETUID en UNIX (o tiene el poder de Administrador en Windows). El [código malicioso insertado con un ataque de desbordamiento de búfer] ahora puede hacer un par de llamadas al sistema para convertir el "El archivo shell del atacante en el disco en la raíz SETUID, para que cuando se ejecute tenga el poder de superusuario".

¿Qué significa ser la raíz de SETUID? ¿Quiere decir que el programa tiene permisos de root? ¿Por qué dice que el programa es setuid root?

Esto es una cuestión de lenguaje, pero para un noob de seguridad con solo linux / unix básico, ese pasaje del libro es difícil de entender. ¿De qué está hablando?

    
pregunta bernie2436 02.05.2012 - 16:33
fuente

2 respuestas

6

SETUID significa que el ejecutable puede ejecutarse con diferentes permisos que el usuario que lo ha ejecutado.

Ciertas aplicaciones se configuran de esta manera para que los usuarios puedan ejecutar con permisos bajos, pero puede ser una aplicación específica que necesitan para ejecutar permisos más altos.

SETUID 0 o root significa que cuando se ejecuta el programa es como si root lo hubiera ejecutado, lo que lo deja abierto a todos los riesgos de seguridad habituales de ejecutar algo con altos niveles de permisos; potencialmente podría hacer cualquier cosa a su sistema: por lo general, la cantidad de aplicaciones que requieren SETUID se debe minimizar en una caja de Unix. La mayoría de las auditorías de seguridad de las máquinas Unix incluyen la búsqueda de archivos SETUID y SETGID que se puedan escribir en todo el mundo, ya que presentan un alto riesgo.

    
respondido por el Rory Alsop 02.05.2012 - 16:51
fuente
0

Las cuentas de usuario en sistemas similares a Unix se identifican mediante un UID (ID de usuario).

Un proceso se puede asociar con más de un UID. Los dos principales son el "UID real", que identifica quién es el propietario del proceso y el "UID de usuario efectivo", que identifica los permisos de los usuarios en los que actualmente funciona el proceso bajo *.

"setuid" en este contexto se refiere a un bit de permiso de archivo (también es el nombre de una llamada del sistema relacionada). Cuando se establece en un archivo ejecutable y ese archivo se ejecuta, el "UID efectivo" se cambia al propietario del archivo. Esto significa que el programa se ejecuta con los permisos de su propietario en lugar de los permisos del usuario que lo ejecutó.

Cuando decimos que un archivo ejecutable "es setuid root", queremos decir que tiene el bit setuid establecido y es propiedad del usuario 0 (root). Por lo tanto, se ejecutará con un UID efectivo de 0 y, básicamente, puede hacer lo que quiera.

El "UID real" sigue siendo el mismo, por lo que el programa puede identificar al usuario que lo ejecutó y puede volver a ese usuario si lo desea.

los programas setuid son / eran una parte importante de los sistemas UNIX que permiten que la funcionalidad se exponga a los usuarios donde la función en su conjunto se considera segura para el usuario, pero los bloques de construcción utilizados para implementar esas funciones no lo son. >

Sin embargo, también son arriesgados, un pequeño error en un programa setuid puede exponer fácilmente más de lo que estaba destinado a ser expuesto. También se deshabilitan varias funciones relacionadas con la depuración de los programas setuid para evitar que se utilicen para eludir las restricciones.

En los últimos tiempos, los sistemas Linux han estado reemplazando algunos usos de "setuid" con un nuevo mecanismo llamado "capacidades" que permite una asignación más precisa de privilegios especiales a los programas.

* También hay otros potencialmente, pero no están relacionados de inmediato aquí, consulte enlace para más detalles.

    
respondido por el Peter Green 25.08.2018 - 01:52
fuente

Lea otras preguntas en las etiquetas