GNU/Linux >> Tutoriales Linux >  >> Linux

¿Propósito de usar Setuid() en programas Suid?

Me pregunto que un programa SUID como passwd está usando setuid() Llamada de función. ¿Por qué elimina los privilegios de root?

¿Contra qué tipos de ataque ayuda esto? ¿Desbordamiento de búfer?

Respuesta aceptada:

Primero hablaré del bit setuid, que usa passwd y es distinto del setuid() llamada al sistema (que passwd no usa). Quizás haya cierta confusión en la pregunta a este respecto.

No es una protección contra un desbordamiento de búfer, es vulnerable a tal, o básicamente cualquier cosa que permitiría a un atacante utilizar un proceso privilegiado para algún propósito nefasto no deseado. Esto se debe a que el bit setuid es lo contrario de "quitar privilegios"; otorga privilegios de root, pero solo para el proceso y no el usuario real. Eso incluye passwd .

Esa forma de setuid requiere que el bit setuid del sistema de archivos se establezca en el ejecutable; passwd tiene esto porque necesita privilegios para leer y escribir /etc/passwd . Sin embargo, esperamos que passwd no tenga ninguna vulnerabilidad de seguridad conocida (p. ej., un potencial exploit de desbordamiento) que permitiría a una persona infame hacer que haga algo más que leer y escribir /etc/passwd (¡y además de hacerlo correctamente!), ya que se ejecuta como root y, por lo tanto, podría hacer cualquier cosa, excepto que está diseñado para hacer solo una cosa específica, y lograr que haga cualquier otra cosa debería (de nuevo, con suerte) sea imposible.

Entonces usar setuid en ese sentido no es protección contra nada , pero a menudo se discute en relación con las vulnerabilidades porque las vulnerabilidades potenciales son ejecutables setuid WRT muy importantes.

PERO:el bit setuid establece el euid y no el uid real, por lo que en realidad es paralelo al seteuid() llamada al sistema y no setuid() .

Hay una forma opuesta de "setuid" que se trata de perder privilegios, lo que implica el setuid() real. llamada al sistema y no requiere el bit setuid. Esto es cuando un proceso que se ejecuta como root (porque lo inició root o sudo) cambia su uid a un usuario con menos privilegios. Los servidores y los demonios a menudo hacen esto si necesitan privilegios de root al inicio (por ejemplo, para abrir un puerto privilegiado), pero no posteriormente. De esa manera, si el servidor se conecta posteriormente, no tiene privilegios de superusuario. No puede llamar a setuid(0) y recuperar los privilegios de root (pero puede hacerlo con set*e *uid).

Relacionado:¿Propósito principal de FOREIGN KEY?
Linux
  1. Uso de UFW como lista negra de IP

  2. Usando mod_cluster en Apache

  3. ¿El Propósito De Usar Un Fifo Vs Un Archivo Temporal O Una Tubería?

  4. ¿Usando el bit Setuid correctamente?

  5. ¿Puedes hacerlo? Compile programas C en Linux usando el comando Make

Redirección 301 usando NGINX

Cómo quitar programas instalados desde la fuente usando GNU Stow en Linux

Cómo formatear programas Shell usando Shfmt en Linux

Consejos para usar la pantalla

Cómo instalar programas de Windows en Debian usando PlayOnLinux

Usando Runit en Devuan