Hoy escuché en la Uni algo que rompió mi modelo mental sobre la separación de los derechos de los usuarios. A saber, escuché que:
Puedo depurar libremente todos los programas que tengo permiso para ejecutar, incluso los que tienen configurados como root.
Eso significa que puedo, por ejemplo, ejecutar su
en el depurador. Lo probé y funcionó:
gdb su
Esto es alucinante para mí. ¿Puedo presentarle mi antiguo modelo mental sobre la gestión de derechos de los usuarios para que pueda corregir mi error y explicarme cómo son las cosas realmente?
Hasta hoy, solía creer que:
- Todo lo que se ejecuta en mi cuenta de usuario es, por definición, "mío". Es decir, puedo hacer libremente lo que quiera con un programa así, en particular puedo depurarlo, lo que implica que puedo leer y modificar todos los datos que dicho programa almacena en su memoria, o incluso parchearlos mientras se está ejecutando.
- Programas con
setuid
configurado para otro usuario (supongamos que es root, por simplicidad) ejecutados con derechos que exceden los derechos de mi cuenta de usuario, pero a cambio, se supone que deben hacer solo lo que fueron diseñados para hacer : nada más y es una brecha de seguridad. Por lo tanto, estos programas, aunque pueden ser ejecutados por mi cuenta, sin embargo, ejecutan bajo la cuenta que los posee, por lo que desde el punto de vista de la gestión de derechos, se ejecutan como si fueron dirigidas por su propietario, por lo que no puedo leer su memoria ni interrumpir su ejecución, por lo que no puedo hacerlas a mi voluntad, por lo que en particular no puedo depurarlas.
El segundo punto es manifiestamente falso. Pero, de acuerdo con mi modelo mental (claramente incorrecto), esto implica que, si, por ejemplo, ejecuto su
en gdb
, puedo atrapar el momento en que su
decide si la contraseña es correcta, modifique este fragmento de la memoria de su
para obligarlo a creer que la respuesta a esta pregunta fundamental es positiva, luego reanudar su ejecución y listo, ahora tengo derechos de raíz. Bueno, los autores binarios podrían intentar ofuscar su código para hacer esto difícil, pero una persona hábil y persistente siempre puede superar esto y esto no se aplica a su
de todos modos ya que es de código abierto.
¿Dónde está mal mi modelo mental? ¿Dónde está en desacuerdo con la realidad?