Depuración de SUID para la escalada de privilegios

2

Al realizar una escalada de privilegios, asumiendo una aplicación con el conjunto SUID y un depurador, ¿qué nos impide iniciar un shell desde dentro del depurador? Quiero decir, simplemente escriba el código de shell en una variable de entorno o en algún lugar de la memoria y simplemente llame al puntero desde el depurador. O en cualquier caso, si eso no funcionara, simplemente podríamos cambiar manualmente una dirección de retorno en la pila y posiblemente incluso separarla después.

Creo que me estoy perdiendo algo, pero no puedo ver qué es. Mi mejor suposición sería que cuando se conecta un depurador, el bit SUID se borra, de lo contrario, esta es una forma muy genérica de aumentar los privilegios.

    
pregunta alex10791 31.12.2017 - 03:59
fuente

2 respuestas

4
  

¿Qué nos impide iniciar un shell desde el depurador?

Si ejecuta un programa setuid en el depurador, y no es root, se ejecutará como si no fuera setuid. Lo que significa que se ejecutará bajo su id, no root. Así que mientras puedas generar un shell, usará tus credenciales.

Puede probarlo fácilmente usted mismo ejecutando su en gdb y verifique en otra consola que se ejecuta bajo su cuenta de usuario.

Y si ejecutas el programa setuid y luego tratas de adjuntarlo a gdb, esto devolverá un error de 'permiso denegado'.

    
respondido por el George Y. 31.12.2017 - 07:47
fuente
2

Solo la raíz puede adjuntarse a un proceso con privilegios elevados. En un poco más de detalle, adjuntar a un proceso en ejecución con la llamada al sistema ptrace (que es lo que los depuradores usan bajo el capó) Requiere varias condiciones. Una condición necesaria, la condición clásica de Unix, es que si el proceso de destino se está ejecutando sin privilegios elevados (sin setuid, no setgid, y ningún otro mecanismo de elevación de privilegios como setcap), entonces el proceso que llama a ptrace debe ejecutarse como mismo ID de usuario. Un proceso que se ejecuta como root (ID de usuario efectivo igual a 0) siempre puede adjuntarse, por lo que root puede depurar cualquier proceso.

(Linux tiene restricciones adicionales dependiendo de su estado de fortalecimiento; la mayoría de las distribuciones establecen kernel.yama.ptrace_scope en 1, lo que evita que cualquier proceso no root se ejecute ptrace , excepto para rastrear sus procesos secundarios. Esto significa que puede ejecutar un programa en un depurador pero no adjuntar un depurador a un proceso que ya está en ejecución.)

Además, si se está rastreando un proceso (es decir, se está depurando), no puede elevar sus privilegios. La elevación de privilegios se realiza mediante la llamada al sistema execve , en función de los indicadores de permiso en el archivo ejecutado. Si un proceso llama a execve mientras se está rastreando, los indicadores de elevación de privilegios se ignoran, y la nueva imagen de proceso tiene los mismos privilegios que tenía antes de la llamada execve .

De esta manera, la elevación de privilegios es incompatible con cualquier cosa que pueda cambiar las implicaciones de seguridad. No hay forma de organizar la ejecución de un depurador en un proceso con privilegios adicionales, a menos que ejecute el depurador como root (si puede hacerlo, no obtendrá ningún privilegio que no tuviera).

Si desea depurar un programa que se ejecuta con privilegios elevados, hay dos formas, ambas requieren que el depurador se ejecute como root. Puede iniciar el depurador y hacer que ejecute todo el código de preparación que configura los privilegios con los que se ejecutará el proceso. O bien, puede dejar que el programa se inicie en sus condiciones normales y adjuntar el depurador en cualquier momento.

Por supuesto, si un programa se inicia como setuid y luego elimina los privilegios (es decir, termina con las identificaciones de usuario reales, reales y guardadas, y también para las identificaciones de grupo y otros privilegios), entonces puede adjuntar un depurador que se ejecuta bajo la mismo usuario después de que el proceso haya perdido sus privilegios.

    
respondido por el Gilles 01.01.2018 - 19:05
fuente

Lea otras preguntas en las etiquetas