Escalamiento de privilegios de Unix: "sudo debe ser propiedad de uid 0 y tener el bit setuid establecido"

5

Parece que las protecciones están codificadas en sudo que evitan que el binario se ejecute como un usuario con pocos privilegios. Ejecutarlo en Ubuntu como un usuario normal devuelve el siguiente error:

  

"sudo debe ser propiedad de uid 0 y tener configurado el bit setuid"

Quizás esta es una pregunta increíblemente estúpida: ¿pero qué impide que un atacante compile su propio binario sudo personalizado que le permite ejecutarse con cualquier uid?

    
pregunta user188691 12.10.2018 - 00:18
fuente

5 respuestas

5
  

¿Qué es lo que impide que un atacante compile su propio binario sudo personalizado que le permita ejecutarse con cualquier uid?

Hay un malentendido básico aquí. El programa se ejecuta, simplemente se detiene cuando se da cuenta de que no se está ejecutando como usuario root. Recompilar el programa para eliminar la comprobación solo le permitiría ejecutar la tarea como el usuario que ejecutó sudo, no root. En otras palabras, la verificación para ejecutarse como root en sudo es solo una verificación y diagnóstico de errores, no una característica de seguridad.

El malentendido es que los programas no tienen una capacidad especial para ejecutarse como otro usuario, el privilegio adicional es una propiedad de los permisos de archivo en el archivo. Cualquier programa con el conjunto de bits setuid se ejecutará como el propietario del archivo. Si tuviera que compilar su propio programa, el archivo sería propiedad de usted. Si bien puede establecer el bit setuid en su propio archivo, no puede cambiar la propiedad del archivo sin privilegios adicionales. Por lo tanto, establecer el bit setuid solo permitiría a otros ejecutar su programa como usted mismo.

    
respondido por el Steve Sether 15.10.2018 - 23:52
fuente
3

Para ser ejecutado como otro usuario, un archivo debe tener el bit de permiso setuid establecido y debe ser propiedad de ese usuario objetivo (en este caso, root ).

  

¿Qué es lo que impide que un atacante compile su propio binario sudo personalizado que le permita ejecutarse con cualquier uid?

Los bits de permiso son atributos de un archivo (que se almacenan dentro del sistema de archivos, en el inodo del archivo), no están contenidos en el archivo en sí. Y su kernel simplemente impedirá que un usuario sin privilegios cambie el propietario del archivo de su binario personalizado compilado sudo a raíz.

    
respondido por el Arminius 12.10.2018 - 00:39
fuente
3

Creo que el OP entendió mal la intención de esta comprobación. No pretende proteger a sudo de un mal uso malicioso, sino más bien una condición previa para que funcione: si no está configurado por root, no puede ejecutar un comando como otro usuario y, por lo tanto, es inútil.     

respondido por el billc.cn 15.10.2018 - 22:28
fuente
2

Porque (excepto por la raíz) un usuario solo puede crear un binario que se configurará como su propio uid. Sólo la raíz puede cambiar su uid.

    
respondido por el symcbean 12.10.2018 - 00:38
fuente
0

Cualquier usuario local puede compilar su propio binario sudo sin esta comprobación. Pero cuando su copia de sudo intenta hacer su trabajo de otorgar privilegios, recibirá un error del kernel, porque no tiene ningún privilegio especial. Si sudo no se ejecuta como root, no puede otorgar ningún privilegio.

El punto de la comprobación es que si sudo no se instaló correctamente, obtendrás un mensaje de error comprensible desde el principio en lugar de recibir un mensaje de error incomprensible después de que sudo haya procesado un poco más. Es una ayuda de diagnóstico, no un control de seguridad.

    
respondido por el Gilles 16.10.2018 - 23:03
fuente

Lea otras preguntas en las etiquetas